diff --git a/cyberpanel.min.js b/cyberpanel.min.js
new file mode 100644
index 000000000..2cbdea06a
--- /dev/null
+++ b/cyberpanel.min.js
@@ -0,0 +1 @@
+!function(e){"use strict";var t;e.fn.actions=function(n){var i=e.extend({},e.fn.actions.defaults,n),r=e(this),a=!1,o=function(){e(i.acrossClears).hide(),e(i.acrossQuestions).show(),e(i.allContainer).hide()},s=function(){e(i.acrossClears).show(),e(i.acrossQuestions).hide(),e(i.actionContainer).toggleClass(i.selectedClass),e(i.allContainer).show(),e(i.counterContainer).hide()},l=function(){e(i.acrossClears).hide(),e(i.acrossQuestions).hide(),e(i.allContainer).hide(),e(i.counterContainer).show()},c=function(){l(),e(i.acrossInput).val(0),e(i.actionContainer).removeClass(i.selectedClass)},u=function(t){t?o():l(),e(r).prop("checked",t).parent().parent().toggleClass(i.selectedClass,t)},d=function(){var t=e(r).filter(":checked").length,n=e(".action-counter").data("actionsIcnt");e(i.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",t),{sel:t,cnt:n},!0)),e(i.allToggle).prop("checked",function(){var e;return t===r.length?(e=!0,o()):(e=!1,c()),e})};e(i.counterContainer).show(),e(this).filter(":checked").each(function(t){e(this).parent().parent().toggleClass(i.selectedClass),d(),1===e(i.acrossInput).val()&&s()}),e(i.allToggle).show().click(function(){u(e(this).prop("checked")),d()}),e("a",i.acrossQuestions).click(function(t){t.preventDefault(),e(i.acrossInput).val(1),s()}),e("a",i.acrossClears).click(function(t){t.preventDefault(),e(i.allToggle).prop("checked",!1),c(),u(0),d()}),t=null,e(r).click(function(n){n||(n=window.event);var a=n.target?n.target:n.srcElement;if(t&&e.data(t)!==e.data(a)&&!0===n.shiftKey){var o=!1;e(t).prop("checked",a.checked).parent().parent().toggleClass(i.selectedClass,a.checked),e(r).each(function(){e.data(this)!==e.data(t)&&e.data(this)!==e.data(a)||(o=!o),o&&e(this).prop("checked",a.checked).parent().parent().toggleClass(i.selectedClass,a.checked)})}e(a).parent().parent().toggleClass(i.selectedClass,a.checked),t=a,d()}),e("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){a=!0}),e('form#changelist-form button[name="index"]').click(function(e){if(a)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))}),e('form#changelist-form input[name="_save"]').click(function(t){var n=!1;if(e("select option:selected",i.actionContainer).each(function(){e(this).val()&&(n=!0)}),n)return a?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})},e.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"},e(document).ready(function(){var t=e("tr input.action-select");t.length>0&&t.actions()})}(django.jQuery),function(e){var t;e.fn.actions=function(n){var i=e.extend({},e.fn.actions.defaults,n),r=e(this),a=!1,o=function(){e(i.acrossClears).hide(),e(i.acrossQuestions).show(),e(i.allContainer).hide()},s=function(){e(i.acrossClears).show(),e(i.acrossQuestions).hide(),e(i.actionContainer).toggleClass(i.selectedClass),e(i.allContainer).show(),e(i.counterContainer).hide()},l=function(){e(i.acrossClears).hide(),e(i.acrossQuestions).hide(),e(i.allContainer).hide(),e(i.counterContainer).show()},c=function(){l(),e(i.acrossInput).val(0),e(i.actionContainer).removeClass(i.selectedClass)},u=function(t){t?o():l(),e(r).prop("checked",t).parent().parent().toggleClass(i.selectedClass,t)},d=function(){var t=e(r).filter(":checked").length,n=e(".action-counter").data("actionsIcnt");e(i.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",t),{sel:t,cnt:n},!0)),e(i.allToggle).prop("checked",function(){var e;return t===r.length?(e=!0,o()):(e=!1,c()),e})};e(i.counterContainer).show(),e(this).filter(":checked").each(function(t){e(this).parent().parent().toggleClass(i.selectedClass),d(),1===e(i.acrossInput).val()&&s()}),e(i.allToggle).show().click(function(){u(e(this).prop("checked")),d()}),e("a",i.acrossQuestions).click(function(t){t.preventDefault(),e(i.acrossInput).val(1),s()}),e("a",i.acrossClears).click(function(t){t.preventDefault(),e(i.allToggle).prop("checked",!1),c(),u(0),d()}),t=null,e(r).click(function(n){n||(n=window.event);var a=n.target?n.target:n.srcElement;if(t&&e.data(t)!==e.data(a)&&!0===n.shiftKey){var o=!1;e(t).prop("checked",a.checked).parent().parent().toggleClass(i.selectedClass,a.checked),e(r).each(function(){e.data(this)!==e.data(t)&&e.data(this)!==e.data(a)||(o=!o),o&&e(this).prop("checked",a.checked).parent().parent().toggleClass(i.selectedClass,a.checked)})}e(a).parent().parent().toggleClass(i.selectedClass,a.checked),t=a,d()}),e("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){a=!0}),e('form#changelist-form button[name="index"]').click(function(e){if(a)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))}),e('form#changelist-form input[name="_save"]').click(function(t){var n=!1;if(e("select option:selected",i.actionContainer).each(function(){e(this).val()&&(n=!0)}),n)return a?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})},e.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"},e(document).ready(function(){var t=e("tr input.action-select");00?a=ngettext("Note: You are %s hour ahead of server time.","Note: You are %s hours ahead of server time.",r):(r*=-1,a=ngettext("Note: You are %s hour behind server time.","Note: You are %s hours behind server time.",r)),a=interpolate(a,[r]);var o=n("");o.attr("class",i),o.text(a),n(t).parent().append(n(" ")).append(o)}},addClock:function(t){var n=e.clockInputs.length;e.clockInputs[n]=t,e.dismissClockFunc[n]=function(){return e.dismissClock(n),!0};var i=document.createElement("span");i.className=e.shortCutsClass,t.parentNode.insertBefore(i,t.nextSibling);var r=document.createElement("a");r.setAttribute("href","#"),r.appendChild(document.createTextNode(gettext("Now"))),addEvent(r,"click",function(t){t.preventDefault(),e.handleClockQuicklink(n,-1)});var a=document.createElement("a");a.setAttribute("href","#"),a.id=e.clockLinkName+n,addEvent(a,"click",function(t){t.preventDefault(),t.stopPropagation(),e.openClock(n)}),quickElement("span",a,"","class","clock-icon","title",gettext("Choose a Time")),i.appendChild(document.createTextNode(" ")),i.appendChild(r),i.appendChild(document.createTextNode(" | ")),i.appendChild(a);var o=document.createElement("div");o.style.display="none",o.style.position="absolute",o.className="clockbox module",o.setAttribute("id",e.clockDivName+n),document.body.appendChild(o),addEvent(o,"click",cancelEventPropagation),quickElement("h2",o,gettext("Choose a time"));var s=quickElement("ul",o);s.className="timelist";var l=quickElement("a",quickElement("li",s),gettext("Now"),"href","#");addEvent(l,"click",function(t){t.preventDefault(),e.handleClockQuicklink(n,-1)}),addEvent(l=quickElement("a",quickElement("li",s),gettext("Midnight"),"href","#"),"click",function(t){t.preventDefault(),e.handleClockQuicklink(n,0)}),addEvent(l=quickElement("a",quickElement("li",s),gettext("6 a.m."),"href","#"),"click",function(t){t.preventDefault(),e.handleClockQuicklink(n,6)}),addEvent(l=quickElement("a",quickElement("li",s),gettext("Noon"),"href","#"),"click",function(t){t.preventDefault(),e.handleClockQuicklink(n,12)}),addEvent(l=quickElement("a",quickElement("li",s),gettext("6 p.m."),"href","#"),"click",function(t){t.preventDefault(),e.handleClockQuicklink(n,18)});var c=quickElement("p",o);c.className="calendar-cancel";addEvent(quickElement("a",c,gettext("Cancel"),"href","#"),"click",function(t){t.preventDefault(),e.dismissClock(n)}),django.jQuery(document).bind("keyup",function(t){27===t.which&&(e.dismissClock(n),t.preventDefault())})},openClock:function(t){var n=document.getElementById(e.clockDivName+t),i=document.getElementById(e.clockLinkName+t);"rtl"!==getStyle(document.body,"direction")?n.style.left=findPosX(i)+17+"px":n.style.left=findPosX(i)-110+"px",n.style.top=Math.max(0,findPosY(i)-30)+"px",n.style.display="block",addEvent(document,"click",e.dismissClockFunc[t])},dismissClock:function(t){document.getElementById(e.clockDivName+t).style.display="none",removeEvent(document,"click",e.dismissClockFunc[t])},handleClockQuicklink:function(t,n){var i;i=-1===n?e.now():new Date(1970,1,1,n,0,0,0),e.clockInputs[t].value=i.strftime(get_format("TIME_INPUT_FORMATS")[0]),e.clockInputs[t].focus(),e.dismissClock(t)},addCalendar:function(t){var n=e.calendars.length;e.calendarInputs[n]=t,e.dismissCalendarFunc[n]=function(){return e.dismissCalendar(n),!0};var i=document.createElement("span");i.className=e.shortCutsClass,t.parentNode.insertBefore(i,t.nextSibling);var r=document.createElement("a");r.setAttribute("href","#"),r.appendChild(document.createTextNode(gettext("Today"))),addEvent(r,"click",function(t){t.preventDefault(),e.handleCalendarQuickLink(n,0)});var a=document.createElement("a");a.setAttribute("href","#"),a.id=e.calendarLinkName+n,addEvent(a,"click",function(t){t.preventDefault(),t.stopPropagation(),e.openCalendar(n)}),quickElement("span",a,"","class","date-icon","title",gettext("Choose a Date")),i.appendChild(document.createTextNode(" ")),i.appendChild(r),i.appendChild(document.createTextNode(" | ")),i.appendChild(a);var o=document.createElement("div");o.style.display="none",o.style.position="absolute",o.className="calendarbox module",o.setAttribute("id",e.calendarDivName1+n),document.body.appendChild(o),addEvent(o,"click",cancelEventPropagation);var s=quickElement("div",o),l=quickElement("a",s,"<","href","#");l.className="calendarnav-previous",addEvent(l,"click",function(t){t.preventDefault(),e.drawPrev(n)});var c=quickElement("a",s,">","href","#");c.className="calendarnav-next",addEvent(c,"click",function(t){t.preventDefault(),e.drawNext(n)});quickElement("div",o,"","id",e.calendarDivName2+n).className="calendar",e.calendars[n]=new Calendar(e.calendarDivName2+n,e.handleCalendarCallback(n)),e.calendars[n].drawCurrent();var u=quickElement("div",o);u.className="calendar-shortcuts";var d=quickElement("a",u,gettext("Yesterday"),"href","#");addEvent(d,"click",function(t){t.preventDefault(),e.handleCalendarQuickLink(n,-1)}),u.appendChild(document.createTextNode(" | ")),addEvent(d=quickElement("a",u,gettext("Today"),"href","#"),"click",function(t){t.preventDefault(),e.handleCalendarQuickLink(n,0)}),u.appendChild(document.createTextNode(" | ")),addEvent(d=quickElement("a",u,gettext("Tomorrow"),"href","#"),"click",function(t){t.preventDefault(),e.handleCalendarQuickLink(n,1)});var h=quickElement("p",o);h.className="calendar-cancel";addEvent(quickElement("a",h,gettext("Cancel"),"href","#"),"click",function(t){t.preventDefault(),e.dismissCalendar(n)}),django.jQuery(document).bind("keyup",function(t){27===t.which&&(e.dismissCalendar(n),t.preventDefault())})},openCalendar:function(t){var n=document.getElementById(e.calendarDivName1+t),i=document.getElementById(e.calendarLinkName+t),r=e.calendarInputs[t];if(r.value){var a=get_format("DATE_INPUT_FORMATS")[0],o=r.value.strptime(a),s=o.getUTCFullYear(),l=o.getUTCMonth()+1;/\d{4}/.test(s.toString())&&l>=1&&l<=12&&e.calendars[t].drawDate(l,s,o)}"rtl"!==getStyle(document.body,"direction")?n.style.left=findPosX(i)+17+"px":n.style.left=findPosX(i)-180+"px",n.style.top=Math.max(0,findPosY(i)-75)+"px",n.style.display="block",addEvent(document,"click",e.dismissCalendarFunc[t])},dismissCalendar:function(t){document.getElementById(e.calendarDivName1+t).style.display="none",removeEvent(document,"click",e.dismissCalendarFunc[t])},drawPrev:function(t){e.calendars[t].drawPreviousMonth()},drawNext:function(t){e.calendars[t].drawNextMonth()},handleCalendarCallback:function(t){var n=get_format("DATE_INPUT_FORMATS")[0];return n=(n=(n=(n=(n=n.replace("\\","\\\\")).replace("\r","\\r")).replace("\n","\\n")).replace("\t","\\t")).replace("'","\\'"),function(i,r,a){e.calendarInputs[t].value=new Date(i,r-1,a).strftime(n),e.calendarInputs[t].focus(),document.getElementById(e.calendarDivName1+t).style.display="none"}},handleCalendarQuickLink:function(t,n){var i=e.now();i.setDate(i.getDate()+n),e.calendarInputs[t].value=i.strftime(get_format("DATE_INPUT_FORMATS")[0]),e.calendarInputs[t].focus(),e.dismissCalendar(t)}};addEvent(window,"load",e.init),window.DateTimeShortcuts=e}(),function(e){"use strict";function t(e){return e=(e=e.replace(/\./g,"__dot__")).replace(/\-/g,"__dash__")}function n(e){return e=(e=e.replace(/__dot__/g,".")).replace(/__dash__/g,"-")}function i(e,n,i){var r=e.id.replace(n,"");r=t(r);var a=e.href;i&&(-1===a.indexOf("?")?a+="?_popup=1":a+="&_popup=1");return window.open(a,r,"height=500,width=800,resizable=yes,scrollbars=yes").focus(),!1}function r(e){return i(e,/^lookup_/,!0)}function a(e){return i(e,/^(change|add|delete)_/,!1)}function o(t){var n=e(t),i=n.nextAll(".change-related, .delete-related");if(i.length){var r=n.val();r?i.each(function(){var t=e(this);t.attr("href",t.attr("data-href-template").replace("__fk__",r))}):i.removeAttr("href")}}function s(t,i,r){var a=n(t.name),o=document.getElementById(a);if(o){var s=o.nodeName.toUpperCase();"SELECT"===s?o.options[o.options.length]=new Option(r,i,!0,!0):"INPUT"===s&&(-1!==o.className.indexOf("vManyToManyRawIdAdminField")&&o.value?o.value+=","+i:o.value=i),e(o).trigger("change")}else{var l=a+"_to",c=new Option(r,i);SelectBox.add_to_cache(l,c),SelectBox.redisplay(l)}t.close()}window.id_to_windowname=t,window.windowname_to_id=n,window.showRelatedObjectLookupPopup=r,window.dismissRelatedLookupPopup=function(e,t){var i=n(e.name),r=document.getElementById(i);-1!==r.className.indexOf("vManyToManyRawIdAdminField")&&r.value?r.value+=","+t:document.getElementById(i).value=t,e.close()},window.showRelatedObjectPopup=a,window.updateRelatedObjectLinks=o,window.dismissAddRelatedObjectPopup=s,window.dismissChangeRelatedObjectPopup=function(t,i,r,a){var o=n(t.name).replace(/^edit_/,""),s=interpolate("#%s, #%s_from, #%s_to",[o,o,o]);e(s).find("option").each(function(){this.value===i&&(this.textContent=r,this.value=a)}),t.close()},window.dismissDeleteRelatedObjectPopup=function(t,i){var r=n(t.name).replace(/^delete_/,""),a=interpolate("#%s, #%s_from, #%s_to",[r,r,r]);e(a).find("option").each(function(){this.value===i&&e(this).remove()}).trigger("change"),t.close()},window.showAddAnotherPopup=a,window.dismissAddAnotherPopup=s,e(document).ready(function(){e("a[data-popup-opener]").click(function(t){t.preventDefault(),opener.dismissRelatedLookupPopup(window,e(this).data("popup-opener"))}),e("body").on("click",".related-widget-wrapper-link",function(t){if(t.preventDefault(),this.href){var n=e.Event("django:show-related",{href:this.href});e(this).trigger(n),n.isDefaultPrevented()||a(this)}}),e("body").on("change",".related-widget-wrapper select",function(t){var n=e.Event("django:update-related");e(this).trigger(n),n.isDefaultPrevented()||o(this)}),e(".related-widget-wrapper select").trigger("change"),e("body").on("click",".related-lookup",function(t){t.preventDefault();var n=e.Event("django:lookup-related");e(this).trigger(n),n.isDefaultPrevented()||r(this)})})}(django.jQuery),function(){"use strict";var e={monthsOfYear:[gettext("January"),gettext("February"),gettext("March"),gettext("April"),gettext("May"),gettext("June"),gettext("July"),gettext("August"),gettext("September"),gettext("October"),gettext("November"),gettext("December")],daysOfWeek:[pgettext("one letter Sunday","S"),pgettext("one letter Monday","M"),pgettext("one letter Tuesday","T"),pgettext("one letter Wednesday","W"),pgettext("one letter Thursday","T"),pgettext("one letter Friday","F"),pgettext("one letter Saturday","S")],firstDayOfWeek:parseInt(get_format("FIRST_DAY_OF_WEEK")),isLeapYear:function(e){return e%4==0&&e%100!=0||e%400==0},getDaysInMonth:function(t,n){return 1===t||3===t||5===t||7===t||8===t||10===t||12===t?31:4===t||6===t||9===t||11===t?30:2===t&&e.isLeapYear(n)?29:28},draw:function(t,n,i,r,a){var o=new Date,s=o.getDate(),l=o.getMonth()+1,c=o.getFullYear(),u="",d=!1;void 0!==a&&(d=a.getUTCFullYear()===n&&a.getUTCMonth()+1===t),t=parseInt(t),n=parseInt(n);var h=document.getElementById(i);removeChildren(h);var p=document.createElement("table");quickElement("caption",p,e.monthsOfYear[t-1]+" "+n);for(var g=quickElement("tbody",p),m=quickElement("tr",g),f=0;f<7;f++)quickElement("th",m,e.daysOfWeek[(f+e.firstDayOfWeek)%7]);var b=new Date(n,t-1,1-e.firstDayOfWeek).getDay(),v=e.getDaysInMonth(t,n);for(m=quickElement("tr",g),f=0;f'+gettext("Show")+")")}),e("fieldset.collapse a.collapse-toggle").click(function(t){return e(this).closest("fieldset").hasClass("collapsed")?e(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[e(this).attr("id")]):e(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",[e(this).attr("id")]),!1})})}(django.jQuery),function(e){e(document).ready(function(){e("fieldset.collapse").each(function(t,n){0===e(n).find("div.errors").length&&e(n).addClass("collapsed").find("h2").first().append(' ('+gettext("Show")+")")}),e("fieldset.collapse a.collapse-toggle").click(function(t){return e(this).closest("fieldset").hasClass("collapsed")?e(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[e(this).attr("id")]):e(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",[e(this).attr("id")]),!1})})}(django.jQuery);var isOpera=navigator.userAgent.indexOf("Opera")>=0&&parseFloat(navigator.appVersion),isIE=document.all&&!isOpera&&parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]);function addEvent(e,t,n){"use strict";if(e.addEventListener)return e.addEventListener(t,n,!1),!0;if(e.attachEvent){return e.attachEvent("on"+t,n)}return!1}function removeEvent(e,t,n){"use strict";return e.removeEventListener?(e.removeEventListener(t,n,!1),!0):!!e.detachEvent&&(e.detachEvent("on"+t,n),!0)}function cancelEventPropagation(e){"use strict";e||(e=window.event),e.cancelBubble=!0,e.stopPropagation&&e.stopPropagation()}function quickElement(){"use strict";var e=document.createElement(arguments[0]);if(arguments[2]){var t=document.createTextNode(arguments[2]);e.appendChild(t)}for(var n=arguments.length,i=3;i=12?"PM":"AM",S:this.getTwoDigitSecond(),w:"0"+this.getDay(),x:this.toLocaleDateString(),X:this.toLocaleTimeString(),y:(""+this.getFullYear()).substr(2,4),Y:""+this.getFullYear(),"%":"%"},n="",i=0;i0;if(i.each(function(t){e(this).not("."+n.emptyCssClass).addClass(n.formCssClass)}),i.length&&c){var u=n.addButton;if(null===u)if("TR"===i.prop("tagName")){var d=this.eq(-1).children().length;r.append('