/* Minification failed. Returning unminified contents.
(1,11): run-time error CSS1030: Expected identifier, found 'extend('
(1,11): run-time error CSS1031: Expected selector, found 'extend('
(1,11): run-time error CSS1025: Expected comma or open brace, found 'extend('
(65,2): run-time error CSS1019: Unexpected token, found ')'
(73,1): run-time error CSS1019: Unexpected token, found '('
(73,2): run-time error CSS1019: Unexpected token, found 'function('
(73,11): run-time error CSS1019: Unexpected token, found ')'
(73,13): run-time error CSS1019: Unexpected token, found '{'
(73,14): run-time error CSS1019: Unexpected token, found '('
(73,15): run-time error CSS1019: Unexpected token, found 'function('
(73,25): run-time error CSS1031: Expected selector, found ')'
(73,25): run-time error CSS1025: Expected comma or open brace, found ')'
(121): Scanner error CSS1002: Unterminated string: "===typeof e?b(e):e;
(166): Scanner error CSS1002: Unterminated string: "'])([\s\S]*?)/gi,c=/\x3c!--\s*ko\s*([\s\S]*?)\s*--\x3e/g;return{lc:function(b,
 */
jQuery.fn.extend({
    OneToManyAsync: function (initial_id, initial_name, placeholder) {
        var dfd = jQuery.Deferred();
        var el = $(this);
        var allowclear = el.data("clear");
        if(typeof(allowclear) === "undefined" || allowclear === null){
            allowclear = true;
        }

        window.setTimeout(function () {
            $.getJSON(el.data("get-url"), {}, function (initial_data) {
                el.select2(
                    {
                        allowClear: allowclear,
                        "language": {
                            "noResults": function () {
                                return "Nessun risultato trovato!";
                            }
                        },
                        escapeMarkup: function (markup) {
                            return markup;
                        },
                        data: [{ text: "", id: "" }].concat(initial_data),
                        placeholder: placeholder || " ",
                        ajax: {
                            url: function () { return el.data("get-url") },
                            dataType: 'json',
                            delay: 250,
                            data: function (params) {
                                return {
                                    search: params.term // search term
                                };
                            },
                            processResults: function (data) {

                                // parse the results into the format expected by Select2.
                                // since we are using custom formatting functions we do not need to
                                // alter the remote JSON data
                                if ($(data).filter(function (i, el) { el.id == "" }).length == 0)
                                    data.unshift({ id: "", text: " " });

                                return {
                                    results: data
                                };
                            }
                        }
                    }
                );

                if (el.data("create-url") != "")
                    $("#select2-" +el.attr("id") + "-container").parent().parent().parent()
                        .append("<a class=\"" + el.data("add-class") + " select-2-plus\"  data-original-value=\"" + initial_id + "\" href=\"" + el.data("create-url") + "\" data-container=\"" + el.data("add-container") + "\" class=\"select-2-plus\"><span style=\"color:orange\" class=\"pwicons pwicons-plus\"></span></a>");

                el.select2("val", initial_id);

                $("#select2-" + el.attr("id") + "-container").parent().parent().parent().find(".select2-selection__arrow").html("");
                $("#select2-" + el.attr("id") + "-container").parent().parent().parent().find(".select2-selection__arrow").addClass("pwicons pwicons-arrow-right").css("top", "11px");

                dfd.resolve();
            });
        }, 200);

        $(document).loadingManager("addEvent", dfd.promise());
    }
});

/*!
 * Knockout JavaScript library v3.3.0
 * (c) Steven Sanderson - http://knockoutjs.com/
 * License: MIT (http://www.opensource.org/licenses/mit-license.php)
 */

(function() {(function(p){var y=this||(0,eval)("this"),w=y.document,M=y.navigator,u=y.jQuery,E=y.JSON;(function(p){"function"===typeof define&&define.amd?define(["exports","require"],p):"function"===typeof require&&"object"===typeof exports&&"object"===typeof module?p(module.exports||exports):p(y.ko={})})(function(N,O){function J(a,d){return null===a||typeof a in Q?a===d:!1}function R(a,d){var c;return function(){c||(c=setTimeout(function(){c=p;a()},d))}}function S(a,d){var c;return function(){clearTimeout(c);
c=setTimeout(a,d)}}function K(b,d,c,e){a.d[b]={init:function(b,k,h,l,g){var m,x;a.w(function(){var q=a.a.c(k()),n=!c!==!q,r=!x;if(r||d||n!==m)r&&a.Z.oa()&&(x=a.a.la(a.e.childNodes(b),!0)),n?(r||a.e.T(b,a.a.la(x)),a.Ja(e?e(g,q):g,b)):a.e.ma(b),m=n},null,{q:b});return{controlsDescendantBindings:!0}}};a.h.ka[b]=!1;a.e.R[b]=!0}var a="undefined"!==typeof N?N:{};a.b=function(b,d){for(var c=b.split("."),e=a,f=0;f<c.length-1;f++)e=e[c[f]];e[c[c.length-1]]=d};a.D=function(a,d,c){a[d]=c};a.version="3.3.0";
a.b("version",a.version);a.a=function(){function b(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])}function d(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function c(a,b){a.__proto__=b;return a}function e(b,c,g,d){var e=b[c].match(m)||[];a.a.o(g.match(m),function(b){a.a.ga(e,b,d)});b[c]=e.join(" ")}var f={__proto__:[]}instanceof Array,k={},h={};k[M&&/Firefox\/2/i.test(M.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");
b(k,function(a,b){if(b.length)for(var c=0,g=b.length;c<g;c++)h[b[c]]=a});var l={propertychange:!0},g=w&&function(){for(var a=3,b=w.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:p}(),m=/\S+/g;return{Bb:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],o:function(a,b){for(var c=0,g=a.length;c<g;c++)b(a[c],c)},m:function(a,b){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,
b);for(var c=0,g=a.length;c<g;c++)if(a[c]===b)return c;return-1},vb:function(a,b,c){for(var g=0,d=a.length;g<d;g++)if(b.call(c,a[g],g))return a[g];return null},ya:function(b,c){var g=a.a.m(b,c);0<g?b.splice(g,1):0===g&&b.shift()},wb:function(b){b=b||[];for(var c=[],g=0,d=b.length;g<d;g++)0>a.a.m(c,b[g])&&c.push(b[g]);return c},Ka:function(a,b){a=a||[];for(var c=[],g=0,d=a.length;g<d;g++)c.push(b(a[g],g));return c},xa:function(a,b){a=a||[];for(var c=[],g=0,d=a.length;g<d;g++)b(a[g],g)&&c.push(a[g]);
return c},ia:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,g=b.length;c<g;c++)a.push(b[c]);return a},ga:function(b,c,g){var d=a.a.m(a.a.cb(b),c);0>d?g&&b.push(c):g||b.splice(d,1)},za:f,extend:d,Fa:c,Ga:f?c:d,A:b,pa:function(a,b){if(!a)return a;var c={},g;for(g in a)a.hasOwnProperty(g)&&(c[g]=b(a[g],g,a));return c},Ra:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},Jb:function(b){b=a.a.O(b);for(var c=(b[0]&&b[0].ownerDocument||w).createElement("div"),g=0,d=b.length;g<
d;g++)c.appendChild(a.S(b[g]));return c},la:function(b,c){for(var g=0,d=b.length,e=[];g<d;g++){var m=b[g].cloneNode(!0);e.push(c?a.S(m):m)}return e},T:function(b,c){a.a.Ra(b);if(c)for(var g=0,d=c.length;g<d;g++)b.appendChild(c[g])},Qb:function(b,c){var g=b.nodeType?[b]:b;if(0<g.length){for(var d=g[0],e=d.parentNode,m=0,f=c.length;m<f;m++)e.insertBefore(c[m],d);m=0;for(f=g.length;m<f;m++)a.removeNode(g[m])}},na:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==
b;)a.splice(0,1);if(1<a.length){var c=a[0],g=a[a.length-1];for(a.length=0;c!==g;)if(a.push(c),c=c.nextSibling,!c)return;a.push(g)}}return a},Sb:function(a,b){7>g?a.setAttribute("selected",b):a.selected=b},ib:function(a){return null===a||a===p?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Dc:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},jc:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(3===a.nodeType?
a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},Qa:function(b){return a.a.jc(b,b.ownerDocument.documentElement)},tb:function(b){return!!a.a.vb(b,a.a.Qa)},v:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},n:function(b,c,d){var m=g&&l[c];if(!m&&u)u(b).bind(c,d);else if(m||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var e=function(a){d.call(b,a)},f="on"+c;b.attachEvent(f,e);a.a.C.fa(b,
function(){b.detachEvent(f,e)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,d,!1)},qa:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var g;"input"===a.a.v(b)&&b.type&&"click"==c.toLowerCase()?(g=b.type,g="checkbox"==g||"radio"==g):g=!1;if(u&&!g)u(b).trigger(c);else if("function"==typeof w.createEvent)if("function"==typeof b.dispatchEvent)g=w.createEvent(h[c]||"HTMLEvents"),g.initEvent(c,
!0,!0,y,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(g);else throw Error("The supplied element doesn't support dispatchEvent");else if(g&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");},c:function(b){return a.F(b)?b():b},cb:function(b){return a.F(b)?b.B():b},Ia:function(b,c,g){var d;c&&("object"===typeof b.classList?(d=b.classList[g?"add":"remove"],a.a.o(c.match(m),function(a){d.call(b.classList,a)})):"string"===
typeof b.className.baseVal?e(b.className,"baseVal",c,g):e(b,"className",c,g))},Ha:function(b,c){var g=a.a.c(c);if(null===g||g===p)g="";var d=a.e.firstChild(b);!d||3!=d.nodeType||a.e.nextSibling(d)?a.e.T(b,[b.ownerDocument.createTextNode(g)]):d.data=g;a.a.mc(b)},Rb:function(a,b){a.name=b;if(7>=g)try{a.mergeAttributes(w.createElement("<input name='"+a.name+"'/>"),!1)}catch(c){}},mc:function(a){9<=g&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},kc:function(a){if(g){var b=a.style.width;
a.style.width=0;a.style.width=b}},Bc:function(b,c){b=a.a.c(b);c=a.a.c(c);for(var g=[],d=b;d<=c;d++)g.push(d);return g},O:function(a){for(var b=[],c=0,g=a.length;c<g;c++)b.push(a[c]);return b},Hc:6===g,Ic:7===g,M:g,Db:function(b,c){for(var g=a.a.O(b.getElementsByTagName("input")).concat(a.a.O(b.getElementsByTagName("textarea"))),d="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},m=[],e=g.length-1;0<=e;e--)d(g[e])&&m.push(g[e]);return m},yc:function(b){return"string"==
typeof b&&(b=a.a.ib(b))?E&&E.parse?E.parse(b):(new Function("return "+b))():null},jb:function(b,c,g){if(!E||!E.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return E.stringify(a.a.c(b),c,g)},zc:function(c,g,d){d=d||{};var m=d.params||{},e=d.includeFields||this.Bb,f=c;if("object"==typeof c&&"form"===a.a.v(c))for(var f=c.action,
l=e.length-1;0<=l;l--)for(var k=a.a.Db(c,e[l]),h=k.length-1;0<=h;h--)m[k[h].name]=k[h].value;g=a.a.c(g);var s=w.createElement("form");s.style.display="none";s.action=f;s.method="post";for(var p in g)c=w.createElement("input"),c.type="hidden",c.name=p,c.value=a.a.jb(a.a.c(g[p])),s.appendChild(c);b(m,function(a,b){var c=w.createElement("input");c.type="hidden";c.name=a;c.value=b;s.appendChild(c)});w.body.appendChild(s);d.submitter?d.submitter(s):s.submit();setTimeout(function(){s.parentNode.removeChild(s)},
0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.o);a.b("utils.arrayFirst",a.a.vb);a.b("utils.arrayFilter",a.a.xa);a.b("utils.arrayGetDistinctValues",a.a.wb);a.b("utils.arrayIndexOf",a.a.m);a.b("utils.arrayMap",a.a.Ka);a.b("utils.arrayPushAll",a.a.ia);a.b("utils.arrayRemoveItem",a.a.ya);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",a.a.Bb);a.b("utils.getFormFields",a.a.Db);a.b("utils.peekObservable",a.a.cb);a.b("utils.postJson",a.a.zc);a.b("utils.parseJson",a.a.yc);a.b("utils.registerEventHandler",
a.a.n);a.b("utils.stringifyJson",a.a.jb);a.b("utils.range",a.a.Bc);a.b("utils.toggleDomNodeCssClass",a.a.Ia);a.b("utils.triggerEvent",a.a.qa);a.b("utils.unwrapObservable",a.a.c);a.b("utils.objectForEach",a.a.A);a.b("utils.addOrRemoveItem",a.a.ga);a.b("utils.setTextContent",a.a.Ha);a.b("unwrap",a.a.c);Function.prototype.bind||(Function.prototype.bind=function(a){var d=this;if(1===arguments.length)return function(){return d.apply(a,arguments)};var c=Array.prototype.slice.call(arguments,1);return function(){var e=
c.slice(0);e.push.apply(e,arguments);return d.apply(a,e)}});a.a.f=new function(){function a(b,k){var h=b[c];if(!h||"null"===h||!e[h]){if(!k)return p;h=b[c]="ko"+d++;e[h]={}}return e[h]}var d=0,c="__ko__"+(new Date).getTime(),e={};return{get:function(c,d){var e=a(c,!1);return e===p?p:e[d]},set:function(c,d,e){if(e!==p||a(c,!1)!==p)a(c,!0)[d]=e},clear:function(a){var b=a[c];return b?(delete e[b],a[c]=null,!0):!1},I:function(){return d++ +c}}};a.b("utils.domData",a.a.f);a.b("utils.domData.clear",a.a.f.clear);
a.a.C=new function(){function b(b,d){var e=a.a.f.get(b,c);e===p&&d&&(e=[],a.a.f.set(b,c,e));return e}function d(c){var e=b(c,!1);if(e)for(var e=e.slice(0),l=0;l<e.length;l++)e[l](c);a.a.f.clear(c);a.a.C.cleanExternalData(c);if(f[c.nodeType])for(e=c.firstChild;c=e;)e=c.nextSibling,8===c.nodeType&&d(c)}var c=a.a.f.I(),e={1:!0,8:!0,9:!0},f={1:!0,9:!0};return{fa:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},Pb:function(d,e){var f=b(d,!1);f&&(a.a.ya(f,
e),0==f.length&&a.a.f.set(d,c,p))},S:function(b){if(e[b.nodeType]&&(d(b),f[b.nodeType])){var c=[];a.a.ia(c,b.getElementsByTagName("*"));for(var l=0,g=c.length;l<g;l++)d(c[l])}return b},removeNode:function(b){a.S(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){u&&"function"==typeof u.cleanData&&u.cleanData([a])}}};a.S=a.a.C.S;a.removeNode=a.a.C.removeNode;a.b("cleanNode",a.S);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.C);a.b("utils.domNodeDisposal.addDisposeCallback",
a.a.C.fa);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.C.Pb);(function(){a.a.ca=function(b,d){var c;if(u)if(u.parseHTML)c=u.parseHTML(b,d)||[];else{if((c=u.clean([b],d))&&c[0]){for(var e=c[0];e.parentNode&&11!==e.parentNode.nodeType;)e=e.parentNode;e.parentNode&&e.parentNode.removeChild(e)}}else{(e=d)||(e=w);c=e.parentWindow||e.defaultView||y;var f=a.a.ib(b).toLowerCase(),e=e.createElement("div"),f=f.match(/^<(thead|tbody|tfoot)/)&&[1,"<table>","</table>"]||!f.indexOf("<tr")&&[2,"<table><tbody>",
"</tbody></table>"]||(!f.indexOf("<td")||!f.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||[0,"",""],k="ignored<div>"+f[1]+b+f[2]+"</div>";for("function"==typeof c.innerShiv?e.appendChild(c.innerShiv(k)):e.innerHTML=k;f[0]--;)e=e.lastChild;c=a.a.O(e.lastChild.childNodes)}return c};a.a.gb=function(b,d){a.a.Ra(b);d=a.a.c(d);if(null!==d&&d!==p)if("string"!=typeof d&&(d=d.toString()),u)u(b).html(d);else for(var c=a.a.ca(d,b.ownerDocument),e=0;e<c.length;e++)b.appendChild(c[e])}})();
a.b("utils.parseHtmlFragment",a.a.ca);a.b("utils.setHtml",a.a.gb);a.H=function(){function b(c,d){if(c)if(8==c.nodeType){var f=a.H.Lb(c.nodeValue);null!=f&&d.push({ic:c,wc:f})}else if(1==c.nodeType)for(var f=0,k=c.childNodes,h=k.length;f<h;f++)b(k[f],d)}var d={};return{$a:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);
d[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},Wb:function(a,b){var f=d[a];if(f===p)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),!0}finally{delete d[a]}},Xb:function(c,d){var f=[];b(c,f);for(var k=0,h=f.length;k<h;k++){var l=f[k].ic,g=[l];d&&a.a.ia(g,d);a.H.Wb(f[k].wc,g);l.nodeValue="";l.parentNode&&l.parentNode.removeChild(l)}},Lb:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.H);
a.b("memoization.memoize",a.H.$a);a.b("memoization.unmemoize",a.H.Wb);a.b("memoization.parseMemoText",a.H.Lb);a.b("memoization.unmemoizeDomNodeAndDescendants",a.H.Xb);a.Sa={throttle:function(b,d){b.throttleEvaluation=d;var c=null;return a.j({read:b,write:function(a){clearTimeout(c);c=setTimeout(function(){b(a)},d)}})},rateLimit:function(a,d){var c,e,f;"number"==typeof d?c=d:(c=d.timeout,e=d.method);f="notifyWhenChangesStop"==e?S:R;a.Za(function(a){return f(a,c)})},notify:function(a,d){a.equalityComparer=
"always"==d?null:J}};var Q={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.Sa);a.Ub=function(b,d,c){this.da=b;this.La=d;this.hc=c;this.Gb=!1;a.D(this,"dispose",this.p)};a.Ub.prototype.p=function(){this.Gb=!0;this.hc()};a.Q=function(){a.a.Ga(this,a.Q.fn);this.G={};this.rb=1};var z={U:function(b,d,c){var e=this;c=c||"change";var f=new a.Ub(e,d?b.bind(d):b,function(){a.a.ya(e.G[c],f);e.ua&&e.ua(c)});e.ja&&e.ja(c);e.G[c]||(e.G[c]=[]);e.G[c].push(f);return f},notifySubscribers:function(b,
d){d=d||"change";"change"===d&&this.Yb();if(this.Ba(d))try{a.k.xb();for(var c=this.G[d].slice(0),e=0,f;f=c[e];++e)f.Gb||f.La(b)}finally{a.k.end()}},Aa:function(){return this.rb},pc:function(a){return this.Aa()!==a},Yb:function(){++this.rb},Za:function(b){var d=this,c=a.F(d),e,f,k;d.ta||(d.ta=d.notifySubscribers,d.notifySubscribers=function(a,b){b&&"change"!==b?"beforeChange"===b?d.pb(a):d.ta(a,b):d.qb(a)});var h=b(function(){c&&k===d&&(k=d());e=!1;d.Wa(f,k)&&d.ta(f=k)});d.qb=function(a){e=!0;k=a;
h()};d.pb=function(a){e||(f=a,d.ta(a,"beforeChange"))}},Ba:function(a){return this.G[a]&&this.G[a].length},nc:function(b){if(b)return this.G[b]&&this.G[b].length||0;var d=0;a.a.A(this.G,function(a,b){d+=b.length});return d},Wa:function(a,d){return!this.equalityComparer||!this.equalityComparer(a,d)},extend:function(b){var d=this;b&&a.a.A(b,function(b,e){var f=a.Sa[b];"function"==typeof f&&(d=f(d,e)||d)});return d}};a.D(z,"subscribe",z.U);a.D(z,"extend",z.extend);a.D(z,"getSubscriptionsCount",z.nc);
a.a.za&&a.a.Fa(z,Function.prototype);a.Q.fn=z;a.Hb=function(a){return null!=a&&"function"==typeof a.U&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.Q);a.b("isSubscribable",a.Hb);a.Z=a.k=function(){function b(a){c.push(e);e=a}function d(){e=c.pop()}var c=[],e,f=0;return{xb:b,end:d,Ob:function(b){if(e){if(!a.Hb(b))throw Error("Only subscribable things can act as dependencies");e.La(b,b.ac||(b.ac=++f))}},u:function(a,c,e){try{return b(),a.apply(c,e||[])}finally{d()}},oa:function(){if(e)return e.w.oa()},
Ca:function(){if(e)return e.Ca}}}();a.b("computedContext",a.Z);a.b("computedContext.getDependenciesCount",a.Z.oa);a.b("computedContext.isInitial",a.Z.Ca);a.b("computedContext.isSleeping",a.Z.Jc);a.b("ignoreDependencies",a.Gc=a.k.u);a.r=function(b){function d(){if(0<arguments.length)return d.Wa(c,arguments[0])&&(d.X(),c=arguments[0],d.W()),this;a.k.Ob(d);return c}var c=b;a.Q.call(d);a.a.Ga(d,a.r.fn);d.B=function(){return c};d.W=function(){d.notifySubscribers(c)};d.X=function(){d.notifySubscribers(c,
"beforeChange")};a.D(d,"peek",d.B);a.D(d,"valueHasMutated",d.W);a.D(d,"valueWillMutate",d.X);return d};a.r.fn={equalityComparer:J};var H=a.r.Ac="__ko_proto__";a.r.fn[H]=a.r;a.a.za&&a.a.Fa(a.r.fn,a.Q.fn);a.Ta=function(b,d){return null===b||b===p||b[H]===p?!1:b[H]===d?!0:a.Ta(b[H],d)};a.F=function(b){return a.Ta(b,a.r)};a.Da=function(b){return"function"==typeof b&&b[H]===a.r||"function"==typeof b&&b[H]===a.j&&b.qc?!0:!1};a.b("observable",a.r);a.b("isObservable",a.F);a.b("isWriteableObservable",a.Da);
a.b("isWritableObservable",a.Da);a.ba=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.r(b);a.a.Ga(b,a.ba.fn);return b.extend({trackArrayChanges:!0})};a.ba.fn={remove:function(b){for(var d=this.B(),c=[],e="function"!=typeof b||a.F(b)?function(a){return a===b}:b,f=0;f<d.length;f++){var k=d[f];e(k)&&(0===c.length&&this.X(),c.push(k),d.splice(f,1),f--)}c.length&&this.W();return c},
removeAll:function(b){if(b===p){var d=this.B(),c=d.slice(0);this.X();d.splice(0,d.length);this.W();return c}return b?this.remove(function(c){return 0<=a.a.m(b,c)}):[]},destroy:function(b){var d=this.B(),c="function"!=typeof b||a.F(b)?function(a){return a===b}:b;this.X();for(var e=d.length-1;0<=e;e--)c(d[e])&&(d[e]._destroy=!0);this.W()},destroyAll:function(b){return b===p?this.destroy(function(){return!0}):b?this.destroy(function(d){return 0<=a.a.m(b,d)}):[]},indexOf:function(b){var d=this();return a.a.m(d,
b)},replace:function(a,d){var c=this.indexOf(a);0<=c&&(this.X(),this.B()[c]=d,this.W())}};a.a.o("pop push reverse shift sort splice unshift".split(" "),function(b){a.ba.fn[b]=function(){var a=this.B();this.X();this.yb(a,b,arguments);a=a[b].apply(a,arguments);this.W();return a}});a.a.o(["slice"],function(b){a.ba.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.a.za&&a.a.Fa(a.ba.fn,a.r.fn);a.b("observableArray",a.ba);a.Sa.trackArrayChanges=function(b){function d(){if(!c){c=!0;var g=
b.notifySubscribers;b.notifySubscribers=function(a,b){b&&"change"!==b||++k;return g.apply(this,arguments)};var d=[].concat(b.B()||[]);e=null;f=b.U(function(c){c=[].concat(c||[]);if(b.Ba("arrayChange")){var g;if(!e||1<k)e=a.a.Ma(d,c,{sparse:!0});g=e}d=c;e=null;k=0;g&&g.length&&b.notifySubscribers(g,"arrayChange")})}}if(!b.yb){var c=!1,e=null,f,k=0,h=b.ja,l=b.ua;b.ja=function(a){h&&h.call(b,a);"arrayChange"===a&&d()};b.ua=function(a){l&&l.call(b,a);"arrayChange"!==a||b.Ba("arrayChange")||(f.p(),c=!1)};
b.yb=function(b,d,f){function l(a,b,c){return h[h.length]={status:a,value:b,index:c}}if(c&&!k){var h=[],r=b.length,v=f.length,t=0;switch(d){case "push":t=r;case "unshift":for(d=0;d<v;d++)l("added",f[d],t+d);break;case "pop":t=r-1;case "shift":r&&l("deleted",b[t],t);break;case "splice":d=Math.min(Math.max(0,0>f[0]?r+f[0]:f[0]),r);for(var r=1===v?r:Math.min(d+(f[1]||0),r),v=d+v-2,t=Math.max(r,v),G=[],A=[],p=2;d<t;++d,++p)d<r&&A.push(l("deleted",b[d],d)),d<v&&G.push(l("added",f[p],d));a.a.Cb(A,G);break;
default:return}e=h}}}};a.w=a.j=function(b,d,c){function e(a,b,c){if(I&&b===g)throw Error("A 'pure' computed must not be called recursively");B[a]=c;c.sa=F++;c.ea=b.Aa()}function f(){var a,b;for(a in B)if(B.hasOwnProperty(a)&&(b=B[a],b.da.pc(b.ea)))return!0}function k(){!s&&B&&a.a.A(B,function(a,b){b.p&&b.p()});B=null;F=0;G=!0;s=r=!1}function h(){var a=g.throttleEvaluation;a&&0<=a?(clearTimeout(z),z=setTimeout(function(){l(!0)},a)):g.nb?g.nb():l(!0)}function l(b){if(!v&&!G){if(y&&y()){if(!t){w();return}}else t=
!1;v=!0;try{var c=B,m=F,f=I?p:!F;a.k.xb({La:function(a,b){G||(m&&c[b]?(e(b,a,c[b]),delete c[b],--m):B[b]||e(b,a,s?{da:a}:a.U(h)))},w:g,Ca:f});B={};F=0;try{var l=d?A.call(d):A()}finally{a.k.end(),m&&!s&&a.a.A(c,function(a,b){b.p&&b.p()}),r=!1}g.Wa(n,l)&&(s||q(n,"beforeChange"),n=l,s?g.Yb():b&&q(n));f&&q(n,"awake")}finally{v=!1}F||w()}}function g(){if(0<arguments.length){if("function"===typeof C)C.apply(d,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
return this}a.k.Ob(g);(r||s&&f())&&l();return n}function m(){(r&&!F||s&&f())&&l();return n}function x(){return r||0<F}function q(a,b){g.notifySubscribers(a,b)}var n,r=!0,v=!1,t=!1,G=!1,A=b,I=!1,s=!1;A&&"object"==typeof A?(c=A,A=c.read):(c=c||{},A||(A=c.read));if("function"!=typeof A)throw Error("Pass a function that returns the value of the ko.computed");var C=c.write,D=c.disposeWhenNodeIsRemoved||c.q||null,u=c.disposeWhen||c.Pa,y=u,w=k,B={},F=0,z=null;d||(d=c.owner);a.Q.call(g);a.a.Ga(g,a.j.fn);
g.B=m;g.oa=function(){return F};g.qc="function"===typeof C;g.p=function(){w()};g.$=x;var T=g.Za;g.Za=function(a){T.call(g,a);g.nb=function(){g.pb(n);r=!0;g.qb(g)}};c.pure?(s=I=!0,g.ja=function(b){if(!G&&s&&"change"==b){s=!1;if(r||f())B=null,F=0,r=!0,l();else{var c=[];a.a.A(B,function(a,b){c[b.sa]=a});a.a.o(c,function(a,b){var c=B[a],g=c.da.U(h);g.sa=b;g.ea=c.ea;B[a]=g})}G||q(n,"awake")}},g.ua=function(b){G||"change"!=b||g.Ba("change")||(a.a.A(B,function(a,b){b.p&&(B[a]={da:b.da,sa:b.sa,ea:b.ea},b.p())}),
s=!0,q(p,"asleep"))},g.bc=g.Aa,g.Aa=function(){s&&(r||f())&&l();return g.bc()}):c.deferEvaluation&&(g.ja=function(a){"change"!=a&&"beforeChange"!=a||m()});a.D(g,"peek",g.B);a.D(g,"dispose",g.p);a.D(g,"isActive",g.$);a.D(g,"getDependenciesCount",g.oa);D&&(t=!0,D.nodeType&&(y=function(){return!a.a.Qa(D)||u&&u()}));s||c.deferEvaluation||l();D&&x()&&D.nodeType&&(w=function(){a.a.C.Pb(D,w);k()},a.a.C.fa(D,w));return g};a.sc=function(b){return a.Ta(b,a.j)};z=a.r.Ac;a.j[z]=a.r;a.j.fn={equalityComparer:J};
a.j.fn[z]=a.j;a.a.za&&a.a.Fa(a.j.fn,a.Q.fn);a.b("dependentObservable",a.j);a.b("computed",a.j);a.b("isComputed",a.sc);a.Nb=function(b,d){if("function"===typeof b)return a.w(b,d,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.w(b,d)};a.b("pureComputed",a.Nb);(function(){function b(a,f,k){k=k||new c;a=f(a);if("object"!=typeof a||null===a||a===p||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var h=a instanceof Array?[]:{};k.save(a,h);d(a,function(c){var g=
f(a[c]);switch(typeof g){case "boolean":case "number":case "string":case "function":h[c]=g;break;case "object":case "undefined":var d=k.get(g);h[c]=d!==p?d:b(g,f,k)}});return h}function d(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function c(){this.keys=[];this.mb=[]}a.Vb=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(c,function(b){for(var c=0;a.F(b)&&
10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.Vb(b);return a.a.jb(b,c,d)};c.prototype={save:function(b,c){var d=a.a.m(this.keys,b);0<=d?this.mb[d]=c:(this.keys.push(b),this.mb.push(c))},get:function(b){b=a.a.m(this.keys,b);return 0<=b?this.mb[b]:p}}})();a.b("toJS",a.Vb);a.b("toJSON",a.toJSON);(function(){a.i={s:function(b){switch(a.a.v(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.f.get(b,a.d.options.ab):7>=a.a.M?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?
b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.i.s(b.options[b.selectedIndex]):p;default:return b.value}},Y:function(b,d,c){switch(a.a.v(b)){case "option":switch(typeof d){case "string":a.a.f.set(b,a.d.options.ab,p);"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__;b.value=d;break;default:a.a.f.set(b,a.d.options.ab,d),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof d?d:""}break;case "select":if(""===d||null===d)d=p;for(var e=-1,f=0,k=b.options.length,
h;f<k;++f)if(h=a.i.s(b.options[f]),h==d||""==h&&d===p){e=f;break}if(c||0<=e||d===p&&1<b.size)b.selectedIndex=e;break;default:if(null===d||d===p)d="";b.value=d}}}})();a.b("selectExtensions",a.i);a.b("selectExtensions.readValue",a.i.s);a.b("selectExtensions.writeValue",a.i.Y);a.h=function(){function b(b){b=a.a.ib(b);123===b.charCodeAt(0)&&(b=b.slice(1,-1));var c=[],d=b.match(e),x,h=[],n=0;if(d){d.push(",");for(var r=0,v;v=d[r];++r){var t=v.charCodeAt(0);if(44===t){if(0>=n){c.push(x&&h.length?{key:x,
value:h.join("")}:{unknown:x||h.join("")});x=n=0;h=[];continue}}else if(58===t){if(!n&&!x&&1===h.length){x=h.pop();continue}}else 47===t&&r&&1<v.length?(t=d[r-1].match(f))&&!k[t[0]]&&(b=b.substr(b.indexOf(v)+1),d=b.match(e),d.push(","),r=-1,v="/"):40===t||123===t||91===t?++n:41===t||125===t||93===t?--n:x||h.length||34!==t&&39!==t||(v=v.slice(1,-1));h.push(v)}}return c}var d=["true","false","null","undefined"],c=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,e=RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]",
"g"),f=/[\])"'A-Za-z0-9_$]+$/,k={"in":1,"return":1,"typeof":1},h={};return{ka:[],V:h,bb:b,Ea:function(e,g){function m(b,g){var e;if(!r){var l=a.getBindingHandler(b);if(l&&l.preprocess&&!(g=l.preprocess(g,b,m)))return;if(l=h[b])e=g,0<=a.a.m(d,e)?e=!1:(l=e.match(c),e=null===l?!1:l[1]?"Object("+l[1]+")"+l[2]:e),l=e;l&&k.push("'"+b+"':function(_z){"+e+"=_z}")}n&&(g="function(){return "+g+" }");f.push("'"+b+"':"+g)}g=g||{};var f=[],k=[],n=g.valueAccessors,r=g.bindingParams,v="string"===typeof e?b(e):e;
a.a.o(v,function(a){m(a.key||a.unknown,a.value)});k.length&&m("_ko_property_writers","{"+k.join(",")+" }");return f.join(",")},vc:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},ra:function(b,c,d,e,f){if(b&&a.F(b))!a.Da(b)||f&&b.B()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.h);a.b("expressionRewriting.bindingRewriteValidators",a.h.ka);a.b("expressionRewriting.parseObjectLiteral",a.h.bb);a.b("expressionRewriting.preProcessBindings",
a.h.Ea);a.b("expressionRewriting._twoWayBindings",a.h.V);a.b("jsonExpressionRewriting",a.h);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.h.Ea);(function(){function b(a){return 8==a.nodeType&&k.test(f?a.text:a.nodeValue)}function d(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function c(a,c){for(var e=a,f=1,l=[];e=e.nextSibling;){if(d(e)&&(f--,0===f))return l;l.push(e);b(e)&&f++}if(!c)throw Error("Cannot find closing comment tag to match: "+a.nodeValue);return null}function e(a,
b){var d=c(a,b);return d?0<d.length?d[d.length-1].nextSibling:a.nextSibling:null}var f=w&&"\x3c!--test--\x3e"===w.createComment("test").text,k=f?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,h=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,l={ul:!0,ol:!0};a.e={R:{},childNodes:function(a){return b(a)?c(a):a.childNodes},ma:function(c){if(b(c)){c=a.e.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.Ra(c)},T:function(c,d){if(b(c)){a.e.ma(c);for(var e=c.nextSibling,
f=0,l=d.length;f<l;f++)e.parentNode.insertBefore(d[f],e)}else a.a.T(c,d)},Mb:function(a,c){b(a)?a.parentNode.insertBefore(c,a.nextSibling):a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)},Fb:function(c,d,e){e?b(c)?c.parentNode.insertBefore(d,e.nextSibling):e.nextSibling?c.insertBefore(d,e.nextSibling):c.appendChild(d):a.e.Mb(c,d)},firstChild:function(a){return b(a)?!a.nextSibling||d(a.nextSibling)?null:a.nextSibling:a.firstChild},nextSibling:function(a){b(a)&&(a=e(a));return a.nextSibling&&
d(a.nextSibling)?null:a.nextSibling},oc:b,Fc:function(a){return(a=(f?a.text:a.nodeValue).match(k))?a[1]:null},Kb:function(c){if(l[a.a.v(c)]){var m=c.firstChild;if(m){do if(1===m.nodeType){var f;f=m.firstChild;var h=null;if(f){do if(h)h.push(f);else if(b(f)){var k=e(f,!0);k?f=k:h=[f]}else d(f)&&(h=[f]);while(f=f.nextSibling)}if(f=h)for(h=m.nextSibling,k=0;k<f.length;k++)h?c.insertBefore(f[k],h):c.appendChild(f[k])}while(m=m.nextSibling)}}}}})();a.b("virtualElements",a.e);a.b("virtualElements.allowedBindings",
a.e.R);a.b("virtualElements.emptyNode",a.e.ma);a.b("virtualElements.insertAfter",a.e.Fb);a.b("virtualElements.prepend",a.e.Mb);a.b("virtualElements.setDomNodeChildren",a.e.T);(function(){a.L=function(){this.ec={}};a.a.extend(a.L.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.g.getComponentNameForNode(b);case 8:return a.e.oc(b);default:return!1}},getBindings:function(b,d){var c=this.getBindingsString(b,d),c=c?this.parseBindingsString(c,
d,b):null;return a.g.sb(c,b,d,!1)},getBindingAccessors:function(b,d){var c=this.getBindingsString(b,d),c=c?this.parseBindingsString(c,d,b,{valueAccessors:!0}):null;return a.g.sb(c,b,d,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.e.Fc(b);default:return null}},parseBindingsString:function(b,d,c,e){try{var f=this.ec,k=b+(e&&e.valueAccessors||""),h;if(!(h=f[k])){var l,g="with($context){with($data||{}){return{"+a.h.Ea(b,e)+"}}}";l=new Function("$context",
"$element",g);h=f[k]=l}return h(d,c)}catch(m){throw m.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+m.message,m;}}});a.L.instance=new a.L})();a.b("bindingProvider",a.L);(function(){function b(a){return function(){return a}}function d(a){return a()}function c(b){return a.a.pa(a.k.u(b),function(a,c){return function(){return b()[c]}})}function e(d,g,e){return"function"===typeof d?c(d.bind(null,g,e)):a.a.pa(d,b)}function f(a,b){return c(this.getBindings.bind(this,a,b))}function k(b,
c,d){var g,e=a.e.firstChild(c),f=a.L.instance,m=f.preprocessNode;if(m){for(;g=e;)e=a.e.nextSibling(g),m.call(f,g);e=a.e.firstChild(c)}for(;g=e;)e=a.e.nextSibling(g),h(b,g,d)}function h(b,c,d){var e=!0,f=1===c.nodeType;f&&a.e.Kb(c);if(f&&d||a.L.instance.nodeHasBindings(c))e=g(c,null,b,d).shouldBindDescendants;e&&!x[a.a.v(c)]&&k(b,c,!f)}function l(b){var c=[],d={},g=[];a.a.A(b,function I(e){if(!d[e]){var f=a.getBindingHandler(e);f&&(f.after&&(g.push(e),a.a.o(f.after,function(c){if(b[c]){if(-1!==a.a.m(g,
c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+g.join(", "));I(c)}}),g.length--),c.push({key:e,Eb:f}));d[e]=!0}});return c}function g(b,c,g,e){var m=a.a.f.get(b,q);if(!c){if(m)throw Error("You cannot apply bindings multiple times to the same element.");a.a.f.set(b,q,!0)}!m&&e&&a.Tb(b,g);var h;if(c&&"function"!==typeof c)h=c;else{var k=a.L.instance,x=k.getBindingAccessors||f,n=a.j(function(){(h=c?c(g,b):x.call(k,b,g))&&g.K&&g.K();return h},null,{q:b});
h&&n.$()||(n=null)}var u;if(h){var w=n?function(a){return function(){return d(n()[a])}}:function(a){return h[a]},y=function(){return a.a.pa(n?n():h,d)};y.get=function(a){return h[a]&&d(w(a))};y.has=function(a){return a in h};e=l(h);a.a.o(e,function(c){var d=c.Eb.init,e=c.Eb.update,f=c.key;if(8===b.nodeType&&!a.e.R[f])throw Error("The binding '"+f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.k.u(function(){var a=d(b,w(f),y,g.$data,g);if(a&&a.controlsDescendantBindings){if(u!==
p)throw Error("Multiple bindings ("+u+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");u=f}}),"function"==typeof e&&a.j(function(){e(b,w(f),y,g.$data,g)},null,{q:b})}catch(m){throw m.message='Unable to process binding "'+f+": "+h[f]+'"\nMessage: '+m.message,m;}})}return{shouldBindDescendants:u===p}}function m(b){return b&&b instanceof a.N?b:new a.N(b)}a.d={};var x={script:!0,textarea:!0};a.getBindingHandler=function(b){return a.d[b]};
a.N=function(b,c,d,g){var e=this,f="function"==typeof b&&!a.F(b),m,l=a.j(function(){var m=f?b():b,h=a.a.c(m);c?(c.K&&c.K(),a.a.extend(e,c),l&&(e.K=l)):(e.$parents=[],e.$root=h,e.ko=a);e.$rawData=m;e.$data=h;d&&(e[d]=h);g&&g(e,c,h);return e.$data},null,{Pa:function(){return m&&!a.a.tb(m)},q:!0});l.$()&&(e.K=l,l.equalityComparer=null,m=[],l.Zb=function(b){m.push(b);a.a.C.fa(b,function(b){a.a.ya(m,b);m.length||(l.p(),e.K=l=p)})})};a.N.prototype.createChildContext=function(b,c,d){return new a.N(b,this,
c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)})};a.N.prototype.extend=function(b){return new a.N(this.K||this.$data,this,null,function(c,d){c.$rawData=d.$rawData;a.a.extend(c,"function"==typeof b?b():b)})};var q=a.a.f.I(),n=a.a.f.I();a.Tb=function(b,c){if(2==arguments.length)a.a.f.set(b,n,c),c.K&&c.K.Zb(b);else return a.a.f.get(b,n)};a.va=function(b,c,d){1===b.nodeType&&a.e.Kb(b);return g(b,c,m(d),!0)};a.cc=function(b,
c,d){d=m(d);return a.va(b,e(c,d,b),d)};a.Ja=function(a,b){1!==b.nodeType&&8!==b.nodeType||k(m(a),b,!0)};a.ub=function(a,b){!u&&y.jQuery&&(u=y.jQuery);if(b&&1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");b=b||y.document.body;h(m(a),b,!0)};a.Oa=function(b){switch(b.nodeType){case 1:case 8:var c=a.Tb(b);if(c)return c;if(b.parentNode)return a.Oa(b.parentNode)}return p};a.gc=function(b){return(b=a.Oa(b))?
b.$data:p};a.b("bindingHandlers",a.d);a.b("applyBindings",a.ub);a.b("applyBindingsToDescendants",a.Ja);a.b("applyBindingAccessorsToNode",a.va);a.b("applyBindingsToNode",a.cc);a.b("contextFor",a.Oa);a.b("dataFor",a.gc)})();(function(b){function d(d,e){var g=f.hasOwnProperty(d)?f[d]:b,m;g?g.U(e):(g=f[d]=new a.Q,g.U(e),c(d,function(a,b){var c=!(!b||!b.synchronous);k[d]={definition:a,tc:c};delete f[d];m||c?g.notifySubscribers(a):setTimeout(function(){g.notifySubscribers(a)},0)}),m=!0)}function c(a,b){e("getConfig",
[a],function(c){c?e("loadComponent",[a,c],function(a){b(a,c)}):b(null,null)})}function e(c,d,g,f){f||(f=a.g.loaders.slice(0));var k=f.shift();if(k){var q=k[c];if(q){var n=!1;if(q.apply(k,d.concat(function(a){n?g(null):null!==a?g(a):e(c,d,g,f)}))!==b&&(n=!0,!k.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,g,f)}else g(null)}var f={},k={};a.g={get:function(c,e){var g=k.hasOwnProperty(c)?k[c]:
b;g?g.tc?a.k.u(function(){e(g.definition)}):setTimeout(function(){e(g.definition)},0):d(c,e)},zb:function(a){delete k[a]},ob:e};a.g.loaders=[];a.b("components",a.g);a.b("components.get",a.g.get);a.b("components.clearCachedDefinition",a.g.zb)})();(function(){function b(b,c,d,e){function k(){0===--v&&e(h)}var h={},v=2,t=d.template;d=d.viewModel;t?f(c,t,function(c){a.g.ob("loadTemplate",[b,c],function(a){h.template=a;k()})}):k();d?f(c,d,function(c){a.g.ob("loadViewModel",[b,c],function(a){h[l]=a;k()})}):
k()}function d(a,b,c){if("function"===typeof b)c(function(a){return new b(a)});else if("function"===typeof b[l])c(b[l]);else if("instance"in b){var e=b.instance;c(function(){return e})}else"viewModel"in b?d(a,b.viewModel,c):a("Unknown viewModel value: "+b)}function c(b){switch(a.a.v(b)){case "script":return a.a.ca(b.text);case "textarea":return a.a.ca(b.value);case "template":if(e(b.content))return a.a.la(b.content.childNodes)}return a.a.la(b.childNodes)}function e(a){return y.DocumentFragment?a instanceof
DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?O||y.require?(O||y.require)([b.require],c):a("Uses require, but no AMD loader is present"):c(b)}function k(a){return function(b){throw Error("Component '"+a+"': "+b);}}var h={};a.g.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.g.Xa(b))throw Error("Component "+b+" is already registered");h[b]=c};a.g.Xa=function(a){return a in h};a.g.Ec=function(b){delete h[b];a.g.zb(b)};a.g.Ab={getConfig:function(a,
b){b(h.hasOwnProperty(a)?h[a]:null)},loadComponent:function(a,c,d){var e=k(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,d,f){b=k(b);if("string"===typeof d)f(a.a.ca(d));else if(d instanceof Array)f(d);else if(e(d))f(a.a.O(d.childNodes));else if(d.element)if(d=d.element,y.HTMLElement?d instanceof HTMLElement:d&&d.tagName&&1===d.nodeType)f(c(d));else if("string"===typeof d){var l=w.getElementById(d);l?f(c(l)):b("Cannot find element with ID "+d)}else b("Unknown element type: "+d);else b("Unknown template value: "+
d)},loadViewModel:function(a,b,c){d(k(a),b,c)}};var l="createViewModel";a.b("components.register",a.g.register);a.b("components.isRegistered",a.g.Xa);a.b("components.unregister",a.g.Ec);a.b("components.defaultLoader",a.g.Ab);a.g.loaders.push(a.g.Ab);a.g.$b=h})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=d.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.pa(f,function(d){return a.w(d,null,{q:b})}),k=a.a.pa(f,function(d){var e=d.B();return d.$()?a.w({read:function(){return a.a.c(d())},
write:a.Da(e)&&function(a){d()(a)},q:b}):e});k.hasOwnProperty("$raw")||(k.$raw=f);return k}return{$raw:{}}}a.g.getComponentNameForNode=function(b){b=a.a.v(b);return a.g.Xa(b)&&b};a.g.sb=function(c,d,f,k){if(1===d.nodeType){var h=a.g.getComponentNameForNode(d);if(h){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var l={name:h,params:b(d,f)};c.component=k?function(){return l}:l}}return c};var d=new a.L;9>a.a.M&&(a.g.register=function(a){return function(b){w.createElement(b);
return a.apply(this,arguments)}}(a.g.register),w.createDocumentFragment=function(b){return function(){var d=b(),f=a.g.$b,k;for(k in f)f.hasOwnProperty(k)&&d.createElement(k);return d}}(w.createDocumentFragment))})();(function(b){function d(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.la(c);a.e.T(d,b)}function c(a,b,c,d){var e=a.createViewModel;return e?e.call(a,d,{element:b,templateNodes:c}):d}var e=0;a.d.component={init:function(f,k,h,l,g){function m(){var a=x&&
x.dispose;"function"===typeof a&&a.call(x);q=null}var x,q,n=a.a.O(a.e.childNodes(f));a.a.C.fa(f,m);a.w(function(){var l=a.a.c(k()),h,t;"string"===typeof l?h=l:(h=a.a.c(l.name),t=a.a.c(l.params));if(!h)throw Error("No component name specified");var p=q=++e;a.g.get(h,function(e){if(q===p){m();if(!e)throw Error("Unknown component '"+h+"'");d(h,e,f);var l=c(e,f,n,t);e=g.createChildContext(l,b,function(a){a.$component=l;a.$componentTemplateNodes=n});x=l;a.Ja(e,f)}})},null,{q:f});return{controlsDescendantBindings:!0}}};
a.e.R.component=!0})();var P={"class":"className","for":"htmlFor"};a.d.attr={update:function(b,d){var c=a.a.c(d())||{};a.a.A(c,function(c,d){d=a.a.c(d);var k=!1===d||null===d||d===p;k&&b.removeAttribute(c);8>=a.a.M&&c in P?(c=P[c],k?b.removeAttribute(c):b[c]=d):k||b.setAttribute(c,d.toString());"name"===c&&a.a.Rb(b,k?"":d.toString())})}};(function(){a.d.checked={after:["value","attr"],init:function(b,d,c){function e(){var e=b.checked,f=x?k():e;if(!a.Z.Ca()&&(!l||e)){var h=a.k.u(d);g?m!==f?(e&&(a.a.ga(h,
f,!0),a.a.ga(h,m,!1)),m=f):a.a.ga(h,f,e):a.h.ra(h,c,"checked",f,!0)}}function f(){var c=a.a.c(d());b.checked=g?0<=a.a.m(c,k()):h?c:k()===c}var k=a.Nb(function(){return c.has("checkedValue")?a.a.c(c.get("checkedValue")):c.has("value")?a.a.c(c.get("value")):b.value}),h="checkbox"==b.type,l="radio"==b.type;if(h||l){var g=h&&a.a.c(d())instanceof Array,m=g?k():p,x=l||g;l&&!b.name&&a.d.uniqueName.init(b,function(){return!0});a.w(e,null,{q:b});a.a.n(b,"click",e);a.w(f,null,{q:b})}}};a.h.V.checked=!0;a.d.checkedValue=
{update:function(b,d){b.value=a.a.c(d())}}})();a.d.css={update:function(b,d){var c=a.a.c(d());null!==c&&"object"==typeof c?a.a.A(c,function(c,d){d=a.a.c(d);a.a.Ia(b,c,d)}):(c=String(c||""),a.a.Ia(b,b.__ko__cssValue,!1),b.__ko__cssValue=c,a.a.Ia(b,c,!0))}};a.d.enable={update:function(b,d){var c=a.a.c(d());c&&b.disabled?b.removeAttribute("disabled"):c||b.disabled||(b.disabled=!0)}};a.d.disable={update:function(b,d){a.d.enable.update(b,function(){return!a.a.c(d())})}};a.d.event={init:function(b,d,c,
e,f){var k=d()||{};a.a.A(k,function(h){"string"==typeof h&&a.a.n(b,h,function(b){var g,m=d()[h];if(m){try{var k=a.a.O(arguments);e=f.$data;k.unshift(e);g=m.apply(e,k)}finally{!0!==g&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===c.get(h+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.d.foreach={Ib:function(b){return function(){var d=b(),c=a.a.cb(d);if(!c||"number"==typeof c.length)return{foreach:d,templateEngine:a.P.Va};a.a.c(d);return{foreach:c.data,as:c.as,
includeDestroyed:c.includeDestroyed,afterAdd:c.afterAdd,beforeRemove:c.beforeRemove,afterRender:c.afterRender,beforeMove:c.beforeMove,afterMove:c.afterMove,templateEngine:a.P.Va}}},init:function(b,d){return a.d.template.init(b,a.d.foreach.Ib(d))},update:function(b,d,c,e,f){return a.d.template.update(b,a.d.foreach.Ib(d),c,e,f)}};a.h.ka.foreach=!1;a.e.R.foreach=!0;a.d.hasfocus={init:function(b,d,c){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(m){g=
f.body}e=g===b}f=d();a.h.ra(f,c,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),k=e.bind(null,!1);a.a.n(b,"focus",f);a.a.n(b,"focusin",f);a.a.n(b,"blur",k);a.a.n(b,"focusout",k)},update:function(b,d){var c=!!a.a.c(d());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===c||(c?b.focus():b.blur(),a.k.u(a.a.qa,null,[b,c?"focusin":"focusout"]))}};a.h.V.hasfocus=!0;a.d.hasFocus=a.d.hasfocus;a.h.V.hasFocus=!0;a.d.html={init:function(){return{controlsDescendantBindings:!0}},
update:function(b,d){a.a.gb(b,d())}};K("if");K("ifnot",!1,!0);K("with",!0,!1,function(a,d){return a.createChildContext(d)});var L={};a.d.options={init:function(b){if("select"!==a.a.v(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,d,c){function e(){return a.a.xa(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function k(d,e){if(r&&
m)a.i.Y(b,a.a.c(c.get("value")),!0);else if(n.length){var g=0<=a.a.m(n,a.i.s(e[0]));a.a.Sb(e[0],g);r&&!g&&a.k.u(a.a.qa,null,[b,"change"])}}var h=b.multiple,l=0!=b.length&&h?b.scrollTop:null,g=a.a.c(d()),m=c.get("valueAllowUnset")&&c.has("value"),x=c.get("optionsIncludeDestroyed");d={};var q,n=[];m||(h?n=a.a.Ka(e(),a.i.s):0<=b.selectedIndex&&n.push(a.i.s(b.options[b.selectedIndex])));g&&("undefined"==typeof g.length&&(g=[g]),q=a.a.xa(g,function(b){return x||b===p||null===b||!a.a.c(b._destroy)}),c.has("optionsCaption")&&
(g=a.a.c(c.get("optionsCaption")),null!==g&&g!==p&&q.unshift(L)));var r=!1;d.beforeRemove=function(a){b.removeChild(a)};g=k;c.has("optionsAfterRender")&&"function"==typeof c.get("optionsAfterRender")&&(g=function(b,d){k(0,d);a.k.u(c.get("optionsAfterRender"),null,[d[0],b!==L?b:p])});a.a.fb(b,q,function(d,e,g){g.length&&(n=!m&&g[0].selected?[a.i.s(g[0])]:[],r=!0);e=b.ownerDocument.createElement("option");d===L?(a.a.Ha(e,c.get("optionsCaption")),a.i.Y(e,p)):(g=f(d,c.get("optionsValue"),d),a.i.Y(e,a.a.c(g)),
d=f(d,c.get("optionsText"),g),a.a.Ha(e,d));return[e]},d,g);a.k.u(function(){m?a.i.Y(b,a.a.c(c.get("value")),!0):(h?n.length&&e().length<n.length:n.length&&0<=b.selectedIndex?a.i.s(b.options[b.selectedIndex])!==n[0]:n.length||0<=b.selectedIndex)&&a.a.qa(b,"change")});a.a.kc(b);l&&20<Math.abs(l-b.scrollTop)&&(b.scrollTop=l)}};a.d.options.ab=a.a.f.I();a.d.selectedOptions={after:["options","foreach"],init:function(b,d,c){a.a.n(b,"change",function(){var e=d(),f=[];a.a.o(b.getElementsByTagName("option"),
function(b){b.selected&&f.push(a.i.s(b))});a.h.ra(e,c,"selectedOptions",f)})},update:function(b,d){if("select"!=a.a.v(b))throw Error("values binding applies only to SELECT elements");var c=a.a.c(d());c&&"number"==typeof c.length&&a.a.o(b.getElementsByTagName("option"),function(b){var d=0<=a.a.m(c,a.i.s(b));a.a.Sb(b,d)})}};a.h.V.selectedOptions=!0;a.d.style={update:function(b,d){var c=a.a.c(d()||{});a.a.A(c,function(c,d){d=a.a.c(d);if(null===d||d===p||!1===d)d="";b.style[c]=d})}};a.d.submit={init:function(b,
d,c,e,f){if("function"!=typeof d())throw Error("The value for a submit binding must be a function");a.a.n(b,"submit",function(a){var c,e=d();try{c=e.call(f.$data,b)}finally{!0!==c&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}})}};a.d.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,d){a.a.Ha(b,d())}};a.e.R.text=!0;(function(){if(y&&y.navigator)var b=function(a){if(a)return parseFloat(a[1])},d=y.opera&&y.opera.version&&parseInt(y.opera.version()),c=y.navigator.userAgent,
e=b(c.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)),f=b(c.match(/Firefox\/([^ ]*)/));if(10>a.a.M)var k=a.a.f.I(),h=a.a.f.I(),l=function(b){var c=this.activeElement;(c=c&&a.a.f.get(c,h))&&c(b)},g=function(b,c){var d=b.ownerDocument;a.a.f.get(d,k)||(a.a.f.set(d,k,!0),a.a.n(d,"selectionchange",l));a.a.f.set(b,h,c)};a.d.textInput={init:function(b,c,l){function h(c,d){a.a.n(b,c,d)}function k(){var d=a.a.c(c());if(null===d||d===p)d="";w!==p&&d===w?setTimeout(k,4):b.value!==d&&(u=d,b.value=d)}function v(){A||
(w=b.value,A=setTimeout(t,4))}function t(){clearTimeout(A);w=A=p;var d=b.value;u!==d&&(u=d,a.h.ra(c(),l,"textInput",d))}var u=b.value,A,w;10>a.a.M?(h("propertychange",function(a){"value"===a.propertyName&&t()}),8==a.a.M&&(h("keyup",t),h("keydown",t)),8<=a.a.M&&(g(b,t),h("dragend",v))):(h("input",t),5>e&&"textarea"===a.a.v(b)?(h("keydown",v),h("paste",v),h("cut",v)):11>d?h("keydown",v):4>f&&(h("DOMAutoComplete",t),h("dragdrop",t),h("drop",t)));h("change",t);a.w(k,null,{q:b})}};a.h.V.textInput=!0;a.d.textinput=
{preprocess:function(a,b,c){c("textInput",a)}}})();a.d.uniqueName={init:function(b,d){if(d()){var c="ko_unique_"+ ++a.d.uniqueName.fc;a.a.Rb(b,c)}}};a.d.uniqueName.fc=0;a.d.value={after:["options","foreach"],init:function(b,d,c){if("input"!=b.tagName.toLowerCase()||"checkbox"!=b.type&&"radio"!=b.type){var e=["change"],f=c.get("valueUpdate"),k=!1,h=null;f&&("string"==typeof f&&(f=[f]),a.a.ia(e,f),e=a.a.wb(e));var l=function(){h=null;k=!1;var e=d(),g=a.i.s(b);a.h.ra(e,c,"value",g)};!a.a.M||"input"!=
b.tagName.toLowerCase()||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.m(e,"propertychange")||(a.a.n(b,"propertychange",function(){k=!0}),a.a.n(b,"focus",function(){k=!1}),a.a.n(b,"blur",function(){k&&l()}));a.a.o(e,function(c){var d=l;a.a.Dc(c,"after")&&(d=function(){h=a.i.s(b);setTimeout(l,0)},c=c.substring(5));a.a.n(b,c,d)});var g=function(){var e=a.a.c(d()),f=a.i.s(b);if(null!==h&&e===h)setTimeout(g,0);else if(e!==f)if("select"===a.a.v(b)){var l=c.get("valueAllowUnset"),
f=function(){a.i.Y(b,e,l)};f();l||e===a.i.s(b)?setTimeout(f,0):a.k.u(a.a.qa,null,[b,"change"])}else a.i.Y(b,e)};a.w(g,null,{q:b})}else a.va(b,{checkedValue:d})},update:function(){}};a.h.V.value=!0;a.d.visible={update:function(b,d){var c=a.a.c(d()),e="none"!=b.style.display;c&&!e?b.style.display="":!c&&e&&(b.style.display="none")}};(function(b){a.d[b]={init:function(d,c,e,f,k){return a.d.event.init.call(this,d,function(){var a={};a[b]=c();return a},e,f,k)}}})("click");a.J=function(){};a.J.prototype.renderTemplateSource=
function(){throw Error("Override renderTemplateSource");};a.J.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.J.prototype.makeTemplateSource=function(b,d){if("string"==typeof b){d=d||w;var c=d.getElementById(b);if(!c)throw Error("Cannot find template with ID "+b);return new a.t.l(c)}if(1==b.nodeType||8==b.nodeType)return new a.t.ha(b);throw Error("Unknown template type: "+b);};a.J.prototype.renderTemplate=function(a,d,c,e){a=this.makeTemplateSource(a,
e);return this.renderTemplateSource(a,d,c,e)};a.J.prototype.isTemplateRewritten=function(a,d){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,d).data("isRewritten")};a.J.prototype.rewriteTemplate=function(a,d,c){a=this.makeTemplateSource(a,c);d=d(a.text());a.text(d);a.data("isRewritten",!0)};a.b("templateEngine",a.J);a.kb=function(){function b(b,c,d,h){b=a.h.bb(b);for(var l=a.h.ka,g=0;g<b.length;g++){var m=b[g].key;if(l.hasOwnProperty(m)){var x=l[m];if("function"===typeof x){if(m=
x(b[g].value))throw Error(m);}else if(!x)throw Error("This template engine does not support the '"+m+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.h.Ea(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return h.createJavaScriptEvaluatorBlock(d)+c}var d=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,c=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{lc:function(b,
c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.kb.xc(b,c)},d)},xc:function(a,f){return a.replace(d,function(a,c,d,e,m){return b(m,c,d,f)}).replace(c,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},dc:function(b,c){return a.H.$a(function(d,h){var l=d.nextSibling;l&&l.nodeName.toLowerCase()===c&&a.va(l,b,h)})}}}();a.b("__tr_ambtns",a.kb.dc);(function(){a.t={};a.t.l=function(a){this.l=a};a.t.l.prototype.text=function(){var b=a.a.v(this.l),b="script"===b?"text":
"textarea"===b?"value":"innerHTML";if(0==arguments.length)return this.l[b];var d=arguments[0];"innerHTML"===b?a.a.gb(this.l,d):this.l[b]=d};var b=a.a.f.I()+"_";a.t.l.prototype.data=function(c){if(1===arguments.length)return a.a.f.get(this.l,b+c);a.a.f.set(this.l,b+c,arguments[1])};var d=a.a.f.I();a.t.ha=function(a){this.l=a};a.t.ha.prototype=new a.t.l;a.t.ha.prototype.text=function(){if(0==arguments.length){var b=a.a.f.get(this.l,d)||{};b.lb===p&&b.Na&&(b.lb=b.Na.innerHTML);return b.lb}a.a.f.set(this.l,
d,{lb:arguments[0]})};a.t.l.prototype.nodes=function(){if(0==arguments.length)return(a.a.f.get(this.l,d)||{}).Na;a.a.f.set(this.l,d,{Na:arguments[0]})};a.b("templateSources",a.t);a.b("templateSources.domElement",a.t.l);a.b("templateSources.anonymousTemplate",a.t.ha)})();(function(){function b(b,c,d){var e;for(c=a.e.nextSibling(c);b&&(e=b)!==c;)b=a.e.nextSibling(e),d(e,b)}function d(c,d){if(c.length){var e=c[0],f=c[c.length-1],h=e.parentNode,k=a.L.instance,r=k.preprocessNode;if(r){b(e,f,function(a,
b){var c=a.previousSibling,d=r.call(k,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):(c.push(e,f),a.a.na(c,h))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.ub(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.H.Xb(b,[d])});a.a.na(c,h)}}function c(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,h,q){q=q||{};var n=(b&&c(b)||f||{}).ownerDocument,r=q.templateEngine||k;a.kb.lc(f,r,n);f=r.renderTemplate(f,h,q,n);if("number"!=
typeof f.length||0<f.length&&"number"!=typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");n=!1;switch(e){case "replaceChildren":a.e.T(b,f);n=!0;break;case "replaceNode":a.a.Qb(b,f);n=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}n&&(d(f,h),q.afterRender&&a.k.u(q.afterRender,null,[f,h.$data]));return f}function f(b,c,d){return a.F(b)?b():"function"===typeof b?b(c,d):b}var k;a.hb=function(b){if(b!=p&&!(b instanceof a.J))throw Error("templateEngine must inherit from ko.templateEngine");
k=b};a.eb=function(b,d,h,x,q){h=h||{};if((h.templateEngine||k)==p)throw Error("Set a template engine before calling renderTemplate");q=q||"replaceChildren";if(x){var n=c(x);return a.j(function(){var k=d&&d instanceof a.N?d:new a.N(a.a.c(d)),p=f(b,k.$data,k),k=e(x,q,p,k,h);"replaceNode"==q&&(x=k,n=c(x))},null,{Pa:function(){return!n||!a.a.Qa(n)},q:n&&"replaceNode"==q?n.parentNode:n})}return a.H.$a(function(c){a.eb(b,d,h,c,"replaceNode")})};a.Cc=function(b,c,h,k,q){function n(a,b){d(b,v);h.afterRender&&
h.afterRender(b,a);v=null}function r(a,c){v=q.createChildContext(a,h.as,function(a){a.$index=c});var d=f(b,a,v);return e(null,"ignoreTargetNode",d,v,h)}var v;return a.j(function(){var b=a.a.c(c)||[];"undefined"==typeof b.length&&(b=[b]);b=a.a.xa(b,function(b){return h.includeDestroyed||b===p||null===b||!a.a.c(b._destroy)});a.k.u(a.a.fb,null,[k,b,r,h,n])},null,{q:k})};var h=a.a.f.I();a.d.template={init:function(b,c){var d=a.a.c(c());if("string"==typeof d||d.name)a.e.ma(b);else{if("nodes"in d){if(d=
d.nodes||[],a.F(d))throw Error('The "nodes" option must be a plain, non-observable array.');}else d=a.e.childNodes(b);d=a.a.Jb(d);(new a.t.ha(b)).nodes(d)}return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var k=c(),r;c=a.a.c(k);d=!0;e=null;"string"==typeof c?c={}:(k=c.name,"if"in c&&(d=a.a.c(c["if"])),d&&"ifnot"in c&&(d=!a.a.c(c.ifnot)),r=a.a.c(c.data));"foreach"in c?e=a.Cc(k||b,d&&c.foreach||[],c,b,f):d?(f="data"in c?f.createChildContext(r,c.as):f,e=a.eb(k||b,f,c,b)):a.e.ma(b);f=
e;(r=a.a.f.get(b,h))&&"function"==typeof r.p&&r.p();a.a.f.set(b,h,f&&f.$()?f:p)}};a.h.ka.template=function(b){b=a.h.bb(b);return 1==b.length&&b[0].unknown||a.h.vc(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.e.R.template=!0})();a.b("setTemplateEngine",a.hb);a.b("renderTemplate",a.eb);a.a.Cb=function(a,d,c){if(a.length&&d.length){var e,f,k,h,l;for(e=f=0;(!c||e<c)&&(h=a[f]);++f){for(k=0;l=d[k];++k)if(h.value===l.value){h.moved=l.index;l.moved=
h.index;d.splice(k,1);e=k=0;break}e+=k}}};a.a.Ma=function(){function b(b,c,e,f,k){var h=Math.min,l=Math.max,g=[],m,p=b.length,q,n=c.length,r=n-p||1,v=p+n+1,t,u,w;for(m=0;m<=p;m++)for(u=t,g.push(t=[]),w=h(n,m+r),q=l(0,m-1);q<=w;q++)t[q]=q?m?b[m-1]===c[q-1]?u[q-1]:h(u[q]||v,t[q-1]||v)+1:q+1:m+1;h=[];l=[];r=[];m=p;for(q=n;m||q;)n=g[m][q]-1,q&&n===g[m][q-1]?l.push(h[h.length]={status:e,value:c[--q],index:q}):m&&n===g[m-1][q]?r.push(h[h.length]={status:f,value:b[--m],index:m}):(--q,--m,k.sparse||h.push({status:"retained",
value:c[q]}));a.a.Cb(l,r,10*p);return h.reverse()}return function(a,c,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];c=c||[];return a.length<=c.length?b(a,c,"added","deleted",e):b(c,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.Ma);(function(){function b(b,d,f,k,h){var l=[],g=a.j(function(){var g=d(f,h,a.a.na(l,b))||[];0<l.length&&(a.a.Qb(l,g),k&&a.k.u(k,null,[f,g,h]));l.length=0;a.a.ia(l,g)},null,{q:b,Pa:function(){return!a.a.tb(l)}});return{aa:l,j:g.$()?g:p}}var d=a.a.f.I();
a.a.fb=function(c,e,f,k,h){function l(b,d){s=u[d];t!==d&&(z[b]=s);s.Ua(t++);a.a.na(s.aa,c);r.push(s);y.push(s)}function g(b,c){if(b)for(var d=0,e=c.length;d<e;d++)c[d]&&a.a.o(c[d].aa,function(a){b(a,d,c[d].wa)})}e=e||[];k=k||{};var m=a.a.f.get(c,d)===p,u=a.a.f.get(c,d)||[],q=a.a.Ka(u,function(a){return a.wa}),n=a.a.Ma(q,e,k.dontLimitMoves),r=[],v=0,t=0,w=[],y=[];e=[];for(var z=[],q=[],s,C=0,D,E;D=n[C];C++)switch(E=D.moved,D.status){case "deleted":E===p&&(s=u[v],s.j&&s.j.p(),w.push.apply(w,a.a.na(s.aa,
c)),k.beforeRemove&&(e[C]=s,y.push(s)));v++;break;case "retained":l(C,v++);break;case "added":E!==p?l(C,E):(s={wa:D.value,Ua:a.r(t++)},r.push(s),y.push(s),m||(q[C]=s))}g(k.beforeMove,z);a.a.o(w,k.beforeRemove?a.S:a.removeNode);for(var C=0,m=a.e.firstChild(c),H;s=y[C];C++){s.aa||a.a.extend(s,b(c,f,s.wa,h,s.Ua));for(v=0;n=s.aa[v];m=n.nextSibling,H=n,v++)n!==m&&a.e.Fb(c,n,H);!s.rc&&h&&(h(s.wa,s.aa,s.Ua),s.rc=!0)}g(k.beforeRemove,e);g(k.afterMove,z);g(k.afterAdd,q);a.a.f.set(c,d,r)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",
a.a.fb);a.P=function(){this.allowTemplateRewriting=!1};a.P.prototype=new a.J;a.P.prototype.renderTemplateSource=function(b,d,c,e){if(d=(9>a.a.M?0:b.nodes)?b.nodes():null)return a.a.O(d.cloneNode(!0).childNodes);b=b.text();return a.a.ca(b,e)};a.P.Va=new a.P;a.hb(a.P.Va);a.b("nativeTemplateEngine",a.P);(function(){a.Ya=function(){var a=this.uc=function(){if(!u||!u.tmpl)return 0;try{if(0<=u.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,
e,f,k){k=k||w;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var h=b.data("precompiled");h||(h=b.text()||"",h=u.template(null,"{{ko_with $item.koBindingContext}}"+h+"{{/ko_with}}"),b.data("precompiled",h));b=[e.$data];e=u.extend({koBindingContext:e},f.templateOptions);e=u.tmpl(h,b,e);e.appendTo(k.createElement("div"));u.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+
a+" })()) }}"};this.addTemplate=function(a,b){w.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(u.tmpl.tag.ko_code={open:"__.push($1 || '');"},u.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.Ya.prototype=new a.J;var b=new a.Ya;0<b.uc&&a.hb(b);a.b("jqueryTmplTemplateEngine",a.Ya)})()})})();})();

/// Knockout Mapping plugin v2.4.1
/// (c) 2013 Steven Sanderson, Roy Jacobs - http://knockoutjs.com/
/// License: MIT (http://www.opensource.org/licenses/mit-license.php)
(function(e){"function"===typeof require&&"object"===typeof exports&&"object"===typeof module?e(require("knockout"),exports):"function"===typeof define&&define.amd?define(["knockout","exports"],e):e(ko,ko.mapping={})})(function(e,f){function y(b,c){var a,d;for(d in c)if(c.hasOwnProperty(d)&&c[d])if(a=f.getType(b[d]),d&&b[d]&&"array"!==a&&"string"!==a)y(b[d],c[d]);else if("array"===f.getType(b[d])&&"array"===f.getType(c[d])){a=b;for(var e=d,l=b[d],n=c[d],t={},g=l.length-1;0<=g;--g)t[l[g]]=l[g];for(g=
n.length-1;0<=g;--g)t[n[g]]=n[g];l=[];n=void 0;for(n in t)l.push(t[n]);a[e]=l}else b[d]=c[d]}function E(b,c){var a={};y(a,b);y(a,c);return a}function z(b,c){for(var a=E({},b),e=L.length-1;0<=e;e--){var f=L[e];a[f]&&(a[""]instanceof Object||(a[""]={}),a[""][f]=a[f],delete a[f])}c&&(a.ignore=h(c.ignore,a.ignore),a.include=h(c.include,a.include),a.copy=h(c.copy,a.copy),a.observe=h(c.observe,a.observe));a.ignore=h(a.ignore,j.ignore);a.include=h(a.include,j.include);a.copy=h(a.copy,j.copy);a.observe=h(a.observe,
j.observe);a.mappedProperties=a.mappedProperties||{};a.copiedProperties=a.copiedProperties||{};return a}function h(b,c){"array"!==f.getType(b)&&(b="undefined"===f.getType(b)?[]:[b]);"array"!==f.getType(c)&&(c="undefined"===f.getType(c)?[]:[c]);return e.utils.arrayGetDistinctValues(b.concat(c))}function F(b,c,a,d,k,l,n){var t="array"===f.getType(e.utils.unwrapObservable(c));l=l||"";if(f.isMapped(b)){var g=e.utils.unwrapObservable(b)[p];a=E(g,a)}var j=n||k,h=function(){return a[d]&&a[d].create instanceof
Function},x=function(b){var f=G,g=e.dependentObservable;e.dependentObservable=function(a,b,c){c=c||{};a&&"object"==typeof a&&(c=a);var d=c.deferEvaluation,M=!1;c.deferEvaluation=!0;a=new H(a,b,c);if(!d){var g=a,d=e.dependentObservable;e.dependentObservable=H;a=e.isWriteableObservable(g);e.dependentObservable=d;d=H({read:function(){M||(e.utils.arrayRemoveItem(f,g),M=!0);return g.apply(g,arguments)},write:a&&function(a){return g(a)},deferEvaluation:!0});d.__DO=g;a=d;f.push(a)}return a};e.dependentObservable.fn=
H.fn;e.computed=e.dependentObservable;b=e.utils.unwrapObservable(k)instanceof Array?a[d].create({data:b||c,parent:j,skip:N}):a[d].create({data:b||c,parent:j});e.dependentObservable=g;e.computed=e.dependentObservable;return b},u=function(){return a[d]&&a[d].update instanceof Function},v=function(b,f){var g={data:f||c,parent:j,target:e.utils.unwrapObservable(b)};e.isWriteableObservable(b)&&(g.observable=b);return a[d].update(g)};if(n=I.get(c))return n;d=d||"";if(t){var t=[],s=!1,m=function(a){return a};
a[d]&&a[d].key&&(m=a[d].key,s=!0);e.isObservable(b)||(b=e.observableArray([]),b.mappedRemove=function(a){var c="function"==typeof a?a:function(b){return b===m(a)};return b.remove(function(a){return c(m(a))})},b.mappedRemoveAll=function(a){var c=C(a,m);return b.remove(function(a){return-1!=e.utils.arrayIndexOf(c,m(a))})},b.mappedDestroy=function(a){var c="function"==typeof a?a:function(b){return b===m(a)};return b.destroy(function(a){return c(m(a))})},b.mappedDestroyAll=function(a){var c=C(a,m);return b.destroy(function(a){return-1!=
e.utils.arrayIndexOf(c,m(a))})},b.mappedIndexOf=function(a){var c=C(b(),m);a=m(a);return e.utils.arrayIndexOf(c,a)},b.mappedGet=function(a){return b()[b.mappedIndexOf(a)]},b.mappedCreate=function(a){if(-1!==b.mappedIndexOf(a))throw Error("There already is an object with the key that you specified.");var c=h()?x(a):a;u()&&(a=v(c,a),e.isWriteableObservable(c)?c(a):c=a);b.push(c);return c});n=C(e.utils.unwrapObservable(b),m).sort();g=C(c,m);s&&g.sort();s=e.utils.compareArrays(n,g);n={};var J,A=e.utils.unwrapObservable(c),
y={},z=!0,g=0;for(J=A.length;g<J;g++){var r=m(A[g]);if(void 0===r||r instanceof Object){z=!1;break}y[r]=A[g]}var A=[],B=0,g=0;for(J=s.length;g<J;g++){var r=s[g],q,w=l+"["+g+"]";switch(r.status){case "added":var D=z?y[r.value]:K(e.utils.unwrapObservable(c),r.value,m);q=F(void 0,D,a,d,b,w,k);h()||(q=e.utils.unwrapObservable(q));w=O(e.utils.unwrapObservable(c),D,n);q===N?B++:A[w-B]=q;n[w]=!0;break;case "retained":D=z?y[r.value]:K(e.utils.unwrapObservable(c),r.value,m);q=K(b,r.value,m);F(q,D,a,d,b,w,
k);w=O(e.utils.unwrapObservable(c),D,n);A[w]=q;n[w]=!0;break;case "deleted":q=K(b,r.value,m)}t.push({event:r.status,item:q})}b(A);a[d]&&a[d].arrayChanged&&e.utils.arrayForEach(t,function(b){a[d].arrayChanged(b.event,b.item)})}else if(P(c)){b=e.utils.unwrapObservable(b);if(!b){if(h())return s=x(),u()&&(s=v(s)),s;if(u())return v(s);b={}}u()&&(b=v(b));I.save(c,b);if(u())return b;Q(c,function(d){var f=l.length?l+"."+d:d;if(-1==e.utils.arrayIndexOf(a.ignore,f))if(-1!=e.utils.arrayIndexOf(a.copy,f))b[d]=
c[d];else if("object"!=typeof c[d]&&"array"!=typeof c[d]&&0<a.observe.length&&-1==e.utils.arrayIndexOf(a.observe,f))b[d]=c[d],a.copiedProperties[f]=!0;else{var g=I.get(c[d]),k=F(b[d],c[d],a,d,b,f,b),g=g||k;if(0<a.observe.length&&-1==e.utils.arrayIndexOf(a.observe,f))b[d]=g(),a.copiedProperties[f]=!0;else{if(e.isWriteableObservable(b[d])){if(g=e.utils.unwrapObservable(g),b[d]()!==g)b[d](g)}else g=void 0===b[d]?g:e.utils.unwrapObservable(g),b[d]=g;a.mappedProperties[f]=!0}}})}else switch(f.getType(c)){case "function":u()?
e.isWriteableObservable(c)?(c(v(c)),b=c):b=v(c):b=c;break;default:if(e.isWriteableObservable(b))return q=u()?v(b):e.utils.unwrapObservable(c),b(q),q;h()||u();b=h()?x():e.observable(e.utils.unwrapObservable(c));u()&&b(v(b))}return b}function O(b,c,a){for(var d=0,e=b.length;d<e;d++)if(!0!==a[d]&&b[d]===c)return d;return null}function R(b,c){var a;c&&(a=c(b));"undefined"===f.getType(a)&&(a=b);return e.utils.unwrapObservable(a)}function K(b,c,a){b=e.utils.unwrapObservable(b);for(var d=0,f=b.length;d<
f;d++){var l=b[d];if(R(l,a)===c)return l}throw Error("When calling ko.update*, the key '"+c+"' was not found!");}function C(b,c){return e.utils.arrayMap(e.utils.unwrapObservable(b),function(a){return c?R(a,c):a})}function Q(b,c){if("array"===f.getType(b))for(var a=0;a<b.length;a++)c(a);else for(a in b)c(a)}function P(b){var c=f.getType(b);return("object"===c||"array"===c)&&null!==b}function T(){var b=[],c=[];this.save=function(a,d){var f=e.utils.arrayIndexOf(b,a);0<=f?c[f]=d:(b.push(a),c.push(d))};
this.get=function(a){a=e.utils.arrayIndexOf(b,a);return 0<=a?c[a]:void 0}}function S(){var b={},c=function(a){var c;try{c=a}catch(e){c="$$$"}a=b[c];void 0===a&&(a=new T,b[c]=a);return a};this.save=function(a,b){c(a).save(a,b)};this.get=function(a){return c(a).get(a)}}var p="__ko_mapping__",H=e.dependentObservable,B=0,G,I,L=["create","update","key","arrayChanged"],N={},x={include:["_destroy"],ignore:[],copy:[],observe:[]},j=x;f.isMapped=function(b){return(b=e.utils.unwrapObservable(b))&&b[p]};f.fromJS=
function(b){if(0==arguments.length)throw Error("When calling ko.fromJS, pass the object you want to convert.");try{B++||(G=[],I=new S);var c,a;2==arguments.length&&(arguments[1][p]?a=arguments[1]:c=arguments[1]);3==arguments.length&&(c=arguments[1],a=arguments[2]);a&&(c=E(c,a[p]));c=z(c);var d=F(a,b,c);a&&(d=a);if(!--B)for(;G.length;){var e=G.pop();e&&(e(),e.__DO.throttleEvaluation=e.throttleEvaluation)}d[p]=E(d[p],c);return d}catch(f){throw B=0,f;}};f.fromJSON=function(b){var c=e.utils.parseJson(b);
arguments[0]=c;return f.fromJS.apply(this,arguments)};f.updateFromJS=function(){throw Error("ko.mapping.updateFromJS, use ko.mapping.fromJS instead. Please note that the order of parameters is different!");};f.updateFromJSON=function(){throw Error("ko.mapping.updateFromJSON, use ko.mapping.fromJSON instead. Please note that the order of parameters is different!");};f.toJS=function(b,c){j||f.resetDefaultOptions();if(0==arguments.length)throw Error("When calling ko.mapping.toJS, pass the object you want to convert.");
if("array"!==f.getType(j.ignore))throw Error("ko.mapping.defaultOptions().ignore should be an array.");if("array"!==f.getType(j.include))throw Error("ko.mapping.defaultOptions().include should be an array.");if("array"!==f.getType(j.copy))throw Error("ko.mapping.defaultOptions().copy should be an array.");c=z(c,b[p]);return f.visitModel(b,function(a){return e.utils.unwrapObservable(a)},c)};f.toJSON=function(b,c){var a=f.toJS(b,c);return e.utils.stringifyJson(a)};f.defaultOptions=function(){if(0<arguments.length)j=
arguments[0];else return j};f.resetDefaultOptions=function(){j={include:x.include.slice(0),ignore:x.ignore.slice(0),copy:x.copy.slice(0)}};f.getType=function(b){if(b&&"object"===typeof b){if(b.constructor===Date)return"date";if(b.constructor===Array)return"array"}return typeof b};f.visitModel=function(b,c,a){a=a||{};a.visitedObjects=a.visitedObjects||new S;var d,k=e.utils.unwrapObservable(b);if(P(k))a=z(a,k[p]),c(b,a.parentName),d="array"===f.getType(k)?[]:{};else return c(b,a.parentName);a.visitedObjects.save(b,
d);var l=a.parentName;Q(k,function(b){if(!(a.ignore&&-1!=e.utils.arrayIndexOf(a.ignore,b))){var j=k[b],g=a,h=l||"";"array"===f.getType(k)?l&&(h+="["+b+"]"):(l&&(h+="."),h+=b);g.parentName=h;if(!(-1===e.utils.arrayIndexOf(a.copy,b)&&-1===e.utils.arrayIndexOf(a.include,b)&&k[p]&&k[p].mappedProperties&&!k[p].mappedProperties[b]&&k[p].copiedProperties&&!k[p].copiedProperties[b]&&"array"!==f.getType(k)))switch(f.getType(e.utils.unwrapObservable(j))){case "object":case "array":case "undefined":g=a.visitedObjects.get(j);
d[b]="undefined"!==f.getType(g)?g:f.visitModel(j,c,a);break;default:d[b]=c(j,a.parentName)}}});return d}});

/*!
 * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2015
 * @version 4.1.9
 *
 * File input styled for Bootstrap 3.0 that utilizes HTML5 File Input's advanced
 * features including the FileReader API.
 *
 * The plugin drastically enhances the HTML file input to preview multiple files on the client before
 * upload. In addition it provides the ability to preview content of images, text, videos, audio, html,
 * flash and other objects. It also offers the ability to upload and delete files using AJAX, and add
 * files in batches (i.e. preview, append, or remove before upload).
 *
 * Author: Kartik Visweswaran
 * Copyright: 2015, Kartik Visweswaran, Krajee.com
 * For more JQuery plugins visit http://plugins.krajee.com
 * For more Yii related demos visit http://demos.krajee.com
 */!function (e) {
     "use strict"; String.prototype.repl = function (e, i) { return this.split(e).join(i) }; var i = function (e) { var i, t = document.createElement("div"); return t.innerHTML = "<!--[if IE " + e + "]><i></i><![endif]-->", i = 1 === t.getElementsByTagName("i").length, document.body.appendChild(t), t.parentNode.removeChild(t), i }, t = { data: {}, init: function (e) { var i = e.initialPreview, a = e.id; i.length > 0 && !B(i) && (i = i.split(e.initialPreviewDelimiter)), t.data[a] = { content: i, config: e.initialPreviewConfig, tags: e.initialPreviewThumbTags, delimiter: e.initialPreviewDelimiter, template: e.previewGenericTemplate, msg: e.msgSelected, initId: e.previewInitId, footer: e.getLayoutTemplate("footer"), isDelete: e.initialPreviewShowDelete, caption: e.initialCaption, actions: function (i, t, a, n, r, l) { return e.renderFileActions(i, t, a, n, r, l) } } }, fetch: function (e) { return t.data[e].content.filter(function (e) { return void 0 !== e }) }, count: function (e) { return t.data[e] && t.data[e].content ? t.fetch(e).length : 0 }, get: function (e, i, a) { var n, r = "init_" + i, l = t.data[e], o = l.initId + "-" + r; return a = void 0 === a ? !0 : a, null === l.content[i] ? "" : (n = l.template.repl("{previewId}", o).repl("{frameClass}", " file-preview-initial").repl("{fileindex}", r).repl("{content}", l.content[i]).repl("{footer}", t.footer(e, i, a)), l.tags.length && l.tags[i] && (n = q(n, l.tags[i])), n) }, add: function (i, a, n, r, l) { var o, s = e.extend(!0, {}, t.data[i]); return B(a) || (a = a.split(s.delimiter)), l ? (o = s.content.push(a) - 1, s.config[o] = n, s.tags[o] = r) : (o = a.length, s.content = a, s.config = n, s.tags = r), t.data[i] = s, o }, set: function (i, a, n, r, l) { var o, s = e.extend(!0, {}, t.data[i]); if (B(a) || (a = a.split(s.delimiter)), l) { for (o = 0; o < a.length; o++) s.content.push(a[o]); for (o = 0; o < n.length; o++) s.config.push(n[o]); for (o = 0; o < r.length; o++) s.tags.push(r[o]) } else s.content = a, s.config = n, s.tags = r; t.data[i] = s }, unset: function (e, i) { var a = t.count(e); if (a) { if (1 === a) return t.data[e].content = [], void (t.data[e].config = []); t.data[e].content[i] = null, t.data[e].config[i] = null } }, out: function (e) { var i, a = "", n = t.data[e], r = t.count(e); if (0 === r) return { content: "", caption: "" }; for (var l = 0; r > l; l++) a += t.get(e, l); return i = n.msg.repl("{n}", r), { content: a, caption: i } }, footer: function (e, i, a) { var n = t.data[e]; if (a = void 0 === a ? !0 : a, 0 === n.config.length || z(n.config[i])) return ""; var r = n.config[i], l = N("caption", r) ? r.caption : "", o = N("width", r) ? r.width : "auto", s = N("url", r) ? r.url : !1, d = N("key", r) ? r.key : null, p = s === !1 && a, c = n.isDelete ? n.actions(!1, !0, p, s, d, i) : "", f = n.footer.repl("{actions}", c); return f.repl("{caption}", l).repl("{width}", o).repl("{indicator}", "").repl("{indicatorTitle}", "") } }, a = ".file-preview-frame:not(.file-preview-initial)", n = function (e, i) { return i = i || 0, "number" == typeof e ? e : ("string" == typeof e && (e = parseFloat(e)), isNaN(e) ? i : e) }, r = function () { return window.File && window.FileReader }, l = function () { var e = document.createElement("div"); return !i(9) && (void 0 !== e.draggable || void 0 !== e.ondragstart && void 0 !== e.ondrop) }, o = function () { return r && window.FormData }, s = function (e, i) { e.removeClass(i).addClass(i) }, d = 'style="width:{width};height:{height};"', p = '      <param name="controller" value="true" />\n      <param name="allowFullScreen" value="true" />\n      <param name="allowScriptAccess" value="always" />\n      <param name="autoPlay" value="false" />\n      <param name="autoStart" value="false" />\n      <param name="quality" value="high" />\n', c = '<div class="file-preview-other">\n       {previewFileIcon}\n   </div>', f = { removeIcon: '<i class="glyphicon glyphicon-minus text-danger"></i>', removeClass: "btn btn-xs btn-default", removeTitle: "Remove file", uploadIcon: '<i class="glyphicon glyphicon-upload text-info"></i>', uploadClass: "btn btn-xs btn-default", uploadTitle: "Upload file", indicatorNew: '<i class="glyphicon glyphicon-hand-down text-warning"></i>', indicatorSuccess: '<i class="pwicons pwicons-button-tick-sign file-icon-large text-success"></i>', indicatorError: '<i class="glyphicon glyphicon-exclamation-sign text-danger"></i>', indicatorLoading: '<i class="glyphicon glyphicon-hand-up text-muted"></i>', indicatorNewTitle: "Not uploaded yet", indicatorSuccessTitle: "Uploaded", indicatorErrorTitle: "Upload Error", indicatorLoadingTitle: "Uploading ..." }, u = '{preview}\n<div class="kv-upload-progress hide"></div>\n<div class="input-group {class}">\n   {caption}\n   <div class="input-group-btn">\n       {remove}\n       {cancel}\n       {upload}\n       {browse}\n   </div>\n</div>', v = '{preview}\n<div class="kv-upload-progress hide"></div>\n{remove}\n{cancel}\n{upload}\n{browse}\n', h = '<div class="file-preview {class}">\n    <div class="close fileinput-remove">&times;</div>\n    <div class="{dropClass}">\n    <div class="file-preview-thumbnails">\n    </div>\n    <div class="clearfix"></div>    <div class="file-preview-status text-center text-success"></div>\n    <div class="kv-fileinput-error"></div>\n    </div>\n</div>', m = '<span class="glyphicon glyphicon-file kv-caption-icon"></span>', g = '<div tabindex="-1" class="form-control file-caption {class}">\n   <span class="file-caption-ellipsis">&hellip;</span>\n   <div class="file-caption-name"></div>\n</div>', w = '<div id="{id}" class="modal fade">\n  <div class="modal-dialog modal-lg">\n    <div class="modal-content">\n      <div class="modal-header">\n        <button type="button" class="close" data-bs-dismiss="modal" data-dismiss="modal" aria-hidden="true">&times;</button>\n        <h3 class="modal-title">Detailed Preview <small>{title}</small></h3>\n      </div>\n      <div class="modal-body">\n        <textarea class="form-control" style="font-family:Monaco,Consolas,monospace; height: {height}px;" readonly>{body}</textarea>\n      </div>\n    </div>\n  </div>\n</div>', b = '<div class="progress">\n    <div class="{class}" role="progressbar" aria-valuenow="{percent}" aria-valuemin="0" aria-valuemax="100" style="width:{percent}%;">\n        {percent}%\n     </div>\n</div>', x = '<div class="file-thumbnail-footer">\n    <div class="file-caption-name">{caption}</div>\n    {actions}\n</div>', C = '<div class="file-actions">\n    <div class="file-footer-buttons">\n        {upload}{delete}{other}    </div>\n    <div class="file-upload-indicator" tabindex="-1" title="{indicatorTitle}">{indicator}</div>\n    <div class="clearfix"></div>\n</div>', y = '<button type="button" class="kv-file-remove {removeClass}" title="{removeTitle}"{dataUrl}{dataKey}>{removeIcon}</button>\n', E = '<button type="button" class="kv-file-upload {uploadClass}" title="{uploadTitle}">   {uploadIcon}\n</button>\n', $ = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}">\n   {content}\n   {footer}\n</div>\n', T = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}">\n    <object data="{data}" type="{type}" width="{width}" height="{height}">\n       ' + c + "\n    </object>\n   {footer}\n</div>", F = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}">\n   <img src="{data}" class="file-preview-image" title="{caption}" alt="{caption}" ' + d + ">\n   {footer}\n</div>\n", k = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}">\n   <div class="file-preview-text" title="{caption}" ' + d + ">\n       {data}\n   </div>\n   {footer}\n</div>", I = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}" title="{caption}" ' + d + '>\n   <video width="{width}" height="{height}" controls>\n       <source src="{data}" type="{type}">\n       ' + c + "\n   </video>\n   {footer}\n</div>\n", D = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}" title="{caption}" ' + d + '>\n   <audio controls>\n       <source src="{data}" type="{type}">\n       ' + c + "\n   </audio>\n   {footer}\n</div>", P = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}" title="{caption}" ' + d + '>\n   <object type="application/x-shockwave-flash" width="{width}" height="{height}" data="{data}">\n' + p + "       " + c + "\n   </object>\n   {footer}\n</div>\n", S = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}" title="{caption}" ' + d + '>\n   <object data="{data}" type="{type}" width="{width}" height="{height}">\n       <param name="movie" value="{caption}" />\n' + p + "         " + c + "\n   </object>\n   {footer}\n</div>", U = '<div class="file-preview-frame{frameClass}" id="{previewId}" data-fileindex="{fileindex}" title="{caption}" ' + d + ">\n   " + c + "\n   {footer}\n</div>", j = { main1: u, main2: v, preview: h, icon: m, caption: g, modal: w, progress: b, footer: x, actions: C, actionDelete: y, actionUpload: E }, A = { generic: $, html: T, image: F, text: k, video: I, audio: D, flash: P, object: S, other: U }, L = ["image", "html", "text", "video", "audio", "flash", "object"], O = { image: { width: "auto", height: "160px" }, html: { width: "213px", height: "160px" }, text: { width: "160px", height: "160px" }, video: { width: "213px", height: "160px" }, audio: { width: "213px", height: "80px" }, flash: { width: "213px", height: "160px" }, object: { width: "160px", height: "160px" }, other: { width: "160px", height: "160px" } }, R = { image: function (e, i) { return void 0 !== e ? e.match("image.*") : i.match(/\.(gif|png|jpe?g)$/i) }, html: function (e, i) { return void 0 !== e ? "text/html" === e : i.match(/\.(htm|html)$/i) }, text: function (e, i) { return void 0 !== e && e.match("text.*") || i.match(/\.(txt|md|csv|nfo|php|ini)$/i) }, video: function (e, i) { return void 0 !== e && e.match(/\.video\/(ogg|mp4|webm)$/i) || i.match(/\.(og?|mp4|webm)$/i) }, audio: function (e, i) { return void 0 !== e && e.match(/\.audio\/(ogg|mp3|wav)$/i) || i.match(/\.(ogg|mp3|wav)$/i) }, flash: function (e, i) { return void 0 !== e && "application/x-shockwave-flash" === e || i.match(/\.(swf)$/i) }, object: function () { return !0 }, other: function () { return !0 } }, z = function (i, t) { return null === i || void 0 === i || 0 === i.length || t && "" === e.trim(i) }, B = function (e) { return Array.isArray(e) || "[object Array]" === Object.prototype.toString.call(e) }, N = function (e, i) { return "object" == typeof i && e in i }, M = function (i, t, a) { return z(i) || z(i[t]) ? a : e(i[t]) }, Z = function () { return Math.round((new Date).getTime() + 100 * Math.random()) }, _ = function (e) { return String(e).repl("&", "&amp;").repl('"', "&quot;").repl("'", "&#39;").repl("<", "&lt;").repl(">", "&gt;") }, q = function (i, t) { var a = i; return t = t || {}, e.each(t, function (e, i) { "function" == typeof i && (i = i()), a = a.repl(e, i) }), a }, H = window.URL || window.webkitURL, V = function (t, a) { this.$element = e(t), r() || i(9) ? (this.init(a), this.listen()) : this.$element.removeClass("file-loading") }; V.prototype = {
         constructor: V, init: function (a) { var r, d = this, p = d.$element; e.each(a, function (e, i) { d[e] = "maxFileCount" === e || "maxFileSize" === e ? n(i) : i }), d.fileInputCleared = !1, d.fileBatchCompleted = !0, z(d.allowedPreviewTypes) && (d.allowedPreviewTypes = L), d.uploadFileAttr = z(p.attr("name")) ? "file_data" : p.attr("name"), d.reader = null, d.formdata = {}, d.isIE9 = i(9), d.isIE10 = i(10), d.filestack = [], d.ajaxRequests = [], d.isError = !1, d.ajaxAborted = !1, d.dropZoneEnabled = l() && d.dropZoneEnabled, d.isDisabled = d.$element.attr("disabled") || d.$element.attr("readonly"), d.isUploadable = o && !z(d.uploadUrl), d.slug = "function" == typeof a.slugCallback ? a.slugCallback : d.slugDefault, d.mainTemplate = d.getLayoutTemplate(d.showCaption ? "main1" : "main2"), d.captionTemplate = d.getLayoutTemplate("caption"), d.previewGenericTemplate = d.getPreviewTemplate("generic"), z(d.$element.attr("id")) && d.$element.attr("id", Z()), void 0 === d.$container ? d.$container = d.createContainer() : d.refreshContainer(), d.$progress = d.$container.find(".kv-upload-progress"), d.$btnUpload = d.$container.find(".kv-fileinput-upload"), d.$captionContainer = M(a, "elCaptionContainer", d.$container.find(".file-caption")), d.$caption = M(a, "elCaptionText", d.$container.find(".file-caption-name")), d.$previewContainer = M(a, "elPreviewContainer", d.$container.find(".file-preview")), d.$preview = M(a, "elPreviewImage", d.$container.find(".file-preview-thumbnails")), d.$previewStatus = M(a, "elPreviewStatus", d.$container.find(".file-preview-status")), d.$errorContainer = M(a, "elErrorContainer", d.$previewContainer.find(".kv-fileinput-error")), z(d.msgErrorClass) || s(d.$errorContainer, d.msgErrorClass), d.$errorContainer.hide(), d.fileActionSettings = e.extend(f, a.fileActionSettings), d.previewInitId = "preview-" + Z(), d.id = d.$element.attr("id"), t.init(d), d.initPreview(!0), d.initPreviewDeletes(), d.options = a, d.setFileDropZoneTitle(), d.uploadCount = 0, d.uploadPercent = 0, d.$element.removeClass("file-loading"), r = d.getLayoutTemplate("progress"), d.progressTemplate = r.replace("{class}", d.progressClass), d.progressCompleteTemplate = r.replace("{class}", d.progressCompleteClass), d.setEllipsis() }, parseError: function (i, t, a) { var n = this, r = e.trim(t + ""), l = "." === r.slice(-1) ? "" : ".", o = e(i.responseText).text(); return n.showAjaxErrorDetails ? (o = e.trim(o.replace(/\n\s*\n/g, "\n")), o = o.length > 0 ? "<pre>" + o + "</pre>" : "", r += l + o) : r += l, a ? "<b>" + a + ": </b>" + i : r }, raise: function (i, t) { var a = this, n = e.Event(i), r = !1; if (void 0 !== t ? a.$element.trigger(n, t) : a.$element.trigger(n), n.result && (r = !0), r) switch (i) { case "filebatchuploadcomplete": case "filebatchuploadsuccess": case "fileuploaded": case "fileclear": case "filecleared": case "filereset": case "fileerror": case "filefoldererror": case "fileuploaderror": case "filebatchuploaderror": case "filedeleteerror": case "filecustomerror": break; default: a.ajaxAborted = r } }, getLayoutTemplate: function (e) { var i = this, t = N(e, i.layoutTemplates) ? i.layoutTemplates[e] : j[e]; return z(i.customLayoutTags) ? t : q(t, i.customLayoutTags) }, getPreviewTemplate: function (e) { var i = this, t = N(e, i.previewTemplates) ? i.previewTemplates[e] : A[e]; return t = t.repl("{previewFileIcon}", i.previewFileIcon), z(i.customPreviewTags) ? t : q(t, i.customPreviewTags) }, getOutData: function (e, i, t) { var a = this; return e = e || {}, i = i || {}, t = t || a.filestack.slice(0) || {}, { form: a.formdata, files: t, extra: a.getExtraData(), response: i, reader: a.reader, jqXHR: e } }, setEllipsis: function () { var e = this, i = e.$captionContainer, t = e.$caption, a = t.clone().css("height", "auto").hide(); i.parent().before(a), i.removeClass("kv-has-ellipsis"), a.outerWidth() > t.outerWidth() && i.addClass("kv-has-ellipsis"), a.remove() }, listen: function () { var i = this, t = i.$element, a = i.$captionContainer, n = i.$btnFile, r = t.closest("form"); t.on("change", e.proxy(i.change, i)), e(window).on("resize", function () { i.setEllipsis() }), n.off("click").on("click", function () { i.raise("filebrowse"), i.isError && !i.isUploadable && i.clear(), a.focus() }), r.off("reset").on("reset", e.proxy(i.reset, i)), i.$container.off("click").on("click", ".fileinput-remove:not([disabled])", e.proxy(i.clear, i)).on("click", ".fileinput-cancel", e.proxy(i.cancel, i)), i.isUploadable && i.dropZoneEnabled && i.showPreview && i.initDragDrop(), i.isUploadable || r.on("submit", e.proxy(i.submitForm, i)), i.$container.find(".kv-fileinput-upload").off("click").on("click", function (t) { i.isUploadable && (t.preventDefault(), !e(this).hasClass("disabled") && z(e(this).attr("disabled")) && i.upload()) }) }, submitForm: function () { var e = this, i = e.$element, t = i.get(0).files; return t && t.length < e.minFileCount && e.minFileCount > 0 ? (e.noFilesError({}), !1) : !e.abort({}) }, abort: function (i) { var t, a = this; return a.ajaxAborted && "object" == typeof a.ajaxAborted && void 0 !== a.ajaxAborted.message ? (t = void 0 !== a.ajaxAborted.data ? a.getOutData({}, a.ajaxAborted.data) : a.getOutData(), t = e.extend(t, i), a.showUploadError(a.ajaxAborted.message, t, "filecustomerror"), !0) : !1 }, noFilesError: function (e) { var i = this, t = i.minFileCount > 1 ? i.filePlural : i.fileSingle, a = i.msgFilesTooLess.repl("{n}", i.minFileCount).repl("{files}", t), n = i.$errorContainer; n.html(a), i.isError = !0, i.updateFileDetails(0), n.fadeIn(800), i.raise("fileerror", [e]), i.clearFileInput(), s(i.$container, "has-error") }, setProgress: function (e) { var i = this, t = Math.min(e, 100), a = 100 > t ? i.progressTemplate : i.progressCompleteTemplate; i.$progress.html(a.repl("{percent}", t)) }, upload: function () { var i, t, a, n = this, r = n.getFileStack().length, l = {}, o = !e.isEmptyObject(n.getExtraData()); if (r < n.minFileCount && n.minFileCount > 0) return void n.noFilesError(l); if (n.isUploadable && !n.isDisabled && (0 !== r || o)) { if (n.resetUpload(), n.$progress.removeClass("hide"), n.uploadCount = 0, n.uploadPercent = 0, n.lock(), n.setProgress(0), 0 === r && o) return void n.uploadExtraOnly(); if (a = n.filestack.length, n.hasInitData = !1, n.uploadAsync && n.showPreview) for (t = n.getOutData(), n.raise("filebatchpreupload", [t]), n.fileBatchCompleted = !1, n.uploadCache = { content: [], config: [], tags: [], append: !0 }, i = 0; a > i; i += 1) void 0 !== n.filestack[i] && n.uploadSingle(i, n.filestack, !0); else n.uploadBatch() } }, lock: function () { var e = this; e.resetErrors(), e.disable(), e.showRemove && s(e.$container.find(".fileinput-remove"), "hide"), e.showCancel && e.$container.find(".fileinput-cancel").removeClass("hide"), e.raise("filelock", [e.filestack, e.getExtraData()]) }, unlock: function (e) { var i = this; void 0 === e && (e = !0), i.enable(), i.showCancel && s(i.$container.find(".fileinput-cancel"), "hide"), i.showRemove && i.$container.find(".fileinput-remove").removeClass("hide"), e && i.resetFileStack(), i.raise("fileunlock", [i.filestack, i.getExtraData()]) }, resetFileStack: function () { var i = this, t = 0, n = []; i.$preview.find(a).each(function () { var a = e(this), r = a.attr("data-fileindex"), l = i.filestack[r]; -1 !== r && (void 0 !== l ? (n[t] = l, a.attr({ id: i.previewInitId + "-" + t, "data-fileindex": t }), t += 1) : a.attr({ id: "uploaded-" + Z(), "data-fileindex": "-1" })) }), i.filestack = n }, refresh: function (i) { var t, a = this, n = a.$element, r = arguments.length ? e.extend(a.options, i) : a.options; n.off(), a.init(r), t = a.$container.find(".file-drop-zone"), t.off("dragenter dragover drop"), e(document).off("dragenter dragover drop"), a.listen(), a.setFileDropZoneTitle() }, initDragDrop: function () { var i = this, t = i.$container.find(".file-drop-zone"); t.off("dragenter dragover drop"), e(document).off("dragenter dragover drop"), t.on("dragenter dragover", function (t) { t.stopPropagation(), t.preventDefault(), i.isDisabled || s(e(this), "highlighted") }), t.on("dragleave", function (t) { t.stopPropagation(), t.preventDefault(), i.isDisabled || e(this).removeClass("highlighted") }), t.on("drop", function (t) { t.preventDefault(), i.isDisabled || (i.change(t, "dragdrop"), e(this).removeClass("highlighted")) }), e(document).on("dragenter dragover drop", function (e) { e.stopPropagation(), e.preventDefault() }) }, setFileDropZoneTitle: function () { var e = this, i = e.$container.find(".file-drop-zone"); i.find("." + e.dropZoneTitleClass).remove(), e.isUploadable && e.showPreview && 0 !== i.length && !(e.getFileStack().length > 0) && e.dropZoneEnabled && (0 === i.find(".file-preview-frame").length && i.prepend('<div class="' + e.dropZoneTitleClass + '">' + e.dropZoneTitle + "</div>"), e.$container.removeClass("file-input-new"), s(e.$container, "file-input-ajax-new")) }, initFileActions: function () { var i = this; i.$preview.find(".kv-file-remove").each(function () { var a, n, r = e(this), l = r.closest(".file-preview-frame"), o = l.attr("data-fileindex"); r.off("click").on("click", function () { l.fadeOut("slow", function () { i.filestack[o] = void 0, i.clearObjects(l), l.remove(); var e = i.getFileStack(), r = e.length, s = t.count(i.id); i.clearFileInput(), 0 === r && 0 === s ? i.reset() : (a = s + r, n = a > 1 ? i.msgSelected.repl("{n}", a) : e[0].name, i.setCaption(n)) }) }) }), i.$preview.find(".kv-file-upload").each(function () { var t = e(this); t.off("click").on("click", function () { var e = t.closest(".file-preview-frame"), a = e.attr("data-fileindex"); i.uploadSingle(a, i.filestack, !1) }) }) }, renderFileFooter: function (e, i) { var t, a, n = this, r = n.fileActionSettings, l = n.getLayoutTemplate("footer"); return n.isUploadable ? (t = l.repl("{actions}", n.renderFileActions(!0, !0, !1, !1, !1, !1)), a = t.repl("{caption}", e).repl("{width}", i).repl("{indicator}", r.indicatorNew).repl("{indicatorTitle}", r.indicatorNewTitle)) : a = l.repl("{actions}", "").repl("{caption}", e).repl("{width}", i).repl("{indicator}", "").repl("{indicatorTitle}", ""), a = q(a, n.previewThumbTags) }, renderFileActions: function (e, i, t, a, n) { if (!e && !i) return ""; var r = this, l = a === !1 ? "" : ' data-url="' + a + '"', o = n === !1 ? "" : ' data-key="' + n + '"', s = r.getLayoutTemplate("actionDelete"), d = "", p = r.getLayoutTemplate("actions"), c = r.otherActionButtons.repl("{dataKey}", o), f = r.fileActionSettings, u = t ? f.removeClass + " disabled" : f.removeClass; return s = s.repl("{removeClass}", u).repl("{removeIcon}", f.removeIcon).repl("{removeTitle}", f.removeTitle).repl("{dataUrl}", l).repl("{dataKey}", o), e && (d = r.getLayoutTemplate("actionUpload").repl("{uploadClass}", f.uploadClass).repl("{uploadIcon}", f.uploadIcon).repl("{uploadTitle}", f.uploadTitle)), p.repl("{delete}", s).repl("{upload}", d).repl("{other}", c) }, initPreview: function (e) { var i, a = this, n = a.initialCaption || ""; return t.count(a.id) ? (i = t.out(a.id), n = e && a.initialCaption ? a.initialCaption : i.caption, a.$preview.html(i.content), a.setCaption(n), void (z(i.content) || a.$container.removeClass("file-input-new"))) : (a.$preview.html(""), void (e ? a.setCaption(n) : a.initCaption())) }, initPreviewDeletes: function () { var i = this, a = i.deleteExtraData || {}, n = function () { 0 === i.$preview.find(".kv-file-remove").length && (i.reset(), i.initialCaption = "") }; i.$preview.find(".kv-file-remove").each(function () { var r = e(this), l = r.data("url") || i.deleteUrl, o = r.data("key"); if (!z(l) && void 0 !== o) { var d, p, c, f, u = r.closest(".file-preview-frame"), v = t.data[i.id], h = u.data("fileindex"); h = parseInt(h.replace("init_", "")), c = z(v.config) && z(v.config[h]) ? null : v.config[h], f = z(c) || z(c.extra) ? a : c.extra, "function" == typeof f && (f = f()), p = { id: r.attr("id"), key: o, extra: f }, d = e.extend({ url: l, type: "POST", dataType: "json", data: e.extend({ key: o }, f), beforeSend: function (e) { i.ajaxAborted = !1, i.raise("filepredelete", [o, e, f]), i.ajaxAborted ? e.abort() : (s(u, "file-uploading"), s(r, "disabled")) }, success: function (e, a, l) { return void 0 !== e && void 0 !== e.error ? (p.jqXHR = l, p.response = e, i.showError(e.error, p, "filedeleteerror"), u.removeClass("file-uploading"), r.removeClass("disabled"), void n()) : (t.unset(i.id, h), i.raise("filedeleted", [o, l, f]), u.removeClass("file-uploading").addClass("file-deleted"), void u.fadeOut("slow", function () { i.clearObjects(u), u.remove(), n(), t.count(i.id) || 0 !== i.getFileStack().length || i.reset() })) }, error: function (e, t, a) { var r = i.parseError(e, a); p.jqXHR = e, p.response = {}, i.showError(r, p, "filedeleteerror"), u.removeClass("file-uploading"), n() } }, i.ajaxDeleteSettings), r.off("click").on("click", function () { e.ajax(d) }) } }) }, clearObjects: function (i) { i.find("video audio").each(function () { this.pause(), e(this).remove() }), i.find("img object div").each(function () { e(this).remove() }) }, clearFileInput: function () { var i, t, a, n = this, r = n.$element; z(r.val()) || (n.isIE9 || n.isIE10 ? (i = r.closest("form"), t = e(document.createElement("form")), a = e(document.createElement("div")), r.before(a), i.length ? i.after(t) : a.after(t), t.append(r).trigger("reset"), a.before(r).remove(), t.remove()) : r.val(""), n.fileInputCleared = !0) }, resetUpload: function () { var e = this; e.uploadCache = { content: [], config: [], tags: [], append: !0 }, e.uploadCount = 0, e.uploadPercent = 0, e.$btnUpload.removeAttr("disabled"), e.setProgress(0), s(e.$progress, "hide"), e.resetErrors(!1), e.ajaxAborted = !1, e.ajaxRequests = [] }, cancel: function () { var i, t = this, n = t.ajaxRequests, r = n.length; if (r > 0) for (i = 0; r > i; i += 1) n[i].abort(); t.$preview.find(a).each(function () { var i = e(this), a = i.attr("data-fileindex"); i.removeClass("file-uploading"), void 0 !== t.filestack[a] && (i.find(".kv-file-upload").removeClass("disabled").removeAttr("disabled"), i.find(".kv-file-remove").removeClass("disabled").removeAttr("disabled")), t.unlock() }) }, clear: function () { var i, n = this; n.$btnUpload.removeAttr("disabled"), n.resetUpload(), n.filestack = [], n.clearFileInput(), n.resetErrors(!0), n.raise("fileclear"), !n.overwriteInitial && t.count(n.id) ? (n.showFileIcon(), n.resetPreview(), n.setEllipsis(), n.initPreviewDeletes(), n.$container.removeClass("file-input-new")) : (n.$preview.find(a).each(function () { n.clearObjects(e(this)) }), n.$preview.html(""), i = !n.overwriteInitial && n.initialCaption.length > 0 ? n.initialCaption : "", n.setCaption(i), n.setEllipsis(), n.$caption.attr("title", ""), s(n.$container, "file-input-new")), 0 === n.$container.find(".file-preview-frame").length && (n.initCaption() || n.$captionContainer.find(".kv-caption-icon").hide(), n.setEllipsis()), n.hideFileIcon(), n.raise("filecleared"), n.$captionContainer.focus(), n.setFileDropZoneTitle() }, resetPreview: function () { var e, i = this; t.count(i.id) ? (e = t.out(i.id), i.$preview.html(e.content), i.setCaption(e.caption)) : (i.$preview.html(""), i.initCaption()) }, reset: function () { var e = this; e.clear(), e.resetPreview(), e.setEllipsis(), e.$container.find(".fileinput-filename").text(""), e.raise("filereset"), e.initialPreview.length > 0 && e.$container.removeClass("file-input-new"), e.setFileDropZoneTitle(), e.filestack = [], e.formdata = {} }, disable: function () { var e = this; e.isDisabled = !0, e.raise("filedisabled"), e.$element.attr("disabled", "disabled"), e.$container.find(".kv-fileinput-caption").addClass("file-caption-disabled"), e.$container.find(".btn-file, .fileinput-remove, .kv-fileinput-upload").attr("disabled", !0), e.initDragDrop() }, enable: function () { var e = this; e.isDisabled = !1, e.raise("fileenabled"), e.$element.removeAttr("disabled"), e.$container.find(".kv-fileinput-caption").removeClass("file-caption-disabled"), e.$container.find(".btn-file, .fileinput-remove, .kv-fileinput-upload").removeAttr("disabled"), e.initDragDrop() }, getExtraData: function () { var e = this, i = e.uploadExtraData; return "function" == typeof e.uploadExtraData && (i = e.uploadExtraData()), i }, uploadExtra: function () { var i = this, t = i.getExtraData(); 0 !== t.length && e.each(t, function (e, t) { i.formdata.append(e, t) }) }, initXhr: function (e, i) { var t = this; return e.upload && e.upload.addEventListener("progress", function (e) { var a = 0, n = e.loaded || e.position, r = e.total; e.lengthComputable && (a = Math.ceil(n / r * i)), t.uploadPercent = Math.max(a, t.uploadPercent), t.setProgress(t.uploadPercent) }, !1), e }, ajaxSubmit: function (i, t, a, n) { var r, l = this; l.uploadExtra(), r = e.extend({ xhr: function () { var i = e.ajaxSettings.xhr(); return l.initXhr(i, 98) }, url: l.uploadUrl, type: "POST", dataType: "json", data: l.formdata, cache: !1, processData: !1, contentType: !1, beforeSend: i, success: t, complete: a, error: n }, l.ajaxSettings), l.ajaxRequests.push(e.ajax(r)) }, initUploadSuccess: function (i, a, n) { var r, l, o, s, d, p, c, f = this; "object" != typeof i || e.isEmptyObject(i) || void 0 !== i.initialPreview && i.initialPreview.length > 0 && (f.hasInitData = !0, d = i.initialPreview || [], p = i.initialPreviewConfig || [], c = i.initialPreviewThumbTags || [], r = void 0 === i.append || i.append ? !0 : !1, f.overwriteInitial = !1, void 0 !== a && n ? (o = t.add(f.id, d, p[0], c[0], r), l = t.get(f.id, o, !1), s = e(l).hide(), a.after(s).fadeOut("slow", function () { s.fadeIn("slow").css("display:inline-block"), f.initPreviewDeletes() })) : n ? (f.uploadCache.content.push(d[0]), f.uploadCache.config.push(p[0]), f.uploadCache.tags.push(c[0]), f.uploadCache.append = r) : (t.set(f.id, d, p, c, r), f.initPreview(), f.initPreviewDeletes())) }, uploadSingle: function (i, n, r) { var l, o, d, p, c, f, u, v, h, m, g = this, w = g.getFileStack().length, b = new FormData, x = g.previewInitId + "-" + i, C = e("#" + x + ":not(.file-preview-initial)"), y = C.find(".kv-file-upload"), E = C.find(".kv-file-remove"), $ = C.find(".file-upload-indicator"), T = g.fileActionSettings, F = g.filestack.length > 0 || !e.isEmptyObject(g.uploadExtraData), k = { id: x, index: i }; g.formdata = b, 0 === w || !F || y.hasClass("disabled") || g.abort(k) || (d = function () { var e = g.$preview.find(a + ".file-uploading"); e.length > 0 || g.fileBatchCompleted || (g.fileBatchCompleted = !0, setTimeout(function () { t.set(g.id, g.uploadCache.content, g.uploadCache.config, g.uploadCache.tags, g.uploadCache.append), g.hasInitData && (g.initPreview(), g.initPreviewDeletes()), g.setProgress(100), g.unlock(), g.clearFileInput(), g.raise("filebatchuploadcomplete", [g.filestack, g.getExtraData()]) }, 100)) }, p = function (e, i) { $.html(T[e]), $.attr("title", T[i]) }, c = function () { !r || 0 === w || g.uploadPercent >= 100 || (g.uploadCount += 1, o = 80 + Math.ceil(20 * g.uploadCount / w), g.uploadPercent = Math.max(o, g.uploadPercent), g.setProgress(g.uploadPercent), g.initPreviewDeletes()) }, f = function () { y.removeAttr("disabled"), E.removeAttr("disabled"), C.removeClass("file-uploading") }, u = function (t) { l = g.getOutData(t), p("indicatorLoading", "indicatorLoadingTitle"), s(C, "file-uploading"), y.attr("disabled", !0), E.attr("disabled", !0), r || g.lock(), g.raise("filepreupload", [l, x, i]), k = e.extend(k, l), g.abort(k) && (t.abort(), g.setProgress(100)) }, v = function (t, a, n) { l = g.getOutData(n, t), k = e.extend(k, l), setTimeout(function () { void 0 === t.error ? (p("indicatorSuccess", "indicatorSuccessTitle"), y.hide(), E.hide(), g.filestack[i] = void 0, g.raise("fileuploaded", [l, x, i]), g.initUploadSuccess(t, C, r), r || g.resetFileStack()) : (p("indicatorError", "indicatorErrorTitle"), g.showUploadError(t.error, k)) }, 100) }, h = function () { setTimeout(function () { c(), f(), r ? d() : g.unlock(!1) }, 100) }, m = function (t, a, l) { var o = g.parseError(t, l, r ? n[i].name : null); p("indicatorError", "indicatorErrorTitle"), k = e.extend(k, g.getOutData(t)), g.showUploadError(o, k) }, b.append(g.uploadFileAttr, n[i]), b.append("file_id", i), g.ajaxSubmit(u, v, h, m)) }, uploadBatch: function () { var i, t, n, r, l, o, d, p, c = this, f = c.filestack, u = f.length, v = c.filestack.length > 0 || !e.isEmptyObject(c.uploadExtraData), h = {}; c.formdata = new FormData, 0 !== u && v && !c.abort(h) && (i = c.fileActionSettings, t = function (t, a, n) { var r = e("#" + c.previewInitId + "-" + t).find(".file-upload-indicator"); r.html(i[a]), r.attr("title", i[n]) }, r = function (i) { var t = e("#" + c.previewInitId + "-" + i + ":not(.file-preview-initial)"), a = t.find(".kv-file-upload"), n = t.find(".kv-file-delete"); t.removeClass("file-uploading"), a.removeAttr("disabled"), n.removeAttr("disabled") }, n = function () { e.each(f, function (e) { c.filestack[e] = void 0 }), c.clearFileInput() }, l = function (i) { c.lock(); var t = c.getOutData(i); c.showPreview && c.$preview.find(a).each(function () { var i = e(this), t = i.find(".kv-file-upload"), a = i.find(".kv-file-remove"); s(i, "file-uploading"), t.attr("disabled", !0), a.attr("disabled", !0) }), c.raise("filebatchpreupload", [t]), c.abort(t) && i.abort() }, o = function (i, l, o) { var s = c.getOutData(o, i), d = z(i.errorkeys) ? [] : i.errorkeys; void 0 === i.error || z(i.error) ? (c.raise("filebatchuploadsuccess", [s]), n(), c.showPreview ? (c.$preview.find(".kv-file-upload").hide(), c.$preview.find(".kv-file-remove").hide(), c.$preview.find(a).each(function () { var i = e(this), a = i.attr("data-fileindex"); t(a, "indicatorSuccess", "indicatorSuccessTitle"), r(a) }), c.initUploadSuccess(i)) : c.reset()) : (c.showPreview && (c.$preview.find(a).each(function () { var i = e(this), a = parseInt(i.attr("data-fileindex"), 10); return r(a), 0 === d.length ? void t(a, "indicatorError", "indicatorErrorTitle") : void (-1 !== e.inArray(a, d) ? t(a, "indicatorError", "indicatorErrorTitle") : (i.find(".kv-file-upload").hide(), i.find(".kv-file-remove").hide(), t(a, "indicatorSuccess", "indicatorSuccessTitle"), c.filestack[a] = void 0)) }), c.initUploadSuccess(i)), c.showUploadError(i.error, s, "filebatchuploaderror")) }, d = function () { c.setProgress(100), c.unlock(), c.raise("filebatchuploadcomplete", [c.filestack, c.getExtraData()]), c.clearFileInput() }, p = function (i, n, r) { var l = c.getOutData(i), o = c.parseError(i, r); c.showUploadError(o, l, "filebatchuploaderror"), c.uploadFileCount = u - 1, c.showPreview && (c.$preview.find(a).each(function () { var i = e(this), a = i.attr("data-fileindex"); i.removeClass("file-uploading"), void 0 !== c.filestack[a] && t(a, "indicatorError", "indicatorErrorTitle") }), c.$preview.find(a).removeClass("file-uploading"), c.$preview.find(a + " .kv-file-upload").removeAttr("disabled"), c.$preview.find(a + " .kv-file-delete").removeAttr("disabled")) }, e.each(f, function (e, i) { z(f[e]) || c.formdata.append(c.uploadFileAttr, i) }), c.ajaxSubmit(l, o, d, p)) }, uploadExtraOnly: function () { var e, i, t, a, n = this, r = {}; n.formdata = new FormData, n.abort(r) || (e = function (e) { n.lock(); var i = n.getOutData(e); n.raise("filebatchpreupload", [i]), n.setProgress(50), r.data = i, r.xhr = e, n.abort(r) && (e.abort(), n.setProgress(100)) }, i = function (e, i, t) { var a = n.getOutData(t, e); void 0 === e.error || z(e.error) ? (n.raise("filebatchuploadsuccess", [a]), n.clearFileInput(), n.initUploadSuccess(e)) : n.showUploadError(e.error, a, "filebatchuploaderror") }, t = function () { n.setProgress(100), n.unlock(), n.raise("filebatchuploadcomplete", [n.filestack, n.getExtraData()]), n.clearFileInput() }, a = function (e, i, t) { var a = n.getOutData(e), l = n.parseError(e, t); r.data = a, n.showUploadError(l, a, "filebatchuploaderror") }, n.ajaxSubmit(e, i, t, a)) }, hideFileIcon: function () { this.overwriteInitial && this.$captionContainer.find(".kv-caption-icon").hide() }, showFileIcon: function () { this.$captionContainer.find(".kv-caption-icon").show() }, resetErrors: function (e) { var i = this, t = i.$errorContainer; i.isError = !1, i.$container.removeClass("has-error"), t.html(""), e ? t.fadeOut("slow") : t.hide() }, showFolderError: function (e) { var i = this, t = i.$errorContainer; e && (t.html(i.msgFoldersNotAllowed.repl("{n}", e)), t.fadeIn(800), s(i.$container, "has-error"), i.raise("filefoldererror", [e])) }, showUploadError: function (e, i, t) {
             var a = this, n = a.$errorContainer, r = t || "fileuploaderror";
             return 0 === n.find("ul").length ? n.html("<ul><li>" + e + "</li></ul>") : n.find("ul").append("<li>" + e + "</li>"), n.fadeIn(800), a.raise(r, [i]), s(a.$container, "has-error"), !0
         }, showError: function (e, i, t) { var a = this, n = a.$errorContainer, r = t || "fileerror"; return i = i || {}, i.reader = a.reader, n.html(e), n.fadeIn(800), a.raise(r, [i]), a.isUploadable || a.clearFileInput(), s(a.$container, "has-error"), a.$btnUpload.attr("disabled", !0), !0 }, errorHandler: function (e, i) { var t = this, a = e.target.error; switch (a.code) { case a.NOT_FOUND_ERR: t.showError(t.msgFileNotFound.repl("{name}", i)); break; case a.SECURITY_ERR: t.showError(t.msgFileSecured.repl("{name}", i)); break; case a.NOT_READABLE_ERR: t.showError(t.msgFileNotReadable.repl("{name}", i)); break; case a.ABORT_ERR: t.showError(t.msgFilePreviewAborted.repl("{name}", i)); break; default: t.showError(t.msgFilePreviewError.repl("{name}", i)) } }, parseFileType: function (e) { var i, t, a, n, r = this; for (n = 0; n < L.length; n += 1) if (a = L[n], i = N(a, r.fileTypeSettings) ? r.fileTypeSettings[a] : R[a], t = i(e.type, e.name) ? a : "", !z(t)) return t; return "other" }, previewDefault: function (i, t, a) { if (this.showPreview) { var n = this, r = H.createObjectURL(i), l = e("#" + t), o = n.previewSettings.other, s = n.renderFileFooter(i.name, o.width), d = n.getPreviewTemplate("other"), p = t.slice(t.lastIndexOf("-") + 1), c = ""; a === !0 && (c = " btn disabled", s += '<div class="file-other-error text-danger"><i class="glyphicon glyphicon-exclamation-sign"></i></div>'), n.$preview.append("\n" + d.repl("{previewId}", t).repl("{frameClass}", c).repl("{fileindex}", p).repl("{caption}", n.slug(i.name)).repl("{width}", o.width).repl("{height}", o.height).repl("{type}", i.type).repl("{data}", r).repl("{footer}", s)), l.on("load", function () { H.revokeObjectURL(l.attr("data")) }) } }, previewFile: function (e, i, t, a) { if (this.showPreview) { var n, r, l, o, s = this, d = s.parseFileType(e), p = s.slug(e.name), c = s.allowedPreviewTypes, f = s.allowedPreviewMimeTypes, u = s.getPreviewTemplate(d), v = N(d, s.previewSettings) ? s.previewSettings[d] : O[d], h = parseInt(s.wrapTextLength, 10), m = s.wrapIndicator, g = c.indexOf(d) >= 0, w = z(f) || !z(f) && -1 !== f.indexOf(e.type), b = s.renderFileFooter(p, v.width), x = "", C = t.slice(t.lastIndexOf("-") + 1); g && w ? ("text" === d ? (r = _(i.target.result), H.revokeObjectURL(a), r.length > h && (l = "text-" + Z(), o = .75 * window.innerHeight, x = s.getLayoutTemplate("modal").repl("{id}", l).repl("{title}", p).repl("{height}", o).repl("{body}", r), m = m.repl("{title}", p).repl("{dialog}", "$('#" + l + "').modal('show')"), r = r.substring(0, h - 1) + m), n = u.repl("{previewId}", t).repl("{caption}", p).repl("{frameClass}", "").repl("{type}", e.type).repl("{width}", v.width).repl("{height}", v.height).repl("{data}", r).repl("{footer}", b).repl("{fileindex}", C) + x) : n = u.repl("{previewId}", t).repl("{caption}", p).repl("{frameClass}", "").repl("{type}", e.type).repl("{data}", a).repl("{width}", v.width).repl("{height}", v.height).repl("{footer}", b).repl("{fileindex}", C), s.$preview.append("\n" + n), s.autoSizeImage(t)) : s.previewDefault(e, t) } }, slugDefault: function (e) { return z(e) ? "" : e.split(/(\\|\/)/g).pop().replace(/[^\w\u00C0-\u017F\-.\\\/ ]+/g, "") }, getFileStack: function () { var e = this; return e.filestack.filter(function (e) { return void 0 !== e }) }, readFiles: function (i) { function t(e) { if (z(n.attr("multiple")) && (f = 1), e >= f) return a.isUploadable && a.filestack.length > 0 ? a.raise("filebatchselected", [a.getFileStack()]) : a.raise("filebatchselected", [i]), o.removeClass("loading"), void s.html(""); var m, g, w, b, x, C, y = v + e, E = c + "-" + y, $ = i[e], T = a.slug($.name), F = ($.size || 0) / 1e3, k = "", I = H.createObjectURL($), D = 0, P = a.allowedFileTypes, S = z(P) ? "" : P.join(", "), U = a.allowedFileExtensions, j = z(U) ? "" : U.join(", "); if (z(U) || (k = new RegExp("\\.(" + U.join("|") + ")$", "i")), F = F.toFixed(2), a.maxFileSize > 0 && F > a.maxFileSize) return b = a.msgSizeTooLarge.repl("{name}", T).repl("{size}", F).repl("{maxSize}", a.maxFileSize), void (a.isError = h(b, $, E, e)); if (!z(P) && B(P)) { for (w = 0; w < P.length; w += 1) x = P[w], g = u[x], C = void 0 !== g && g($.type, T), D += z(C) ? 0 : C.length; if (0 === D) return b = a.msgInvalidFileType.repl("{name}", T).repl("{types}", S), void (a.isError = h(b, $, E, e)) } return 0 !== D || z(U) || !B(U) || z(k) || (C = T.match(k), D += z(C) ? 0 : C.length, 0 !== D) ? a.showPreview ? (r.length > 0 && void 0 !== FileReader ? (s.html(d.repl("{index}", e + 1).repl("{files}", f)), o.addClass("loading"), l.onerror = function (e) { a.errorHandler(e, T) }, l.onload = function (e) { a.previewFile($, e, E, I), a.initFileActions() }, l.onloadend = function () { b = p.repl("{index}", e + 1).repl("{files}", f).repl("{percent}", 50).repl("{name}", T), setTimeout(function () { s.html(b), H.revokeObjectURL(I) }, 100), setTimeout(function () { t(e + 1), a.updateFileDetails(f) }, 100), a.raise("fileloaded", [$, E, e, l]) }, l.onprogress = function (i) { if (i.lengthComputable) { var t = i.loaded / i.total * 100, a = Math.ceil(t); b = p.repl("{index}", e + 1).repl("{files}", f).repl("{percent}", a).repl("{name}", T), setTimeout(function () { s.html(b) }, 100) } }, m = N("text", u) ? u.text : R.text, m($.type, T) ? l.readAsText($, a.textEncoding) : l.readAsArrayBuffer($)) : (a.previewDefault($, E), setTimeout(function () { t(e + 1), a.updateFileDetails(f) }, 100), a.raise("fileloaded", [$, E, e, l])), void a.filestack.push($)) : (a.filestack.push($), setTimeout(t(e + 1), 100), void a.raise("fileloaded", [$, E, e, l])) : (b = a.msgInvalidFileExtension.repl("{name}", T).repl("{extensions}", j), void (a.isError = h(b, $, E, e))) } this.reader = new FileReader; var a = this, n = a.$element, r = a.$preview, l = a.reader, o = a.$previewContainer, s = a.$previewStatus, d = a.msgLoading, p = a.msgProgress, c = a.previewInitId, f = i.length, u = a.fileTypeSettings, v = a.filestack.length, h = function (t, n, r, l) { var o = e.extend(a.getOutData({}, {}, i), { id: r, index: l }), s = { id: r, index: l, file: n, files: i }; return a.previewDefault(n, r, !0), a.isUploadable ? a.showUploadError(t, o) : a.showError(t, s) }; t(0), a.updateFileDetails(f, !1) }, updateFileDetails: function (e) { var i = this, a = i.msgSelected, n = i.$element, r = i.getFileStack(), l = n.val() || r.length && r[0].name || "", o = i.slug(l), s = i.isUploadable ? r.length : e, d = t.count(i.id) + s, p = s > 1 ? a.repl("{n}", d) : o; i.isError ? (i.$previewContainer.removeClass("loading"), i.$previewStatus.html(""), i.$captionContainer.find(".kv-caption-icon").hide()) : i.showFileIcon(), i.setCaption(p, i.isError), i.$container.removeClass("file-input-new file-input-ajax-new"), 1 === arguments.length && i.raise("fileselect", [e, o]), t.count(i.id) && i.initPreviewDeletes() }, change: function (i) { var a = this, n = a.$element; if (!a.isUploadable && z(n.val()) && a.fileInputCleared) return void (a.fileInputCleared = !1); a.fileInputCleared = !1; var r, l, o, s, d = a.$preview, p = arguments.length > 1, c = p ? i.originalEvent.dataTransfer.files : n.get(0).files, f = z(n.attr("multiple")), u = 0, v = 0, h = a.filestack.length, m = a.isUploadable, g = function (i, t, n, r) { var l = e.extend(a.getOutData({}, {}, c), { id: n, index: r }), o = { id: n, index: r, file: t, files: c }; return a.isUploadable ? a.showUploadError(i, l) : a.showError(i, o) }; if (a.reader = null, a.resetUpload(), a.hideFileIcon(), a.isUploadable && a.$container.find(".file-drop-zone ." + a.dropZoneTitleClass).remove(), p) for (r = []; c[u];) s = c[u], s.type || s.size % 4096 !== 0 ? r.push(s) : v++, u++; else r = void 0 === i.target.files ? i.target && i.target.value ? [{ name: i.target.value.replace(/^.+\\/, "") }] : [] : i.target.files; if (z(r) || 0 === r.length) return m || a.clear(), a.showFolderError(v), void a.raise("fileselectnone"); if (a.resetErrors(), !m || f && h > 0) { if (!a.overwriteInitial && t.count(a.id)) { var w = t.out(a.id); d.html(w.content), a.setCaption(w.caption), a.initPreviewDeletes() } else d.html(""); f && h > 0 && (a.filestack = []) } return o = a.isUploadable ? a.getFileStack().length + r.length : r.length, a.maxFileCount > 0 && o > a.maxFileCount ? (l = a.msgFilesTooMany.repl("{m}", a.maxFileCount).repl("{n}", o), a.isError = g(l, null, null, null), a.$captionContainer.find(".kv-caption-icon").hide(), a.$caption.html(a.msgValidationError), a.setEllipsis(), void a.$container.removeClass("file-input-new file-input-ajax-new")) : (a.isIE9 ? a.updateFileDetails(1) : a.readFiles(r), void a.showFolderError(v)) }, autoSizeImage: function (e) { var i, t, a, n = this, r = n.$preview, l = r.find("#" + e), o = l.find("img"); o.length && o.on("load", function () { i = l.width(), t = r.width(), i > t && (o.css("width", "100%"), l.css("width", "97%")), a = o.closest(".file-preview-frame").find(".file-caption-name"), a.length && (a.width(o.width()), a.attr("title", a.text())), n.raise("fileimageloaded", e) }) }, initCaption: function () { var e, i = this; return i.overwriteInitial ? (i.$caption.html(""), !1) : (e = i.initialCaption || "", i.setCaption(e), !0) }, setCaption: function (i, t) { var a, n, r = this, l = t || !1; if (l) a = e("<div>" + r.msgValidationError + "</div>").text(), n = '<span class="' + r.msgValidationErrorClass + '">' + r.msgValidationErrorIcon + a + "</span>"; else { if (z(i) || 0 === r.$caption.length) return; a = e("<div>" + i + "</div>").text(), n = r.getLayoutTemplate("icon") + a } r.$caption.html(n), r.$caption.attr("title", a), r.$captionContainer.find(".file-caption-ellipsis").attr("title", a), r.setEllipsis() }, initBrowse: function (e) { var i = this; i.$btnFile = e.find(".btn-file"), i.$btnFile.append(i.$element) }, createContainer: function () { var i = this, t = e(document.createElement("span")).attr({ "class": "file-input file-input-new" }).html(i.renderMain()); return i.$element.before(t), i.initBrowse(t), t }, refreshContainer: function () { var e = this, i = e.$container; i.before(e.$element), i.html(e.renderMain()), e.initBrowse(i) }, renderMain: function () { var e = this, i = e.isUploadable && e.dropZoneEnabled ? " file-drop-zone" : "", t = e.showPreview ? e.getLayoutTemplate("preview").repl("{class}", e.previewClass).repl("{dropClass}", i) : "", a = e.isDisabled ? e.captionClass + " file-caption-disabled" : e.captionClass, n = e.captionTemplate.repl("{class}", a + " kv-fileinput-caption"); return e.mainTemplate.repl("{class}", e.mainClass).repl("{preview}", t).repl("{caption}", n).repl("{upload}", e.renderUpload()).repl("{remove}", e.renderRemove()).repl("{cancel}", e.renderCancel()).repl("{browse}", e.renderBrowse()) }, renderBrowse: function () { var e = this, i = e.browseClass + " btn-file", t = ""; return e.isDisabled && (t = " disabled "), '<div class="' + i + '"' + t + "> " + e.browseIcon + e.browseLabel + " </div>" }, renderRemove: function () { var e = this, i = e.removeClass + " fileinput-remove fileinput-remove-button", t = ""; return e.showRemove ? (e.isDisabled && (t = " disabled "), '<button type="button" title="' + e.removeTitle + '" class="' + i + '"' + t + ">" + e.removeIcon + e.removeLabel + "</button>") : "" }, renderCancel: function () { var e = this, i = e.cancelClass + " fileinput-cancel fileinput-cancel-button"; return e.showCancel ? '<button type="button" title="' + e.cancelTitle + '" class="hide ' + i + '">' + e.cancelIcon + e.cancelLabel + "</button>" : "" }, renderUpload: function () { var e = this, i = e.uploadClass + " kv-fileinput-upload fileinput-upload-button", t = "", a = ""; return e.showUpload ? (e.isDisabled && (a = " disabled "), t = !e.isUploadable || e.isDisabled ? '<button type="submit" title="' + e.uploadTitle + '"class="' + i + '"' + a + ">" + e.uploadIcon + e.uploadLabel + "</button>" : '<a href="' + e.uploadUrl + '" title="' + e.uploadTitle + '" class="' + i + '"' + a + ">" + e.uploadIcon + e.uploadLabel + "</a>") : "" }
     }, e.fn.fileinput = function (t) { if (r() || i(9)) { var a = Array.apply(null, arguments); return a.shift(), this.each(function () { var i = e(this), n = i.data("fileinput"), r = "object" == typeof t && t; n || (n = new V(this, e.extend({}, e.fn.fileinput.defaults, r, e(this).data())), i.data("fileinput", n)), "string" == typeof t && n[t].apply(n, a) }) } }, e.fn.fileinput.defaults = { showCaption: !0, showPreview: !0, showRemove: !0, showUpload: !0, showCancel: !0, mainClass: "", previewClass: "", captionClass: "", mainTemplate: null, initialCaption: "", initialPreview: [], initialPreviewDelimiter: "*$$*", initialPreviewConfig: [], initialPreviewThumbTags: [], previewThumbTags: {}, initialPreviewShowDelete: !0, deleteUrl: "", deleteExtraData: {}, overwriteInitial: !0, layoutTemplates: j, previewTemplates: A, allowedPreviewTypes: L, allowedPreviewMimeTypes: null, allowedFileTypes: null, allowedFileExtensions: null, customLayoutTags: {}, customPreviewTags: {}, previewSettings: O, fileTypeSettings: R, previewFileIcon: '<i class="glyphicon glyphicon-file"></i>', browseIcon: '<i class="glyphicon glyphicon-folder-open"></i> &nbsp;', browseClass: "btn btn-primary", removeIcon: '<i class="glyphicon pwicons-bin"></i> ', removeClass: "btn btn-default", cancelIcon: '<i class="glyphicon glyphicon-ban-circle"></i> ', cancelClass: "btn btn-default", uploadIcon: '<i class="glyphicon glyphicon-upload"></i> ', uploadClass: "btn btn-default", uploadUrl: null, uploadAsync: !0, uploadExtraData: {}, maxFileSize: 0, minFileCount: 0, maxFileCount: 0, msgValidationErrorClass: "text-danger", msgValidationErrorIcon: '<i class="glyphicon glyphicon-exclamation-sign"></i> ', msgErrorClass: "file-error-message", progressClass: "progress-bar progress-bar-success progress-bar-striped active", progressCompleteClass: "progress-bar progress-bar-success", previewFileType: "image", wrapTextLength: 250, wrapIndicator: ' <span class="wrap-indicator" title="{title}" onclick="{dialog}">[&hellip;]</span>', elCaptionContainer: null, elCaptionText: null, elPreviewContainer: null, elPreviewImage: null, elPreviewStatus: null, elErrorContainer: null, slugCallback: null, dropZoneEnabled: !0, dropZoneTitleClass: "file-drop-zone-title", fileActionSettings: {}, otherActionButtons: "", textEncoding: "UTF-8", ajaxSettings: {}, ajaxDeleteSettings: {}, showAjaxErrorDetails: !0 }, e.fn.fileinput.locales = {}, e.fn.fileinput.locales.en = { fileSingle: "file", filePlural: "files", browseLabel: "Browse &hellip;", removeLabel: "Remove", removeTitle: "Clear selected files", cancelLabel: "Cancel", cancelTitle: "Abort ongoing upload", uploadLabel: "Upload", uploadTitle: "Upload selected files", msgSizeTooLarge: 'File "{name}" (<b>{size} KB</b>) exceeds maximum allowed upload size of <b>{maxSize} KB</b>. Please retry your upload!', msgFilesTooLess: "You must select at least <b>{n}</b> {files} to upload. Please retry your upload!", msgFilesTooMany: "Number of files selected for upload <b>({n})</b> exceeds maximum allowed limit of <b>{m}</b>. Please retry your upload!", msgFileNotFound: 'File "{name}" not found!', msgFileSecured: 'Security restrictions prevent reading the file "{name}".', msgFileNotReadable: 'File "{name}" is not readable.', msgFilePreviewAborted: 'File preview aborted for "{name}".', msgFilePreviewError: 'An error occurred while reading the file "{name}".', msgInvalidFileType: 'Invalid type for file "{name}". Only "{types}" files are supported.', msgInvalidFileExtension: 'Invalid extension for file "{name}". Only "{extensions}" files are supported.', msgValidationError: "File Upload Error", msgLoading: "Loading file {index} of {files} &hellip;", msgProgress: "Loading file {index} of {files} - {name} - {percent}% completed.", msgSelected: "{n} files selected", msgFoldersNotAllowed: "Drag & drop files only! {n} folder(s) dropped were skipped.", dropZoneTitle: "Drag & drop files here &hellip;" }, e.extend(e.fn.fileinput.defaults, e.fn.fileinput.locales.en), e.fn.fileinput.Constructor = V, e(document).ready(function () { var i = e("input.file[type=file]"), t = i.attr("type") ? i.length : 0; t > 0 && i.fileinput() })
 }(window.jQuery);

/*!
 * FileInput Italian Translation
 *
 * Author: Lorenzo Milesi <maxxer@yetopen.it>
 *
 * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or
 * any HTML markup tags in the messages must not be converted or translated.
 *
 * @see http://github.com/kartik-v/bootstrap-fileinput
 *
 * NOTE: this file must be saved in UTF-8 encoding.
 */
(function ($) {
    "use strict";

    $.fn.fileinput.locales.it = {
        fileSingle: 'file',
        filePlural: 'file',
        browseLabel: 'Sfoglia&hellip;',
        removeLabel: 'Rimuovi',
        removeTitle: 'Rimuovi i file selezionati',
        cancelLabel: 'Annulla',
        cancelTitle: 'Annulla i caricamenti in corso',
        uploadLabel: 'Carica',
        uploadTitle: 'Carica i file selezionati',
        msgSizeTooLarge: 'Il file "{name}" (<b>{size} KB</b>) eccede la dimensione massima di caricamento di <b>{maxSize} KB</b>. Per favore correggi il file e riprova!',
        msgFilesTooLess: 'Devi selezionare almeno <b>{n}</b> {files} da caricare. Per favore correggi e riprova!',
        msgFilesTooMany: 'Il numero di file selezionati per il caricamento <b>({n})</b> eccede il numero massimo di file accettati <b>{m}</b>. Per favore correggi e riprova!',
        msgFileNotFound: 'File "{name}" non trovato!',
        msgFileSecured: 'Restrizioni di sicurezza impediscono la lettura del file "{name}".',
        msgFileNotReadable: 'Il file "{name}" non \xE8 leggibile.',
        msgFilePreviewAborted: 'Generazione anteprima per "{name}" annullata.',
        msgFilePreviewError: 'Errore durante la lettura del file "{name}".',
        msgInvalidFileType: 'Tipo non valido per il file "{name}". Sono ammessi solo file di tipo "{types}".',
        msgInvalidFileExtension: 'Estensione non valida per il file "{name}". Sono ammessi solo file con estensione "{extensions}".',
        msgValidationError: 'Errore caricamento file',
        msgLoading: 'Caricamento file {index} di {files}&hellip;',
        msgProgress: 'Caricamento file {index} di {files} - {name} - {percent}% completato.',
        msgSelected: '{n} file selezionati',
        msgFoldersNotAllowed: 'Trascina solo file! Ignorata/e {n} cartella/e.',
        dropZoneTitle: 'Trascina i file qui&hellip;'
    };

    $.extend($.fn.fileinput.defaults, $.fn.fileinput.locales.it);
})(window.jQuery);

/*
 * jQuery.bind-first library v0.2.3
 * Copyright (c) 2013 Vladimir Zhuravlev
 *
 * Released under MIT License
 * @license
 *
 * Date: Thu Feb  6 10:13:59 ICT 2014
 **/

(function ($) {
    var splitVersion = $.fn.jquery.split(".");
    var major = parseInt(splitVersion[0]);
    var minor = parseInt(splitVersion[1]);

    var JQ_LT_17 = (major < 1) || (major == 1 && minor < 7);

    function eventsData($el) {
        return JQ_LT_17 ? $el.data('events') : $._data($el[0]).events;
    }

    function moveHandlerToTop($el, eventName, isDelegated) {
        var data = eventsData($el);
        var events = data[eventName];

        if (!JQ_LT_17) {
            var handler = isDelegated ? events.splice(events.delegateCount - 1, 1)[0] : events.pop();
            events.splice(isDelegated ? 0 : (events.delegateCount || 0), 0, handler);

            return;
        }

        if (isDelegated) {
            data.live.unshift(data.live.pop());
        } else {
            events.unshift(events.pop());
        }
    }

    function moveEventHandlers($elems, eventsString, isDelegate) {
        var events = eventsString.split(/\s+/);
        $elems.each(function () {
            for (var i = 0; i < events.length; ++i) {
                var pureEventName = $.trim(events[i]).match(/[^\.]+/i)[0];
                try {
                    moveHandlerToTop($(this), pureEventName, isDelegate);
                } catch(e) {
                    console.warn(e);
                }
            }
        });
    }

    function makeMethod(methodName) {
        $.fn[methodName + 'First'] = function () {
            var args = $.makeArray(arguments);
            var eventsString = args.shift();

            if (eventsString) {
                $.fn[methodName].apply(this, arguments);
                moveEventHandlers(this, eventsString);
            }

            return this;
        }
    }

    // bind
    makeMethod('bind');

    // one
    makeMethod('one');

    // delegate
    $.fn.delegateFirst = function () {
        var args = $.makeArray(arguments);
        var eventsString = args[1];

        if (eventsString) {
            args.splice(0, 2);
            $.fn.delegate.apply(this, arguments);
            moveEventHandlers(this, eventsString, true);
        }

        return this;
    };

    // live
    $.fn.liveFirst = function () {
        var args = $.makeArray(arguments);

        // live = delegate to the document
        args.unshift(this.selector);
        $.fn.delegateFirst.apply($(document), args);

        return this;
    };

    // on (jquery >= 1.7)
    if (!JQ_LT_17) {
        $.fn.onFirst = function (types, selector) {
            var $el = $(this);
            var isDelegated = typeof selector === 'string';

            $.fn.on.apply($el, arguments);

            // events map
            if (typeof types === 'object') {
                for (type in types)
                    if (types.hasOwnProperty(type)) {
                        moveEventHandlers($el, type, isDelegated);
                    }
            } else if (typeof types === 'string') {
                moveEventHandlers($el, types, isDelegated);
            }

            return $el;
        };
    }
})(jQuery);

function bindForm(dialog, onSuccess, onError) {
    var form = (dialog.is("form")) ? dialog : $('form', dialog);
    form.removeData("validator");
    form.removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse(form);
    CheckValidations();
    form.unbind("submit.modalsubmit");
    form.bindFirst("submit.modalsubmit", function () {
        if (form.valid()) {
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (result) {
                    if (result.Success) {
                        onSuccess();
                        if (result.MessageTitle == "reloadPage") {
                            location.reload();
                            return;
                        }
                        toastr.success(result.MessageBody, result.MessageTitle);

                        //Refresh
                        if (result.UpdateTargetId == "") location.href = result.UpdateTargetActionURL;
                        else $(result.UpdateTargetId).load(result.UpdateTargetActionURL, function () {
                            if (result.PreselectLastElementFromTable != "") $(result.PreselectLastElementFromTable + " tbody tr:last").click();
                        });

                        //location.reload();
                    } else {
                        onError(result);
                        toastr.error(result.MessageBody, result.MessageTitle);
                        bindForm(dialog, onSuccess, onError);
                    }
                }
            });
        }
        return false;
    }
);
}

$(document).ready(function () {
    $("body").show();

    var requiresLoading = $(".requires-loading").length > 0;
    if (requiresLoading)
        $.blockUI({ message: "Attendere..." });
    $(document).loadingManager("startDeferred", function () {
        $(".select2-container").filter(function (i, el) { return $(el).parents(".form-group").find(".field-validation-error").length > 0 }).find(".select2-selection").addClass("input-validation-error");

        $(".tab-content").each(function (i, el) {
            var $el = $(el);
            var errorElement = $el.find(".tab-pane").find(".input-validation-error").first();
            if (typeof (errorElement) !== "undefined" && errorElement.length > 0) {
                var errorPanelId = errorElement.parents(".tab-pane").attr("id");
                $el.siblings(".nav-tabs").find("[href=\"#" + errorPanelId + "\"]").click();
                errorElement.focus();
                location.href = "#";
                if (errorElement.attr("id") != "undefined")
                    location.href = "#" + errorElement.attr("id");
            }
        });
        if (requiresLoading)
            $.unblockUI();

        $("document").trigger("formInitialized");
    });
});

$(function () {
    $(document).ready(function () {
        $(".confirmable").click(function (e) {
            if (!confirm($(this).data("confirm-message"))) {
                e.preventDefault();
            }
        });
    })
})

function enableHiddenFieldsSubmission() {
    $("form").submit(function () {
        enableHiddenFields($(this));
    });
}

function enableHiddenFields(form) {

    // Get list of visible ID values, because we do not need to duplicate them
    var visibleIDs = [];
    form.find("input, select, textarea").each(function (i, visibleInput) {
        var visibleID = $(visibleInput).attr("id");
        if (visibleID !== undefined) {
            visibleIDs.push(visibleID);
        }
    });
    form.find("table").each(function (j, table) {
        if (!$.fn.DataTable.isDataTable(table)) return;
        $(table).DataTable().$("input, select, textarea").each(function (k, input) {
            var type = $(input).attr("type");
            var useInput;
            if (type === "checkbox" || type === "radio") {

                // Must see if box is checked before converting to hidden type
                useInput = $(input).prop("checked");
            }
            else {

                // All other input types are automatically converted
                useInput = true;
            }
            if (useInput) {
                var newID = $(input).attr("id");

                // Only process the newID if it is not already a visible input
                if (visibleIDs.indexOf(newID) === -1) {

                    // Use hidden type so that the form inputs are not all visible
                    $(input).attr("type", "hidden");

                    // Append all inputs, including the ones from hidden pages, to the form
                    form.append(input);
                }
            }
        });
    });
}

//Adds custom parsers to datatables
$.fn.dataTable.ext.order['dom-text'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $('input', td).val();
    });
}

$.fn.dataTable.ext.order['dom-text-numeric'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $(td).val() * 1;
    });
}

$.fn.dataTable.ext.order['dom-input-numeric'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $('input', td).val() * 1;
    });
}

$.fn.dataTable.ext.order['dom-autonumeric'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $('input', td).autoNumeric("get") * 1;
    });
}

$.fn.dataTable.ext.order['dom-select'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $('select', td).val();
    });
}

$.fn.dataTable.ext.order['dom-checkbox'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $('input', td).prop('checked') ? '1' : '0';
    });
}

$.fn.dataTable.ext.order['dom-select2'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $('select', td).val();
    });
}

$.fn.dataTable.ext.order['dom-dataattr'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return $(td).attr("data-readable-value");
    });
}

$.fn.dataTable.ext.order['dom-dataattr-num'] = function (settings, col) {
    return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
        return parseFloat($(td).attr("data-readable-value"));
    });
}

function initDataTables(selector, options, oldApi) {
    var defaults = {
        "responsive": {
            details: {
                renderer: function (api, rowIdx, columns) {
               
                    var numdecqta = -1;


                    var data = $.map(columns, function (col, i) {
                        let displayVal = $(api.cell(rowIdx, i).node()).html();
                        try {
                            if ($(displayVal).data("numdecqta")) numdecqta = $(displayVal).data("numdecqta");
                        }
                        catch(e){}


                        return col.hidden ?
                            '<li data-dtr-index="' + i + '">' +
                                '<span class="dtr-title">' +
                                    col.title +
                                '</span> ' +
                                '<span class="dtr-data">' +
                                    displayVal +
                                '</span>' +
                            '</li>' :
                            '';
                    }).join('');

                    if (data) {
                        var ret = $('<ul data-dtr-index="' + rowIdx + '"/>').append(data);
                        if (numdecqta >= 0)
                            ret.find(".quantity-control .decimal" + numdecqta).autoNumeric('init', { vMin: 0, mDec: numdecqta });
                        return ret;

                    }
                    else return false;


                },
            }
        },
        stateSave: true,
        columnDefs: [{
            targets: "datatable-nosort",
            orderable: false
        }, {
            targets: "autonumeric-sort",
            orderDataType: "dom-autonumeric", type: "num"
        }, {
            targets: "input-sort",
            orderDataType: "dom-text", type: "string"
        }, {
            targets: "select-sort",
            orderDataType: "dom-select"
        }, {
            targets: "text-numeric-sort",
            orderDataType: "dom-text-numeric", type: "num"
        }, {
            targets: "input-numeric-sort",
            orderDataType: "dom-input-numeric", type: "num"
        }, {
            targets: "checkbox-sort",
            orderDataType: "dom-checkbox"
        }, {
            targets: "dataattr-sort",
            orderDataType: "dom-dataattr"
        }, {
            targets: "dataattr-sort-num",
            orderDataType: "dom-dataattr-num", type: "num"
        }, {
            targets: "select2-sort",
            orderDataType: "dom-select2", type: "string"
        }]
    };
    for (var attrname in options) { defaults[attrname] = options[attrname]; }
    enableHiddenFieldsSubmission();
    if(oldApi)
        return $(selector).dataTable(defaults);
    else
        return $(selector).DataTable(defaults);

}

jQuery.fn.extend({
    initDataTables: function (options) {
        var defaults = {
            stateSave: true,
            columnDefs: [{
                targets: "datatable-nosort",
                orderable: false
            }, {
                targets: "autonumeric-sort",
                orderDataType: "dom-autonumeric", type: "num"
            }, {
                targets: "input-sort",
                orderDataType: "dom-text", type: "inputField"
            }, {
                targets: "select-sort",
                orderDataType: "dom-select"
            }, {
                targets: "text-numeric-sort",
                orderDataType: "dom-text-numeric", type: "num"
            }, {
                targets: "input-numeric-sort",
                orderDataType: "dom-input-numeric", type: "num"
            }, {
                targets: "checkbox-sort",
                orderDataType: "dom-checkbox"
            }, {
                targets: "dataattr-sort",
                orderDataType: "dom-dataattr"
            }, {
                targets: "dataattr-sort-num",
                orderDataType: "dom-dataattr-num", type: "num"
            }, {
                targets: "select2-sort",
                orderDataType: "dom-select2", type: "select2"
            }]
        };
        for (var attrname in options) { defaults[attrname] = options[attrname]; }
        enableHiddenFieldsSubmission();
        return $(this).DataTable(defaults);
    }
});

jQuery.fn.dataTableExt.oApi.fnAddTr = function (oSettings, nTr, bRedraw) {
    if (typeof bRedraw === 'undefined') {
        bRedraw = true;
    }

    var nTds = nTr.getElementsByTagName('td');
    if (nTds.length !== oSettings.aoColumns.length) {
        alert('Warning: not adding new TR - columns and TD elements must match');
        return;
    }

    var aData = [];
    var aInvisible = [];
    var i;
    for (i = 0 ; i < nTds.length ; i++) {
        aData.push(nTds[i].innerHTML);
        if (!oSettings.aoColumns[i].bVisible) {
            aInvisible.push(i);
        }
    }

    /* Add the data and then replace DataTable's generated TR with ours */
    var iIndex = this.oApi._fnAddData(oSettings, aData);
    nTr._DT_RowIndex = iIndex;
    oSettings.aoData[iIndex].nTr = nTr;

    oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();

    // Hidding invisible columns
    for (i = (aInvisible.length - 1) ; i >= 0 ; i--) {
        oSettings.aoData[iIndex]._anHidden[i] = nTds[aInvisible[i]];
        nTr.removeChild(nTds[aInvisible[i]]);
    }

    // Redraw
    if (bRedraw) {
        this.oApi._fnReDraw(oSettings);
    }
};

ko.bindingHandlers.dataTablesSearch = {
    init: function (el, valueAccessor, bindingsAccessor, viewModel) {
        $(el).parent().attr("data-search", ko.unwrap(valueAccessor()));
    },
    update: function (el, valueAccessor, bindingsAccessor, viewModel) {
        $(el).parent().attr("data-search", ko.unwrap(valueAccessor()));
    }
}

ko.bindingHandlers.behavesLikeRadioButton = {
    update: function (el, valueAccessor, bindingsAccessor, viewModel) {
        $(el).parent().attr("data-search", ko.unwrap(valueAccessor()));
    }
}

ko.bindingHandlers.setIndexesInInputs = {
    init: function (el, valueAccessor, bindingsAccessor, viewModel) {
        $(el).find("[name *= '[-indexplaceholder-]']").each(function (i, e) {
            try { $(e).attr("data-placeholded-id", $(e).attr("id")); } catch (e) { }
            $(e).attr("data-placeholded-name", $(e).attr("name"));

            $(e).attr("name", $(e).attr("name").replace("-indexplaceholder-", ko.unwrap(valueAccessor())));
            try { $(e).attr("id", $(e).attr("id").replace("-indexplaceholder-", ko.unwrap(valueAccessor()))); } catch (e) { }
        });
    },
    update: function (el, valueAccessor, bindingsAccessor, viewModel) {
        $(el).find("[data-placeholded-name *= '[-indexplaceholder-]']").each(function (i, e) {
            $(e).attr("name", $(e).attr("data-placeholded-name").replace("-indexplaceholder-", ko.unwrap(valueAccessor())));
            try { $(e).attr("id", $(e).attr("data-placeholded-id").replace("-indexplaceholder-", ko.unwrap(valueAccessor()))); } catch (e) { }
        });
    }
}

ko.bindingHandlers.dataSearch = {
    init: function (el, valueAccessor, bindingsAccessor, viewModel) {
        $(el).parent().attr("data-filter", ko.unwrap(valueAccessor()));
    },
    update: function (el, valueAccessor, bindingsAccessor, viewModel) {
        $(el).parent().attr("data-filter", ko.unwrap(valueAccessor()));
    }
}

//Adds Autonumeric binding to KO
ko.bindingHandlers.autoNumeric = {
    init: function (el, valueAccessor, bindingsAccessor, viewModel) {
        var $el = $(el),
            bindings = bindingsAccessor(),
            settings = bindings.settings,
            value = valueAccessor();

        $el.autoNumeric(settings);
        $el.autoNumeric('set', parseFloat(ko.utils.unwrapObservable(value()), 10));
        $el.change(function () {
            value(parseFloat($el.autoNumeric('get'), 10));
        });
    },
    update: function (el, valueAccessor, bindingsAccessor, viewModel) {
        var $el = $(el),
            newValue = ko.utils.unwrapObservable(valueAccessor()),
            elementValue = $el.autoNumeric('get'),
            valueHasChanged = (newValue !== elementValue);

        if ((newValue === 0) && (elementValue !== 0) && (elementValue !== "0")) {
            valueHasChanged = true;
        }

        if (valueHasChanged) {
            if (elementValue === '')
                $el.autoNumeric('set', 0);
            else
                $el.autoNumeric('set', newValue);
        }
        if (valueHasChanged) {
            $el.autoNumeric('set', newValue);
            setTimeout(function () {
                $el.change()
            }, 0);
        }
    }
};

ko.bindingHandlers.select2 = {
    init: function (el, valueAccessor, allBindingsAccessor, viewModel) {
        ko.utils.domNodeDisposal.addDisposeCallback(el, function () {
            $(el).select2('destroy');
        });

        var allBindings = allBindingsAccessor(),
            select2 = ko.utils.unwrapObservable(allBindings.select2);

        $(el).select2(select2);
    },
    update: function (el, valueAccessor, allBindingsAccessor, viewModel) {
        var allBindings = allBindingsAccessor();

        if ("value" in allBindings) {
            if (allBindings.select2.multiple && allBindings.value().constructor !== Array) {
                $(el).select2("val", allBindings.value().split(","));
            }
            else {
                $(el).select2("val", allBindings.value());
            }
        } else if ("selectedOptions" in allBindings) {
            var converted = [];
            var textAccessor = function (value) { return value; };
            if ("optionsText" in allBindings) {
                textAccessor = function (value) {
                    var valueAccessor = function (item) { return item; }
                    if ("optionsValue" in allBindings) {
                        valueAccessor = function (item) { return item[allBindings.optionsValue]; }
                    }
                    var items = $.grep(allBindings.options(), function (e) { return valueAccessor(e) === value });
                    if (items.length === 0 || items.length > 1) {
                        return "UNKNOWN";
                    }
                    return items[0][allBindings.optionsText];
                }
            }
            $.each(allBindings.selectedOptions(), function (key, value) {
                converted.push({ id: value, text: textAccessor(value) });
            });
            $(el).select2("data", converted);
        }
    }
};

ko.bindingHandlers.oneToManyAsync = {
    init: function (el, valueAccessor, bindingsAccessor, viewModel) {
        var $el = $(el),
            bindings = bindingsAccessor(),
            settings = bindings.settings,
            value = valueAccessor();

        //$el.autoNumeric(settings);

        $el.OneToManyAsync(ko.unwrap(valueAccessor()));
        $el.change(function () {
            $el.val();
        });
    },

    //update: function (el, valueAccessor, bindingsAccessor, viewModel) {
    //    try {
    //        if ($(obj).data('select2')) {
    //            $(el).select2('destroy');
    //            $(el).OneToManyAsync(ko.unwrap(valueAccessor()));
    //        }
    //    }
    //    catch (e) { }
    //}
};

ko.bindingHandlers.select2ColorPicker = {
    init: function (el, valueAccessor, bindingsAccessor, viewModel) {
        var $el = $(el),
            bindings = bindingsAccessor(),
            settings = bindings.settings,
            value = valueAccessor();

        //$el.autoNumeric(settings);

        $el.Select2ColorPicker(ko.unwrap(valueAccessor()));
        $el.change(function () {
            $el.val();
        });
    },

    //update: function (el, valueAccessor, bindingsAccessor, viewModel) {
    //    try {
    //        if ($(obj).data('select2')) {
    //            $(el).select2('destroy');
    //            $(el).Select2ColorPicker(ko.unwrap(valueAccessor()));
    //        }
    //    }
    //    catch(e) { }
    //}
};

ko.observableArray.fn.subscribeArrayChanged = function (addCallback, deleteCallback) {
    var previousValue = undefined;
    this.subscribe(function (_previousValue) {
        previousValue = _previousValue.slice(0);
    }, undefined, 'beforeChange');
    this.subscribe(function (latestValue) {
        var editScript = ko.utils.compareArrays(previousValue, latestValue);
        for (var i = 0, j = editScript.length; i < j; i++) {
            switch (editScript[i].status) {
                case "retained":
                    break;
                case "deleted":
                    if (deleteCallback)
                        deleteCallback(editScript[i].value);
                    break;
                case "added":
                    if (addCallback)
                        addCallback(editScript[i].value);
                    break;
            }
        }
        previousValue = undefined;
    });
};

/* Initialise the table with the required column ordering data types */

jQuery.fn.extend({
    KODataTable: function (get_url, create_url, commit_url, __RequestVerificationToken) {
        var dfd = jQuery.Deferred();

        var element = $(this);



        var storage = {
            KO: {},
            Urls: {
                get: get_url,
                create: create_url,
                commit: commit_url,
                __RequestVerificationToken: __RequestVerificationToken
            }
        };

        $.getJSON(storage.Urls.get, {}, function (data) {
            storage.KO.viewModel = ko.mapping.fromJS(data["items"]);
            ko.utils.arrayForEach(storage.KO.viewModel(), function (t) {
                t.deleteId = ko.observable(Math.random().toString(36).substring(7));
            })

            storage.KO.viewModel().AddNew = function () {
                $.getJSON(storage.Urls.create, {}, function (data) {

                    //var ids = storage.DataTable.column(0).data();
                    //data.Id = (ids.length > 0) ? Math.max.apply(Math, ids.map(function (i, el) { return parseInt(i) })) + 1 : 1;
                    var obj = ko.mapping.fromJS(data);
                    obj.deleteId = ko.observable(Math.random().toString(36).substring(7));
                    storage.KO.viewModel.push(obj);
                    storage.DataTable.row.add(element.find("[data-row-id='" + data.Id + "']")).draw();
                });
            }


            //$("body").on("click", "[data-group-name='ProductMUConversionIsDefault']", function () {
            //    if ($(this).is(":checked"))
            //        $("[data-group-name='ProductMUConversionIsDefault']").not($(this)).prop("checked", false);
            //})
            storage.KO.viewModel().ResetIsDefaultCheckbox = function (item, e) {
                e.preventDefault();
                ko.utils.arrayForEach(storage.KO.viewModel(), function (t) {
                    if (t.deleteId() !== item.deleteId())
                        t.IsDefault(false);
                    else
                        t.IsDefault(true);
                })

                window.setTimeout(function () {
                    $("tr[data-row-delete-id='" + item.deleteId() + "']").find("input[type='checkbox']").prop("checked", true);
                }, 200);

                return false;

            }
            storage.KO.viewModel().Destroy = function (item) {
                storage.KO.viewModel.remove(item);
                storage.DataTable.row(element.find("[data-row-delete-id='" + item.deleteId() + "']")).remove().draw();
            }

            ko.applyBindings(storage.KO.viewModel, element.parent()[0]);
            storage.DataTable = element.initDataTables({});

            element.parent().on("keydown", "[type='search']", function () {
                storage.DataTable.rows().invalidate();
            })

            /*
            storage.KO.viewModel.subscribeArrayChanged(
                function (addedItem) {
                    storage.DataTable.row.add(addedItem).draw();
                },
                function (deletedItem) {
                    var rowIdx = dt.column(0).data().indexOf(deletedItem.id);
                    storage.DataTable.row(rowIdx).remove().draw();
                }
            );*/

            $(data["errors"]).each(function (i, el) {
                $("[name=\"" + el["name"] + "\"").addClass("input-validation-error");
            })

            element.data("KODataTable", storage);
            dfd.resolve();
            return storage;
        });

        $(document).loadingManager("addEvent", dfd.promise());
    }
});

jQuery.fn.DataTable.ext.type.search.inputField = function (data) {
    return $(data).not("[type='hidden']").map(function (i, el) {
        return $(el).val();
    }).get().join("")
};
jQuery.fn.DataTable.ext.type.search.select2 = function (data) {
    return $(data).find("span.select2").map(function (i, el) {
        return $(el).find(".select2-selection__rendered").html()
    }).get().join("")
};


$(function () {
    $.ajaxSetup({ cache: false });

    //Bind open modal form
    $("body").on("click", ".open-modal", function (e) {
        $('.tooltip:last').remove();
        e.stopPropagation();
        e.preventDefault();
        $.get(this.href, null)
            .done(function (response, status, jqXhr) { //success
                $('#modalFormContent').html(response);
                $(function () { $("[data-toggle='tooltip']").tooltip({ container: 'body' }); });
            })
            .fail(function (response, status, jqXhr) { //error

                //replace with official 404 / 500 error
                console.log(response);
                $('#modalFormContent').load("/Error/UnknownModalError");
            })
            .always(function (response, status, jqXhr) { //complete
                $('#modalForm').modal({
                    backdrop: 'static',
                    keyboard: true,
                }, 'show');

                bindForm($('#modalFormContent'), function () {
                    $('#modalForm').modal('hide');
                    $('#modalFormContent').html("");
                }, function (result) {
                    $('#modalFormContent').html(result.PartialViewHtml);
                });
                //$('#modalForm').attr("style", "display:block")
                let modal = new bootstrap.Modal('#modalForm')
                modal.show()

            });
    });
});


$(function () {
    $.ajaxSetup({ cache: false });

    //Bind open modal form
    $("body").on("click", ".open-collapsible", function (e) {
        var el = $(this);
        var container = el.data("container");
        var parent = (el.data("override-element") == null) ? el.parents(".panel") : $("#"+el.data("override-element")).parents(".panel");
        var insertedObj = null;
        //Rimuovo la classe in altrimenti la gestione del collapse non funziona
        try {
            parent.children(".panel-body").removeClass("in");
        } catch (e) {
        }

        parent.children(".panel-body").collapse("hide");
        $(parent).block({ message: null, overlayCSS: { cursor: "default" } });

        $(".select2").each(function (sel_i, sel_el) { try { $(sel_el).select2("close"); } catch (e) { } });
        $('.tooltip:last').remove();
        e.stopPropagation();
        e.preventDefault();
        $.get(this.href, null) 
            .done(function (response, status, jqXhr) { //success
                insertedObj = $(response).appendTo(container);

                $(function () { $("[data-toggle='tooltip']").tooltip({ container: 'body' }); });
            })
            .fail(function (response, status, jqXhr) { //error

                //replace with official 404 / 500 error
                console.log(response);
                alert("Non è stato possibile caricare la maschera selezionata!");
            })
            .always(function (response, status, jqXhr) { //complete
                insertedObj.find(".collapsible-cancel").on("click", function () {
                    $(parent).unblock();
                    $(parent).children(".panel-body").collapse("show");

                    $("select.select2").each(function (sel_i, sel_el) { try { $(sel_el).select2("close"); } catch (e) { } });
                    $("[data-toggle='tooltip']").tooltip("hide");

                    insertedObj.remove();
                });
                bindForm(insertedObj, function () {
                    $(parent).unblock();
                    $(parent).children(".panel-body").collapse("show");
                    insertedObj.tooltip('hide');

                    $("select.select2").each(function (sel_i, sel_el) { try { $(sel_el).select2("close"); } catch (e) { } });
                    $("[data-toggle='tooltip']").tooltip("hide");

                    insertedObj.remove();
                }, function (result) {
                    $("select.select2").each(function (sel_i, sel_el) { try { $(sel_el).select2("close"); } catch (e) { } });
                    $("[data-toggle='tooltip']").tooltip("hide");

                    insertedObj.html($(result.PartialViewHtml).html());
                    insertedObj.find(".collapsible-cancel").on("click", function () {
                        $(parent).unblock();
                        $(parent).children(".panel-body").collapse("show");
                        insertedObj.remove();
                    });
                });
        });
   
    });
});

function InitFileUploader(id, uploadUrl, disabled, maxFileCount) {
    setTimeout(function () {
        idGlobals = id;
        var upload_box = $("#upload-" + id);
        var data_box = $("#" + id);
        //var hidden_data_box = $("#hidden" + id);
        var data_box_input = $("input[id='" + id + "']");
        //if (data_box.val() == "") data_box.val('{"initialPreview":[],"initialPreviewConfig":[]}');
        if (data_box.val() == "") data_box.val(data_box_input.val());
        var field_data = JSON.parse(data_box.val());
        //If MaxFileCount 1 file must be overvritten
        var auto_replace = false;
        if (maxFileCount == 1) auto_replace = true;

        upload_box.fileinput({
            initialPreview: field_data["initialPreview"],
            initialPreviewConfig: field_data["initialPreviewConfig"],
            uploadUrl: uploadUrl,
            uploadAsync: false,
            overwriteInitial: false,
            showCaption: false,
            showUpload: false,
            showRemove: false,
            autoReplace: auto_replace,
            maxFileSize: 25000,
            minFileCount: 1,
            dropZoneEnabled: !disabled,
            maxFileCount: maxFileCount //50
        });
        upload_box.on('fileuploaded filebatchuploadsuccess', function (event, data, previewId, index) {
            var d = JSON.parse(data_box.val());

                d["initialPreview"] = d["initialPreview"].concat(data.response.initialPreview);
                d["initialPreviewConfig"] = d["initialPreviewConfig"].concat(data.response.initialPreviewConfig);
           
            data_box.val(JSON.stringify(d));
            data_box_input.val(JSON.stringify(d));
        });
        upload_box.on("filebatchselected", function (event, files) {
            
            var hoFile=controlliDiDrop(event, files); //controlla se il tipo di file è coerente con il tipo di input 
            self.filestack = files // devo ricopiare nel filestack l'array di file corretti dalla funzione sopra
            if (hoFile)
                upload_box.fileinput("upload");
            //else {
            //    self.clear();
            //}
            // trigger upload method immediately after files are selected
        });
        //upload_box.on('fileloaded', function (event, file, previewId, index, reader) {
        //    upload_box.fileinput('upload');
        //});

        upload_box.on('filedeleted', function (event, key) {
            var d = JSON.parse(data_box.val());
            d["initialPreview"] = $.grep(d["initialPreview"], function (value) {
                return value.indexOf(key) < 0;
            });
            d["initialPreviewConfig"] = $.grep(d["initialPreviewConfig"], function (value) {
                return value.key != key;
            });
            data_box.val(JSON.stringify(d));
            data_box_input.val(JSON.stringify(d));
        });

        if (disabled) {
            data_box.parent().parent().find(".file-actions, .file-input .btn, .fileinput-remove").remove();
            //data_box.parent().parent().find(".file-preview, .file-input-ajax-new, .file-actions, .file-input .btn, .fileinput-remove").attr("readonly", "true");
            
            //$(".file-preview").attr("readonly", true);
            //$("#RowPdfCampagna").css("display", "block");


        }
    }, 2000);
}

function controlliDiDrop(e,files)
{
    var i = 0;
    var tipo;
    var mimeType;
    var divName;

    while (i < files.length)
    {
        tipo = files[i].type;
        mimeType = tipo.substring(0, tipo.indexOf('/')); //Prendo la prima parte del tipo, contiene image, video, application ecc...
        extension = tipo.substring(tipo.indexOf('/') + 1, tipo.length); //seconda parte del tipo contiene l'estensione del file
        divName = e.target.parentNode.parentNode.parentNode.id;
        //L'upload da Files (Orders Attachments) permette tutte le tipologie di file
        if (divName == "Files") {
            i++;
            continue;
        }
        if (mimeType == "image" && (divName == "Images" || divName == "ImageBanner" || divName == "ImageShowCase" || divName == "ImageProductStatus")) {
            i++;
            continue;
        }
        else if (mimeType == "video" && divName == "Videos") {
            i++;
            continue;
        }
        else if (extension == "pdf" && divName == "PDFs") {
            i++;
            continue;
        }
        else 
            files.splice(i, 1); //rimuovo l'oggetto dall'array
    }
    //e.target.files = files;

    if (files.length < 1)
        return false;
    else
        return true;
}
/*!
 * Bootstrap Colorpicker
 * http://mjolnic.github.io/bootstrap-colorpicker/
 *
 * Originally written by (c) 2012 Stefan Petre
 * Licensed under the Apache License v2.0
 * http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 * @todo Update DOCS
 */

(function(factory) {
    "use strict";
    /*if (typeof exports === 'object') {
      module.exports = factory(window.jQuery);
    } else if (typeof define === 'function' && define.amd) {
      define(['jquery'], factory);
    } else */if (window.jQuery && !window.jQuery.fn.colorpicker) {
      factory(window.jQuery);
    }
  }
  (function($) {
    'use strict';

    // Color object
    var Color = function(val, customColors) {
      this.value = {
        h: 0,
        s: 0,
        b: 0,
        a: 1
      };
      this.origFormat = null; // original string format
      if (customColors) {
        $.extend(this.colors, customColors);
      }
      if (val) {
        if (val.toLowerCase !== undefined) {

          // cast to string
          val = val + '';
          this.setColor(val);
        } else if (val.h !== undefined) {
          this.value = val;
        }
      }
    };

    Color.prototype = {
      constructor: Color,

      // 140 predefined colors from the HTML Colors spec
      colors: {
        "aliceblue": "#f0f8ff",
        "antiquewhite": "#faebd7",
        "aqua": "#00ffff",
        "aquamarine": "#7fffd4",
        "azure": "#f0ffff",
        "beige": "#f5f5dc",
        "bisque": "#ffe4c4",
        "black": "#000000",
        "blanchedalmond": "#ffebcd",
        "blue": "#0000ff",
        "blueviolet": "#8a2be2",
        "brown": "#a52a2a",
        "burlywood": "#deb887",
        "cadetblue": "#5f9ea0",
        "chartreuse": "#7fff00",
        "chocolate": "#d2691e",
        "coral": "#ff7f50",
        "cornflowerblue": "#6495ed",
        "cornsilk": "#fff8dc",
        "crimson": "#dc143c",
        "cyan": "#00ffff",
        "darkblue": "#00008b",
        "darkcyan": "#008b8b",
        "darkgoldenrod": "#b8860b",
        "darkgray": "#a9a9a9",
        "darkgreen": "#006400",
        "darkkhaki": "#bdb76b",
        "darkmagenta": "#8b008b",
        "darkolivegreen": "#556b2f",
        "darkorange": "#ff8c00",
        "darkorchid": "#9932cc",
        "darkred": "#8b0000",
        "darksalmon": "#e9967a",
        "darkseagreen": "#8fbc8f",
        "darkslateblue": "#483d8b",
        "darkslategray": "#2f4f4f",
        "darkturquoise": "#00ced1",
        "darkviolet": "#9400d3",
        "deeppink": "#ff1493",
        "deepskyblue": "#00bfff",
        "dimgray": "#696969",
        "dodgerblue": "#1e90ff",
        "firebrick": "#b22222",
        "floralwhite": "#fffaf0",
        "forestgreen": "#228b22",
        "fuchsia": "#ff00ff",
        "gainsboro": "#dcdcdc",
        "ghostwhite": "#f8f8ff",
        "gold": "#ffd700",
        "goldenrod": "#daa520",
        "gray": "#808080",
        "green": "#008000",
        "greenyellow": "#adff2f",
        "honeydew": "#f0fff0",
        "hotpink": "#ff69b4",
        "indianred": "#cd5c5c",
        "indigo": "#4b0082",
        "ivory": "#fffff0",
        "khaki": "#f0e68c",
        "lavender": "#e6e6fa",
        "lavenderblush": "#fff0f5",
        "lawngreen": "#7cfc00",
        "lemonchiffon": "#fffacd",
        "lightblue": "#add8e6",
        "lightcoral": "#f08080",
        "lightcyan": "#e0ffff",
        "lightgoldenrodyellow": "#fafad2",
        "lightgrey": "#d3d3d3",
        "lightgreen": "#90ee90",
        "lightpink": "#ffb6c1",
        "lightsalmon": "#ffa07a",
        "lightseagreen": "#20b2aa",
        "lightskyblue": "#87cefa",
        "lightslategray": "#778899",
        "lightsteelblue": "#b0c4de",
        "lightyellow": "#ffffe0",
        "lime": "#00ff00",
        "limegreen": "#32cd32",
        "linen": "#faf0e6",
        "magenta": "#ff00ff",
        "maroon": "#800000",
        "mediumaquamarine": "#66cdaa",
        "mediumblue": "#0000cd",
        "mediumorchid": "#ba55d3",
        "mediumpurple": "#9370d8",
        "mediumseagreen": "#3cb371",
        "mediumslateblue": "#7b68ee",
        "mediumspringgreen": "#00fa9a",
        "mediumturquoise": "#48d1cc",
        "mediumvioletred": "#c71585",
        "midnightblue": "#191970",
        "mintcream": "#f5fffa",
        "mistyrose": "#ffe4e1",
        "moccasin": "#ffe4b5",
        "navajowhite": "#ffdead",
        "navy": "#000080",
        "oldlace": "#fdf5e6",
        "olive": "#808000",
        "olivedrab": "#6b8e23",
        "orange": "#ffa500",
        "orangered": "#ff4500",
        "orchid": "#da70d6",
        "palegoldenrod": "#eee8aa",
        "palegreen": "#98fb98",
        "paleturquoise": "#afeeee",
        "palevioletred": "#d87093",
        "papayawhip": "#ffefd5",
        "peachpuff": "#ffdab9",
        "peru": "#cd853f",
        "pink": "#ffc0cb",
        "plum": "#dda0dd",
        "powderblue": "#b0e0e6",
        "purple": "#800080",
        "red": "#ff0000",
        "rosybrown": "#bc8f8f",
        "royalblue": "#4169e1",
        "saddlebrown": "#8b4513",
        "salmon": "#fa8072",
        "sandybrown": "#f4a460",
        "seagreen": "#2e8b57",
        "seashell": "#fff5ee",
        "sienna": "#a0522d",
        "silver": "#c0c0c0",
        "skyblue": "#87ceeb",
        "slateblue": "#6a5acd",
        "slategray": "#708090",
        "snow": "#fffafa",
        "springgreen": "#00ff7f",
        "steelblue": "#4682b4",
        "tan": "#d2b48c",
        "teal": "#008080",
        "thistle": "#d8bfd8",
        "tomato": "#ff6347",
        "turquoise": "#40e0d0",
        "violet": "#ee82ee",
        "wheat": "#f5deb3",
        "white": "#ffffff",
        "whitesmoke": "#f5f5f5",
        "yellow": "#ffff00",
        "yellowgreen": "#9acd32",
        "transparent": "transparent"
      },
      _sanitizeNumber: function(val) {
        if (typeof val === 'number') {
          return val;
        }
        if (isNaN(val) || (val === null) || (val === '') || (val === undefined)) {
          return 1;
        }
        if (val.toLowerCase !== undefined) {
          return parseFloat(val);
        }
        return 1;
      },
      isTransparent: function(strVal) {
        if (!strVal) {
          return false;
        }
        strVal = strVal.toLowerCase().trim();
        return (strVal === 'transparent') || (strVal.match(/#?00000000/)) || (strVal.match(/(rgba|hsla)\(0,0,0,0?\.?0\)/));
      },
      rgbaIsTransparent: function(rgba) {
        return ((rgba.r === 0) && (rgba.g === 0) && (rgba.b === 0) && (rgba.a === 0));
      },

      //parse a string to HSB
      setColor: function(strVal) {
        strVal = strVal.toLowerCase().trim();
        if (strVal) {
          if (this.isTransparent(strVal)) {
            this.value = {
              h: 0,
              s: 0,
              b: 0,
              a: 0
            };
          } else {
            this.value = this.stringToHSB(strVal) || {
              h: 0,
              s: 0,
              b: 0,
              a: 1
            }; // if parser fails, defaults to black
          }
        }
      },
      stringToHSB: function(strVal) {
        strVal = strVal.toLowerCase();
        var alias;
        if (typeof this.colors[strVal] !== 'undefined') {
          strVal = this.colors[strVal];
          alias = 'alias';
        }
        var that = this,
          result = false;
        $.each(this.stringParsers, function(i, parser) {
          var match = parser.re.exec(strVal),
            values = match && parser.parse.apply(that, [match]),
            format = alias || parser.format || 'rgba';
          if (values) {
            if (format.match(/hsla?/)) {
              result = that.RGBtoHSB.apply(that, that.HSLtoRGB.apply(that, values));
            } else {
              result = that.RGBtoHSB.apply(that, values);
            }
            that.origFormat = format;
            return false;
          }
          return true;
        });
        return result;
      },
      setHue: function(h) {
        this.value.h = 1 - h;
      },
      setSaturation: function(s) {
        this.value.s = s;
      },
      setBrightness: function(b) {
        this.value.b = 1 - b;
      },
      setAlpha: function(a) {
        this.value.a = parseInt((1 - a) * 100, 10) / 100;
      },
      toRGB: function(h, s, b, a) {
        if (!h) {
          h = this.value.h;
          s = this.value.s;
          b = this.value.b;
        }
        h *= 360;
        var R, G, B, X, C;
        h = (h % 360) / 60;
        C = b * s;
        X = C * (1 - Math.abs(h % 2 - 1));
        R = G = B = b - C;

        h = ~~h;
        R += [C, X, 0, 0, X, C][h];
        G += [X, C, C, X, 0, 0][h];
        B += [0, 0, X, C, C, X][h];
        return {
          r: Math.round(R * 255),
          g: Math.round(G * 255),
          b: Math.round(B * 255),
          a: a || this.value.a
        };
      },
      toHex: function(h, s, b, a) {
        var rgb = this.toRGB(h, s, b, a);
        if (this.rgbaIsTransparent(rgb)) {
          return 'transparent';
        }
        return '#' + ((1 << 24) | (parseInt(rgb.r) << 16) | (parseInt(rgb.g) << 8) | parseInt(rgb.b)).toString(16).substr(1);
      },
      toHSL: function(h, s, b, a) {
        h = h || this.value.h;
        s = s || this.value.s;
        b = b || this.value.b;
        a = a || this.value.a;

        var H = h,
          L = (2 - s) * b,
          S = s * b;
        if (L > 0 && L <= 1) {
          S /= L;
        } else {
          S /= 2 - L;
        }
        L /= 2;
        if (S > 1) {
          S = 1;
        }
        return {
          h: isNaN(H) ? 0 : H,
          s: isNaN(S) ? 0 : S,
          l: isNaN(L) ? 0 : L,
          a: isNaN(a) ? 0 : a
        };
      },
      toAlias: function(r, g, b, a) {
        var rgb = this.toHex(r, g, b, a);
        for (var alias in this.colors) {
          if (this.colors[alias] === rgb) {
            return alias;
          }
        }
        return false;
      },
      RGBtoHSB: function(r, g, b, a) {
        r /= 255;
        g /= 255;
        b /= 255;

        var H, S, V, C;
        V = Math.max(r, g, b);
        C = V - Math.min(r, g, b);
        H = (C === 0 ? null :
          V === r ? (g - b) / C :
          V === g ? (b - r) / C + 2 :
          (r - g) / C + 4
        );
        H = ((H + 360) % 6) * 60 / 360;
        S = C === 0 ? 0 : C / V;
        return {
          h: this._sanitizeNumber(H),
          s: S,
          b: V,
          a: this._sanitizeNumber(a)
        };
      },
      HueToRGB: function(p, q, h) {
        if (h < 0) {
          h += 1;
        } else if (h > 1) {
          h -= 1;
        }
        if ((h * 6) < 1) {
          return p + (q - p) * h * 6;
        } else if ((h * 2) < 1) {
          return q;
        } else if ((h * 3) < 2) {
          return p + (q - p) * ((2 / 3) - h) * 6;
        } else {
          return p;
        }
      },
      HSLtoRGB: function(h, s, l, a) {
        if (s < 0) {
          s = 0;
        }
        var q;
        if (l <= 0.5) {
          q = l * (1 + s);
        } else {
          q = l + s - (l * s);
        }

        var p = 2 * l - q;

        var tr = h + (1 / 3);
        var tg = h;
        var tb = h - (1 / 3);

        var r = Math.round(this.HueToRGB(p, q, tr) * 255);
        var g = Math.round(this.HueToRGB(p, q, tg) * 255);
        var b = Math.round(this.HueToRGB(p, q, tb) * 255);
        return [r, g, b, this._sanitizeNumber(a)];
      },
      toString: function(format) {
        format = format || 'rgba';
        var c = false;
        switch (format) {
          case 'rgb':
            {
              c = this.toRGB();
              if (this.rgbaIsTransparent(c)) {
                return 'transparent';
              }
              return 'rgb(' + c.r + ',' + c.g + ',' + c.b + ')';
            }
            break;
          case 'rgba':
            {
              c = this.toRGB();
              return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';
            }
            break;
          case 'hsl':
            {
              c = this.toHSL();
              return 'hsl(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%)';
            }
            break;
          case 'hsla':
            {
              c = this.toHSL();
              return 'hsla(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%,' + c.a + ')';
            }
            break;
          case 'hex':
            {
              return this.toHex();
            }
            break;
          case 'alias':
            return this.toAlias() || this.toHex();
          default:
            {
              return c;
            }
            break;
        }
      },

      // a set of RE's that can match strings and generate color tuples.
      // from John Resig color plugin
      // https://github.com/jquery/jquery-color/
      stringParsers: [{
        re: /rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*?\)/,
        format: 'rgb',
        parse: function(execResult) {
          return [
            execResult[1],
            execResult[2],
            execResult[3],
            1
          ];
        }
      }, {
        re: /rgb\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*?\)/,
        format: 'rgb',
        parse: function(execResult) {
          return [
            2.55 * execResult[1],
            2.55 * execResult[2],
            2.55 * execResult[3],
            1
          ];
        }
      }, {
        re: /rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
        format: 'rgba',
        parse: function(execResult) {
          return [
            execResult[1],
            execResult[2],
            execResult[3],
            execResult[4]
          ];
        }
      }, {
        re: /rgba\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
        format: 'rgba',
        parse: function(execResult) {
          return [
            2.55 * execResult[1],
            2.55 * execResult[2],
            2.55 * execResult[3],
            execResult[4]
          ];
        }
      }, {
        re: /hsl\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*?\)/,
        format: 'hsl',
        parse: function(execResult) {
          return [
            execResult[1] / 360,
            execResult[2] / 100,
            execResult[3] / 100,
            execResult[4]
          ];
        }
      }, {
        re: /hsla\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
        format: 'hsla',
        parse: function(execResult) {
          return [
            execResult[1] / 360,
            execResult[2] / 100,
            execResult[3] / 100,
            execResult[4]
          ];
        }
      }, {
        re: /#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
        format: 'hex',
        parse: function(execResult) {
          return [
            parseInt(execResult[1], 16),
            parseInt(execResult[2], 16),
            parseInt(execResult[3], 16),
            1
          ];
        }
      }, {
        re: /#?([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,
        format: 'hex',
        parse: function(execResult) {
          return [
            parseInt(execResult[1] + execResult[1], 16),
            parseInt(execResult[2] + execResult[2], 16),
            parseInt(execResult[3] + execResult[3], 16),
            1
          ];
        }
      }],
      colorNameToHex: function(name) {
        if (typeof this.colors[name.toLowerCase()] !== 'undefined') {
          return this.colors[name.toLowerCase()];
        }
        return false;
      }
    };

    var defaults = {
      horizontal: false, // horizontal mode layout ?
      inline: false, //forces to show the colorpicker as an inline element
      color: false, //forces a color
      format: false, //forces a format
      input: 'input', // children input selector
      container: false, // container selector
      component: '.add-on, .input-group-addon', // children component selector
      sliders: {
        saturation: {
          maxLeft: 100,
          maxTop: 100,
          callLeft: 'setSaturation',
          callTop: 'setBrightness'
        },
        hue: {
          maxLeft: 0,
          maxTop: 100,
          callLeft: false,
          callTop: 'setHue'
        },
        alpha: {
          maxLeft: 0,
          maxTop: 100,
          callLeft: false,
          callTop: 'setAlpha'
        }
      },
      slidersHorz: {
        saturation: {
          maxLeft: 100,
          maxTop: 100,
          callLeft: 'setSaturation',
          callTop: 'setBrightness'
        },
        hue: {
          maxLeft: 100,
          maxTop: 0,
          callLeft: 'setHue',
          callTop: false
        },
        alpha: {
          maxLeft: 100,
          maxTop: 0,
          callLeft: 'setAlpha',
          callTop: false
        }
      },
      template: '<div class="colorpicker dropdown-menu">' +
        '<div class="colorpicker-saturation"><i><b></b></i></div>' +
        '<div class="colorpicker-hue"><i></i></div>' +
        '<div class="colorpicker-alpha"><i></i></div>' +
        '<div class="colorpicker-color"><div /></div>' +
        '<div class="colorpicker-selectors"></div>' +
        '</div>',
      align: 'right',
      customClass: null,
      colorSelectors: null
    };

    var Colorpicker = function(element, options) {
      this.element = $(element).addClass('colorpicker-element');
      this.options = $.extend(true, {}, defaults, this.element.data(), options);
      this.component = this.options.component;
      this.component = (this.component !== false) ? this.element.find(this.component) : false;
      if (this.component && (this.component.length === 0)) {
        this.component = false;
      }
      this.container = (this.options.container === true) ? this.element : this.options.container;
      this.container = (this.container !== false) ? $(this.container) : false;

      // Is the element an input? Should we search inside for any input?
      this.input = this.element.is('input') ? this.element : (this.options.input ?
        this.element.find(this.options.input) : false);
      if (this.input && (this.input.length === 0)) {
        this.input = false;
      }

      // Set HSB color
      this.color = new Color(this.options.color !== false ? this.options.color : this.getValue(), this.options.colorSelectors);
      this.format = this.options.format !== false ? this.options.format : this.color.origFormat;

      // Setup picker
      this.picker = $(this.options.template);
      if (this.options.customClass) {
        this.picker.addClass(this.options.customClass);
      }
      if (this.options.inline) {
        this.picker.addClass('colorpicker-inline colorpicker-visible');
      } else {
        this.picker.addClass('colorpicker-hidden');
      }
      if (this.options.horizontal) {
        this.picker.addClass('colorpicker-horizontal');
      }
      if (this.format === 'rgba' || this.format === 'hsla' || this.options.format === false) {
        this.picker.addClass('colorpicker-with-alpha');
      }
      if (this.options.align === 'right') {
        this.picker.addClass('colorpicker-right');
      }
      if (this.options.colorSelectors) {
        var colorpicker = this;
        $.each(this.options.colorSelectors, function(name, color) {
          var $btn = $('<i />').css('background-color', color).data('class', name);
          $btn.click(function() {
            colorpicker.setValue($(this).css('background-color'));
          });
          colorpicker.picker.find('.colorpicker-selectors').append($btn);
        });
        this.picker.find('.colorpicker-selectors').show();
      }
      this.picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this.mousedown, this));
      this.picker.appendTo(this.container ? this.container : $('body'));

      // Bind events
      if (this.input !== false) {
        this.input.on({
          'keyup.colorpicker': $.proxy(this.keyup, this)
        });
        this.input.on({
          'change.colorpicker': $.proxy(this.change, this)
        });
        if (this.component === false) {
          this.element.on({
            'focus.colorpicker': $.proxy(this.show, this)
          });
        }
        if (this.options.inline === false) {
          this.element.on({
            'focusout.colorpicker': $.proxy(this.hide, this)
          });
        }
      }

      if (this.component !== false) {
        this.component.on({
          'click.colorpicker': $.proxy(this.show, this)
        });
      }

      if ((this.input === false) && (this.component === false)) {
        this.element.on({
          'click.colorpicker': $.proxy(this.show, this)
        });
      }

      // for HTML5 input[type='color']
      if ((this.input !== false) && (this.component !== false) && (this.input.attr('type') === 'color')) {
        this.input.on({
          'click.colorpicker': $.proxy(this.show, this),
          'focus.colorpicker': $.proxy(this.show, this)
        });
      }
      this.update();

      $($.proxy(function() {
        this.element.trigger('create');
      }, this));
    };

    Colorpicker.Color = Color;

    Colorpicker.prototype = {
      constructor: Colorpicker,
      destroy: function() {
        this.picker.remove();
        this.element.removeData('colorpicker').off('.colorpicker');
        if (this.input !== false) {
          this.input.off('.colorpicker');
        }
        if (this.component !== false) {
          this.component.off('.colorpicker');
        }
        this.element.removeClass('colorpicker-element');
        this.element.trigger({
          type: 'destroy'
        });
      },
      reposition: function() {
        if (this.options.inline !== false || this.options.container) {
          return false;
        }
        var type = this.container && this.container[0] !== document.body ? 'position' : 'offset';
        var element = this.component || this.element;
        var offset = element[type]();
        if (this.options.align === 'right') {
          offset.left -= this.picker.outerWidth() - element.outerWidth();
        }
        this.picker.css({
          top: offset.top + element.outerHeight(),
          left: offset.left
        });
      },
      show: function(e) {
        if (this.isDisabled()) {
          return false;
        }
        this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');
        this.reposition();
        $(window).on('resize.colorpicker', $.proxy(this.reposition, this));
        if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {
          if (e.stopPropagation && e.preventDefault) {
            e.stopPropagation();
            e.preventDefault();
          }
        }
        if (this.options.inline === false) {
          $(window.document).on({
            'mousedown.colorpicker': $.proxy(this.hide, this)
          });
        }
        this.element.trigger({
          type: 'showPicker',
          color: this.color
        });
      },
      hide: function() {
        this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');
        $(window).off('resize.colorpicker', this.reposition);
        $(document).off({
          'mousedown.colorpicker': this.hide
        });
        this.update();
        this.element.trigger({
          type: 'hidePicker',
          color: this.color
        });
      },
      updateData: function(val) {
        val = val || this.color.toString(this.format);
        this.element.data('color', val);
        return val;
      },
      updateInput: function(val) {
        val = val || this.color.toString(this.format);
        if (this.input !== false) {
          if (this.options.colorSelectors) {
            var color = new Color(val, this.options.colorSelectors);
            var alias = color.toAlias();
            if (typeof this.options.colorSelectors[alias] !== 'undefined') {
              val = alias;
            }
          }
          this.input.prop('value', val);
        }
        return val;
      },
      updatePicker: function(val) {
        if (val !== undefined) {
          this.color = new Color(val, this.options.colorSelectors);
        }
        var sl = (this.options.horizontal === false) ? this.options.sliders : this.options.slidersHorz;
        var icns = this.picker.find('i');
        if (icns.length === 0) {
          return;
        }
        if (this.options.horizontal === false) {
          sl = this.options.sliders;
          icns.eq(1).css('top', sl.hue.maxTop * (1 - this.color.value.h)).end()
            .eq(2).css('top', sl.alpha.maxTop * (1 - this.color.value.a));
        } else {
          sl = this.options.slidersHorz;
          icns.eq(1).css('left', sl.hue.maxLeft * (1 - this.color.value.h)).end()
            .eq(2).css('left', sl.alpha.maxLeft * (1 - this.color.value.a));
        }
        icns.eq(0).css({
          'top': sl.saturation.maxTop - this.color.value.b * sl.saturation.maxTop,
          'left': this.color.value.s * sl.saturation.maxLeft
        });
        this.picker.find('.colorpicker-saturation').css('backgroundColor', this.color.toHex(this.color.value.h, 1, 1, 1));
        this.picker.find('.colorpicker-alpha').css('backgroundColor', this.color.toHex());
        this.picker.find('.colorpicker-color, .colorpicker-color div').css('backgroundColor', this.color.toString(this.format));
        return val;
      },
      updateComponent: function(val) {
        val = val || this.color.toString(this.format);
        if (this.component !== false) {
          var icn = this.component.find('i').eq(0);
          if (icn.length > 0) {
            icn.css({
              'backgroundColor': val
            });
          } else {
            this.component.css({
              'backgroundColor': val
            });
          }
        }
        return val;
      },
      update: function(force) {
        var val;
        if ((this.getValue(false) !== false) || (force === true)) {

          // Update input/data only if the current value is not empty
          val = this.updateComponent();
          this.updateInput(val);
          this.updateData(val);
          this.updatePicker(); // only update picker if value is not empty
        }
        return val;
      },
      setValue: function(val) { // set color manually
        this.color = new Color(val, this.options.colorSelectors);
        this.update(true);
        this.element.trigger({
          type: 'changeColor',
          color: this.color,
          value: val
        });
      },
      getValue: function(defaultValue) {
        defaultValue = (defaultValue === undefined) ? '#000000' : defaultValue;
        var val;
        if (this.hasInput()) {
          val = this.input.val();
        } else {
          val = this.element.data('color');
        }
        if ((val === undefined) || (val === '') || (val === null)) {

          // if not defined or empty, return default
          val = defaultValue;
        }
        return val;
      },
      hasInput: function() {
        return (this.input !== false);
      },
      isDisabled: function() {
        if (this.hasInput()) {
          return (this.input.prop('disabled') === true);
        }
        return false;
      },
      disable: function() {
        if (this.hasInput()) {
          this.input.prop('disabled', true);
          this.element.trigger({
            type: 'disable',
            color: this.color,
            value: this.getValue()
          });
          return true;
        }
        return false;
      },
      enable: function() {
        if (this.hasInput()) {
          this.input.prop('disabled', false);
          this.element.trigger({
            type: 'enable',
            color: this.color,
            value: this.getValue()
          });
          return true;
        }
        return false;
      },
      currentSlider: null,
      mousePointer: {
        left: 0,
        top: 0
      },
      mousedown: function(e) {
        if (!e.pageX && !e.pageY && e.originalEvent) {
          e.pageX = e.originalEvent.touches[0].pageX;
          e.pageY = e.originalEvent.touches[0].pageY;
        }
        e.stopPropagation();
        e.preventDefault();

        var target = $(e.target);

        //detect the slider and set the limits and callbacks
        var zone = target.closest('div');
        var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;
        if (!zone.is('.colorpicker')) {
          if (zone.is('.colorpicker-saturation')) {
            this.currentSlider = $.extend({}, sl.saturation);
          } else if (zone.is('.colorpicker-hue')) {
            this.currentSlider = $.extend({}, sl.hue);
          } else if (zone.is('.colorpicker-alpha')) {
            this.currentSlider = $.extend({}, sl.alpha);
          } else {
            return false;
          }
          var offset = zone.offset();

          //reference to guide's style
          this.currentSlider.guide = zone.find('i')[0].style;
          this.currentSlider.left = e.pageX - offset.left;
          this.currentSlider.top = e.pageY - offset.top;
          this.mousePointer = {
            left: e.pageX,
            top: e.pageY
          };

          //trigger mousemove to move the guide to the current position
          $(document).on({
            'mousemove.colorpicker': $.proxy(this.mousemove, this),
            'touchmove.colorpicker': $.proxy(this.mousemove, this),
            'mouseup.colorpicker': $.proxy(this.mouseup, this),
            'touchend.colorpicker': $.proxy(this.mouseup, this)
          }).trigger('mousemove');
        }
        return false;
      },
      mousemove: function(e) {
        if (!e.pageX && !e.pageY && e.originalEvent) {
          e.pageX = e.originalEvent.touches[0].pageX;
          e.pageY = e.originalEvent.touches[0].pageY;
        }
        e.stopPropagation();
        e.preventDefault();
        var left = Math.max(
          0,
          Math.min(
            this.currentSlider.maxLeft,
            this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)
          )
        );
        var top = Math.max(
          0,
          Math.min(
            this.currentSlider.maxTop,
            this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)
          )
        );
        this.currentSlider.guide.left = left + 'px';
        this.currentSlider.guide.top = top + 'px';
        if (this.currentSlider.callLeft) {
          this.color[this.currentSlider.callLeft].call(this.color, left / this.currentSlider.maxLeft);
        }
        if (this.currentSlider.callTop) {
          this.color[this.currentSlider.callTop].call(this.color, top / this.currentSlider.maxTop);
        }

        // Change format dynamically
        // Only occurs if user choose the dynamic format by
        // setting option format to false
        if (this.currentSlider.callTop === 'setAlpha' && this.options.format === false) {

          // Converting from hex / rgb to rgba
          if (this.color.value.a !== 1) {
            this.format = 'rgba';
            this.color.origFormat = 'rgba';
          }

          // Converting from rgba to hex
          else {
            this.format = 'hex';
            this.color.origFormat = 'hex';
          }
        }
        this.update(true);

        this.element.trigger({
          type: 'changeColor',
          color: this.color
        });
        return false;
      },
      mouseup: function(e) {
        e.stopPropagation();
        e.preventDefault();
        $(document).off({
          'mousemove.colorpicker': this.mousemove,
          'touchmove.colorpicker': this.mousemove,
          'mouseup.colorpicker': this.mouseup,
          'touchend.colorpicker': this.mouseup
        });
        return false;
      },
      change: function(e) {
        this.keyup(e);
      },
      keyup: function(e) {
        if ((e.keyCode === 38)) {
          if (this.color.value.a < 1) {
            this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;
          }
          this.update(true);
        } else if ((e.keyCode === 40)) {
          if (this.color.value.a > 0) {
            this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;
          }
          this.update(true);
        } else {
          this.color = new Color(this.input.val(), this.options.colorSelectors);

          // Change format dynamically
          // Only occurs if user choose the dynamic format by
          // setting option format to false
          if (this.color.origFormat && this.options.format === false) {
            this.format = this.color.origFormat;
          }
          if (this.getValue(false) !== false) {
            this.updateData();
            this.updateComponent();
            this.updatePicker();
          }
        }
        this.element.trigger({
          type: 'changeColor',
          color: this.color,
          value: this.input.val()
        });
      }
    };

    $.colorpicker = Colorpicker;

    $.fn.colorpicker = function(option) {
      var pickerArgs = arguments,
        rv;

      var $returnValue = this.each(function() {
        var $this = $(this),
          inst = $this.data('colorpicker'),
          options = ((typeof option === 'object') ? option : {});
        if ((!inst) && (typeof option !== 'string')) {
          $this.data('colorpicker', new Colorpicker(this, options));
        } else {
          if (typeof option === 'string') {
            rv = inst[option].apply(inst, Array.prototype.slice.call(pickerArgs, 1));
          }
        }
      });
      if (option === 'getValue') {
        return rv;
      }
      return $returnValue;
    };

    $.fn.colorpicker.constructor = Colorpicker;
  }));

jQuery.fn.select2.amd.require('select2/core').prototype.open = function () {
    if (this.$container.hasClass("select2-container--disabled")) return;

    if (this.isOpen()) {
        return;
    }

    this.trigger('query', {});

    this.trigger('open');
};

//jQuery.fn.collapse.Constructor.prototype.transition = function (method, startEvent, completeEvent) {
//    var that = this
//      , complete = function () {
//          if (startEvent.type == 'show') that.reset()
//          that.transitioning = 0
//          that.$element.trigger(completeEvent)
//      }

//    this.$element.trigger(startEvent)

//    if (startEvent.isDefaultPrevented()) return

//    this.transitioning = 1

//    this.$element[method]('in')

//    $.support.transition && this.$element.hasClass('collapse') ?
//      this.$element.one($.support.transition.end, complete) :
//      complete()

//    this.transitioning = 0
//}

$(document).ready(function () {
    $(".panel-body").collapse({ toggle: false });
});

$(document).ajaxComplete(function (event, request, settings) {
    $(".panel-body").collapse({ toggle: false });
});

function formatResult(result) {
    if (typeof (result.color) === "undefined")
        return result.text;
    else
        return "<div class='select-2-color-box' style=\"background-color: " + result.color + "\" ></div>&nbsp;" + result.text;
}
jQuery.fn.extend({
    Select2ColorPicker: function (initial_id, initial_name, placeholder) {
        var dfd = jQuery.Deferred();
        var el = $(this);
        window.setTimeout(function () {
            $.getJSON(el.data("get-url"), {}, function (initial_data) {
                el.select2(
                    {
                        allowClear: true,
                        "language": {
                            "noResults": function () {
                                return "Nessun risultato " + ((el.data("create-url") != "") ? "<a class=\"" + el.data("add-class") + " select-2-plus\" href=\"" + el.data("create-url") + "\" data-override-element=\"" + el.attr("id") + "\" data-container=\"" + el.data("add-container") + "\" class=\"select-2-plus\"><span class=\"glyphicon pwicons-plus\"></span></a>" : "");
                            }
                        },
                        escapeMarkup: function (markup) {
                            return markup;
                        },
                        data: initial_data,
                        placeholder: placeholder || " ",
                        ajax: {
                            url: el.data("get-url"),
                            dataType: 'json',
                            delay: 250,
                            data: function (params) {
                                return {
                                    search: params.term, // search term
                                    firsttime: false
                                };
                            },
                            processResults: function (data) {

                                // parse the results into the format expected by Select2.
                                // since we are using custom formatting functions we do not need to
                                // alter the remote JSON data
                                if ($(data).filter(function (i, el) { el.id == "" }).Length == 0)
                                    data.unshift({ id: "", text: " " });

                                return {
                                    results: data
                                };
                            }
                        },
                        templateResult: formatResult,
                        templateSelection: formatResult,

                        escapeMarkup: function (m) {

                            // Do not escape HTML in the select options text
                            return m;
                        },
                    }
                );

                if (el.data("create-url") != "")
                    $("#select2-" + el.attr("id") + "-container").parent().parent().parent()
                        .append("<a class=\"" + el.data("add-class") + " select-2-plus\" href=\"" + el.data("create-url") + "\" data-container=\"" + el.data("add-container") + "\" class=\"select-2-plus\"><span style=\"color:orange\" class=\"pwicons pwicons-plus\"></span></a>");

                el.select2("val", initial_id);

                $("#select2-" + el.attr("id") + "-container").parent().parent().parent().find(".select2-selection__arrow").html("");
                $("#select2-" + el.attr("id") + "-container").parent().parent().parent().find(".select2-selection__arrow").addClass("pwicons pwicons-arrow-right").css("top", "11px");

                dfd.resolve();
                    });
                }, 200);

        $(document).loadingManager("addEvent", dfd.promise());
    }
});

jQuery.fn.extend({
    DayPicker: function () {
        var el = $(this);
        var btnContainer = el.nextAll(".btn-group:first");
        var selectedDays = el.val().split(" ");

        btnContainer.find(".btn").each(function (i, e) {
            if (selectedDays.indexOf($(e).val()) > -1) $(e).addClass("active");
        })

        btnContainer.on("click", ".btn", function () {
            $(this).toggleClass("active");
            el.val(btnContainer.find(".active").map(function (i, e) { return $(e).val() }).get().join(" "));
        })
    }
});

