//dna.js v0.2.2 ~~ dnajs.org/license.html
var dna={};dna.util={toCamel:function(a){function b(a,b){return b.toUpperCase()}return(""+a).replace(/\-(.)/g,b)},toCode:function(a){function b(a){return"-"+a.toLowerCase()}return(""+a).replace(/([A-Z])/g,b).replace(/\s|^-/g,"")},value:function(a,b){return"string"==typeof b&&(b=b.split(".")),null===a||void 0===a||void 0===b?null:1===b.length?a[b[0]]:this.value(a[b[0]],b.slice(1))},realTruth:function(a){function b(){return/^(f|false|0)$/i.test(a)}function c(){return a instanceof Array&&0===a.length}return a?!c()&&!b():!1},call:function(a,b){function c(d,e){d?1==e.length?d[e[0]](b):c(d[e[0]],e.slice(1)):dna.core.berserk('Invalid name before "'+e[0]+'" in: '+a)}return"string"==typeof a?c(window,a.split(".")):a instanceof Function&&a(b),b},apply:function(a,b,c){return a.find(b).addBack(b).each(c)},toElem:function(a,b){return a instanceof jQuery?a:$(a.target?a.target:b)},deleteElem:function(){return $(this).remove()},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.util.slideFade(a,b,!0)},slideFadeOut:function(a,b){return dna.util.slideFade(a,b,!1)},slideFadeToggle:function(a,b){return dna.util.slideFade(a,b,!a.is(":visible"))},slideFadeDelete:function(a){return dna.util.slideFadeOut(a,dna.util.deleteElem)}},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(){/^data-dna-prop-/.test(this.name)?c.push(this.name.replace(/^data-dna-prop-/,""),this.value.replace(dna.compile.regexDnaBasePairs,"")):3===this.value.split(dna.compile.regexDnaBasePair).length&&d.push(this.name.replace(/^data-dna-attr-/,""),this.value.split(dna.compile.regexDnaBasePair))}var b=$(this),c=[],d=[];return $.each(b.get(0).attributes,a),c.length>0&&(dna.compile.setupNucleotide(b).data().dnaRules.props=c),d.length>0&&(dna.compile.setupNucleotide(b).data().dnaRules.attrs=d),b},getDataField:function(a,b){return $.trim(a.data("dna-"+b).replace(dna.compile.regexDnaBasePairs,""))},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-dna-"+b+"]").each(d).removeAttr("data-dna-"+b)},template:function(a){function b(){$(this).data().dnaRules={template:$(this).attr("id")}}var c=$("#"+a);c.length||dna.core.berserk("Template not found: "+a),c.find(".dna-template").addBack().each(b);var d=c.find("*").addBack();return d.filter(dna.compile.isDnaField).each(dna.compile.field),dna.compile.rules(d,"array").addClass("dna-array"),dna.compile.rules(d,"class",!0),dna.compile.rules(d,"require"),dna.compile.rules(d,"missing"),dna.compile.rules(d,"truthy"),dna.compile.rules(d,"falsey"),d.each(dna.compile.propsAndAttrs).removeAttr("id"),dna.store.stash(c)}},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,index:a.index(),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=d+"-"+b+"-instance";dna.compile.setupNucleotide(a.parent()).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-array").each(c).each(b),dna.store.templates[d]},getTemplate:function(a){return dna.store.templates[a]||dna.compile.template(a)}},dna.events={runner:function(a,b){return a=a.closest("[data-dna-"+b+"]"),dna.util.call(a.data("dna-"+b),a)},handleClick:function(a){return dna.events.runner($(a.target),"click")},handleChange:function(a){return dna.events.runner($(a.target),"change")},setup:function(){$(document).click(dna.events.handleClick).change(dna.events.handleChange)}},$(dna.events.setup),dna.core={inject:function(a,b,c,d){function e(a,e){function f(a){return-1!==h.indexOf(typeof a)}var g="object"==typeof b?dna.util.value(b,e):"[count]"===e?c:"[value]"===e?b:null,h=["string","number","boolean"];f(g)&&(a=d.html?a.html(g):a.text(g))}function f(a,c){for(var d=0;d1&&(a.toggleClass(c[1],e),c[2]&&a.toggleClass(c[2],!e))}function i(a,c){var d=dna.util.value(b,c.field);d&&dna.clone(c.name,d,{container:a})}function j(){var a=$(this),c=a.data().dnaRules;c.text&&e(a,c.text),c.props&&f(a,c.props),c.attrs&&g(a,c.attrs),c.class&&h(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&&i(a,c.loop)}return a.find(".dna-array").remove(),a.find(".dna-nucleotide").addBack(".dna-nucleotide").each(j),a.data("dna-model",b)},replicate:function(a,b,c,d){var e=a.elem.clone(!0,!0);a.clones++,dna.core.inject(e,b,c,d);var f=".dna-contains-"+a.name,g=d.container?d.container.find(f).addBack(f):a.container;return g[d.top?"prepend":"append"](e),d.callback&&d.callback(e,b),d.fade&&dna.util.slideFadeIn(e),e},unload:function(a,b,c){b.error||dna.api.clone(a,b,c)},berserk:function(a){throw"dna.js error -> "+a}},dna.api={clone:function(a,b,c){var d={fade:!1,top:!1,container:null,empty:!1,html:!1,callback:null};$.extend(d,c);var e=dna.store.getTemplate(a);e.nested&&!d.container&&dna.core.berserk("Container missing for nested template: "+a),d.empty&&dna.api.empty(a);for(var f=b instanceof Array?b:[b],g=$(),h=0;h