{"version":3,"sources":["../../../config-wrap-start-default.js","../lib/almond.js","models/fieldErrorModel.js","models/fieldErrorCollection.js","models/fieldModel.js","models/fieldCollection.js","models/formErrorModel.js","models/formErrorCollection.js","models/formModel.js","models/formCollection.js","controllers/formData.js","controllers/fieldError.js","controllers/changeField.js","controllers/changeEmail.js","controllers/fieldCheckbox.js","controllers/fieldCheckboxList.js","controllers/fieldRadio.js","controllers/fieldNumber.js","controllers/mirrorField.js","controllers/confirmField.js","controllers/updateFieldModel.js","controllers/submitButton.js","controllers/submitDebug.js","controllers/getFormErrors.js","controllers/validateRequired.js","controllers/submitError.js","controllers/actionRedirect.js","controllers/actionSuccess.js","controllers/fieldSelect.js","controllers/coreSubmitResponse.js","controllers/fieldProduct.js","controllers/fieldTotal.js","controllers/fieldQuantity.js","models/calcModel.js","models/calcCollection.js","controllers/calculations.js","controllers/fieldDate.js","controllers/fieldRecaptcha.js","controllers/helpText.js","controllers/fieldTextareaRTE.js","controllers/fieldStarRating.js","controllers/fieldTerms.js","controllers/formContentFilters.js","views/fieldItem.js","views/beforeField.js","views/fieldErrorItem.js","views/fieldErrorCollection.js","views/inputLimit.js","views/afterField.js","views/fieldLayout.js","controllers/loadViews.js","controllers/formErrors.js","controllers/submit.js","views/fieldCollection.js","controllers/defaultFilters.js","controllers/loadControllers.js","views/beforeForm.js","views/formErrorItem.js","views/formErrorCollection.js","views/honeyPot.js","views/afterFormContent.js","views/beforeFormContent.js","views/formLayout.js","views/afterForm.js","views/mainLayout.js","main.js"],"names":["requirejs","require","define","undef","hasProp","obj","prop","hasOwn","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","config","starMap","charAt","length","nodeIdCompat","jsSuffixRegExp","test","replace","slice","concat","splice","join","indexOf","substring","makeRequire","relName","forceSync","args","aps","arguments","push","req","apply","makeNormalize","makeLoad","depName","value","defined","callDep","waiting","defining","main","Error","splitPrefix","prefix","index","makeConfig","makeMap","handlers","Object","prototype","hasOwnProperty","plugin","parts","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","model","Backbone","Model","extend","errorModel","collection","Collection","fieldErrorCollection","defaults","placeholder","label_pos","classes","reRender","mirror_field","confirm_field","clean","disabled","visible","initialize","this","set","options","formModel","get","listenTo","nfRadio","channel","resetModel","bind","changeModel","changeValue","trigger","formLoaded","beforeSubmit","addWrapperClass","cl","removeWrapperClass","fieldModel","comparator","models","validateFields","_","each","showFields","invoke","hideFields","FieldCollection","ErrorCollection","beforeForm","afterForm","beforeFields","afterFields","wrapper_class","element_class","hp","fieldErrors","extra","setting","formContentData","formContentLoadFilters","request","sortedArray","without","first","reply","getFieldByKey","addError","removeError","getExtra","addExtra","removeExtra","getForm","key","findWhere","msg","errors","add","remove","extraData","FormModel","FormCollection","controller","Marionette","nfForms","getForms","getField","form","fieldErrorModel","getError","targetID","targetError","changeField","blurField","el","val","radioChannel","emailReg","errorID","onChangeModelValue","emailKeyup","onBlurField","fieldID","emailChange","changeEmailErrorMsg","keyCode","registerRenderClasses","validateRequired","validateModelData","beforeUpdateField","getCalcValue","checked","addClass","closest","find","removeClass","calcValue","customClasses","customLabelClasses","maybeChecked","default_value","register","renderOptions","renderOtherText","selected","filter","opt","html","valueFound","option","isSelected","testValues","toString","template","show_other","data","currentValue","calc_value","tmp_opt","Number","calc","parent","clone","changeModelValue","updateCheckedClass","attr","maybeMinDefault","validateMinMax","min","$el","parseFloat","max","step","fieldNumberNumMinError","fieldNumberNumMaxError","testValue","parseInt","testStep","fieldNumberIncrementBy","listeningModel","registerMirror","targetModel","registerConfirm","confirmKeyup","confirmModel","formModal","registerConfirmListeners","console","log","confirmID","confirmFieldErrorMsg","compareValue","confirmValue","updateField","isArray","submitButton","registerHandlers","click","resetLabel","maybeEnable","maybeDisable","processingLabel","size","response","submitDebug","textStatus","jqXHR","formID","debug","debugMessages","message","style","getFormErrors","error","field","validateKeyup","customReqValidation","defaultReqValidation","maskPlaceholder","trim","valid","maybeError","validateRequiredField","submitErrors","fields","slug","last","show","actionRedirect","halt","redirect","window","location","actions","actionSubmit","success_message","form_id","top_of_success_message","offset","top","bottom_of_success_message","outerHeight","bottom_of_screen","scrollTop","height","top_of_screen","the_element_is_visible","animate","renderOtherAttributes","label","otherAttributes","type","settings","clear_complete","reset","hide_complete","renderProductQuantity","renderProduct","product_type","product_use_quantity","that","product_price","product_quantity","totalModel","productTotals","registerShipping","onFormLoaded","onChangeProduct","onChangeQuantity","shippingModel","shippingCost","fieldModels","productFields","quantityFields","productID","product","productPrice","updateTotal","productQuantity","newTotal","productField","quantity","toFixed","registerQuantity","on","changeCalc","targetCalcModel","CalcModel","dec","getCalc","CalcCollection","calcs","displayFields","registerCalcs","nfFrontEnd","use_merge_tags","calculations","fieldType","initDisplayField","updateDisplayFields","init","calcCollection","calcModel","setupCalc","eq","eqValues","match","RegExp","updateCalcFields","replaceKey","mexp","eval","isNumeric","tag","reTag","calcTag","reCalcTag","replaceAllKeys","re","calcName","applyLocaleFormatting","number","splitNumber","nfi18n","thousands_sep","formattedNumber","decimal_point","initDatepicker","view","dateObject","pikadayResponsive","format","outputFormat","pikadayOptions","yearRange","getYearRange","setDate","moment","yearRangeStart","yearRangeEnd","initRecaptcha","resetRecaptcha","updateResponse","grecaptcha","initHelpText","jBox","theme","content","initTextareaRTEs","clickExtra","meta_image_frame","currentContext","summernote","icons","align","alignCenter","alignJustify","alignLeft","alignRight","indent","outdent","bold","caret","close","code","eraser","italic","link","unlink","magic","minus","orderedlist","redo","square","table","underline","undo","unorderedlist","linkButton","context","mediaButton","toolbar","userSettings","uid","buttons","codemirror","lineNumbers","prettifyHtml","callbacks","onChange","linkMenu","next","replaceWith","class","innerHTML","ui","linkDropdown","buttonGroup","button","className","contents","tooltip","fieldTextareaRTEInsertLink","clickLinkButton","toggle","dropdown","children","render","fieldTextareaRTEInsertMedia","openMediaManager","open","wp","media","frames","title","fieldTextareaRTESelectAFile","text","media_attachment","state","toJSON","insertMedia","range","target","focus","textEl","urlEl","isNewWindowEl","hasClass","url","isNewWindow","filename","initRating","renderRatings","rating","default","num","keyUpExtra","currentTarget","addOption","new_option","viewFilters","loadFilters","addViewFilter","addLoadFilter","getViewFilters","getLoadFilters","priority","ItemView","tagName","onRender","unwrap","setElement","mask","isInteger","isFinite","Math","floor","templateHelpers","renderElement","tmpl","element_templates","renderLabel","renderLabelClasses","renderPlaceholder","customPlaceholder","renderWrapClass","wrapClass","old_classname","customWrapClass","renderClasses","maybeDisabled","disable_input","maybeDisableAutocomplete","disable_browser_autocomplete","maybeInputLimit","input_limit_type","input_limit","getHelpText","help_text","maybeRenderHelp","check_text","renderDescText","desc_text","renderCurrencyFormatting","replacedDecimal","replacedThousands","currency_symbol","events","change .nf-element","keyup .nf-element","click .nf-element","click .extra","blur .nf-element","fieldChange","fieldKeyup","fieldClick","extraClick","fieldBlur","onAttach","fieldErrorItem","CollectionView","childView","updateCount","count","regex","words","wordCount","charCount","limit","currentCount","InputLimitView","changeError","errorEl","errorCollectionView","inputLimitEl","inputLimitView","fieldItem","beforeField","afterField","LayoutView","regions","getTemplate","renderContainerClass","containerClass","desc_pos","container_class","fieldItemView","fieldLayoutView","getFieldItem","getFieldLayout","errorMsg","formErrorsCorrectErrors","omit","registerSubmitHandler","submit","validate","fieldDataDefaults","formData","JSON","stringify","action","security","ajaxNonce","ajax","adminAjax","cache","success","parseJSON","errorThrown","responseText","fieldLayout","FieldCollectionView","registerDefaultDataFilter","defaultFormContentLoad","defaultFormContentView","fieldCollection","currentFieldCollection","resetFields","FormData","FieldError","ChangeField","ChangeEmail","FieldCheckbox","FieldCheckboxList","FieldRadio","FieldNumber","MirrorField","ConfirmField","UpdateFieldModel","SubmitButton","SubmitDebug","GetFormErrors","ValidateRequired","SubmitError","ActionRedirect","ActionSuccess","FieldSelect","CoreSubmitResponse","FieldProduct","FieldTotal","FieldQuantity","Calculations","FieldDate","FieldRecaptcha","HelpText","FieldTextareaRTE","FieldStarRating","FieldTerms","FormContentFilters","LoadViews","FormErrors","Submit","DefaultFilters","formErrorItem","keyup .nf-field-hp","change .nf-field-hp","honeypotHoneypotError","HoneyPot","onShow","renderFieldsMarkedRequired","requiredFields","required","fieldsMarkedRequired","AfterFormContent","BeforeFormContent","beforeFormContent","formContent","afterFormContent","getEl","hide","formContentViewFilters","formContentView","BeforeForm","FormLayout","AfterForm","responseMsg","formLayout","originalVal","fn","prev","result","change","document","ready","$","formCollection","LoadControllers","mainLayout","NinjaForms","Application","forms","Renderer","urlParameters","object","compact","search","item","nf_resume","restart","onStart","layoutView","evaluate","interpolate","escape","variable","ninjaForms","start"],"mappings":"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","file":"front-end.js","sourcesContent":["(function () {\n","/**\n * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/almond for details\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*jslint sloppy: true */\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name && name.charAt(0) === \".\") {\n //If have a base name, try to normalize against it,\n //otherwise, assume it is a top-level require that will\n //be relative to baseUrl in the end.\n if (baseName) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // Node .js allowance:\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n //Lop off the last part of baseParts, so that . matches the\n //\"directory\" and not name of the baseName's module. For instance,\n //baseName of \"one/two/three\", maps to \"one/two/three.js\", but we\n //want the directory, \"one/two\" for this normalization.\n name = baseParts.slice(0, baseParts.length - 1).concat(name);\n\n //start trimDots\n for (i = 0; i < name.length; i += 1) {\n part = name[i];\n if (part === \".\") {\n name.splice(i, 1);\n i -= 1;\n } else if (part === \"..\") {\n if (i === 1 && (name[2] === '..' || name[0] === '..')) {\n //End of the line. Keep at least one non-dot\n //path segment at the front so it can be mapped\n //correctly to disk. Otherwise, there is likely\n //no path mapping for a path starting with '..'.\n //This can still fail, but catches the most reasonable\n //uses of ..\n break;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join(\"/\");\n } else if (name.indexOf('./') === 0) {\n // No baseName, so this is ID is resolved relative\n // to baseUrl, pull off the leading dot.\n name = name.substring(2);\n }\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relName) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relName));\n } else {\n name = normalize(name, relName);\n }\n } else {\n name = normalize(name, relName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relName);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, callback).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\ndefine(\"../lib/almond\", function(){});\n\n","define( 'models/fieldErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/fieldErrorCollection',['models/fieldErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/fieldModel',['models/fieldErrorCollection'], function( fieldErrorCollection ) {\n\tvar model = Backbone.Model.extend( {\n\t\tdefaults: {\n\t\t\tplaceholder: '',\n\t\t\tvalue: '',\n\t\t\tlabel_pos: '',\n\t\t\tclasses: 'ninja-forms-field',\n\t\t\treRender: false,\n\t\t\tmirror_field: false,\n\t\t\tconfirm_field: false,\n\t\t\tclean: true,\n\t\t\tdisabled: '',\n\t\t\tvisible: true\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'reset', this.resetModel );\n\n \t\tthis.bind( 'change', this.changeModel, this );\n \t\tthis.bind( 'change:value', this.changeValue, this );\n \t\tthis.set( 'errors', new fieldErrorCollection() );\n\n \t\t/*\n\t\t\t * Trigger an init event on two channels:\n\t\t\t * \n\t\t\t * fields\n\t\t\t * field-type\n\t\t\t *\n\t\t\t * This lets specific field types modify model attributes before anything uses them.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'init:model', this );\n\n\t\t\tif( 'undefined' != this.get( 'parentType' ) ){\n\t\t\t\tnfRadio.channel( this.get( 'parentType' ) ).trigger( 'init:model', this );\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * When we load our form, fire another event for this field.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'loaded', this.formLoaded );\n\t\t\n\t\t\t/*\n\t\t\t * Before we submit our form, send out a message so that this field can be modified if necessary.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'before:submit', this.beforeSubmit );\n\t\t},\n\n\t\tchangeModel: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:model', this );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:modelValue', this );\n\t\t},\n\n\t\taddWrapperClass: function( cl ) {\n\t\t\tthis.set( 'addWrapperClass', cl );\n\t\t},\n\n\t\tremoveWrapperClass: function( cl ) {\n\t\t\tthis.set( 'removeWrapperClass', cl );\n\t\t},\n\n\t\tformLoaded: function() {\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'formLoaded', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'formLoaded', this );\n\t\t},\n\n\t\tbeforeSubmit: function( formModel ) {\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'before:submit', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'before:submit', this );\n\t\t}\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldCollection',['models/fieldModel'], function( fieldModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: fieldModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n\t\t},\n\n\t\tvalidateFields: function() {\n\t\t\t_.each( this.models, function( fieldModel ) {\n\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', fieldModel );\n\t\t\t}, this );\n\t\t},\n\n\t\tshowFields: function() {\n\t\t\tthis.invoke( 'set', { visible: true } );\n\t\t},\n\n\t\thideFields: function() {\n\t\t\tthis.invoke( 'set', { visible: false } );\n\t\t}\n\t} );\n\treturn collection;\n} );\n","define( 'models/formErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/formErrorCollection',['models/formErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/formModel',[\n\t'models/fieldCollection',\n\t'models/formErrorCollection'\n\t], function(\n\t\tFieldCollection,\n\t\tErrorCollection\n\t) {\n\tvar model = Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tbeforeForm: '',\n\t\t\tafterForm: '',\n\t\t\tbeforeFields: '',\n\t\t\tafterFields: '',\n\t\t\twrapper_class: '',\n\t\t\telement_class: '',\n\t\t\thp: '',\n\t\t\tfieldErrors: {},\n\t\t\textra: {}\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\t// Loop over settings and map to attributes\n\t\t\t_.each( this.get( 'settings' ), function( value, setting ) {\n\t\t\t\tthis.set( setting, value );\n\t\t\t}, this );\n\n\t\t\tthis.set( 'loadedFields', this.get( 'fields' ) );\n\t\t\tthis.set( 'fields', new FieldCollection( this.get( 'fields' ), { formModel: this } ) );\n\t\t\tthis.set( 'errors', new ErrorCollection() );\n\n\t\t\t/*\n\t\t\t * Send out a radio message so that anyone who wants to filter our content data can register their filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).trigger( 'before:filterData', this );\n\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.get( 'formContentData' );\n\n\t\t\t/*\n\t\t\t * The formContentData variable used to be fieldContentsData.\n\t\t\t * If we don't have a 'formContentData' setting, check to see if we have an old 'fieldContentsData'.\n\t\t\t * \n\t\t\t * TODO: This is for backwards compatibility and should be removed eventually. \n\t\t\t */\n\t\t\tif ( ! formContentData ) {\n\t\t\t\tformContentData = this.get( 'fieldContentsData' );\n\t\t\t}\n\t\t\t\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentData = callback( formContentData, this, this );\n\t\t\t\n\t\t\tthis.set( 'formContentData', formContentData );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'init:model', this );\n\n\t\t\t// Fields\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:fieldByKey', this.getFieldByKey, this );\n\n\t\t\t// Form Errors\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:error', this.addError, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:error', this.removeError, this );\n\n\t\t\t// Extra Data\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:extra', this.getExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:extra', this.addExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:extra', this.removeExtra, this );\n\t\t\n\t\t\t// Respond to requests to get this model.\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:form', \t this.getForm, \t this );\n\n\t\t\tnfRadio.channel( 'form' ).trigger( 'loaded', this );\n\t\t\tnfRadio.channel( 'form' ).trigger( 'after:loaded', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'loaded', \t this );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Fields\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetFieldByKey: function( key ) {\n\t\t\treturn this.get( 'fields' ).findWhere( { key: key } );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Form Errors\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\taddError: function( id, msg ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\terrors.add( { id: id, msg: msg } );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:error', this, id, msg );\n\t\t},\n\n\t\tremoveError: function( id ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\tvar errorModel = errors.get( id );\n\t\t\terrors.remove( errorModel );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:error', this, id );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Extra Data\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tif( 'undefined' == typeof key ) return extraData;\n\t\t\treturn extraData[ key ];\n\t\t},\n\n\t\taddExtra: function( key, value ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\textraData[ key ] = value;\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:extra', this, key, value );\n\t\t},\n\n\t\tremoveExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tdelete extraData[ key ];\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:extra', this, key );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Get this form\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\t\tgetForm: function() {\n\t\t\treturn this;\n\t\t}\n\t} );\n\n\treturn model;\n} );\n","define( 'models/formCollection',['models/formModel'], function( formModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: formModel\n\t} );\n\treturn collection;\n} );\n","/*\n * Handles setting up our form.\n *\n * Holds a collection of our fields.\n * Replies to requests for field data.\n * Updates field models.\n */\ndefine('controllers/formData',['models/formModel', 'models/formCollection', 'models/fieldCollection', 'models/formErrorCollection'], function( FormModel, FormCollection, FieldCollection, ErrorCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\t/*\n\t\t\t * Setup our field collections.\n\t\t\t */\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Initialize our form collection (incase we have multiple forms on the page)\n\t\t\t */\n\t\t\tthis.collection = new FormCollection( nfForms );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'loaded', this.collection );\n\t\t\tnfRadio.channel( 'app' ).trigger( 'forms:loaded', this.collection );\n\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:form', this.getForm, this );\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:forms', this.getForms, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:field', this.getField, this );\n\t\t},\n\n\t\tgetForm: function( id ) {\n\t\t\treturn this.collection.get( id );\n\t\t},\n\n\t\tgetForms: function() {\n\t\t\treturn this.collection;\n\t\t},\n\n\t\tgetField: function( id ) {\n\t\t\tvar model = false;\n\t\t\t\n\t\t\t_.each( this.collection.models, function( form ) {\n\t\t\t\tif ( ! model ) {\n\t\t\t\t\tmodel = form.get( 'fields' ).get( id );\t\n\t\t\t\t}\t\t\t\n\t\t\t} );\n\t\t\treturn model;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldError',['models/fieldErrorModel'], function( fieldErrorModel ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'fields' ).reply( 'add:error', this.addError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'remove:error', this.removeError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:error', this.getError );\n\t\t},\n\n\t\taddError: function( targetID, id, msg ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\terrors.add( { 'id': id, 'msg' : msg } );\n\t\t\tmodel.set( 'errors', errors );\n\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\tmodel.set( 'clean', false );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'add:error', model, id, msg );\n\t\t},\n\n\t\tremoveError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\t\t\tif ( 'undefined' != typeof targetError ) {\n\t\t\t\terrors.remove( targetError );\n\t\t\t\tmodel.set( 'errors', errors );\n\t\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\t\tnfRadio.channel( 'fields' ).trigger( 'remove:error', model, id );\n\t\t\t}\n\t\t},\n\n\t\tgetError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\t\t\tif ( 'undefined' != targetError ) {\n\t\t\t\treturn targetError;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for replying to a Radio request stating that a field has been changed.\n *\n * This controller sends out a message to the field-specific channel, the field type channel,\n * and the public fields channel so that the data model can be updated.\n */\n\ndefine('controllers/changeField',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Reply to our request for changing a field.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'change:field', this.changeField );\n\n\t\t\t/*\n\t\t\t * If we blur our field, set the model attribute of 'clean' to false.\n\t\t\t * 'clean' tracks whether or not the user has every interacted with this element.\n\t\t\t * Some validation, like required, uses this to decide whether or not to add an error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.blurField );\n\t\t},\n\n\t\tchangeField: function( el, model ) {\n\t\t\t// Get our current value.\n\t\t\tvar value = nfRadio.channel( model.get( 'type' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : nfRadio.channel( model.get( 'parentType' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : jQuery( el ).val();\n\n\t\t\t// Set our 'isUpdated' flag to false.\n\t\t\tmodel.set( 'isUpdated', false );\n\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\n\t\t\t/*\n\t\t\t * Send out a message saying that we've changed a field.\n\t\t\t * The first channel is field id/key specific.\n\t\t\t * The second channel is the field type, i.e. text, email, radio\n\t\t\t * The third channel is a generic 'field' channel.\n\t\t\t *\n\t\t\t * If the submitted value you wish to store in the data model isn't the same as the value received above,\n\t\t\t * you can set that model in the actions below and set the 'isUpdated' model attribute to true.\n\t\t\t * i.e. model.set( 'isUpdated', true );\n\t\t\t */\n\t\t\tnfRadio.channel( 'field-' + model.get( 'id' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( model.get( 'type' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:field', el, model );\n\n\t\t\t/*\n\t\t\t * Send a request out on our nfAdmin channel to update our field model.\n\t\t\t * If the field model has a 'isUpdated' property of false, nothing will be updated.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', model, value );\n\t\t},\n\n\t\tblurField: function( el, model ) {\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeEmail',[], function() {\n\tvar radioChannel = nfRadio.channel( 'email' );\n\t// var emailReg = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\n\tvar emailReg = /^.+@.+\\..+/i;\n\tvar errorID = 'invalid-email';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.emailKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar value = jQuery( el ).val();\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\temailChange: function( value, fieldID ) {\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\tif( emailReg.test( value ) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an email field, track their keypresses and add the appropriate class.\n\t\t * If the value validates as an email, add a class of nf-pass\n\t\t * If the value does not validate as email, add a class of nf-fail\n\t\t * \n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\temailKeyup: function( el, model, keyCode ) {\n\t\t\t\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid email.\n\t\t\t */\n\t\t\n\t\t\t\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t} else if ( ! emailReg.test( value ) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t} else if ( emailReg.test( value ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * When we init our checkbox model, register our renderClasses() function\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'checkbox' ), 'init:model', this.registerRenderClasses );\n\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:required', this.validateRequired );\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:modelData', this.validateModelData );\n nfRadio.channel( 'checkbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'checkbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tbeforeUpdateField: function( el, model ) {\n\t\t\tvar checked = jQuery( el ).prop( 'checked' );\n\t\t\tif ( checked ) {\n\t\t\t\tvar value = 1;\n\t\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\t\t\t} else {\n\t\t\t\tvar value = 0;\n\t\t\t\tjQuery( el ).removeClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\treturn el[0].checked;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\t\t\treturn model.get( 'value' ) != 0;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tif ( 1 == fieldModel.get( 'value' ) ) {\n\t\t\t\tcalcValue = fieldModel.get( 'checked_calc_value' );\n\t\t\t} else {\n\t\t\t\tcalcValue = fieldModel.get( 'unchecked_calc_value' );\n\t\t\t}\n\n\t\t\treturn calcValue;\n\t\t},\n\n\t\tregisterRenderClasses: function( model ) {\n\t\t\tif ( 'checked' == model.get( 'default_value' ) ) {\n\t\t\t\tmodel.set( 'value', 1 );\n\t\t\t} else {\n\t\t\t\tmodel.set( 'value', 0 );\n\t\t\t}\n\t\t\tmodel.set( 'customClasses', this.customClasses );\n\t\t\tmodel.set( 'customLabelClasses', this.customLabelClasses );\n\t\t\tmodel.set( 'maybeChecked', this.maybeChecked );\n\t\t},\n\n\t\tcustomClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tcustomLabelClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked-label';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked-label', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tmaybeChecked: function() {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\treturn ' checked';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckboxList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listcheckbox' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n nfRadio.channel( 'listcheckbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'terms' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listcheckbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n nfRadio.channel( 'terms' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'options' ).length ) {\n var selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n model.set( 'value', selected );\n }\n\n },\n\n renderOptions: function() {\n var html = '';\n\n if ( '' == this.value ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n _.each( this.options, function( option, index ) {\n if ( option.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.fieldID = this.id;\n option.classes = this.classes;\n option.index = index;\n\n if( ( option.selected && \"0\" != option.selected ) && this.clean ){\n option.isSelected = true;\n } else {\n var testValues = _.map( this.value, function( value ) {\n return value.toString();\n } ); \n \n option.isSelected = ( -1 != testValues.indexOf( option.value.toString() ) );\n }\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-option' );\n html += template( option );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n var calc_value = 0;\n var options = fieldModel.get( 'options' );\n if ( 0 != options.length ) {\n _.each( fieldModel.get( 'value' ), function( val ) {\n var tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n calc_value = Number( calc_value ) + Number( tmp_opt.calc );\n } );\n }\n return calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n }\n }\n\n // if ( 1 == model.get( 'show_other' ) ) {\n // model.set( 'reRender', true );\n // }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRadio',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:modelValue', this.changeModelValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'init:model', this.register );\n\t\t\tnfRadio.channel( 'listradio' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:field', this.updateCheckedClass, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherText', this.renderOtherText );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\n\t\t\t\tif ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', selected.value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tchangeModelValue: function( model ) {\n\t\t\tif ( 1 == model.get( 'show_other' ) ) {\n\t\t\t\t// model.set( 'reRender', true );\n\t\t\t\tmodel.trigger( 'reRender');\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\t\t\tif ( '' == this.value ) {\n\t\t\t\tvar valueFound = true;\n\t\t\t} else {\n\t\t\t\tvar valueFound = false;\n\t\t\t}\n\t\t\t\n\t\t\t_.each( this.options, function( option, index ) {\n\t\t\t\tif ( option.value == this.value ) {\n\t\t\t\t\tvalueFound = true;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.selected = false;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.index = index;\n\n\t\t\t\t/*\n\t\t\t\t * If we haven't edited this field yet, use the default checked\n\t\t\t\t */\n\t\t\t\tif ( this.clean && 1 == this.selected ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else if ( this.value == option.value ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-option' );\n\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\tif ( 1 == this.show_other ) {\n\t\t\t\tif ( 'nf-other' == this.value ) {\n\t\t\t\t\tvalueFound = false;\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.id,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.value,\n\t\t\t\t\trenderOtherText: this.renderOtherText,\n\t\t\t\t\tvalueFound: valueFound\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other' );\n\t\t\t\thtml += template( data );\n\t\t\t}\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherText: function() {\n\t\t\tif ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n\t\t\t\tif ( 'nf-other' == this.currentValue ) {\n\t\t\t\t\tthis.currentValue = '';\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.fieldID,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.currentValue\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other-text' );\n\t\t\t\treturn template( data );\n\t\t\t}\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tif ( 0 != fieldModel.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( fieldModel.get( 'options' ), function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t/*\n\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t */\n\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\tselected = fieldModel.get( 'options' )[0];\n\t\t\t\t}\n\n\t\t\t\tvar calc_value = selected.calc;\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t},\n\n\t\tupdateCheckedClass: function( el, model ) {\n\t\t\tjQuery( '[name=\"' + jQuery( el ).attr( 'name' ) + '\"]' ).removeClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'ul' ).find( 'label' ).removeClass( 'nf-checked-label' );\n\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'li' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldNumber',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'number' ), 'init:model', this.maybeMinDefault );\n this.listenTo( nfRadio.channel( 'number' ), 'keyup:field', this.validateMinMax );\n },\n\n maybeMinDefault: function( model ) {\n\n if( '' == model.get( 'value' ) ){\n var min = model.get( 'num_min' );\n model.set( 'value', min );\n }\n },\n\n validateMinMax: function( el, model ) {\n var $el = jQuery( el );\n var value = parseFloat( $el.val() );\n var min = $el.attr( 'min' );\n var max = $el.attr( 'max' );\n var step = parseFloat( $el.attr( 'step' ) );\n\n if( min && value < min ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-min', formModel.get( 'settings' ).fieldNumberNumMinError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-min' );\n }\n\n if ( max && value > max ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-max', formModel.get( 'settings' ).fieldNumberNumMaxError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-max' );\n }\n\n var testValue = parseInt( value * 1000000000 );\n var testStep = parseInt( step * 1000000000 );\n\n if( value && 0 !== testValue % testStep ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-step', formModel.get( 'settings' ).fieldNumberIncrementBy + step );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-step' );\n }\n }\n\n });\n\n return controller;\n} );\n","define( 'controllers/mirrorField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\n\tvar controller = Marionette.Object.extend( {\n\t\tlisteningModel: '',\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerMirror );\n\t\t},\n\n\t\tregisterMirror: function( model ) {\n\t\t\tif ( model.get( 'mirror_field' ) ) {\n\t\t\t\tthis.listeningModel = model;\n\t\t\t\tvar targetID = model.get( 'mirror_field' );\n\t\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetID ), 'change:modelValue', this.changeValue );\n\t\t\t}\n\t\t},\n\n\t\tchangeValue: function( targetModel ) {\n\t\t\tthis.listeningModel.set( 'value', targetModel.get( 'value' ) );\n\t\t\t// this.listeningModel.set( 'reRender', true );\n\t\t\tthis.listeningModel.trigger( 'reRender' );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define( 'controllers/confirmField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar errorID = 'confirm-mismatch';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerConfirm );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.confirmKeyup );\n\t\t},\n\n\t\tregisterConfirm: function( confirmModel ) {\n\t\t\tif ( ! confirmModel.get( 'confirm_field' ) ) return;\n\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', function( formModal ){\n\t\t\t\tthis.registerConfirmListeners( confirmModel );\n\t\t\t});\n\t\t},\n\n\t\tregisterConfirmListeners: function( confirmModel ) {\n\t\t\t\n\t\t\tvar targetModel = nfRadio.channel( 'form-' + confirmModel.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\n\t\t\tconsole.log( targetModel );\n\n\t\t\ttargetModel.set( 'confirm_with', confirmModel.get( 'id' ) );\n\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + confirmModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t},\n\n\t\tchangeValue: function( model ) {\n\t\t\tif ( 'undefined' == typeof model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t} else {\n\t\t\t\tvar targetModel = model;\n\t\t\t\tvar confirmModel = radioChannel.request( 'get:field', targetModel.get( 'confirm_with' ) );\n\t\t\t}\n\t\t\tvar targetID = targetModel.get( 'id' );\n\t\t\tvar confirmID = confirmModel.get( 'id' );\n\n\t\t\tif ( '' == confirmModel.get( 'value' ) || confirmModel.get( 'value' ) == targetModel.get( 'value' ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t} else {\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t}\n\t\t},\n\t\t\n\t\tconfirmKeyup: function( el, model, keyCode ) {\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tif ( model.get( 'confirm_field' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar confirmID = model.get( 'id' );\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t\tvar compareValue = targetModel.get( 'value' );\n\t\t\t\tvar confirmValue = currentValue;\n\t\t\t} else if ( model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'confirm_with' ) );\n\t\t\t\tvar confirmID = confirmModel.get( 'id' );\n\t\t\t\tvar confirmValue = confirmModel.get( 'value' );\n\t\t\t\tvar compareValue = confirmValue;\n\t\t\t}\n\n\t\t\tif ( 'undefined' !== typeof confirmModel ) {\n\t\t\t\tif ( '' == confirmValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else if ( currentValue == compareValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/updateFieldModel',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'update:field', this.updateField );\n\t\t},\n\n\t\tupdateField: function( model, value ) {\n\t\t\tif ( ! model.get( 'isUpdated' ) ) {\n\t\t\t\tmodel.set( 'value', value );\n\t\t\t\tmodel.set( 'isUpdated', true );\n\t\t\t\t/*\n\t\t\t\t * If we're working with an array, it won't trigger a change event on the value attribute.\n\t\t\t\t * Instead, we have to manually trigger a change event.\n\t\t\t\t */ \n\t\t\t\tif ( _.isArray( value ) ) {\n\t\t\t\t\tmodel.trigger( 'change:value', model );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitButton',['controllers/submitButton'], function( submitButton ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'init:model', this.registerHandlers );\n\t\t},\n\n\t\tregisterHandlers: function( fieldModel ) {\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'click:field', this.click, this );\n\t\t\t/*\n\t\t\t * Register an interest in the 'before:submit' event of our form.\n\t\t\t */\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'before:submit', this.beforeSubmit, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:failed', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:response', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'enable:submit', this.maybeEnable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'disable:submit', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'processingLabel', this.processingLabel, fieldModel );\n\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.maybeEnable, fieldModel );\n\t\t},\n\n\t\tclick: function( e, fieldModel ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'submit', formModel );\n\t\t},\n\n\t\tbeforeSubmit: function() {\n\t\t\tthis.set( 'disabled', true );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'formID' ) ).trigger( 'processingLabel', this );\n\t\t},\n\n\t\tmaybeDisable: function( fieldModel ) {\n\n\t\t\tif( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tmaybeEnable: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * If the field reporting the error is not on the same form as the submit button, return false;\n\t\t\t */\n\t\t\tif ( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', this.get( 'formID' ) );\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\tthis.set( 'disabled', false );\n\t\t\t\tthis.trigger( 'reRender' );\n\t\t\t}\n\t\t},\n\n\t\tprocessingLabel: function() {\n\t\t\tif ( this.get( 'label' ) == this.get( 'processing_label' ) ) return false;\n\n\t\t\tthis.set( 'oldLabel', this.get( 'label' ) );\n\t\t\tthis.set( 'label', this.get( 'processing_label' ) );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tresetLabel: function( response ) {\n\t\t\tif ( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n\t\t\t\tthis.set( 'label', this.get( 'oldLabel' ) );\n\t\t\t}\n\t\t\tthis.set( 'disabled', false );\n\t\t\tthis.trigger( 'reRender' );\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitDebug',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitDebug );\n },\n\n submitDebug: function( response, textStatus, jqXHR, formID ) {\n\n if( 'undefined' == typeof response.debug ) return;\n\n /* Form Debug Messages */\n if( 'undefined' != typeof response.debug.form ) {\n var debugMessages = '';\n _.each(response.debug.form, function (message, index) {\n debugMessages += message + '
';\n });\n jQuery('.nf-debug-msg').html(debugMessages);\n }\n\n /* Console Debug Messages */\n if( 'undefined' != typeof response.debug.console ) {\n var style = '';\n console.log( '%c%s', style, 'NINJA SUPPORT' );\n _.each(response.debug.console, function (message, index) {\n console.log( message );\n });\n console.log( '%c%s', style, 'END NINJA SUPPORT' );\n }\n }\n\n });\n\n return controller;\n} );\n","define('controllers/getFormErrors',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function( model ) {\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\t\tif ( field.get( 'type' ) != 'submit' && field.get( 'errors' ).length > 0 ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ field.get( 'id' ) ] = field.get( 'errors' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn errors;\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","define('controllers/validateRequired',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.validateKeyup );\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.validateModelData );\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'validate:field', this.validateModelData );\n\t\t},\n\t\t\n\t\tvalidateKeyup: function( el, model, keyCode ) {\n\t\t\tif ( 1 != model.get( 'required' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( ! model.get( 'clean' ) ) {\n\t\t\t\tthis.validateRequired( el, model );\n\t\t\t}\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:required', el, model );\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tvar maskPlaceholder = model.get( 'mask' );\n\t\t\tif ( maskPlaceholder ) {\n\t\t\t\tmaskPlaceholder = maskPlaceholder.replace( /9/g, '_' );\n\t\t\t\tmaskPlaceholder = maskPlaceholder.replace( /a/g, '_' );\n\t\t\t\tmaskPlaceholder = maskPlaceholder.replace( /\\*/g, '_' );\n\t\t\t}\n\n\t\t\tif ( ! jQuery.trim( currentValue ) || currentValue == maskPlaceholder ) {\n\t\t\t\tdefaultReqValidation = false;\n\t\t\t}\n\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * If we already have a required error on this model, return false\n\t\t\t */\n\t\t\tif ( model.get( 'errors' ).get( 'required-error' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcurrentValue = model.get( 'value' );\n\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tif ( ! jQuery.trim( currentValue ) ) {\n\t\t\t\tdefaultReqValidation = false;\n\t\t\t}\n\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:modelData', model );\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\n\t\t},\n\n\t\tmaybeError: function( valid, model ) {\n\t\t\tif ( ! valid ) {\n\n\t\t\t\tvar formModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:form' );\n\n\t\t\t\tif( 'undefined' != typeof formModel ) {\n\t\t\t\t\tnfRadio.channel('fields').request('add:error', model.get('id'), 'required-error', formModel.get('settings').validateRequiredField);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n\t\t\t}\t\t\t\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitErrors );\n\t\t},\n\n\t\tsubmitErrors: function( response, textStatus, jqXHR, formID ) {\n\n\t\t\tif ( _.size( response.errors.fields ) > 0 ) {\n\t\t\t\t_.each( response.errors.fields, function( data, fieldID ) {\n if ( typeof( data ) === 'object' ) {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, data.slug, data.message );\n } else {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, 'required-error', data );\n }\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.form ) > 0 ) {\n\t\t\t\t_.each( response.errors.form, function( msg, errorID ) {\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'remove:error', errorID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'add:error', errorID, msg );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( 'undefined' != typeof response.errors.last ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.last.message ) {\n\t\t\t\t\tvar style = 'background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;';\n\t\t\t\t\tconsole.log( '%c NINJA FORMS SUPPORT: SERVER ERROR', style );\n\t\t\t\t\tconsole.log( response.errors.last.message );\n\t\t\t\t\tconsole.log( '%c END SERVER ERROR MESSAGE', style );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t */\n\t\t\t/*\n\t\t\t * Re-show any hidden fields during a form submission re-start.\n\t\t\t */\n\t\t\tjQuery( '#nf-form-' + formID + '-cont .nf-field-container' ).show();\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/actionRedirect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionRedirect );\n\t\t},\n\n\t\tactionRedirect: function( response ) {\n\n\t\t\tif ( 'undefined' != typeof response.data.halt && 'undefined' != typeof response.data.halt.redirect && '' != response.data.halt.redirect ) {\n\t\t\t\twindow.location = response.data.halt.redirect;\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.redirect && '' != response.data.actions.redirect ) {\n\t\t\t\t\twindow.location = response.data.actions.redirect;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/actionSuccess',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.success_message && '' != response.data.actions.success_message ) {\n\t\t\t\t\tvar form_id = response.data.form_id;\n\t\t\t\t\tvar success_message = jQuery( '#nf-form-' + form_id + '-cont .nf-response-msg' );\n\t\t\t\t\t\n\t\t\t\t\tsuccess_message.html( response.data.actions.success_message ).show();\n\t\t\t\t\t\n\t\t\t\t\t//Let's check if the success message is already fully visible in the viewport without scrolling\n\t\t\t\t\tvar top_of_success_message = success_message.offset().top;\n\t\t\t\t\tvar bottom_of_success_message = success_message.offset().top + success_message.outerHeight();\n\t\t\t\t\tvar bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).height();\n\t\t\t\t\tvar top_of_screen = jQuery(window).scrollTop();\n\n\t\t\t\t\tvar the_element_is_visible = ((bottom_of_screen > bottom_of_success_message) && (top_of_screen < top_of_success_message));\n\n\t\t\t\t\tif(!the_element_is_visible){\n\t\t\t\t\t\t//The element isn't visible, so let's scroll to the success message as in the previous release, but with a short animation\n\t\t\t\t\t\tjQuery('html, body').animate({\n\t\t\t\t\t\t\tscrollTop: ( success_message.offset().top - 50 )\n\t\t\t\t\t\t}, 300 );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldSelect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'init:model', function( model ){\n\t\t\t\tif( 'list' == model.get( 'parentType' ) ) this.register( model );\n\t\t\t}, this );\n\n\t\t\tnfRadio.channel( 'listselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\tnfRadio.channel( 'listmultiselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherAttributes', this.renderOtherAttributes );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\tselected = _.map( selected, function( opt ) { return opt.value } );\n\t\t\t\t\tvar value = selected;\n\t\t\t\t} else if ( 'listradio' !== model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = _.first( model.get( 'options' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof selected && 'undefined' != typeof selected.value ) {\n\t\t\t\t\t\tvar value = selected.value;\n\t\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\t\tvar value = selected.label;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\tif ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\t\t\t_.each( this.options, function( option ) {\n\t\t\t\t\n\n\t\t\t\tif ( ( 1 == option.selected && this.clean ) ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else if ( _.isArray( this.value ) && -1 != _.indexOf( this.value, option.value ) ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else {\n\t\t\t\t\tvar selected = false;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n\t\t\t\toption.selected = selected;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listselect-option' );\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherAttributes: function() {\n\t\t\tvar otherAttributes = '';\n\n\t\t\tif( 'listmultiselect' == this.type ){\n\t\t\t\totherAttributes = otherAttributes + ' multiple';\n\t\t\t}\n\n\t\t\treturn otherAttributes;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == fieldModel.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += tmp_opt.calc;\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = fieldModel.get( 'options' )[0];\n\t\t\t\t\t}\t\t\n\t\t\t\t\tcalc_value = selected.calc;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/coreSubmitResponse',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', response.data.form_id );\n\t\t\t/*\n\t\t\t * If we have errors, don't hide or clear.\n\t\t\t */\n\t\t\tif ( 0 != _.size( response.errors ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.clear_complete ) {\n\t\t\t\t// nfRadio.channel( 'form-' + response.data.form_id ).trigger( 'reset' );\n\t\t\t\tformModel.get( 'fields' ).reset( formModel.get( 'loadedFields' ) );\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.hide_complete ) {\n\t\t\t\t/**\n\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t */\n\t\t\t\tformModel.trigger( 'hide' );\n\t\t\t\t// jQuery( '.nf-fields' ).hide();\n\t\t\t\t// jQuery( '.nf-form-title' ).hide();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldProduct',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'product' ), 'init:model', this.register );\n nfRadio.channel( 'product' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderProductQuantity', this.renderProductQuantity );\n model.set( 'renderProduct', this.renderProduct );\n model.set( 'renderOptions', this.renderOptions );\n },\n\n renderProduct: function(){\n switch( this.product_type ) {\n case 'user':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-textbox' );\n return template( this );\n break;\n case 'hidden':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-hidden' );\n return template( this );\n break;\n\n case 'dropdown':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-dropdown' );\n return template( this );\n break;\n default:\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-single' );\n return template( this );\n }\n },\n\n renderProductQuantity: function(){\n if ( 1 == this.product_use_quantity ) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-quantity' );\n return template( this );\n }\n },\n\n renderOptions: function() {\n var that = this;\n var html = '';\n _.each( this.options, function( option ) {\n if ( 1 == option.selected ) {\n var selected = true;\n } else {\n var selected = false;\n }\n\n option.selected = selected;\n option.fieldID = that.id;\n option.classes = that.classes;\n option.currentValue = that.value;\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-' + that.product_type + '-option' );\n html += template( option );\n } );\n\n return html;\n },\n\n getCalcValue: function( fieldModel ) {\n\n var product_price = fieldModel.get( 'product_price' );\n var product_quantity = fieldModel.get( 'value' );\n\n return product_price * product_quantity;\n }\n });\n\n return controller;\n} );\n\n","define('controllers/fieldTotal',[], function() {\n var controller = Marionette.Object.extend( {\n\n totalModel: {},\n\n productTotals: {},\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'total' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'shipping' ), 'init:model', this.registerShipping );\n },\n\n register: function( totalModel ){\n this.totalModel = totalModel;\n\n var formID = totalModel.get( 'formID' );\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'loaded', this.onFormLoaded );\n\n this.listenTo( nfRadio.channel( 'product' ), 'change:modelValue', this.onChangeProduct );\n this.listenTo( nfRadio.channel( 'quantity' ), 'change:modelValue', this.onChangeQuantity );\n },\n\n registerShipping: function( shippingModel ){\n this.shippingCost = shippingModel.get( 'shipping_cost' );\n },\n\n onFormLoaded: function( formModel ){\n\n var fieldModels = formModel.get( 'fields' ).models;\n\n var productFields = {};\n var quantityFields = {};\n\n for( var model in fieldModels ){\n\n var field = fieldModels[ model ];\n var fieldID = field.get( 'id' );\n\n // TODO: Maybe use switch\n if( 'product' == field.get( 'type' ) ){\n productFields[ fieldID ] = field;\n } else if( 'quantity' == field.get( 'type' ) ){\n var productID = field.get( 'product_assignment' );\n quantityFields[ productID ] = field;\n }\n }\n\n for( var productID in productFields ){\n\n var product = productFields[ productID ];\n\n var productPrice = Number( product.get( 'product_price' ) );\n\n if( quantityFields[ productID ] ){\n\n productPrice *= quantityFields[ productID ].get( 'value' );\n\n } else if( 1 == product.get( 'product_use_quantity' ) ){\n\n productPrice *= product.get( 'value' );\n\n }\n\n this.productTotals[ productID ] = productPrice;\n }\n\n this.updateTotal();\n },\n\n onChangeProduct: function( model ){\n var productID = model.get( 'id' );\n var productPrice = Number( model.get( 'product_price' ) );\n var productQuantity = Number( model.get( 'value' ) );\n var newTotal = productQuantity * productPrice;\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n onChangeQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var productField = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n var productPrice = Number( productField.get( 'product_price' ) );\n\n var quantity = Number( model.get( 'value' ) );\n\n var newTotal = quantity * productPrice;\n\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n updateTotal: function(){\n\n var newTotal = 0;\n\n for( var product in this.productTotals ){\n newTotal += Number( this.productTotals[ product ] );\n }\n\n if( newTotal && this.shippingCost ) {\n // Only add shipping if there is a cost.\n newTotal += Number(this.shippingCost);\n }\n\n this.totalModel.set( 'value', newTotal.toFixed( 2 ) );\n this.totalModel.trigger( 'reRender' );\n }\n });\n\n return controller;\n});\n","define('controllers/fieldQuantity',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'quantity' ), 'init:model', this.registerQuantity );\n },\n\n registerQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var product = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n\n if( product ) {\n product.set('product_use_quantity', 0);\n }\n },\n\n });\n\n return controller;\n});\n","/**\n * Model that represents a calculation.\n *\n * On init, we trigger a radio message so that controllers can do things when a calc model inits.\n */\ndefine( 'models/calcModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\t\tinitialize: function() {\n\t\t\t// Set our form id\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\t// Set our initial fields object to empty. This will hold our key/value pairs.\n\t\t\tthis.set( 'fields', {} );\n\t\t\t// Trigger a radio message to let controllers know we've inited this model.\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'init:model', this );\n\t\t\t// When we change the value of this calculation, send out a radio message\n\t\t\tthis.on( 'change:value', this.changeValue, this );\n\t\t},\n\n\t\t/**\n\t\t * Trigger a radio message when a field present in our calculation changes\n\t\t *\n\t\t * The listener that triggers/calls this function is in controllers/calculations\n\t\t * \n\t\t * @since 3.0\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( fieldModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:field', this, fieldModel );\n\t\t},\n\n\t\tchangeCalc: function( targetCalcModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:calc', this, targetCalcModel );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:value', this );\n\t\t}\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/calcCollection',['models/calcModel'], function( CalcModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: CalcModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n _.each( models, function( model ) {\n \tif( 'undefined' == typeof model.dec ) return;\n if ( '' === model.dec.trim() ) model.dec = 2;\n model.dec = parseInt( model.dec );\n } );\n\t\t\t/*\n\t\t\t * Respond to requests for our calc model\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + options.formModel.get( 'id' ) ).reply( 'get:calc', this.getCalc, this );\n\t\t},\n\n\t\tgetCalc: function( key ) {\n\t\t\treturn this.findWhere( { name: key } );\n\t\t}\n\t} );\n\treturn collection;\n} );\n","/**\n * Controller responsible for keeping up with calculations.\n */\ndefine('controllers/calculations',['models/calcCollection'], function( CalcCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.calcs = {};\n\t\t\tthis.displayFields = {};\n\t\t\t// When our form initialises, check to see if there are any calculations that need to be tracked.\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', this.registerCalcs );\n\n\t\t\t// When a calc model is initialised, run a setup function.\n\t\t\t// this.listenTo( nfRadio.channel( 'calc' ), 'init:model', this.setupCalc );\n\n\t\t\t// When a field referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:field', this.changeField );\n\n\t\t\t// When a calculation referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:calc', this.changeCalc );\n\n\t\t\t/*\n\t\t\t * Listen to our field model init for fields that want to display calc values.\n\t\t\t * If that field has a calc merge tag, replace it with the default calc value.\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t_.each( nfFrontEnd.use_merge_tags.calculations, function( fieldType ) {\n\t\t\t\tthat.listenTo( nfRadio.channel( 'fields-' + fieldType ), 'init:model', that.initDisplayField );\n\t\t\t} );\n\t\t\t\n\t\t\t// When we change our calc value, update any display fields.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:value', this.updateDisplayFields );\n\n\t\t\t// Set an init variable so that we only call reRender on the display field on change, not on init.\n\t\t\tthis.init = {};\n\t\t},\n\n\t\t/**\n\t\t * When our form loads, create a collection out of any calculations.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model formModel\n\t\t * @return void\n\t\t */\n\t\tregisterCalcs: function( formModel ) {\n\t\t\tvar calcCollection = new CalcCollection( formModel.get( 'settings' ).calculations, { formModel: formModel } );\n\t\t\tthis.calcs[ formModel.get( 'id' ) ] = calcCollection;\n\t\t\tvar that = this;\n\n\t\t\t_.each( calcCollection.models, function( calcModel ) {\n\t\t\t\t/*\n\t\t\t\t * We set a property on our init variable for the calc model we're looping over.\n\t\t\t\t * This property is set to true so that when we make changes to the calc model on the next line\n\t\t\t\t * the field view doesn't try to redraw itself.\n\t\t\t\t * If we don't do this, the 'reRender' attribute of the model will be set before the view is initialized,\n\t\t\t\t * which means that setting 'reRender' to true will never re-render the view.\n\t\t\t\t */\n\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = true;\n\t\t\t\t// Setup our calculation models with initial values and register listeners for calc-related fields.\n\t\t\t\tthat.setupCalc( calcModel );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * When a calculation model is instantiated from the registerCalcs function:\n\t\t *\n\t\t * Use a regex to get an array of the field keys\n\t\t * Setup an initial key/values array\n\t\t * Check for any references to other calculations\n\t\t * Set the initial value of our calculation\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @return void\n\t\t */\n\t\tsetupCalc: function( calcModel ) {\n\t\t\t// Setup our that var so we can access 'this' context in our loop.\n\t\t\tvar that = this;\n\t\t\t// Get our equation\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\t// We want to keep our original eq intact, so we use a different var for string replacment.\n\t\t\tvar eqValues = eq;\n\n\t\t\t/* TODO:\n\t\t\t * It might be possible to refactor these two if statements.\n\t\t\t * The difficulty is that each has a different method of retreiving the specific data model.\n\t\t\t */\n\t\t\t// Check to see if we have any field merge tags in our equation.\n\t\t\tvar fields = eq.match( new RegExp( /{field:(.*?)}/g ) );\n\t\t\tif ( fields ) {\n\t\t\t\t/*\n\t\t\t\t * fields is now an array of field keys that looks like:\n\t\t\t\t * ['{field:key'], ['{field:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our field keys to setup our field key array and hook up our field change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tfields = fields.map( function( field ) {\n\t\t\t\t\t// field will be {field:key}\n\t\t\t\t\tvar key = field.replace( ':calc}', '' ).replace( '}', '' ).replace( '{field:', '' );\n\n\t\t\t\t\t// Get our field model\n\t\t\t\t\tfieldModel = nfRadio.channel( 'form-' + calcModel.get( 'formID' ) ).request( 'get:fieldByKey', key );\n\n\t\t\t\t\tif( 'undefined' == typeof fieldModel ) return;\n\t\t\t\t\t// Register a listener in our field model for value changes.\n\t\t\t\t\tfieldModel.on( 'change:value', calcModel.changeField, calcModel );\n\t\t\t\t\t// Get our calc value from our field model.\n\t\t\t\t\tvar calcValue = that.getCalcValue( fieldModel );\n\t\t\t\t\t// Add this field to our internal key/value object.\n\t\t\t\t\tthat.updateCalcFields( calcModel, key, calcValue );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'field', key, calcValue, eqValues );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check to see if we have any calc merge tags in our equation.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t/*\n\t\t\t\t * calcs is now an array of calc keys that looks like:\n\t\t\t\t * ['{calc:key'], ['{calc:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our calc keys to setup our calc key array and hook up our calc change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tcalcs = calcs.map( function( calc ) {\n\t\t\t\t\t// calc will be {calc:name}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\t// Get our calc model\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n\t\t\t\t\t// Listen for changes on our calcluation, since we need to update our calc when it changes.\n\t\t\t\t\ttargetCalcModel.on( 'change:value', calcModel.changeCalc, calcModel );\n\t\t\t\t\t// // Get our calc value from our calc model.\n\t\t\t\t\tvar calcValue = targetCalcModel.get( 'value' );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'calc', name, calcValue, eqValues );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// Evaluate the equation and update the value of this model.\n\t\t\ttry {\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( eqValues ) ).toFixed( calcModel.get( 'dec' ) ) );\n\t\t\t} catch( e ) {\n\t\t\t\tconsole.log( e );\n\t\t\t}\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\n\t\t},\n\n\t\t/**\n\t\t * Update an item in our key/value pair that represents our fields and calc values.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @param string \t\t\tkey\n\t\t * @param string \t\t\tcalcValue\n\t\t * @return void\n\t\t */\n\t\tupdateCalcFields: function( calcModel, key, calcValue ) {\n\t\t\tvar fields = calcModel.get( 'fields' );\n\t\t\tfields[ key ] = calcValue;\n\t\t\tcalcModel.set( 'fields', fields );\n\t\t},\n\n\t\t/**\n\t\t * Get a calc value from a field model.\n\t\t *\n\t\t * Sends a request to see if there's a special calc value\n\t\t * Uses the value of the field if there is not.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model fieldModel\n\t\t * @return value\n\t\t */\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * Send out a request on the field type and parent type channel asking if they need to modify the calc value.\n\t\t\t * This is helpful for fields like lists that can have a different calc_value than selected value.\n\t\t\t */\n\t\t\tvar value = nfRadio.channel( fieldModel.get( 'type' ) ).request( 'get:calcValue', fieldModel );\n\n\t\t\t// If value is 'undefined', then we got no response. Set value to field model value.\n\t\t\tif ( 'undefined' == typeof value ) {\n\t\t\t\tif ( jQuery.isNumeric( fieldModel.get( 'value' ) ) ) {\n\t\t\t\t\tvalue = fieldModel.get( 'value' );\n\t\t\t\t} else {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( ! fieldModel.get( 'visible' ) ) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\n\t\t\treturn ( jQuery.isNumeric( value ) ) ? value : 0;\n\t\t},\n\n\t\t/**\n\t\t * Replace instances of key with calcValue. This is used to replace one key at a time.\n\t\t *\n\t\t * If no eq is passed, use calcModel eq.\n\t\t *\n\t\t * Returns a string with instances of key replaced with calcValue.\n\t\t * \n\t\t * @since version\n\t\t * @param string \tkey \n\t\t * @param string \tcalcValue \n\t\t * @param string \teq \n\t\t * @return string \teq \n\t\t */\n\t\treplaceKey: function( type, key, calcValue, eq ) {\n\t\t\teq = eq || calcModel.get( 'eq' );\n\n\t\t\ttag = '{' + type + ':' + key + '}';\n\t\t\tvar reTag = new RegExp( tag, 'g' );\n\n\t\t\tcalcTag = '{' + type + ':' + key + ':calc}';\n\t\t\tvar reCalcTag = new RegExp( calcTag, 'g' );\n\n\t\t\teq = eq.replace( reTag, calcValue );\n\t\t\teq = eq.replace( reCalcTag, calcValue );\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Takes a calcModel and returns a string eq with all keys replaced by their appropriate calcValues.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @return string\t\t\teq\n\t\t */\n\t\treplaceAllKeys: function( calcModel ) {\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\tvar that = this;\n\t\t\t_.each( calcModel.get( 'fields' ), function( value, key ) {\n\t\t\t\teq = that.replaceKey( 'field', key, value, eq );\n\t\t\t} );\n\n\t\t\t// If we have any calc merge tags, replace those as well.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calc ) {\n\t\t\t\t\t// calc will be {calc:key}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\teq = eq.replace( re, targetCalcModel.get( 'value' ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Function that's called when a field within the calculation changes.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @param backbone.model fieldModel\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( calcModel, fieldModel ) {\n\t\t\tvar key = fieldModel.get( 'key' );\n\t\t\tvar value = this.getCalcValue( fieldModel );\n\t\t\tthis.updateCalcFields( calcModel, key, value );\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\t\t\tcalcModel.set( 'value', Number( mexp.eval( eqValues ) ).toFixed( calcModel.get( 'dec' ) ) );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\t\t\n\t\t},\n\n\t\tinitDisplayField: function( fieldModel ) {\n\n\t\t\tif( ! fieldModel.get( 'default' ) || 'string' != typeof fieldModel.get( 'default' ) ) return;\n\n\t\t\tvar calcs = fieldModel.get( 'default' ).match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calcName ) {\n\t\t\t\t\tcalcName = calcName.replace( '{calc:', '' ).replace( '}', '' ).replace( ':2', '' );\n\t\t\t\t\tthis.displayFields[ calcName ] = this.displayFields[ calcName ] || [];\n\t\t\t\t\tthis.displayFields[ calcName ].push( fieldModel );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\tupdateDisplayFields: function( calcModel ) {\n\t\t\tvar that = this;\n\t\t\tif ( 'undefined' != typeof this.displayFields[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t_.each( this.displayFields[ calcModel.get( 'name' ) ], function( fieldModel ) {\n\t\t\t\t\tvar value = fieldModel.get( 'default' );\n\t\t\t\t\tvar calcs = value.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\t\t\t_.each( calcs, function( calc ) {\n//\t\t\t\t\t\tvar rounding = false;\n\t\t\t\t\t\t// calc will be {calc:key} or {calc:key:2}\n\t\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' ).replace( ':2', '' );\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * TODO: Bandaid for rounding calculations to two decimal places when displaying the merge tag.\n\t\t\t\t\t\t * Checks to see if we have a :2. If we do, remove it and set our rounding variable to true.\n\t\t\t\t\t\t */\n//\t\t\t\t\t\tif ( -1 != name.indexOf( ':2' ) ) {\n//\t\t\t\t\t\t\trounding = true;\n//\t\t\t\t\t\t\tname = name.replace( ':2', '' );\n//\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar calcModel = that.calcs[ fieldModel.get( 'formID' ) ].findWhere( { name: name } );\n\t\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\t\tvar calcValue = calcModel.get( 'value' ) ;\n//\t\t\t\t\t\tif ( rounding ) {\n//\t\t\t\t\t\t\tcalcValue = calcValue.toFixed( 2 );\n//\t\t\t\t\t\t\trounding = false;\n//\t\t\t\t\t\t}\n if( 'undefined' != typeof( calcValue ) ) {\n calcValue = that.applyLocaleFormatting( calcValue );\n }\n\t\t\t\t\t\tvalue = value.replace( re, calcValue );\n\t\t\t\t\t} );\n\t\t\t\t\tfieldModel.set( 'value', value );\n\t\t\t\t\tif ( ! that.init[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t\t\t// fieldModel.set( 'reRender', true );\n\t\t\t\t\t\tfieldModel.trigger( 'reRender' );\n\t\t\t\t\t}\n\t\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = false;\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\tgetCalc: function( name, formID ) {\n\t\t\treturn this.calcs[ formID ].findWhere( { name: name } );\n\t\t},\n\n\t\tchangeCalc: function( calcModel, targetCalcModel ) {\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\t\t\teqValues = eqValues.replace( '[', '' ).replace( ']', '' );\n\t\t\tcalcModel.set( 'value', Number( mexp.eval( eqValues ) ).toFixed( calcModel.get( 'dec' ) ) );\n\t\t},\n \n /**\n * Function to apply Locale Formatting to Calculations\n * @since Version 3.1\n * @param Str number\n * \n * @return Str\n */\n applyLocaleFormatting: function( number ) {\n \n // Split our string on the decimal to preserve context.\n var splitNumber = number.split('.');\n // If we have more than one element (if we had a decimal point)...\n if ( splitNumber.length > 1 ) {\n // Update the thousands and remerge the array.\n splitNumber[ 0 ] = splitNumber[ 0 ].replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n var formattedNumber = splitNumber.join( nfi18n.decimal_point );\n }\n // Otherwise (we had no decimal point)...\n else {\n // Update the thousands.\n var formattedNumber = number.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n }\n return formattedNumber;\n }\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldDate',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'date' ), 'render:view', this.initDatepicker );\n },\n\n initDatepicker: function ( view ) {\n\n var el = jQuery( view.el ).find( '.nf-element' )[0];\n var dateObject = pikadayResponsive( el, {\n format: view.model.get( 'date_format' ),\n outputFormat: view.model.get( 'date_format' ),\n classes: jQuery( el ).attr( \"class\" ),\n pikadayOptions: {\n yearRange: this.getYearRange( view.model )\n }\n } );\n if ( 1 == view.model.get( 'date_default' ) ) {\n dateObject.setDate( moment() ); \n }\n\n nfRadio.channel( 'pikaday' ).trigger( 'init', dateObject, view.model );\n },\n\n getYearRange: function( fieldModel ) {\n var yearRange = 10;\n var yearRangeStart = fieldModel.get( 'year_range_start' );\n var yearRangeEnd = fieldModel.get( 'year_range_end' );\n\n if( yearRangeStart && yearRangeEnd ){\n return [ yearRangeStart, yearRangeEnd ];\n } else if( yearRangeStart ) {\n yearRangeEnd = yearRangeStart + yearRange;\n return [ yearRangeStart, yearRangeEnd ];\n } else if( yearRangeEnd ) {\n yearRangeStart = yearRangeEnd - yearRange;\n return [ yearRangeStart, yearRangeEnd ];\n }\n\n return yearRange;\n }\n });\n\n return controller;\n});\n","define('controllers/fieldRecaptcha',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha' ), 'init:model', this.initRecaptcha );\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.resetRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\n \t\tthis.model = model;\n \tnfRadio.channel( 'recaptcha' ).reply( 'update:response', this.updateResponse, this );\n },\n\n updateResponse: function( response ) {\n \tthis.model.set( 'value', response );\n nfRadio.channel( 'fields' ).request( 'remove:error', this.model.get( 'id' ), 'required-error' );\n },\n\n resetRecaptcha: function() {\n try {\n grecaptcha.reset();\n } catch( e ){\n console.log( 'Notice: Error trying to reset grecaptcha.' );\n }\n }\n });\n\n return controller;\n} );\n\n","/**\n * When a form is loaded, enable any help text that appears on the page.\n */\ndefine('controllers/helpText',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', this.initHelpText );\n\n\t\t\tnfRadio.channel( 'form' ).reply( 'init:help', this.initHelpText );\n\t\t},\n\n\t\tinitHelpText: function( view ) {\n\t\t\tjQuery( view.el ).find( '.nf-help' ).each( function() {\n\t\t\t\tvar jBox = jQuery( this ).jBox( 'Tooltip', {\n\t\t\t\t\ttheme: 'TooltipBorder',\n\t\t\t\t\tcontent: jQuery( this ).data( 'text' )\n\t\t\t\t});\n\t\t\t} );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * When a form is loaded, enable any rtes in textareas.\n */\ndefine('controllers/fieldTextareaRTE',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'render:view', this.initTextareaRTEs );\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'click:extra', this.clickExtra );\n\n\t\t\t// Instantiates the variable that holds the media library frame.\n\t\t\tthis.meta_image_frame;\n\n\t\t\tthis.currentContext = {};\n\n\t\t\tif( 'undefined' == typeof jQuery.summernote ) return;\n\n\t\t\tjQuery.summernote.options.icons = {\n\t\t 'align': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignCenter': 'dashicons dashicons-editor-aligncenter',\n\t\t 'alignJustify': 'dashicons dashicons-editor-justify',\n\t\t 'alignLeft': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignRight': 'dashicons dashicons-editor-alignright',\n\t\t 'indent': 'dashicons dashicons-editor-indent',\n\t\t 'outdent': 'dashicons dashicons-editor-outdent',\n\t\t // 'arrowsAlt': 'dashicons fa-arrows-alt',\n\t\t 'bold': 'dashicons dashicons-editor-bold',\n\t\t 'caret': 'dashicons dashicons-arrow-down',\n\t\t // 'circle': 'dashicons fa-circle',\n\t\t 'close': 'dashicons dashicons-dismiss',\n\t\t 'code': 'dashicons dashicons-editor-code',\n\t\t 'eraser': 'dashicons dashicons-editor-removeformatting',\n\t\t // 'font': 'dashicons fa-font',\n\t\t // 'frame': 'dashicons fa-frame',\n\t\t 'italic': 'dashicons dashicons-editor-italic',\n\t\t 'link': 'dashicons dashicons-admin-links',\n\t\t 'unlink': 'dashicons dashicons-editor-unlink',\n\t\t 'magic': 'dashicons dashicons-editor-paragraph',\n\t\t // 'menuCheck': 'dashicons fa-check',\n\t\t 'minus': 'dashicons dashicons-minus',\n\t\t 'orderedlist': 'dashicons dashicons-editor-ol',\n\t\t // 'pencil': 'dashicons fa-pencil',\n\t\t // 'picture': 'dashicons fa-picture-o',\n\t\t // 'question': 'dashicons fa-question',\n\t\t 'redo': 'dashicons dashicons-redo',\n\t\t 'square': 'dashicons fa-square',\n\t\t // 'strikethrough': 'dashicons fa-strikethrough',\n\t\t // 'subscript': 'dashicons fa-subscript',\n\t\t // 'superscript': 'dashicons fa-superscript',\n\t\t 'table': 'dashicons dashicons-editor-table',\n\t\t // 'textHeight': 'dashicons fa-text-height',\n\t\t // 'trash': 'dashicons fa-trash',\n\t\t 'underline': 'dashicons dashicons-editor-underline',\n\t\t 'undo': 'dashicons dashicons-undo',\n\t\t 'unorderedlist': 'dashicons dashicons-editor-ul',\n\t\t // 'video': 'dashicons fa-youtube-play'\n\t\t };\n\n\t\t},\n\n\t\tinitTextareaRTEs: function( view ) {\n\t\t\tif ( 1 != view.model.get( 'textarea_rte' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Custom Button for links\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t// var linkButton = this.linkButton();\n\t\t\tvar linkButton = function( context ) {\n\t\t\t\treturn that.linkButton( context );\n\t\t\t}\n\t\t\tvar mediaButton = function( context ) {\n\t\t\t\treturn that.mediaButton( context );\n\t\t\t}\n\n\t\t\tvar toolbar = [\n\t\t\t\t[ 'paragraphStyle', ['style'] ],\n\t\t\t\t[ 'fontStyle', [ 'bold', 'italic', 'underline','clear' ] ],\n\t\t\t\t[ 'lists', [ 'ul', 'ol' ] ],\n\t\t\t [ 'paragraph', [ 'paragraph' ] ],\n\t\t\t [ 'customGroup', [ 'linkButton', 'unlink' ] ],\n\t\t\t [ 'table', [ 'table' ] ],\n\t\t\t [ 'actions', [ 'undo', 'redo' ] ],\n\t\t\t];\n\n\t\t\tif ( 1 == view.model.get( 'textarea_media' ) && 0 != userSettings.uid ) {\n\t\t\t\ttoolbar.push( [ 'tools', [ 'mediaButton' ] ] );\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-element' ).summernote( {\n\t\t\t\ttoolbar: toolbar,\n\t\t\t\tbuttons: {\n\t\t\t\t\tlinkButton: linkButton,\n\t\t\t\t\tmediaButton: mediaButton\n\t\t\t\t},\n\t\t\t\theight: 150, //set editable area's height\n\t\t\t\tcodemirror: { // codemirror options\n\t\t\t\t theme: 'monokai',\n\t\t\t\t lineNumbers: true\n\t\t\t\t},\n\t\t\t\tprettifyHtml: true,\n\t\t\t\tcallbacks: {\n\t\t\t\t\tonChange: function( e ) {\n\t\t\t\t\t\tview.model.set( 'value', jQuery( this ).summernote( 'code' ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar linkMenu = jQuery( view.el ).find( '.link-button' ).next( '.dropdown-menu' ).find( 'button' );\n\t\t\tlinkMenu.replaceWith(function () {\n\t\t\t return jQuery( '
' + this.help_text + '
';\n\t\t\t\t\tif ( 'undefined' != typeof this.help_text && 0 != jQuery.trim( jQuery( check_text ).text() ).length ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t\tvar check_text = '' + this.desc_text + '
';\n\t\t\t\t\tif ( 0 != jQuery.trim( jQuery( check_text ).text() ).length ) {\n\t\t\t\t\t\treturn '