PHP Classes

File: Application/Module/Core/Public/Js/bootstrap-editable.min.js

Recommend this page to a friend!
  Classes of Duong Huynh Nghia   Lego PHP   Application/Module/Core/Public/Js/bootstrap-editable.min.js   Download  
File: Application/Module/Core/Public/Js/bootstrap-editable.min.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Lego PHP
Blog and shopping cart system
Author: By
Last change:
Date: 7 years ago
Size: 82,036 bytes
 

Contents

Class file image Download
/*! X-editable - v1.5.1 * In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery * http://github.com/vitalets/x-editable * Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */ !function(a){"use strict"; var b = function(b, c){this.options = a.extend({}, a.fn.editableform.defaults, c), this.$div = a(b), this.options.scope || (this.options.scope = this)}; b.prototype = {constructor:b, initInput:function(){this.input = this.options.input, this.value = this.input.str2value(this.options.value), this.input.prerender()}, initTemplate:function(){this.$form = a(a.fn.editableform.template)}, initButtons:function(){var b = this.$form.find(".editable-buttons"); b.append(a.fn.editableform.buttons), "bottom" === this.options.showbuttons && b.addClass("editable-buttons-bottom")}, render:function(){this.$loading = a(a.fn.editableform.loading), this.$div.empty().append(this.$loading), this.initTemplate(), this.options.showbuttons?this.initButtons():this.$form.find(".editable-buttons").remove(), this.showLoading(), this.isSaving = !1, this.$div.triggerHandler("rendering"), this.initInput(), this.$form.find("div.editable-input").append(this.input.$tpl), this.$div.append(this.$form), a.when(this.input.render()).then(a.proxy(function(){if (this.options.showbuttons || this.input.autosubmit(), this.$form.find(".editable-cancel").click(a.proxy(this.cancel, this)), this.input.error)this.error(this.input.error), this.$form.find(".editable-submit").attr("disabled", !0), this.input.$input.attr("disabled", !0), this.$form.submit(function(a){a.preventDefault()}); else{this.error(!1), this.input.$input.removeAttr("disabled"), this.$form.find(".editable-submit").removeAttr("disabled"); var b = null === this.value || void 0 === this.value || "" === this.value?this.options.defaultValue:this.value; this.input.value2input(b), this.$form.submit(a.proxy(this.submit, this))}this.$div.triggerHandler("rendered"), this.showForm(), this.input.postrender && this.input.postrender()}, this))}, cancel:function(){this.$div.triggerHandler("cancel")}, showLoading:function(){var a, b; this.$form?(a = this.$form.outerWidth(), b = this.$form.outerHeight(), a && this.$loading.width(a), b && this.$loading.height(b), this.$form.hide()):(a = this.$loading.parent().width(), a && this.$loading.width(a)), this.$loading.show()}, showForm:function(a){this.$loading.hide(), this.$form.show(), a !== !1 && this.input.activate(), this.$div.triggerHandler("show")}, error:function(b){var c, d = this.$form.find(".control-group"), e = this.$form.find(".editable-error-block"); if (b === !1)d.removeClass(a.fn.editableform.errorGroupClass), e.removeClass(a.fn.editableform.errorBlockClass).empty().hide(); else{if (b){c = ("" + b).split("\n"); for (var f = 0; f < c.length; f++)c[f] = a("<div>").text(c[f]).html(); b = c.join("<br>")}d.addClass(a.fn.editableform.errorGroupClass), e.addClass(a.fn.editableform.errorBlockClass).html(b).show()}}, submit:function(b){b.stopPropagation(), b.preventDefault(); var c = this.input.input2value(), d = this.validate(c); if ("object" === a.type(d) && void 0 !== d.newValue){if (c = d.newValue, this.input.value2input(c), "string" == typeof d.msg)return this.error(d.msg), this.showForm(), void 0} else if (d)return this.error(d), this.showForm(), void 0; if (!this.options.savenochange && this.input.value2str(c) == this.input.value2str(this.value))return this.$div.triggerHandler("nochange"), void 0; var e = this.input.value2submit(c); this.isSaving = !0, a.when(this.save(e)).done(a.proxy(function(a){this.isSaving = !1; var b = "function" == typeof this.options.success?this.options.success.call(this.options.scope, a, c):null; return b === !1?(this.error(!1), this.showForm(!1), void 0):"string" == typeof b?(this.error(b), this.showForm(), void 0):(b && "object" == typeof b && b.hasOwnProperty("newValue") && (c = b.newValue), this.error(!1), this.value = c, this.$div.triggerHandler("save", {newValue:c, submitValue:e, response:a}), void 0)}, this)).fail(a.proxy(function(a){this.isSaving = !1; var b; b = "function" == typeof this.options.error?this.options.error.call(this.options.scope, a, c):"string" == typeof a?a:a.responseText || a.statusText || "Unknown error!", this.error(b), this.showForm()}, this))}, save:function(b){this.options.pk = a.fn.editableutils.tryParseJson(this.options.pk, !0); var c, d = "function" == typeof this.options.pk?this.options.pk.call(this.options.scope):this.options.pk, e = !!("function" == typeof this.options.url || this.options.url && ("always" === this.options.send || "auto" === this.options.send && null !== d && void 0 !== d)); return e?(this.showLoading(), c = {name:this.options.name || "", value:b, pk:d}, "function" == typeof this.options.params?c = this.options.params.call(this.options.scope, c):(this.options.params = a.fn.editableutils.tryParseJson(this.options.params, !0), a.extend(c, this.options.params)), "function" == typeof this.options.url?this.options.url.call(this.options.scope, c):a.ajax(a.extend({url:this.options.url, data:c, type:"POST"}, this.options.ajaxOptions))):void 0}, validate:function(a){return void 0 === a && (a = this.value), "function" == typeof this.options.validate?this.options.validate.call(this.options.scope, a):void 0}, option:function(a, b){a in this.options && (this.options[a] = b), "value" === a && this.setValue(b)}, setValue:function(a, b){this.value = b?this.input.str2value(a):a, this.$form && this.$form.is(":visible") && this.input.value2input(this.value)}}, a.fn.editableform = function(c){var d = arguments; return this.each(function(){var e = a(this), f = e.data("editableform"), g = "object" == typeof c && c; f || e.data("editableform", f = new b(this, g)), "string" == typeof c && f[c].apply(f, Array.prototype.slice.call(d, 1))})}, a.fn.editableform.Constructor = b, a.fn.editableform.defaults = {type:"text", url:null, params:null, name:null, pk:null, value:null, defaultValue:null, send:"auto", validate:null, success:null, error:null, ajaxOptions:null, showbuttons:!0, scope:null, savenochange:!1}, a.fn.editableform.template = '<form class="form-inline editableform"><div class="control-group"><div><div class="editable-input"></div><div class="editable-buttons"></div></div><div class="editable-error-block"></div></div></form>', a.fn.editableform.loading = '<div class="editableform-loading"></div>', a.fn.editableform.buttons = '<button type="submit" class="editable-submit">ok</button><button type="button" class="editable-cancel">cancel</button>', a.fn.editableform.errorGroupClass = null, a.fn.editableform.errorBlockClass = "editable-error", a.fn.editableform.engine = "jquery"}(window.jQuery), function(a){"use strict"; a.fn.editableutils = {inherit:function(a, b){var c = function(){}; c.prototype = b.prototype, a.prototype = new c, a.prototype.constructor = a, a.superclass = b.prototype}, setCursorPosition:function(a, b){if (a.setSelectionRange)a.setSelectionRange(b, b); else if (a.createTextRange){var c = a.createTextRange(); c.collapse(!0), c.moveEnd("character", b), c.moveStart("character", b), c.select()}}, tryParseJson:function(a, b){if ("string" == typeof a && a.length && a.match(/^[\{\[].*[\}\]]$/))if (b)try{a = new Function("return " + a)()} catch (c){} finally{return a} else a = new Function("return " + a)(); return a}, sliceObj:function(b, c, d){var e, f, g = {}; if (!a.isArray(c) || !c.length)return g; for (var h = 0; h < c.length; h++)e = c[h], b.hasOwnProperty(e) && (g[e] = b[e]), d !== !0 && (f = e.toLowerCase(), b.hasOwnProperty(f) && (g[e] = b[f])); return g}, getConfigData:function(b){var c = {}; return a.each(b.data(), function(a, b){("object" != typeof b || b && "object" == typeof b && (b.constructor === Object || b.constructor === Array)) && (c[a] = b)}), c}, objectKeys:function(a){if (Object.keys)return Object.keys(a); if (a !== Object(a))throw new TypeError("Object.keys called on a non-object"); var b, c = []; for (b in a)Object.prototype.hasOwnProperty.call(a, b) && c.push(b); return c}, escape:function(b){return a("<div>").text(b).html()}, itemsByValue:function(b, c, d){if (!c || null === b)return[]; if ("function" != typeof d){var e = d || "value"; d = function(a){return a[e]}}var f = a.isArray(b), g = [], h = this; return a.each(c, function(c, e){if (e.children)g = g.concat(h.itemsByValue(b, e.children, d)); else if (f)a.grep(b, function(a){return a == (e && "object" == typeof e?d(e):e)}).length && g.push(e); else{var i = e && "object" == typeof e?d(e):e; b == i && g.push(e)}}), g}, createInput:function(b){var c, d, e, f = b.type; return"date" === f && ("inline" === b.mode?a.fn.editabletypes.datefield?f = "datefield":a.fn.editabletypes.dateuifield && (f = "dateuifield"):a.fn.editabletypes.date?f = "date":a.fn.editabletypes.dateui && (f = "dateui"), "date" !== f || a.fn.editabletypes.date || (f = "combodate")), "datetime" === f && "inline" === b.mode && (f = "datetimefield"), "wysihtml5" !== f || a.fn.editabletypes[f] || (f = "textarea"), "function" == typeof a.fn.editabletypes[f]?(c = a.fn.editabletypes[f], d = this.sliceObj(b, this.objectKeys(c.defaults)), e = new c(d)):(a.error("Unknown type: " + f), !1)}, supportsTransitions:function(){var a = document.body || document.documentElement, b = a.style, c = "transition", d = ["Moz", "Webkit", "Khtml", "O", "ms"]; if ("string" == typeof b[c])return!0; c = c.charAt(0).toUpperCase() + c.substr(1); for (var e = 0; e < d.length; e++)if ("string" == typeof b[d[e] + c])return!0; return!1}}}(window.jQuery), function(a){"use strict"; var b = function(a, b){this.init(a, b)}, c = function(a, b){this.init(a, b)}; b.prototype = {containerName:null, containerDataName:null, innerCss:null, containerClass:"editable-container editable-popup", defaults:{}, init:function(c, d){this.$element = a(c), this.options = a.extend({}, a.fn.editableContainer.defaults, d), this.splitOptions(), this.formOptions.scope = this.$element[0], this.initContainer(), this.delayedHide = !1, this.$element.on("destroyed", a.proxy(function(){this.destroy()}, this)), a(document).data("editable-handlers-attached") || (a(document).on("keyup.editable", function(b){27 === b.which && a(".editable-open").editableContainer("hide")}), a(document).on("click.editable", function(c){var d, e = a(c.target), f = [".editable-container", ".ui-datepicker-header", ".datepicker", ".modal-backdrop", ".bootstrap-wysihtml5-insert-image-modal", ".bootstrap-wysihtml5-insert-link-modal"]; if (a.contains(document.documentElement, c.target) && !e.is(document)){for (d = 0; d < f.length; d++)if (e.is(f[d]) || e.parents(f[d]).length)return; b.prototype.closeOthers(c.target)}}), a(document).data("editable-handlers-attached", !0))}, splitOptions:function(){if (this.containerOptions = {}, this.formOptions = {}, !a.fn[this.containerName])throw new Error(this.containerName + " not found. Have you included corresponding js file?"); for (var b in this.options)b in this.defaults?this.containerOptions[b] = this.options[b]:this.formOptions[b] = this.options[b]}, tip:function(){return this.container()?this.container().$tip:null}, container:function(){var a; return this.containerDataName && (a = this.$element.data(this.containerDataName))?a:a = this.$element.data(this.containerName)}, call:function(){this.$element[this.containerName].apply(this.$element, arguments)}, initContainer:function(){this.call(this.containerOptions)}, renderForm:function(){this.$form.editableform(this.formOptions).on({save:a.proxy(this.save, this), nochange:a.proxy(function(){this.hide("nochange")}, this), cancel:a.proxy(function(){this.hide("cancel")}, this), show:a.proxy(function(){this.delayedHide?(this.hide(this.delayedHide.reason), this.delayedHide = !1):this.setPosition()}, this), rendering:a.proxy(this.setPosition, this), resize:a.proxy(this.setPosition, this), rendered:a.proxy(function(){this.$element.triggerHandler("shown", a(this.options.scope).data("editable"))}, this)}).editableform("render")}, show:function(b){this.$element.addClass("editable-open"), b !== !1 && this.closeOthers(this.$element[0]), this.innerShow(), this.tip().addClass(this.containerClass), this.$form, this.$form = a("<div>"), this.tip().is(this.innerCss)?this.tip().append(this.$form):this.tip().find(this.innerCss).append(this.$form), this.renderForm()}, hide:function(a){if (this.tip() && this.tip().is(":visible") && this.$element.hasClass("editable-open")){if (this.$form.data("editableform").isSaving)return this.delayedHide = {reason:a}, void 0; this.delayedHide = !1, this.$element.removeClass("editable-open"), this.innerHide(), this.$element.triggerHandler("hidden", a || "manual")}}, innerShow:function(){}, innerHide:function(){}, toggle:function(a){this.container() && this.tip() && this.tip().is(":visible")?this.hide():this.show(a)}, setPosition:function(){}, save:function(a, b){this.$element.triggerHandler("save", b), this.hide("save")}, option:function(a, b){this.options[a] = b, a in this.containerOptions?(this.containerOptions[a] = b, this.setContainerOption(a, b)):(this.formOptions[a] = b, this.$form && this.$form.editableform("option", a, b))}, setContainerOption:function(a, b){this.call("option", a, b)}, destroy:function(){this.hide(), this.innerDestroy(), this.$element.off("destroyed"), this.$element.removeData("editableContainer")}, innerDestroy:function(){}, closeOthers:function(b){a(".editable-open").each(function(c, d){if (d !== b && !a(d).find(b).length){var e = a(d), f = e.data("editableContainer"); f && ("cancel" === f.options.onblur?e.data("editableContainer").hide("onblur"):"submit" === f.options.onblur && e.data("editableContainer").tip().find("form").submit())}})}, activate:function(){this.tip && this.tip().is(":visible") && this.$form && this.$form.data("editableform").input.activate()}}, a.fn.editableContainer = function(d){var e = arguments; return this.each(function(){var f = a(this), g = "editableContainer", h = f.data(g), i = "object" == typeof d && d, j = "inline" === i.mode?c:b; h || f.data(g, h = new j(this, i)), "string" == typeof d && h[d].apply(h, Array.prototype.slice.call(e, 1))})}, a.fn.editableContainer.Popup = b, a.fn.editableContainer.Inline = c, a.fn.editableContainer.defaults = {value:null, placement:"top", autohide:!0, onblur:"cancel", anim:!1, mode:"popup"}, jQuery.event.special.destroyed = {remove:function(a){a.handler && a.handler()}}}(window.jQuery), function(a){"use strict"; a.extend(a.fn.editableContainer.Inline.prototype, a.fn.editableContainer.Popup.prototype, {containerName:"editableform", innerCss:".editable-inline", containerClass:"editable-container editable-inline", initContainer:function(){this.$tip = a("<span></span>"), this.options.anim || (this.options.anim = 0)}, splitOptions:function(){this.containerOptions = {}, this.formOptions = this.options}, tip:function(){return this.$tip}, innerShow:function(){this.$element.hide(), this.tip().insertAfter(this.$element).show()}, innerHide:function(){this.$tip.hide(this.options.anim, a.proxy(function(){this.$element.show(), this.innerDestroy()}, this))}, innerDestroy:function(){this.tip() && this.tip().empty().remove()}})}(window.jQuery), function(a){"use strict"; var b = function(b, c){this.$element = a(b), this.options = a.extend({}, a.fn.editable.defaults, c, a.fn.editableutils.getConfigData(this.$element)), this.options.selector?this.initLive():this.init(), this.options.highlight && !a.fn.editableutils.supportsTransitions() && (this.options.highlight = !1)}; b.prototype = {constructor:b, init:function(){var b, c = !1; if (this.options.name = this.options.name || this.$element.attr("id"), this.options.scope = this.$element[0], this.input = a.fn.editableutils.createInput(this.options), this.input){switch (void 0 === this.options.value || null === this.options.value?(this.value = this.input.html2value(a.trim(this.$element.html())), c = !0):(this.options.value = a.fn.editableutils.tryParseJson(this.options.value, !0), this.value = "string" == typeof this.options.value?this.input.str2value(this.options.value):this.options.value), this.$element.addClass("editable"), "textarea" === this.input.type && this.$element.addClass("editable-pre-wrapped"), "manual" !== this.options.toggle?(this.$element.addClass("editable-click"), this.$element.on(this.options.toggle + ".editable", a.proxy(function(a){if (this.options.disabled || a.preventDefault(), "mouseenter" === this.options.toggle)this.show(); else{var b = "click" !== this.options.toggle; this.toggle(b)}}, this))):this.$element.attr("tabindex", - 1), "function" == typeof this.options.display && (this.options.autotext = "always"), this.options.autotext){case"always":b = !0; break; case"auto":b = !a.trim(this.$element.text()).length && null !== this.value && void 0 !== this.value && !c; break; default:b = !1}a.when(b?this.render():!0).then(a.proxy(function(){this.options.disabled?this.disable():this.enable(), this.$element.triggerHandler("init", this)}, this))}}, initLive:function(){var b = this.options.selector; this.options.selector = !1, this.options.autotext = "never", this.$element.on(this.options.toggle + ".editable", b, a.proxy(function(b){var c = a(b.target); c.data("editable") || (c.hasClass(this.options.emptyclass) && c.empty(), c.editable(this.options).trigger(b))}, this))}, render:function(a){return this.options.display !== !1?this.input.value2htmlFinal?this.input.value2html(this.value, this.$element[0], this.options.display, a):"function" == typeof this.options.display?this.options.display.call(this.$element[0], this.value, a):this.input.value2html(this.value, this.$element[0]):void 0}, enable:function(){this.options.disabled = !1, this.$element.removeClass("editable-disabled"), this.handleEmpty(this.isEmpty), "manual" !== this.options.toggle && "-1" === this.$element.attr("tabindex") && this.$element.removeAttr("tabindex")}, disable:function(){this.options.disabled = !0, this.hide(), this.$element.addClass("editable-disabled"), this.handleEmpty(this.isEmpty), this.$element.attr("tabindex", - 1)}, toggleDisabled:function(){this.options.disabled?this.enable():this.disable()}, option:function(b, c){return b && "object" == typeof b?(a.each(b, a.proxy(function(b, c){this.option(a.trim(b), c)}, this)), void 0):(this.options[b] = c, "disabled" === b?c?this.disable():this.enable():("value" === b && this.setValue(c), this.container && this.container.option(b, c), this.input.option && this.input.option(b, c), void 0))}, handleEmpty:function(b){this.options.display !== !1 && (this.isEmpty = void 0 !== b?b:"function" == typeof this.input.isEmpty?this.input.isEmpty(this.$element):"" === a.trim(this.$element.html()), this.options.disabled?this.isEmpty && (this.$element.empty(), this.options.emptyclass && this.$element.removeClass(this.options.emptyclass)):this.isEmpty?(this.$element.html(this.options.emptytext), this.options.emptyclass && this.$element.addClass(this.options.emptyclass)):this.options.emptyclass && this.$element.removeClass(this.options.emptyclass))}, show:function(b){if (!this.options.disabled){if (this.container){if (this.container.tip().is(":visible"))return} else{var c = a.extend({}, this.options, {value:this.value, input:this.input}); this.$element.editableContainer(c), this.$element.on("save.internal", a.proxy(this.save, this)), this.container = this.$element.data("editableContainer")}this.container.show(b)}}, hide:function(){this.container && this.container.hide()}, toggle:function(a){this.container && this.container.tip().is(":visible")?this.hide():this.show(a)}, save:function(a, b){if (this.options.unsavedclass){var c = !1; c = c || "function" == typeof this.options.url, c = c || this.options.display === !1, c = c || void 0 !== b.response, c = c || this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(b.newValue), c?this.$element.removeClass(this.options.unsavedclass):this.$element.addClass(this.options.unsavedclass)}if (this.options.highlight){var d = this.$element, e = d.css("background-color"); d.css("background-color", this.options.highlight), setTimeout(function(){"transparent" === e && (e = ""), d.css("background-color", e), d.addClass("editable-bg-transition"), setTimeout(function(){d.removeClass("editable-bg-transition")}, 1700)}, 10)}this.setValue(b.newValue, !1, b.response)}, validate:function(){return"function" == typeof this.options.validate?this.options.validate.call(this, this.value):void 0}, setValue:function(b, c, d){this.value = c?this.input.str2value(b):b, this.container && this.container.option("value", this.value), a.when(this.render(d)).then(a.proxy(function(){this.handleEmpty()}, this))}, activate:function(){this.container && this.container.activate()}, destroy:function(){this.disable(), this.container && this.container.destroy(), this.input.destroy(), "manual" !== this.options.toggle && (this.$element.removeClass("editable-click"), this.$element.off(this.options.toggle + ".editable")), this.$element.off("save.internal"), this.$element.removeClass("editable editable-open editable-disabled"), this.$element.removeData("editable")}}, a.fn.editable = function(c){var d = {}, e = arguments, f = "editable"; switch (c){case"validate":return this.each(function(){var b, c = a(this), e = c.data(f); e && (b = e.validate()) && (d[e.options.name] = b)}), d; case"getValue":return 2 === arguments.length && arguments[1] === !0?d = this.eq(0).data(f).value:this.each(function(){var b = a(this), c = b.data(f); c && void 0 !== c.value && null !== c.value && (d[c.options.name] = c.input.value2submit(c.value))}), d; case"submit":var g = arguments[1] || {}, h = this, i = this.editable("validate"); if (a.isEmptyObject(i)){var j = {}; if (1 === h.length){var k = h.data("editable"), l = {name:k.options.name || "", value:k.input.value2submit(k.value), pk:"function" == typeof k.options.pk?k.options.pk.call(k.options.scope):k.options.pk}; "function" == typeof k.options.params?l = k.options.params.call(k.options.scope, l):(k.options.params = a.fn.editableutils.tryParseJson(k.options.params, !0), a.extend(l, k.options.params)), j = {url:k.options.url, data:l, type:"POST"}, g.success = g.success || k.options.success, g.error = g.error || k.options.error} else{var m = this.editable("getValue"); j = {url:g.url, data:m, type:"POST"}}j.success = "function" == typeof g.success?function(a){g.success.call(h, a, g)}:a.noop, j.error = "function" == typeof g.error?function(){g.error.apply(h, arguments)}:a.noop, g.ajaxOptions && a.extend(j, g.ajaxOptions), g.data && a.extend(j.data, g.data), a.ajax(j)} else"function" == typeof g.error && g.error.call(h, i); return this}return this.each(function(){var d = a(this), g = d.data(f), h = "object" == typeof c && c; return h && h.selector?(g = new b(this, h), void 0):(g || d.data(f, g = new b(this, h)), "string" == typeof c && g[c].apply(g, Array.prototype.slice.call(e, 1)), void 0)})}, a.fn.editable.defaults = {type:"text", disabled:!1, toggle:"click", emptytext:"Empty", autotext:"auto", value:null, display:null, emptyclass:"editable-empty", unsavedclass:"editable-unsaved", selector:null, highlight:"#FFFF80"}}(window.jQuery), function(a){"use strict"; a.fn.editabletypes = {}; var b = function(){}; b.prototype = {init:function(b, c, d){this.type = b, this.options = a.extend({}, d, c)}, prerender:function(){this.$tpl = a(this.options.tpl), this.$input = this.$tpl, this.$clear = null, this.error = null}, render:function(){}, value2html:function(b, c){a(c)[this.options.escape?"text":"html"](a.trim(b))}, html2value:function(b){return a("<div>").html(b).text()}, value2str:function(a){return a}, str2value:function(a){return a}, value2submit:function(a){return a}, value2input:function(a){this.$input.val(a)}, input2value:function(){return this.$input.val()}, activate:function(){this.$input.is(":visible") && this.$input.focus()}, clear:function(){this.$input.val(null)}, escape:function(b){return a("<div>").text(b).html()}, autosubmit:function(){}, destroy:function(){}, setClass:function(){this.options.inputclass && this.$input.addClass(this.options.inputclass)}, setAttr:function(a){void 0 !== this.options[a] && null !== this.options[a] && this.$input.attr(a, this.options[a])}, option:function(a, b){this.options[a] = b}}, b.defaults = {tpl:"", inputclass:null, escape:!0, scope:null, showbuttons:!0}, a.extend(a.fn.editabletypes, {abstractinput:b})}(window.jQuery), function(a){"use strict"; var b = function(){}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {render:function(){var b = a.Deferred(); return this.error = null, this.onSourceReady(function(){this.renderList(), b.resolve()}, function(){this.error = this.options.sourceError, b.resolve()}), b.promise()}, html2value:function(){return null}, value2html:function(b, c, d, e){var f = a.Deferred(), g = function(){"function" == typeof d?d.call(c, b, this.sourceData, e):this.value2htmlFinal(b, c), f.resolve()}; return null === b?g.call(this):this.onSourceReady(g, function(){f.resolve()}), f.promise()}, onSourceReady:function(b, c){var d; if (a.isFunction(this.options.source)?(d = this.options.source.call(this.options.scope), this.sourceData = null):d = this.options.source, this.options.sourceCache && a.isArray(this.sourceData))return b.call(this), void 0; try{d = a.fn.editableutils.tryParseJson(d, !1)} catch (e){return c.call(this), void 0}if ("string" == typeof d){if (this.options.sourceCache){var f, g = d; if (a(document).data(g) || a(document).data(g, {}), f = a(document).data(g), f.loading === !1 && f.sourceData)return this.sourceData = f.sourceData, this.doPrepend(), b.call(this), void 0; if (f.loading === !0)return f.callbacks.push(a.proxy(function(){this.sourceData = f.sourceData, this.doPrepend(), b.call(this)}, this)), f.err_callbacks.push(a.proxy(c, this)), void 0; f.loading = !0, f.callbacks = [], f.err_callbacks = []}var h = a.extend({url:d, type:"get", cache:!1, dataType:"json", success:a.proxy(function(d){f && (f.loading = !1), this.sourceData = this.makeArray(d), a.isArray(this.sourceData)?(f && (f.sourceData = this.sourceData, a.each(f.callbacks, function(){this.call()})), this.doPrepend(), b.call(this)):(c.call(this), f && a.each(f.err_callbacks, function(){this.call()}))}, this), error:a.proxy(function(){c.call(this), f && (f.loading = !1, a.each(f.err_callbacks, function(){this.call()}))}, this)}, this.options.sourceOptions); a.ajax(h)} else this.sourceData = this.makeArray(d), a.isArray(this.sourceData)?(this.doPrepend(), b.call(this)):c.call(this)}, doPrepend:function(){null !== this.options.prepend && void 0 !== this.options.prepend && (a.isArray(this.prependData) || (a.isFunction(this.options.prepend) && (this.options.prepend = this.options.prepend.call(this.options.scope)), this.options.prepend = a.fn.editableutils.tryParseJson(this.options.prepend, !0), "string" == typeof this.options.prepend && (this.options.prepend = {"":this.options.prepend}), this.prependData = this.makeArray(this.options.prepend)), a.isArray(this.prependData) && a.isArray(this.sourceData) && (this.sourceData = this.prependData.concat(this.sourceData)))}, renderList:function(){}, value2htmlFinal:function(){}, makeArray:function(b){var c, d, e, f, g = []; if (!b || "string" == typeof b)return null; if (a.isArray(b)){f = function(a, b){return d = {value:a, text:b}, c++ >= 2?!1:void 0}; for (var h = 0; h < b.length; h++)e = b[h], "object" == typeof e?(c = 0, a.each(e, f), 1 === c?g.push(d):c > 1 && (e.children && (e.children = this.makeArray(e.children)), g.push(e))):g.push({value:e, text:e})} else a.each(b, function(a, b){g.push({value:a, text:b})}); return g}, option:function(a, b){this.options[a] = b, "source" === a && (this.sourceData = null), "prepend" === a && (this.prependData = null)}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {source:null, prepend:!1, sourceError:"Error when loading list", sourceCache:!0, sourceOptions:null}), a.fn.editabletypes.list = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("text", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {render:function(){this.renderClear(), this.setClass(), this.setAttr("placeholder")}, activate:function(){this.$input.is(":visible") && (this.$input.focus(), a.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length), this.toggleClear && this.toggleClear())}, renderClear:function(){this.options.clear && (this.$clear = a('<span class="editable-clear-x"></span>'), this.$input.after(this.$clear).css("padding-right", 24).keyup(a.proxy(function(b){if (!~a.inArray(b.keyCode, [40, 38, 9, 13, 27])){clearTimeout(this.t); var c = this; this.t = setTimeout(function(){c.toggleClear(b)}, 100)}}, this)).parent().css("position", "relative"), this.$clear.click(a.proxy(this.clear, this)))}, postrender:function(){}, toggleClear:function(){if (this.$clear){var a = this.$input.val().length, b = this.$clear.is(":visible"); a && !b && this.$clear.show(), !a && b && this.$clear.hide()}}, clear:function(){this.$clear.hide(), this.$input.val("").focus()}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {tpl:'<input type="text">', placeholder:null, clear:!0}), a.fn.editabletypes.text = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("textarea", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {render:function(){this.setClass(), this.setAttr("placeholder"), this.setAttr("rows"), this.$input.keydown(function(b){b.ctrlKey && 13 === b.which && a(this).closest("form").submit()})}, activate:function(){a.fn.editabletypes.text.prototype.activate.call(this)}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {tpl:"<textarea></textarea>", inputclass:"input-large", placeholder:null, rows:7}), a.fn.editabletypes.textarea = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("select", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.list), a.extend(b.prototype, {renderList:function(){this.$input.empty(); var b = function(c, d){var e; if (a.isArray(d))for (var f = 0; f < d.length; f++)e = {}, d[f].children?(e.label = d[f].text, c.append(b(a("<optgroup>", e), d[f].children))):(e.value = d[f].value, d[f].disabled && (e.disabled = !0), c.append(a("<option>", e).text(d[f].text))); return c}; b(this.$input, this.sourceData), this.setClass(), this.$input.on("keydown.editable", function(b){13 === b.which && a(this).closest("form").submit()})}, value2htmlFinal:function(b, c){var d = "", e = a.fn.editableutils.itemsByValue(b, this.sourceData); e.length && (d = e[0].text), a.fn.editabletypes.abstractinput.prototype.value2html.call(this, d, c)}, autosubmit:function(){this.$input.off("keydown.editable").on("change.editable", function(){a(this).closest("form").submit()})}}), b.defaults = a.extend({}, a.fn.editabletypes.list.defaults, {tpl:"<select></select>"}), a.fn.editabletypes.select = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("checklist", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.list), a.extend(b.prototype, {renderList:function(){var b; if (this.$tpl.empty(), a.isArray(this.sourceData)){for (var c = 0; c < this.sourceData.length; c++)b = a("<label>").append(a("<input>", {type:"checkbox", value:this.sourceData[c].value})).append(a("<span>").text(" " + this.sourceData[c].text)), a("<div>").append(b).appendTo(this.$tpl); this.$input = this.$tpl.find('input[type="checkbox"]'), this.setClass()}}, value2str:function(b){return a.isArray(b)?b.sort().join(a.trim(this.options.separator)):""}, str2value:function(b){var c, d = null; return"string" == typeof b && b.length?(c = new RegExp("\\s*" + a.trim(this.options.separator) + "\\s*"), d = b.split(c)):d = a.isArray(b)?b:[b], d}, value2input:function(b){this.$input.prop("checked", !1), a.isArray(b) && b.length && this.$input.each(function(c, d){var e = a(d); a.each(b, function(a, b){e.val() == b && e.prop("checked", !0)})})}, input2value:function(){var b = []; return this.$input.filter(":checked").each(function(c, d){b.push(a(d).val())}), b}, value2htmlFinal:function(b, c){var d = [], e = a.fn.editableutils.itemsByValue(b, this.sourceData), f = this.options.escape; e.length?(a.each(e, function(b, c){var e = f?a.fn.editableutils.escape(c.text):c.text; d.push(e)}), a(c).html(d.join("<br>"))):a(c).empty()}, activate:function(){this.$input.first().focus()}, autosubmit:function(){this.$input.on("keydown", function(b){13 === b.which && a(this).closest("form").submit()})}}), b.defaults = a.extend({}, a.fn.editabletypes.list.defaults, {tpl:'<div class="editable-checklist"></div>', inputclass:null, separator:","}), a.fn.editabletypes.checklist = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("password", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.text), a.extend(b.prototype, {value2html:function(b, c){b?a(c).text("[hidden]"):a(c).empty()}, html2value:function(){return null}}), b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {tpl:'<input type="password">'}), a.fn.editabletypes.password = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("email", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.text), b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {tpl:'<input type="email">'}), a.fn.editabletypes.email = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("url", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.text), b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {tpl:'<input type="url">'}), a.fn.editabletypes.url = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("tel", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.text), b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {tpl:'<input type="tel">'}), a.fn.editabletypes.tel = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("number", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.text), a.extend(b.prototype, {render:function(){b.superclass.render.call(this), this.setAttr("min"), this.setAttr("max"), this.setAttr("step")}, postrender:function(){this.$clear && this.$clear.css({right:24})}}), b.defaults = a.extend({}, a.fn.editabletypes.text.defaults, {tpl:'<input type="number">', inputclass:"input-mini", min:null, max:null, step:null}), a.fn.editabletypes.number = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("range", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.number), a.extend(b.prototype, {render:function(){this.$input = this.$tpl.filter("input"), this.setClass(), this.setAttr("min"), this.setAttr("max"), this.setAttr("step"), this.$input.on("input", function(){a(this).siblings("output").text(a(this).val())})}, activate:function(){this.$input.focus()}}), b.defaults = a.extend({}, a.fn.editabletypes.number.defaults, {tpl:'<input type="range"><output style="width: 30px; display: inline-block"></output>', inputclass:"input-medium"}), a.fn.editabletypes.range = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("time", a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {render:function(){this.setClass()}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {tpl:'<input type="time">'}), a.fn.editabletypes.time = b}(window.jQuery), function(a){"use strict"; var b = function(c){if (this.init("select2", c, b.defaults), c.select2 = c.select2 || {}, this.sourceData = null, c.placeholder && (c.select2.placeholder = c.placeholder), !c.select2.tags && c.source){var d = c.source; a.isFunction(c.source) && (d = c.source.call(c.scope)), "string" == typeof d?(c.select2.ajax = c.select2.ajax || {}, c.select2.ajax.data || (c.select2.ajax.data = function(a){return{query:a}}), c.select2.ajax.results || (c.select2.ajax.results = function(a){return{results:a}}), c.select2.ajax.url = d):(this.sourceData = this.convertSource(d), c.select2.data = this.sourceData)}if (this.options.select2 = a.extend({}, b.defaults.select2, c.select2), this.isMultiple = this.options.select2.tags || this.options.select2.multiple, this.isRemote = "ajax"in this.options.select2, this.idFunc = this.options.select2.id, "function" != typeof this.idFunc){var e = this.idFunc || "id"; this.idFunc = function(a){return a[e]}}this.formatSelection = this.options.select2.formatSelection, "function" != typeof this.formatSelection && (this.formatSelection = function(a){return a.text})}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {render:function(){this.setClass(), this.isRemote && this.$input.on("select2-loaded", a.proxy(function(a){this.sourceData = a.items.results}, this)), this.isMultiple && this.$input.on("change", function(){a(this).closest("form").parent().triggerHandler("resize")})}, value2html:function(c, d){var e, f = "", g = this; this.options.select2.tags?e = c:this.sourceData && (e = a.fn.editableutils.itemsByValue(c, this.sourceData, this.idFunc)), a.isArray(e)?(f = [], a.each(e, function(a, b){f.push(b && "object" == typeof b?g.formatSelection(b):b)})):e && (f = g.formatSelection(e)), f = a.isArray(f)?f.join(this.options.viewseparator):f, b.superclass.value2html.call(this, f, d)}, html2value:function(a){return this.options.select2.tags?this.str2value(a, this.options.viewseparator):null}, value2input:function(b){if (a.isArray(b) && (b = b.join(this.getSeparator())), this.$input.data("select2")?this.$input.val(b).trigger("change", !0):(this.$input.val(b), this.$input.select2(this.options.select2)), this.isRemote && !this.isMultiple && !this.options.select2.initSelection){var c = this.options.select2.id, d = this.options.select2.formatSelection; if (!c && !d){var e = a(this.options.scope); if (!e.data("editable").isEmpty){var f = {id:b, text:e.text()}; this.$input.select2("data", f)}}}}, input2value:function(){return this.$input.select2("val")}, str2value:function(b, c){if ("string" != typeof b || !this.isMultiple)return b; c = c || this.getSeparator(); var d, e, f; if (null === b || b.length < 1)return null; for (d = b.split(c), e = 0, f = d.length; f > e; e += 1)d[e] = a.trim(d[e]); return d}, autosubmit:function(){this.$input.on("change", function(b, c){c || a(this).closest("form").submit()})}, getSeparator:function(){return this.options.select2.separator || a.fn.select2.defaults.separator}, convertSource:function(b){if (a.isArray(b) && b.length && void 0 !== b[0].value)for (var c = 0; c < b.length; c++)void 0 !== b[c].value && (b[c].id = b[c].value, delete b[c].value); return b}, destroy:function(){this.$input.data("select2") && this.$input.select2("destroy")}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {tpl:'<input type="hidden">', select2:null, placeholder:null, source:null, viewseparator:", "}), a.fn.editabletypes.select2 = b}(window.jQuery), function(a){var b = function(b, c){return this.$element = a(b), this.$element.is("input")?(this.options = a.extend({}, a.fn.combodate.defaults, c, this.$element.data()), this.init(), void 0):(a.error("Combodate should be applied to INPUT element"), void 0)}; b.prototype = {constructor:b, init:function(){this.map = {day:["D", "date"], month:["M", "month"], year:["Y", "year"], hour:["[Hh]", "hours"], minute:["m", "minutes"], second:["s", "seconds"], ampm:["[Aa]", ""]}, this.$widget = a('<span class="combodate"></span>').html(this.getTemplate()), this.initCombos(), this.$widget.on("change", "select", a.proxy(function(b){this.$element.val(this.getValue()).change(), this.options.smartDays && (a(b.target).is(".month") || a(b.target).is(".year")) && this.fillCombo("day")}, this)), this.$widget.find("select").css("width", "auto"), this.$element.hide().after(this.$widget), this.setValue(this.$element.val() || this.options.value)}, getTemplate:function(){var b = this.options.template; return a.each(this.map, function(a, c){c = c[0]; var d = new RegExp(c + "+"), e = c.length > 1?c.substring(1, 2):c; b = b.replace(d, "{" + e + "}")}), b = b.replace(/ /g, "&nbsp;"), a.each(this.map, function(a, c){c = c[0]; var d = c.length > 1?c.substring(1, 2):c; b = b.replace("{" + d + "}", '<select class="' + a + '"></select>')}), b}, initCombos:function(){for (var a in this.map){var b = this.$widget.find("." + a); this["$" + a] = b.length?b:null, this.fillCombo(a)}}, fillCombo:function(a){var b = this["$" + a]; if (b){var c = "fill" + a.charAt(0).toUpperCase() + a.slice(1), d = this[c](), e = b.val(); b.empty(); for (var f = 0; f < d.length; f++)b.append('<option value="' + d[f][0] + '">' + d[f][1] + "</option>"); b.val(e)}}, fillCommon:function(a){var b, c = []; if ("name" === this.options.firstItem){b = moment.relativeTime || moment.langData()._relativeTime; var d = "function" == typeof b[a]?b[a](1, !0, a, !1):b[a]; d = d.split(" ").reverse()[0], c.push(["", d])} else"empty" === this.options.firstItem && c.push(["", ""]); return c}, fillDay:function(){var a, b, c = this.fillCommon("d"), d = - 1 !== this.options.template.indexOf("DD"), e = 31; if (this.options.smartDays && this.$month && this.$year){var f = parseInt(this.$month.val(), 10), g = parseInt(this.$year.val(), 10); isNaN(f) || isNaN(g) || (e = moment([g, f]).daysInMonth())}for (b = 1; e >= b; b++)a = d?this.leadZero(b):b, c.push([b, a]); return c}, fillMonth:function(){var a, b, c = this.fillCommon("M"), d = - 1 !== this.options.template.indexOf("MMMM"), e = - 1 !== this.options.template.indexOf("MMM"), f = - 1 !== this.options.template.indexOf("MM"); for (b = 0; 11 >= b; b++)a = d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b + 1):b + 1, c.push([b, a]); return c}, fillYear:function(){var a, b, c = [], d = - 1 !== this.options.template.indexOf("YYYY"); for (b = this.options.maxYear; b >= this.options.minYear; b--)a = d?b:(b + "").substring(2), c[this.options.yearDescending?"push":"unshift"]([b, a]); return c = this.fillCommon("y").concat(c)}, fillHour:function(){var a, b, c = this.fillCommon("h"), d = - 1 !== this.options.template.indexOf("h"), e = ( - 1 !== this.options.template.indexOf("H"), - 1 !== this.options.template.toLowerCase().indexOf("hh")), f = d?1:0, g = d?12:23; for (b = f; g >= b; b++)a = e?this.leadZero(b):b, c.push([b, a]); return c}, fillMinute:function(){var a, b, c = this.fillCommon("m"), d = - 1 !== this.options.template.indexOf("mm"); for (b = 0; 59 >= b; b += this.options.minuteStep)a = d?this.leadZero(b):b, c.push([b, a]); return c}, fillSecond:function(){var a, b, c = this.fillCommon("s"), d = - 1 !== this.options.template.indexOf("ss"); for (b = 0; 59 >= b; b += this.options.secondStep)a = d?this.leadZero(b):b, c.push([b, a]); return c}, fillAmpm:function(){var a = - 1 !== this.options.template.indexOf("a"), b = ( - 1 !== this.options.template.indexOf("A"), [["am", a?"am":"AM"], ["pm", a?"pm":"PM"]]); return b}, getValue:function(b){var c, d = {}, e = this, f = !1; return a.each(this.map, function(a){if ("ampm" !== a){var b = "day" === a?1:0; return d[a] = e["$" + a]?parseInt(e["$" + a].val(), 10):b, isNaN(d[a])?(f = !0, !1):void 0}}), f?"":(this.$ampm && (d.hour = 12 === d.hour?"am" === this.$ampm.val()?0:12:"am" === this.$ampm.val()?d.hour:d.hour + 12), c = moment([d.year, d.month, d.day, d.hour, d.minute, d.second]), this.highlight(c), b = void 0 === b?this.options.format:b, null === b?c.isValid()?c:null:c.isValid()?c.format(b):"")}, setValue:function(b){function c(b, c){var d = {}; return b.children("option").each(function(b, e){var f, g = a(e).attr("value"); "" !== g && (f = Math.abs(g - c), ("undefined" == typeof d.distance || f < d.distance) && (d = {value:g, distance:f}))}), d.value}if (b){var d = "string" == typeof b?moment(b, this.options.format):moment(b), e = this, f = {}; d.isValid() && (a.each(this.map, function(a, b){"ampm" !== a && (f[a] = d[b[1]]())}), this.$ampm && (f.hour >= 12?(f.ampm = "pm", f.hour > 12 && (f.hour -= 12)):(f.ampm = "am", 0 === f.hour && (f.hour = 12))), a.each(f, function(a, b){e["$" + a] && ("minute" === a && e.options.minuteStep > 1 && e.options.roundTime && (b = c(e["$" + a], b)), "second" === a && e.options.secondStep > 1 && e.options.roundTime && (b = c(e["$" + a], b)), e["$" + a].val(b))}), this.options.smartDays && this.fillCombo("day"), this.$element.val(d.format(this.options.format)).change())}}, highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color", this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor || (this.borderColor = this.$widget.find("select").css("border-color")), this.$widget.find("select").css("border-color", "red"))}, leadZero:function(a){return 9 >= a?"0" + a:a}, destroy:function(){this.$widget.remove(), this.$element.removeData("combodate").show()}}, a.fn.combodate = function(c){var d, e = Array.apply(null, arguments); return e.shift(), "getValue" === c && this.length && (d = this.eq(0).data("combodate"))?d.getValue.apply(d, e):this.each(function(){var d = a(this), f = d.data("combodate"), g = "object" == typeof c && c; f || d.data("combodate", f = new b(this, g)), "string" == typeof c && "function" == typeof f[c] && f[c].apply(f, e)})}, a.fn.combodate.defaults = {format:"DD-MM-YYYY HH:mm", template:"D / MMM / YYYY H : mm", value:null, minYear:1970, maxYear:2015, yearDescending:!0, minuteStep:5, secondStep:1, firstItem:"empty", errorClass:null, roundTime:!0, smartDays:!1}}(window.jQuery), function(a){"use strict"; var b = function(c){this.init("combodate", c, b.defaults), this.options.viewformat || (this.options.viewformat = this.options.format), c.combodate = a.fn.editableutils.tryParseJson(c.combodate, !0), this.options.combodate = a.extend({}, b.defaults.combodate, c.combodate, {format:this.options.format, template:this.options.template})}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {render:function(){this.$input.combodate(this.options.combodate), "bs3" === a.fn.editableform.engine && this.$input.siblings().find("select").addClass("form-control"), this.options.inputclass && this.$input.siblings().find("select").addClass(this.options.inputclass)}, value2html:function(a, c){var d = a?a.format(this.options.viewformat):""; b.superclass.value2html.call(this, d, c)}, html2value:function(a){return a?moment(a, this.options.viewformat):null}, value2str:function(a){return a?a.format(this.options.format):""}, str2value:function(a){return a?moment(a, this.options.format):null}, value2submit:function(a){return this.value2str(a)}, value2input:function(a){this.$input.combodate("setValue", a)}, input2value:function(){return this.$input.combodate("getValue", null)}, activate:function(){this.$input.siblings(".combodate").find("select").eq(0).focus()}, autosubmit:function(){}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {tpl:'<input type="text">', inputclass:null, format:"YYYY-MM-DD", viewformat:null, template:"D / MMM / YYYY", combodate:null}), a.fn.editabletypes.combodate = b}(window.jQuery), function(a){"use strict"; var b = a.fn.editableform.Constructor.prototype.initInput; a.extend(a.fn.editableform.Constructor.prototype, {initTemplate:function(){this.$form = a(a.fn.editableform.template), this.$form.find(".control-group").addClass("form-group"), this.$form.find(".editable-error-block").addClass("help-block")}, initInput:function(){b.apply(this); var c = null === this.input.options.inputclass || this.input.options.inputclass === !1, d = "input-sm", e = "text,select,textarea,password,email,url,tel,number,range,time,typeaheadjs".split(","); ~a.inArray(this.input.type, e) && (this.input.$input.addClass("form-control"), c && (this.input.options.inputclass = d, this.input.$input.addClass(d))); for (var f = this.$form.find(".editable-buttons"), g = c?[d]:this.input.options.inputclass.split(" "), h = 0; h < g.length; h++)"input-lg" === g[h].toLowerCase() && f.find("button").removeClass("btn-sm").addClass("btn-lg")}}), a.fn.editableform.buttons = '<button type="submit" class="btn btn-primary btn-sm editable-submit"><i class="glyphicon glyphicon-ok"></i></button><button type="button" class="btn btn-default btn-sm editable-cancel"><i class="glyphicon glyphicon-remove"></i></button>', a.fn.editableform.errorGroupClass = "has-error", a.fn.editableform.errorBlockClass = null, a.fn.editableform.engine = "bs3"}(window.jQuery), function(a){"use strict"; a.extend(a.fn.editableContainer.Popup.prototype, {containerName:"popover", containerDataName:"bs.popover", innerCss:".popover-content", defaults:a.fn.popover.Constructor.DEFAULTS, initContainer:function(){a.extend(this.containerOptions, {trigger:"manual", selector:!1, content:" ", template:this.defaults.template}); var b; this.$element.data("template") && (b = this.$element.data("template"), this.$element.removeData("template")), this.call(this.containerOptions), b && this.$element.data("template", b)}, innerShow:function(){this.call("show")}, innerHide:function(){this.call("hide")}, innerDestroy:function(){this.call("destroy")}, setContainerOption:function(a, b){this.container().options[a] = b}, setPosition:function(){!function(){var a = this.tip(), b = "function" == typeof this.options.placement?this.options.placement.call(this, a[0], this.$element[0]):this.options.placement, c = /\s?auto?\s?/i, d = c.test(b); d && (b = b.replace(c, "") || "top"); var e = this.getPosition(), f = a[0].offsetWidth, g = a[0].offsetHeight; if (d){var h = this.$element.parent(), i = b, j = document.documentElement.scrollTop || document.body.scrollTop, k = "body" == this.options.container?window.innerWidth:h.outerWidth(), l = "body" == this.options.container?window.innerHeight:h.outerHeight(), m = "body" == this.options.container?0:h.offset().left; b = "bottom" == b && e.top + e.height + g - j > l?"top":"top" == b && e.top - j - g < 0?"bottom":"right" == b && e.right + f > k?"left":"left" == b && e.left - f < m?"right":b, a.removeClass(i).addClass(b)}var n = this.getCalculatedOffset(b, e, f, g); this.applyPlacement(n, b)}.call(this.container())}})}(window.jQuery), function(a){function b(){return new Date(Date.UTC.apply(Date, arguments))}function c(b, c){var d, e = a(b).data(), f = {}, g = new RegExp("^" + c.toLowerCase() + "([A-Z])"), c = new RegExp("^" + c.toLowerCase()); for (var h in e)c.test(h) && (d = h.replace(g, function(a, b){return b.toLowerCase()}), f[d] = e[h]); return f}function d(b){var c = {}; if (k[b] || (b = b.split("-")[0], k[b])){var d = k[b]; return a.each(j, function(a, b){b in d && (c[b] = d[b])}), c}}var e = function(b, c){this._process_options(c), this.element = a(b), this.isInline = !1, this.isInput = this.element.is("input"), this.component = this.element.is(".date")?this.element.find(".add-on, .btn"):!1, this.hasInput = this.component && this.element.find("input").length, this.component && 0 === this.component.length && (this.component = !1), this.picker = a(l.template), this._buildEvents(), this._attachEvents(), this.isInline?this.picker.addClass("datepicker-inline").appendTo(this.element):this.picker.addClass("datepicker-dropdown dropdown-menu"), this.o.rtl && (this.picker.addClass("datepicker-rtl"), this.picker.find(".prev i, .next i").toggleClass("icon-arrow-left icon-arrow-right")), this.viewMode = this.o.startView, this.o.calendarWeeks && this.picker.find("tfoot th.today").attr("colspan", function(a, b){return parseInt(b) + 1}), this._allow_update = !1, this.setStartDate(this.o.startDate), this.setEndDate(this.o.endDate), this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled), this.fillDow(), this.fillMonths(), this._allow_update = !0, this.update(), this.showMode(), this.isInline && this.show()}; e.prototype = {constructor:e, _process_options:function(b){this._o = a.extend({}, this._o, b); var c = this.o = a.extend({}, this._o), d = c.language; switch (k[d] || (d = d.split("-")[0], k[d] || (d = i.language)), c.language = d, c.startView){case 2:case"decade":c.startView = 2; break; case 1:case"year":c.startView = 1; break; default:c.startView = 0}switch (c.minViewMode){case 1:case"months":c.minViewMode = 1; break; case 2:case"years":c.minViewMode = 2; break; default:c.minViewMode = 0}c.startView = Math.max(c.startView, c.minViewMode), c.weekStart %= 7, c.weekEnd = (c.weekStart + 6) % 7; var e = l.parseFormat(c.format); c.startDate !== - 1 / 0 && (c.startDate = l.parseDate(c.startDate, e, c.language)), 1 / 0 !== c.endDate && (c.endDate = l.parseDate(c.endDate, e, c.language)), c.daysOfWeekDisabled = c.daysOfWeekDisabled || [], a.isArray(c.daysOfWeekDisabled) || (c.daysOfWeekDisabled = c.daysOfWeekDisabled.split(/[,\s]*/)), c.daysOfWeekDisabled = a.map(c.daysOfWeekDisabled, function(a){return parseInt(a, 10)})}, _events:[], _secondaryEvents:[], _applyEvents:function(a){for (var b, c, d = 0; d < a.length; d++)b = a[d][0], c = a[d][1], b.on(c)}, _unapplyEvents:function(a){for (var b, c, d = 0; d < a.length; d++)b = a[d][0], c = a[d][1], b.off(c)}, _buildEvents:function(){this.isInput?this._events = [[this.element, {focus:a.proxy(this.show, this), keyup:a.proxy(this.update, this), keydown:a.proxy(this.keydown, this)}]]:this.component && this.hasInput?this._events = [[this.element.find("input"), {focus:a.proxy(this.show, this), keyup:a.proxy(this.update, this), keydown:a.proxy(this.keydown, this)}], [this.component, {click:a.proxy(this.show, this)}]]:this.element.is("div")?this.isInline = !0:this._events = [[this.element, {click:a.proxy(this.show, this)}]], this._secondaryEvents = [[this.picker, {click:a.proxy(this.click, this)}], [a(window), {resize:a.proxy(this.place, this)}], [a(document), {mousedown:a.proxy(function(a){this.element.is(a.target) || this.element.find(a.target).size() || this.picker.is(a.target) || this.picker.find(a.target).size() || this.hide()}, this)}]]}, _attachEvents:function(){this._detachEvents(), this._applyEvents(this._events)}, _detachEvents:function(){this._unapplyEvents(this._events)}, _attachSecondaryEvents:function(){this._detachSecondaryEvents(), this._applyEvents(this._secondaryEvents)}, _detachSecondaryEvents:function(){this._unapplyEvents(this._secondaryEvents)}, _trigger:function(b, c){var d = c || this.date, e = new Date(d.getTime() + 6e4 * d.getTimezoneOffset()); this.element.trigger({type:b, date:e, format:a.proxy(function(a){var b = a || this.o.format; return l.formatDate(d, b, this.o.language)}, this)})}, show:function(a){this.isInline || this.picker.appendTo("body"), this.picker.show(), this.height = this.component?this.component.outerHeight():this.element.outerHeight(), this.place(), this._attachSecondaryEvents(), a && a.preventDefault(), this._trigger("show")}, hide:function(){this.isInline || this.picker.is(":visible") && (this.picker.hide().detach(), this._detachSecondaryEvents(), this.viewMode = this.o.startView, this.showMode(), this.o.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val()) && this.setValue(), this._trigger("hide"))}, remove:function(){this.hide(), this._detachEvents(), this._detachSecondaryEvents(), this.picker.remove(), delete this.element.data().datepicker, this.isInput || delete this.element.data().date}, getDate:function(){var a = this.getUTCDate(); return new Date(a.getTime() + 6e4 * a.getTimezoneOffset())}, getUTCDate:function(){return this.date}, setDate:function(a){this.setUTCDate(new Date(a.getTime() - 6e4 * a.getTimezoneOffset()))}, setUTCDate:function(a){this.date = a, this.setValue()}, setValue:function(){var a = this.getFormattedDate(); this.isInput?this.element.val(a):this.component && this.element.find("input").val(a)}, getFormattedDate:function(a){return void 0 === a && (a = this.o.format), l.formatDate(this.date, a, this.o.language)}, setStartDate:function(a){this._process_options({startDate:a}), this.update(), this.updateNavArrows()}, setEndDate:function(a){this._process_options({endDate:a}), this.update(), this.updateNavArrows()}, setDaysOfWeekDisabled:function(a){this._process_options({daysOfWeekDisabled:a}), this.update(), this.updateNavArrows()}, place:function(){if (!this.isInline){var b = parseInt(this.element.parents().filter(function(){return"auto" != a(this).css("z-index")}).first().css("z-index")) + 10, c = this.component?this.component.parent().offset():this.element.offset(), d = this.component?this.component.outerHeight(!0):this.element.outerHeight(!0); this.picker.css({top:c.top + d, left:c.left, zIndex:b})}}, _allow_update:!0, update:function(){if (this._allow_update){var a, b = !1; arguments && arguments.length && ("string" == typeof arguments[0] || arguments[0]instanceof Date)?(a = arguments[0], b = !0):(a = this.isInput?this.element.val():this.element.data("date") || this.element.find("input").val(), delete this.element.data().date), this.date = l.parseDate(a, this.o.format, this.o.language), b && this.setValue(), this.viewDate = this.date < this.o.startDate?new Date(this.o.startDate):this.date > this.o.endDate?new Date(this.o.endDate):new Date(this.date), this.fill()}}, fillDow:function(){var a = this.o.weekStart, b = "<tr>"; if (this.o.calendarWeeks){var c = '<th class="cw">&nbsp;</th>'; b += c, this.picker.find(".datepicker-days thead tr:first-child").prepend(c)}for (; a < this.o.weekStart + 7; )b += '<th class="dow">' + k[this.o.language].daysMin[a++ % 7] + "</th>"; b += "</tr>", this.picker.find(".datepicker-days thead").append(b)}, fillMonths:function(){for (var a = "", b = 0; 12 > b; )a += '<span class="month">' + k[this.o.language].monthsShort[b++] + "</span>"; this.picker.find(".datepicker-months td").html(a)}, setRange:function(b){b && b.length?this.range = a.map(b, function(a){return a.valueOf()}):delete this.range, this.fill()}, getClassNames:function(b){var c = [], d = this.viewDate.getUTCFullYear(), e = this.viewDate.getUTCMonth(), f = this.date.valueOf(), g = new Date; return b.getUTCFullYear() < d || b.getUTCFullYear() == d && b.getUTCMonth() < e?c.push("old"):(b.getUTCFullYear() > d || b.getUTCFullYear() == d && b.getUTCMonth() > e) && c.push("new"), this.o.todayHighlight && b.getUTCFullYear() == g.getFullYear() && b.getUTCMonth() == g.getMonth() && b.getUTCDate() == g.getDate() && c.push("today"), f && b.valueOf() == f && c.push("active"), (b.valueOf() < this.o.startDate || b.valueOf() > this.o.endDate || - 1 !== a.inArray(b.getUTCDay(), this.o.daysOfWeekDisabled)) && c.push("disabled"), this.range && (b > this.range[0] && b < this.range[this.range.length - 1] && c.push("range"), - 1 != a.inArray(b.valueOf(), this.range) && c.push("selected")), c}, fill:function(){var c, d = new Date(this.viewDate), e = d.getUTCFullYear(), f = d.getUTCMonth(), g = this.o.startDate !== - 1 / 0?this.o.startDate.getUTCFullYear(): - 1 / 0, h = this.o.startDate !== - 1 / 0?this.o.startDate.getUTCMonth(): - 1 / 0, i = 1 / 0 !== this.o.endDate?this.o.endDate.getUTCFullYear():1 / 0, j = 1 / 0 !== this.o.endDate?this.o.endDate.getUTCMonth():1 / 0; this.date && this.date.valueOf(), this.picker.find(".datepicker-days thead th.datepicker-switch").text(k[this.o.language].months[f] + " " + e), this.picker.find("tfoot th.today").text(k[this.o.language].today).toggle(this.o.todayBtn !== !1), this.picker.find("tfoot th.clear").text(k[this.o.language].clear).toggle(this.o.clearBtn !== !1), this.updateNavArrows(), this.fillMonths(); var m = b(e, f - 1, 28, 0, 0, 0, 0), n = l.getDaysInMonth(m.getUTCFullYear(), m.getUTCMonth()); m.setUTCDate(n), m.setUTCDate(n - (m.getUTCDay() - this.o.weekStart + 7) % 7); var o = new Date(m); o.setUTCDate(o.getUTCDate() + 42), o = o.valueOf(); for (var p, q = []; m.valueOf() < o; ){if (m.getUTCDay() == this.o.weekStart && (q.push("<tr>"), this.o.calendarWeeks)){var r = new Date( + m + 864e5 * ((this.o.weekStart - m.getUTCDay() - 7) % 7)), s = new Date( + r + 864e5 * ((11 - r.getUTCDay()) % 7)), t = new Date( + (t = b(s.getUTCFullYear(), 0, 1)) + 864e5 * ((11 - t.getUTCDay()) % 7)), u = (s - t) / 864e5 / 7 + 1; q.push('<td class="cw">' + u + "</td>")}p = this.getClassNames(m), p.push("day"); var v = this.o.beforeShowDay(m); void 0 === v?v = {}:"boolean" == typeof v?v = {enabled:v}:"string" == typeof v && (v = {classes:v}), v.enabled === !1 && p.push("disabled"), v.classes && (p = p.concat(v.classes.split(/\s+/))), v.tooltip && (c = v.tooltip), p = a.unique(p), q.push('<td class="' + p.join(" ") + '"' + (c?' title="' + c + '"':"") + ">" + m.getUTCDate() + "</td>"), m.getUTCDay() == this.o.weekEnd && q.push("</tr>"), m.setUTCDate(m.getUTCDate() + 1)}this.picker.find(".datepicker-days tbody").empty().append(q.join("")); var w = this.date && this.date.getUTCFullYear(), x = this.picker.find(".datepicker-months").find("th:eq(1)").text(e).end().find("span").removeClass("active"); w && w == e && x.eq(this.date.getUTCMonth()).addClass("active"), (g > e || e > i) && x.addClass("disabled"), e == g && x.slice(0, h).addClass("disabled"), e == i && x.slice(j + 1).addClass("disabled"), q = "", e = 10 * parseInt(e / 10, 10); var y = this.picker.find(".datepicker-years").find("th:eq(1)").text(e + "-" + (e + 9)).end().find("td"); e -= 1; for (var z = - 1; 11 > z; z++)q += '<span class="year' + ( - 1 == z?" old":10 == z?" new":"") + (w == e?" active":"") + (g > e || e > i?" disabled":"") + '">' + e + "</span>", e += 1; y.html(q)}, updateNavArrows:function(){if (this._allow_update){var a = new Date(this.viewDate), b = a.getUTCFullYear(), c = a.getUTCMonth(); switch (this.viewMode){case 0:this.o.startDate !== - 1 / 0 && b <= this.o.startDate.getUTCFullYear() && c <= this.o.startDate.getUTCMonth()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}), 1 / 0 !== this.o.endDate && b >= this.o.endDate.getUTCFullYear() && c >= this.o.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"}); break; case 1:case 2:this.o.startDate !== - 1 / 0 && b <= this.o.startDate.getUTCFullYear()?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}), 1 / 0 !== this.o.endDate && b >= this.o.endDate.getUTCFullYear()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}}}, click:function(c){c.preventDefault(); var d = a(c.target).closest("span, td, th"); if (1 == d.length)switch (d[0].nodeName.toLowerCase()){case"th":switch (d[0].className){case"datepicker-switch":this.showMode(1); break; case"prev":case"next":var e = l.modes[this.viewMode].navStep * ("prev" == d[0].className? - 1:1); switch (this.viewMode){case 0:this.viewDate = this.moveMonth(this.viewDate, e); break; case 1:case 2:this.viewDate = this.moveYear(this.viewDate, e)}this.fill(); break; case"today":var f = new Date; f = b(f.getFullYear(), f.getMonth(), f.getDate(), 0, 0, 0), this.showMode( - 2); var g = "linked" == this.o.todayBtn?null:"view"; this._setDate(f, g); break; case"clear":var h; this.isInput?h = this.element:this.component && (h = this.element.find("input")), h && h.val("").change(), this._trigger("changeDate"), this.update(), this.o.autoclose && this.hide()}break; case"span":if (!d.is(".disabled")){if (this.viewDate.setUTCDate(1), d.is(".month")){var i = 1, j = d.parent().find("span").index(d), k = this.viewDate.getUTCFullYear(); this.viewDate.setUTCMonth(j), this._trigger("changeMonth", this.viewDate), 1 === this.o.minViewMode && this._setDate(b(k, j, i, 0, 0, 0, 0))} else{var k = parseInt(d.text(), 10) || 0, i = 1, j = 0; this.viewDate.setUTCFullYear(k), this._trigger("changeYear", this.viewDate), 2 === this.o.minViewMode && this._setDate(b(k, j, i, 0, 0, 0, 0))}this.showMode( - 1), this.fill()}break; case"td":if (d.is(".day") && !d.is(".disabled")){var i = parseInt(d.text(), 10) || 1, k = this.viewDate.getUTCFullYear(), j = this.viewDate.getUTCMonth(); d.is(".old")?0 === j?(j = 11, k -= 1):j -= 1:d.is(".new") && (11 == j?(j = 0, k += 1):j += 1), this._setDate(b(k, j, i, 0, 0, 0, 0))}}}, _setDate:function(a, b){b && "date" != b || (this.date = new Date(a)), b && "view" != b || (this.viewDate = new Date(a)), this.fill(), this.setValue(), this._trigger("changeDate"); var c; this.isInput?c = this.element:this.component && (c = this.element.find("input")), c && (c.change(), !this.o.autoclose || b && "date" != b || this.hide())}, moveMonth:function(a, b){if (!b)return a; var c, d, e = new Date(a.valueOf()), f = e.getUTCDate(), g = e.getUTCMonth(), h = Math.abs(b); if (b = b > 0?1: - 1, 1 == h)d = - 1 == b?function(){return e.getUTCMonth() == g}:function(){return e.getUTCMonth() != c}, c = g + b, e.setUTCMonth(c), (0 > c || c > 11) && (c = (c + 12) % 12); else{for (var i = 0; h > i; i++)e = this.moveMonth(e, b); c = e.getUTCMonth(), e.setUTCDate(f), d = function(){return c != e.getUTCMonth()}}for (; d(); )e.setUTCDate(--f), e.setUTCMonth(c); return e}, moveYear:function(a, b){return this.moveMonth(a, 12 * b)}, dateWithinRange:function(a){return a >= this.o.startDate && a <= this.o.endDate}, keydown:function(a){if (this.picker.is(":not(:visible)"))return 27 == a.keyCode && this.show(), void 0; var b, c, d, e = !1; switch (a.keyCode){case 27:this.hide(), a.preventDefault(); break; case 37:case 39:if (!this.o.keyboardNavigation)break; b = 37 == a.keyCode? - 1:1, a.ctrlKey?(c = this.moveYear(this.date, b), d = this.moveYear(this.viewDate, b)):a.shiftKey?(c = this.moveMonth(this.date, b), d = this.moveMonth(this.viewDate, b)):(c = new Date(this.date), c.setUTCDate(this.date.getUTCDate() + b), d = new Date(this.viewDate), d.setUTCDate(this.viewDate.getUTCDate() + b)), this.dateWithinRange(c) && (this.date = c, this.viewDate = d, this.setValue(), this.update(), a.preventDefault(), e = !0); break; case 38:case 40:if (!this.o.keyboardNavigation)break; b = 38 == a.keyCode? - 1:1, a.ctrlKey?(c = this.moveYear(this.date, b), d = this.moveYear(this.viewDate, b)):a.shiftKey?(c = this.moveMonth(this.date, b), d = this.moveMonth(this.viewDate, b)):(c = new Date(this.date), c.setUTCDate(this.date.getUTCDate() + 7 * b), d = new Date(this.viewDate), d.setUTCDate(this.viewDate.getUTCDate() + 7 * b)), this.dateWithinRange(c) && (this.date = c, this.viewDate = d, this.setValue(), this.update(), a.preventDefault(), e = !0); break; case 13:this.hide(), a.preventDefault(); break; case 9:this.hide()}if (e){this._trigger("changeDate"); var f; this.isInput?f = this.element:this.component && (f = this.element.find("input")), f && f.change()}}, showMode:function(a){a && (this.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + a))), this.picker.find(">div").hide().filter(".datepicker-" + l.modes[this.viewMode].clsName).css("display", "block"), this.updateNavArrows()}}; var f = function(b, c){this.element = a(b), this.inputs = a.map(c.inputs, function(a){return a.jquery?a[0]:a}), delete c.inputs, a(this.inputs).datepicker(c).bind("changeDate", a.proxy(this.dateUpdated, this)), this.pickers = a.map(this.inputs, function(b){return a(b).data("datepicker")}), this.updateDates()}; f.prototype = {updateDates:function(){this.dates = a.map(this.pickers, function(a){return a.date}), this.updateRanges()}, updateRanges:function(){var b = a.map(this.dates, function(a){return a.valueOf()}); a.each(this.pickers, function(a, c){c.setRange(b)})}, dateUpdated:function(b){var c = a(b.target).data("datepicker"), d = c.getUTCDate(), e = a.inArray(b.target, this.inputs), f = this.inputs.length; if ( - 1 != e){if (d < this.dates[e])for (; e >= 0 && d < this.dates[e]; )this.pickers[e--].setUTCDate(d); else if (d > this.dates[e])for (; f > e && d > this.dates[e]; )this.pickers[e++].setUTCDate(d); this.updateDates()}}, remove:function(){a.map(this.pickers, function(a){a.remove()}), delete this.element.data().datepicker}}; var g = a.fn.datepicker, h = a.fn.datepicker = function(b){var g = Array.apply(null, arguments); g.shift(); var h; return this.each(function(){var j = a(this), k = j.data("datepicker"), l = "object" == typeof b && b; if (!k){var m = c(this, "date"), n = a.extend({}, i, m, l), o = d(n.language), p = a.extend({}, i, o, m, l); if (j.is(".input-daterange") || p.inputs){var q = {inputs:p.inputs || j.find("input").toArray()}; j.data("datepicker", k = new f(this, a.extend(p, q)))} else j.data("datepicker", k = new e(this, p))}return"string" == typeof b && "function" == typeof k[b] && (h = k[b].apply(k, g), void 0 !== h)?!1:void 0}), void 0 !== h?h:this}, i = a.fn.datepicker.defaults = {autoclose:!1, beforeShowDay:a.noop, calendarWeeks:!1, clearBtn:!1, daysOfWeekDisabled:[], endDate:1 / 0, forceParse:!0, format:"mm/dd/yyyy", keyboardNavigation:!0, language:"en", minViewMode:0, rtl:!1, startDate: - 1 / 0, startView:0, todayBtn:!1, todayHighlight:!1, weekStart:0}, j = a.fn.datepicker.locale_opts = ["format", "rtl", "weekStart"]; a.fn.datepicker.Constructor = e; var k = a.fn.datepicker.dates = {en:{days:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], daysShort:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], daysMin:["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], months:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthsShort:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], today:"Today", clear:"Clear"}}, l = {modes:[{clsName:"days", navFnc:"Month", navStep:1}, {clsName:"months", navFnc:"FullYear", navStep:1}, {clsName:"years", navFnc:"FullYear", navStep:10}], isLeapYear:function(a){return 0 === a % 4 && 0 !== a % 100 || 0 === a % 400 }, getDaysInMonth:function(a, b){return[31, l.isLeapYear(a)?29:28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][b]}, validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g, nonpunctuation:/[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g, parseFormat:function(a){var b = a.replace(this.validParts, "\0").split("\0"), c = a.match(this.validParts); if (!b || !b.length || !c || 0 === c.length)throw new Error("Invalid date format."); return{separators:b, parts:c}}, parseDate:function(c, d, f){if (c instanceof Date)return c; if ("string" == typeof d && (d = l.parseFormat(d)), /^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(c)){var g, h, i = /([\-+]\d+)([dmwy])/, j = c.match(/([\-+]\d+)([dmwy])/g); c = new Date; for (var m = 0; m < j.length; m++)switch (g = i.exec(j[m]), h = parseInt(g[1]), g[2]){case"d":c.setUTCDate(c.getUTCDate() + h); break; case"m":c = e.prototype.moveMonth.call(e.prototype, c, h); break; case"w":c.setUTCDate(c.getUTCDate() + 7 * h); break; case"y":c = e.prototype.moveYear.call(e.prototype, c, h)}return b(c.getUTCFullYear(), c.getUTCMonth(), c.getUTCDate(), 0, 0, 0)}var n, o, g, j = c && c.match(this.nonpunctuation) || [], c = new Date, p = {}, q = ["yyyy", "yy", "M", "MM", "m", "mm", "d", "dd"], r = {yyyy:function(a, b){return a.setUTCFullYear(b)}, yy:function(a, b){return a.setUTCFullYear(2e3 + b)}, m:function(a, b){for (b -= 1; 0 > b; )b += 12; for (b %= 12, a.setUTCMonth(b); a.getUTCMonth() != b; )a.setUTCDate(a.getUTCDate() - 1); return a}, d:function(a, b){return a.setUTCDate(b)}}; r.M = r.MM = r.mm = r.m, r.dd = r.d, c = b(c.getFullYear(), c.getMonth(), c.getDate(), 0, 0, 0); var s = d.parts.slice(); if (j.length != s.length && (s = a(s).filter(function(b, c){return - 1 !== a.inArray(c, q)}).toArray()), j.length == s.length){for (var m = 0, t = s.length; t > m; m++){if (n = parseInt(j[m], 10), g = s[m], isNaN(n))switch (g){case"MM":o = a(k[f].months).filter(function(){var a = this.slice(0, j[m].length), b = j[m].slice(0, a.length); return a == b}), n = a.inArray(o[0], k[f].months) + 1; break; case"M":o = a(k[f].monthsShort).filter(function(){var a = this.slice(0, j[m].length), b = j[m].slice(0, a.length); return a == b}), n = a.inArray(o[0], k[f].monthsShort) + 1}p[g] = n}for (var u, m = 0; m < q.length; m++)u = q[m], u in p && !isNaN(p[u]) && r[u](c, p[u])}return c}, formatDate:function(b, c, d){"string" == typeof c && (c = l.parseFormat(c)); var e = {d:b.getUTCDate(), D:k[d].daysShort[b.getUTCDay()], DD:k[d].days[b.getUTCDay()], m:b.getUTCMonth() + 1, M:k[d].monthsShort[b.getUTCMonth()], MM:k[d].months[b.getUTCMonth()], yy:b.getUTCFullYear().toString().substring(2), yyyy:b.getUTCFullYear()}; e.dd = (e.d < 10?"0":"") + e.d, e.mm = (e.m < 10?"0":"") + e.m; for (var b = [], f = a.extend([], c.separators), g = 0, h = c.parts.length; h >= g; g++)f.length && b.push(f.shift()), b.push(e[c.parts[g]]); return b.join("")}, headTemplate:'<thead><tr><th class="prev"><i class="icon-arrow-left"/></th><th colspan="5" class="datepicker-switch"></th><th class="next"><i class="icon-arrow-right"/></th></tr></thead>', contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>', footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr><tr><th colspan="7" class="clear"></th></tr></tfoot>'}; l.template = '<div class="datepicker"><div class="datepicker-days"><table class=" table-condensed">' + l.headTemplate + "<tbody></tbody>" + l.footTemplate + "</table>" + "</div>" + '<div class="datepicker-months">' + '<table class="table-condensed">' + l.headTemplate + l.contTemplate + l.footTemplate + "</table>" + "</div>" + '<div class="datepicker-years">' + '<table class="table-condensed">' + l.headTemplate + l.contTemplate + l.footTemplate + "</table>" + "</div>" + "</div>", a.fn.datepicker.DPGlobal = l, a.fn.datepicker.noConflict = function(){return a.fn.datepicker = g, this}, a(document).on("focus.datepicker.data-api click.datepicker.data-api", '[data-provide="datepicker"]', function(b){var c = a(this); c.data("datepicker") || (b.preventDefault(), h.call(c, "show"))}), a(function(){h.call(a('[data-provide="datepicker-inline"]'))})}(window.jQuery), function(a){"use strict"; a.fn.bdatepicker = a.fn.datepicker.noConflict(), a.fn.datepicker || (a.fn.datepicker = a.fn.bdatepicker); var b = function(a){this.init("date", a, b.defaults), this.initPicker(a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {initPicker:function(b, c){this.options.viewformat || (this.options.viewformat = this.options.format), b.datepicker = a.fn.editableutils.tryParseJson(b.datepicker, !0), this.options.datepicker = a.extend({}, c.datepicker, b.datepicker, {format:this.options.viewformat}), this.options.datepicker.language = this.options.datepicker.language || "en", this.dpg = a.fn.bdatepicker.DPGlobal, this.parsedFormat = this.dpg.parseFormat(this.options.format), this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat)}, render:function(){this.$input.bdatepicker(this.options.datepicker), this.options.clear && (this.$clear = a('<a href="#"></a>').html(this.options.clear).click(a.proxy(function(a){a.preventDefault(), a.stopPropagation(), this.clear()}, this)), this.$tpl.parent().append(a('<div class="editable-clear">').append(this.$clear)))}, value2html:function(a, c){var d = a?this.dpg.formatDate(a, this.parsedViewFormat, this.options.datepicker.language):""; b.superclass.value2html.call(this, d, c)}, html2value:function(a){return this.parseDate(a, this.parsedViewFormat)}, value2str:function(a){return a?this.dpg.formatDate(a, this.parsedFormat, this.options.datepicker.language):""}, str2value:function(a){return this.parseDate(a, this.parsedFormat)}, value2submit:function(a){return this.value2str(a)}, value2input:function(a){this.$input.bdatepicker("update", a)}, input2value:function(){return this.$input.data("datepicker").date}, activate:function(){}, clear:function(){this.$input.data("datepicker").date = null, this.$input.find(".active").removeClass("active"), this.options.showbuttons || this.$input.closest("form").submit()}, autosubmit:function(){this.$input.on("mouseup", ".day", function(b){if (!a(b.currentTarget).is(".old") && !a(b.currentTarget).is(".new")){var c = a(this).closest("form"); setTimeout(function(){c.submit()}, 200)}})}, parseDate:function(a, b){var c, d = null; return a && (d = this.dpg.parseDate(a, b, this.options.datepicker.language), "string" == typeof a && (c = this.dpg.formatDate(d, b, this.options.datepicker.language), a !== c && (d = null))), d}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {tpl:'<div class="editable-date well"></div>', inputclass:null, format:"yyyy-mm-dd", viewformat:null, datepicker:{weekStart:0, startView:0, minViewMode:0, autoclose:!1}, clear:"&times; clear"}), a.fn.editabletypes.date = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("datefield", a, b.defaults), this.initPicker(a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.date), a.extend(b.prototype, {render:function(){this.$input = this.$tpl.find("input"), this.setClass(), this.setAttr("placeholder"), this.$tpl.bdatepicker(this.options.datepicker), this.$input.off("focus keydown"), this.$input.keyup(a.proxy(function(){this.$tpl.removeData("date"), this.$tpl.bdatepicker("update")}, this))}, value2input:function(a){this.$input.val(a?this.dpg.formatDate(a, this.parsedViewFormat, this.options.datepicker.language):""), this.$tpl.bdatepicker("update")}, input2value:function(){return this.html2value(this.$input.val())}, activate:function(){a.fn.editabletypes.text.prototype.activate.call(this)}, autosubmit:function(){}}), b.defaults = a.extend({}, a.fn.editabletypes.date.defaults, {tpl:'<div class="input-append date"><input type="text"/><span class="add-on"><i class="icon-th"></i></span></div>', inputclass:"input-small", datepicker:{weekStart:0, startView:0, minViewMode:0, autoclose:!0}}), a.fn.editabletypes.datefield = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("datetime", a, b.defaults), this.initPicker(a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.abstractinput), a.extend(b.prototype, {initPicker:function(b, c){this.options.viewformat || (this.options.viewformat = this.options.format), b.datetimepicker = a.fn.editableutils.tryParseJson(b.datetimepicker, !0), this.options.datetimepicker = a.extend({}, c.datetimepicker, b.datetimepicker, {format:this.options.viewformat}), this.options.datetimepicker.language = this.options.datetimepicker.language || "en", this.dpg = a.fn.datetimepicker.DPGlobal, this.parsedFormat = this.dpg.parseFormat(this.options.format, this.options.formatType), this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat, this.options.formatType)}, render:function(){this.$input.datetimepicker(this.options.datetimepicker), this.$input.on("changeMode", function(){var b = a(this).closest("form").parent(); setTimeout(function(){b.triggerHandler("resize")}, 0)}), this.options.clear && (this.$clear = a('<a href="#"></a>').html(this.options.clear).click(a.proxy(function(a){a.preventDefault(), a.stopPropagation(), this.clear()}, this)), this.$tpl.parent().append(a('<div class="editable-clear">').append(this.$clear)))}, value2html:function(a, c){var d = a?this.dpg.formatDate(this.toUTC(a), this.parsedViewFormat, this.options.datetimepicker.language, this.options.formatType):""; return c?(b.superclass.value2html.call(this, d, c), void 0):d}, html2value:function(a){var b = this.parseDate(a, this.parsedViewFormat); return b?this.fromUTC(b):null}, value2str:function(a){return a?this.dpg.formatDate(this.toUTC(a), this.parsedFormat, this.options.datetimepicker.language, this.options.formatType):""}, str2value:function(a){var b = this.parseDate(a, this.parsedFormat); return b?this.fromUTC(b):null}, value2submit:function(a){return this.value2str(a)}, value2input:function(a){a && this.$input.data("datetimepicker").setDate(a)}, input2value:function(){var a = this.$input.data("datetimepicker"); return a.date?a.getDate():null}, activate:function(){}, clear:function(){this.$input.data("datetimepicker").date = null, this.$input.find(".active").removeClass("active"), this.options.showbuttons || this.$input.closest("form").submit()}, autosubmit:function(){this.$input.on("mouseup", ".minute", function(){var b = a(this).closest("form"); setTimeout(function(){b.submit()}, 200)})}, toUTC:function(a){return a?new Date(a.valueOf() - 6e4 * a.getTimezoneOffset()):a}, fromUTC:function(a){return a?new Date(a.valueOf() + 6e4 * a.getTimezoneOffset()):a}, parseDate:function(a, b){var c, d = null; return a && (d = this.dpg.parseDate(a, b, this.options.datetimepicker.language, this.options.formatType), "string" == typeof a && (c = this.dpg.formatDate(d, b, this.options.datetimepicker.language, this.options.formatType), a !== c && (d = null))), d}}), b.defaults = a.extend({}, a.fn.editabletypes.abstractinput.defaults, {tpl:'<div class="editable-date well"></div>', inputclass:null, format:"yyyy-mm-dd hh:ii", formatType:"standard", viewformat:null, datetimepicker:{todayHighlight:!1, autoclose:!1}, clear:"&times; clear"}), a.fn.editabletypes.datetime = b}(window.jQuery), function(a){"use strict"; var b = function(a){this.init("datetimefield", a, b.defaults), this.initPicker(a, b.defaults)}; a.fn.editableutils.inherit(b, a.fn.editabletypes.datetime), a.extend(b.prototype, {render:function(){this.$input = this.$tpl.find("input"), this.setClass(), this.setAttr("placeholder"), this.$tpl.datetimepicker(this.options.datetimepicker), this.$input.off("focus keydown"), this.$input.keyup(a.proxy(function(){this.$tpl.removeData("date"), this.$tpl.datetimepicker("update")}, this))}, value2input:function(a){this.$input.val(this.value2html(a)), this.$tpl.datetimepicker("update")}, input2value:function(){return this.html2value(this.$input.val())}, activate:function(){a.fn.editabletypes.text.prototype.activate.call(this)}, autosubmit:function(){}}), b.defaults = a.extend({}, a.fn.editabletypes.datetime.defaults, {tpl:'<div class="input-append date"><input type="text"/><span class="add-on"><i class="icon-th"></i></span></div>', inputclass:"input-medium", datetimepicker:{todayHighlight:!1, autoclose:!0}}), a.fn.editabletypes.datetimefield = b}(window.jQuery);