//dna.js v0.4.3 ~~ dnajs.org/license.html
var dna={clone:function(a,b,c){var d=$.extend({fade:!1,top:!1,container:null,empty:!1,html:!1,callback:null},c),e=dna.store.getTemplate(a);e.nested&&!d.container&&dna.core.berserk("Container missing for nested template: "+a),d.empty&&dna.empty(a);for(var f=b instanceof Array?b:[b],g=$(),h=0;h0&&c(window,a.split(".")),d}},dna.ui={toElem:function(a,b){return a instanceof jQuery?a:a?$(a.target):$(b)},deleteElem:function(a){var b=dna.ui.toElem(a,this);return dna.core.remove(b),b},slideFade:function(a,b,c){function d(){a.css(h)}var e={opacity:0,transition:"opacity 0s ease 0s"},f={opacity:1,transition:"opacity 0.4s ease-in"},g={opacity:0,transition:"opacity 0.4s ease-out"},h={transition:"opacity 0s ease 0s"};return window.setTimeout(d,1e3),c?a.css(e).hide().slideDown({complete:b}).css(f):a.css(g).slideUp({complete:b}),a},slideFadeIn:function(a,b){return dna.ui.slideFade(a,b,!0)},slideFadeOut:function(a,b){return dna.ui.slideFade(a,b,!1)},slideFadeToggle:function(a,b){return dna.ui.slideFade(a,b,a.is(":hidden"))},slideFadeDelete:function(a){return dna.ui.slideFadeOut(a,dna.ui.deleteElem)},slidingFlasher:function(a,b){return a.is(":hidden")?dna.ui.slideFadeIn(a,b):a.hide().fadeIn()},smoothMove:function(a,b){function c(){var c=d.clone();b?a.after(d.hide()).before(c):a.before(d.hide()).after(c),dna.ui.slideFadeIn(d),dna.ui.slideFadeDelete(c)}var d=b?a.prev():a.next();d.length&&c()},focus:function(a){return a.focus()}},dna.placeholder={setup:function(){function a(){var a=$(this).stop();return dna.getClones(a.data().placeholder).length?a.fadeOut():a.fadeIn()}$("[data-placeholder]").each(a)}},$(dna.placeholder.setup),dna.pageToken={put:function(a,b){return sessionStorage[a+window.location.pathname]=JSON.stringify(b),b},get:function(a,b){var c=sessionStorage[a+window.location.pathname];return void 0===c?b:JSON.parse(c)}},dna.panels={key:function(a){return"#"+a.attr("id")+"-panels"},display:function(a,b,c){function d(){dna.pageToken.put(g,b),c&&f.data().hash&&window.history.pushState(null,null,"#"+f.data().hash)}var e,f,g=dna.panels.key(a),h=a.find(".menu-item");void 0===b&&(b=dna.pageToken.get(g,0)),b=Math.max(0,Math.min(b,h.length-1)),h.removeClass("selected").eq(b).addClass("selected"),e=$(g).children().hide().removeClass("displayed"),f=e.eq(b).fadeIn().addClass("displayed"),d(),dna.util.apply(a.data().callback,f)},rotate:function(a){var b=$(a.target).closest(".menu-item"),c=b.closest(".dna-menu");dna.panels.display(c,c.find(".menu-item").index(b),!0)},reload:function(a){dna.panels.display($("#"+a))},refresh:function(){function a(a){return a.filter("[data-hash="+d+"]").index()}function b(a){return a.first().closest(".dna-template").length>0}function c(){var c=$(this),e=dna.panels.key(c),f=$(e).children().addClass("panel");if(0===c.find(".menu-item").length&&c.children().addClass("menu-item"),!b(f)&&!b(c.children())){var g=d&&f.first().data().hash?a(f):dna.pageToken.get(e,0);dna.panels.display(c,g)}}var d=window.location.hash.slice(1);$(".dna-menu").each(c)},setup:function(){dna.panels.refresh(),$(document).on("click",".dna-menu .menu-item",dna.panels.rotate)}},$(dna.panels.setup),dna.compile={regexDnaField:/^[\s]*(~~|\{\{).*(~~|\}\})[\s]*$/,regexDnaBasePair:/~~|{{|}}/,regexDnaBasePairs:/~~|\{\{|\}\}/g,setupNucleotide:function(a){return void 0===a.data().dnaRules&&(a.data().dnaRules={}),a.addClass("dna-nucleotide")},isDnaField:function(){var a=$(this)[0].childNodes[0];return a&&a.nodeValue&&a.nodeValue.match(dna.compile.regexDnaField)},field:function(){var a=dna.compile.setupNucleotide($(this));return a.data().dnaRules.text=$.trim(a.text()).replace(dna.compile.regexDnaBasePairs,""),a.empty()},propsAndAttrs:function(){function a(a,b){g.push(a),a=a.replace(/^data-prop-/,"").toLowerCase(),b=b.replace(dna.compile.regexDnaBasePairs,""),e.push(a,b),"checked"===a&&d.is("input")?d.addClass("dna-update-model").data().dnaField=b:"selected"===a&&d.is("option")&&(d.parent().addClass("dna-update-model").end().data().dnaField=b)}function b(a,b){var c=b.split(dna.compile.regexDnaBasePair);"[value]"===c[1]&&(c[1]=!0),f.push(a.replace(/^data-attr-/,""),c),g.push(a);var e="input:not(:checkbox, :radio)";"value"===a&&d.is(e)&&""===c[0]&&""===c[2]&&(d.addClass("dna-update-model").data().dnaField=c[1])}function c(){/^data-prop-/.test(this.name)?a(this.name,this.value):3===this.value.split(dna.compile.regexDnaBasePair).length&&b(this.name,this.value)}var d=$(this),e=[],f=[],g=[];return $.each(d.get(0).attributes,c),e.length>0&&(dna.compile.setupNucleotide(d).data().dnaRules.props=e),f.length>0&&(dna.compile.setupNucleotide(d).data().dnaRules.attrs=f),d.data().transform&&(dna.compile.setupNucleotide(d).data().dnaRules.transform=d.data().transform),d.data().callback&&(dna.compile.setupNucleotide(d).data().dnaRules.callback=d.data().callback),d.removeAttr(g.join(" "))},getDataField:function(a,b){return $.trim(a.data(b).replace(dna.compile.regexDnaBasePairs,""))},subTemplateName:function(a,b){var c=a instanceof jQuery?dna.getClone(a).data().dnaRules.template:a;return c+"-"+b+"-instance"},rules:function(a,b,c){function d(){var a=dna.compile.setupNucleotide($(this)),d=dna.compile.getDataField(a,b);a.data().dnaRules[b]=c?d.split(","):d}return a.filter("[data-"+b+"]").each(d).removeAttr("data-"+b)},separators:function(a){function b(){return 3===this.nodeType&&!/\S/.test(this.nodeValue)}function c(a,c,d){c&&(a.contents().last().filter(b).remove(),a.append($("").addClass(d).html(c)))}function d(){var a=$(this);c(a,a.data().separator,"dna-separator"),c(a,a.data().lastSeparator,"dna-last-separator")}a.find(".dna-template, .dna-sub-clone").addBack().each(d)},template:function(a){function b(){$(this).data().dnaRules={template:$(this).attr("id")}}function c(){$(this).attr("type",$(this).data().attrType)}var d=$("#"+a);d.length||dna.core.berserk("Template not found: "+a),d.find(".dna-template").addBack().each(b).removeAttr("id");var e=d.find("*").addBack();return e.filter(dna.compile.isDnaField).each(dna.compile.field),dna.compile.rules(e,"array").addClass("dna-sub-clone"),dna.compile.rules(e,"class",!0),dna.compile.rules(e,"require"),dna.compile.rules(e,"missing"),dna.compile.rules(e,"truthy"),dna.compile.rules(e,"falsey"),dna.compile.rules(e.filter("select"),"option").addClass("dna-update-model"),e.each(dna.compile.propsAndAttrs),dna.compile.separators(d),$("input[data-attr-type]").each(c),dna.store.stash(d)}},dna.store={templates:{},stash:function(a){function b(){var a=$(this),b=a.data().dnaRules.template,c={name:b,elem:a,container:a.parent().addClass("dna-container").addClass("dna-contains-"+b),nested:0!==a.parent().closest(".dna-clone").length,separators:a.find(".dna-separator, .dna-last-separator").length,index:a.index(),elemsAbove:a.index()>0,elemsBelow:a.nextAll().length>0,clones:0};dna.store.templates[b]=c,a.removeClass("dna-template").addClass("dna-clone").addClass(b).detach()}function c(){var a=$(this),b=a.data().dnaRules.array,c=dna.compile.subTemplateName(d,b);dna.compile.setupNucleotide(a.parent().addClass("dna-array")).data().dnaRules.loop={name:c,field:b},a.data().dnaRules.template=c}var d=a.data().dnaRules.template;return a.find(".dna-template").addBack().each(b),a.find(".dna-sub-clone").each(c).each(b),dna.store.templates[d]},getTemplate:function(a){return dna.store.templates[a]||dna.compile.template(a)}},dna.events={initializers:[],elementSetup:function(a,b){function c(){dna.util.apply($(this).data().onLoad,[$(this),b])}var d="[data-on-load]",e=a?a.find(d).addBack(d):$(d);return e.not(".dna-initialized").each(c).addClass("dna-initialized")},runInitializers:function(a,b){function c(){var b=this.selector?a.find(this.selector).addBack(this.selector):a;dna.util.apply(this.func,[b.addClass("dna-initialized")].concat(this.params))}return dna.events.elementSetup(a,b),$.each(dna.events.initializers,c),a},setup:function(){function a(a,b,c){return a=a.closest("[data-"+b+"]"),dna.util.apply(a.data(b),[a,c])}function b(b){function c(a){return a.dnaRules&&a.dnaRules.option||a.dnaField}function d(a,b){dna.getModel(a)[c(a.data())]=b(a)}function e(a){return a.val()}function f(a){return a.is(":checked")}function g(){d($(this),f)}function h(){var a=dna.getClone(i,{main:!0});0!==a.length&&(i.is("input:checkbox")?d(i,f):i.is("input:radio")?$("input:radio[name="+i.attr("name")+"]").each(g):i.is("input")||i.data().dnaRules.option?d(i,e):i.is("select")&&i.find("option").each(g),dna.refresh(a))}var i=$(b.target);i.hasClass("dna-update-model")&&h(),a(i,b.type.replace("key","key-"),b)}function c(b){13===b.which&&a($(b.target),"enter-key",b)}function d(b){function c(){function c(){f.dnaLastUpdated=Date.now(),f.dnaTimeoutId=void 0,a(e,"smart-update",b)}var g=f.smartThrottle?Number(f.smartThrottle):d;f.dnaLastValue=e.val(),f.dnaTimeoutId||(Date.now()1&&(a.toggleClass(c[1],e),c[2]&&a.toggleClass(c[2],!e))}function j(a,c){function e(a){dna.core.inject($(this),g[a],a,d)}function f(){h.remove(),dna.clone(c.name,g,{container:a,html:d.html})}var g=dna.util.value(b,c.field),h=a.children("."+c.name.replace(/[.]/g,"\\."));g?g.length===h.length?h.each(e):f():b[c.field]=[]}function k(){var a=$(this),c=a.data().dnaRules;c.transform&&dna.util.apply(c.transform,b),c.text&&e(a,c.text),c.props&&f(a,c.props),c.attrs&&g(a,c.attrs),c["class"]&&i(a,c["class"]),c.require&&a.toggle(void 0!==dna.util.value(b,c.require)),c.missing&&a.toggle(void 0===dna.util.value(b,c.missing)),c.truthy&&a.toggle(dna.util.realTruth(dna.util.value(b,c.truthy))),c.falsey&&a.toggle(!dna.util.realTruth(dna.util.value(b,c.falsey))),c.loop&&j(a,c.loop),c.option&&h(a,dna.util.value(b,c.option)),c.callback&&dna.util.apply(c.callback,a)}function l(a){a.filter(".dna-nucleotide").each(k),a.length&&l(a.children().not(".dna-sub-clone"))}return l(a),a.data().dnaModel=b,a},replicate:function(a,b,c,d){function e(){var b=h.children("."+a.name);b.find(".dna-separator").show().end().last().find(".dna-separator").hide(),b.find(".dna-last-separator").hide().end().eq(-2).find(".dna-last-separator").show().closest(".dna-clone").find(".dna-separator").hide()}var f=a.elem.clone(!0,!0);a.clones++,dna.core.inject(f,b,c,d);var g=".dna-contains-"+a.name.replace(/[.]/g,"\\."),h=d.container?d.container.find(g).addBack(g):a.container;return d.top&&!a.elemsAbove?h.prepend(f):d.top||a.elemsBelow?d.top?h.children().eq(a.index-1).after(f):h.children().eq(a.index+h.children().filter(".dna-clone").length).before(f):h.append(f),a.separators&&e(),dna.events.runInitializers(f,b),d.callback&&d.callback(f,b),d.fade&&dna.ui.slideFadeIn(f),f},remove:function(a){return a.remove(),dna.placeholder.setup(),a},berserk:function(a){throw"dna.js error -> "+a}};