var identity=function(t){return t},isArray=function(t){return $.isArray(t)},isObject=function(t){return!isArray(t)&&t instanceof Object},isNumber=function(t){return t instanceof Number},isFunction=function(t){return t instanceof Function},indexOf=function(t,e){return $.inArray(e,t)},inArray=function(t,e){return-1!==indexOf(t,e)},foreach=function(t,e){for(var n in t)t.hasOwnProperty(n)&&e(t[n],n,t)},last=function(t){return t[t.length-1]},argumentsToArray=function(t){return Array.prototype.slice.call(t)},extend=function(){var t={};return foreach(argumentsToArray(arguments),(function(e){foreach(e,(function(e,n){t[n]=e}))})),t},mapToArray=function(t,e){var n=[];return foreach(t,(function(t,r,i){n.push(e(t,r,i))})),n},mapToObject=function(t,e,n){var r={};return foreach(t,(function(t,i,a){i=n?n(i,t):i,r[i]=e(t,i,a)})),r},map=function(t,e,n){return isArray(t)?mapToArray(t,e):mapToObject(t,e,n)},pluck=function(t,e){return map(t,(function(t){return t[e]}))},filter=function(t,e){var n;return isArray(t)?(n=[],foreach(t,(function(t,r,i){e(t,r,i)&&n.push(t)}))):(n={},foreach(t,(function(t,r,i){e(t,r,i)&&(n[r]=t)}))),n},call=function(t,e,n){return map(t,(function(t,r){return t[e].apply(t,n||[])}))},throttle=function(t,e){var n=null;return function(){var r=arguments;null===n&&(n=setTimeout((function(){n=null}),t),e.apply(this,r))}},mixinPubSub=function(t){var e={};return(t=t||{}).publish=function(t,n){foreach(e[t],(function(t){t(n)}))},t.subscribe=function(t,n){e[t]=e[t]||[],e[t].push(n)},t.unsubscribe=function(t){foreach(e,(function(e){var n=indexOf(e,t);-1!==n&&e.splice(n,1)}))},t};!function(t){"use strict";var e=function(t,e){var n,r=mixinPubSub(),i=t.$;return r.getType=function(){throw'implement me (return type. "text", "radio", etc.)'},r.$=function(t){return t?i.find(t):i},r.disable=function(){r.$().prop("disabled",!0),r.publish("isEnabled",!1)},r.enable=function(){r.$().prop("disabled",!1),r.publish("isEnabled",!0)},e.equalTo=function(t,e){return t===e},e.publishChange=function(t,i){var a=r.get();e.equalTo(a,n)||r.publish("change",{e:t,domElement:i}),n=a},r},n=function(t,n){var r=e(t,n);return r.get=function(){return r.$().val()},r.set=function(t){r.$().val(t)},r.clear=function(){r.set("")},n.buildSetter=function(t){return function(e){t.call(r,e)}},r},r=function(t,e){t=isArray(t)?t:[t],e=isArray(e)?e:[e];var n=!0;return t.length!==e.length?n=!1:foreach(t,(function(t){inArray(e,t)||(n=!1)})),n},i=function(t){var e={},r=n(t,e);return r.getType=function(){return"button"},r.$().on("change",(function(t){e.publishChange(t,this)})),r},a=function(e){var i={},a=n(e,i);return a.getType=function(){return"checkbox"},a.get=function(){var e=[];return a.$().filter(":checked").each((function(){e.push(t(this).val())})),e},a.set=function(e){e=isArray(e)?e:[e],a.$().each((function(){t(this).prop("checked",!1)})),foreach(e,(function(t){a.$().filter('[value="'+t+'"]').prop("checked",!0)}))},i.equalTo=r,a.$().change((function(t){i.publishChange(t,this)})),a},u=function(t){var e=m(t,{});return e.getType=function(){return"email"},e},c=function(n){var r={},i=e(n,r);return i.getType=function(){return"file"},i.get=function(){return last(i.$().val().split("\\"))},i.clear=function(){this.$().each((function(){t(this).wrap("