{"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/uniqueFieldError.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","on","fieldCollection","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","bound","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","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","dateFormat","convertDateFormat","dateObject","pikadayResponsive","format","outputFormat","pikadayOptions","yearRange","getYearRange","minDate","getMinDate","maxDate","getMaxDate","firstDay","startOfWeek","setDate","moment","yearRangeStart","yearRangeEnd","Date","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","blockingFormErrors","fieldDataDefaults","formData","JSON","stringify","action","security","ajaxNonce","ajax","adminAjax","cache","success","parseJSON","document","errorThrown","responseText","fieldLayout","FieldCollectionView","registerDefaultDataFilter","defaultFormContentLoad","defaultFormContentView","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","UniqueFieldError","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","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 this.on( 'reset', function( fieldCollection ){\n nfRadio.channel( 'fields' ).trigger( 'reset:collection', fieldCollection );\n }, this );\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 this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\thideFields: function() {\n\t\t\tthis.invoke( 'set', { visible: false } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\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\t\n /*\n * Default to 0, in case we have no selection.\n */\n var calc_value = 0;\n \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\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t}\n\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\tbound: {},\n\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\tif ( 'undefined' != typeof this.bound[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\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\t\n\t\t\tthis.bound[ fieldModel.get( 'id') ] = true;\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 // Store the name for debugging later.\n var calcName = calcModel.get( 'name' );\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 if( 'undefined' == typeof fieldModel ) return;\n\n fieldModel.set( 'clean', false );\n\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\n\t\t\t\t\tif( 'undefined' == typeof targetCalcModel ) return;\n\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 // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, 0 );\n\n // Scrub line breaks.\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\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 //console.log( calcName );\n\t\t\t\tconsole.log( e );\n\t\t\t}\n \n // If for whatever reason, we got NaN, reset that to 0.\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\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 if( 'undefined' == typeof targetCalcModel ) return;\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\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, '0' );\n\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t calcModel.set( 'value', Number( mexp.eval( eqValues ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\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 eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t calcModel.set( 'value', Number( mexp.eval( eqValues ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\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\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 dateFormat = view.model.get( 'date_format' );\n\n // For \"default\" date format, convert PHP format to JS compatible format.\n if( 'default' == dateFormat ){\n dateFormat = this.convertDateFormat( nfi18n.dateFormat );\n }\n\n var el = jQuery( view.el ).find( '.nf-element' )[0];\n var dateObject = pikadayResponsive( el, {\n format: dateFormat,\n outputFormat: dateFormat,\n classes: jQuery( el ).attr( \"class\" ),\n pikadayOptions: {\n yearRange: this.getYearRange( view.model ),\n minDate: this.getMinDate( view.model ),\n maxDate: this.getMaxDate( view.model ),\n firstDay: parseInt( nfi18n.startOfWeek )\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 getMinDate: function( fieldModel ) {\n var minDate = null;\n var yearRangeStart = fieldModel.get( 'year_range_start' );\n\n if( yearRangeStart ) {\n return new Date( yearRangeStart, 0, 1 );\n }\n\n return minDate;\n },\n\n getMaxDate: function( fieldModel ) {\n var maxDate = null;\n var yearRangeEnd = fieldModel.get( 'year_range_end' );\n\n if( yearRangeEnd ) {\n return new Date( yearRangeEnd, 11, 31 );\n }\n\n return maxDate;\n },\n \n convertDateFormat: function( dateFormat ) {\n // http://php.net/manual/en/function.date.php\n // https://github.com/dbushell/Pikaday/blob/master/README.md#formatting\n // Note: Be careful not to add overriding replacements. Order is important here.\n\n /** Day */\n dateFormat = dateFormat.replace( 'D', 'ddd' ); // @todo Ordering issue?\n dateFormat = dateFormat.replace( 'd', 'DD' );\n dateFormat = dateFormat.replace( 'l', 'dddd' );\n dateFormat = dateFormat.replace( 'j', 'D' );\n dateFormat = dateFormat.replace( 'N', '' ); // Not Supported\n dateFormat = dateFormat.replace( 'S', '' ); // Not Supported\n dateFormat = dateFormat.replace( 'w', 'd' );\n dateFormat = dateFormat.replace( 'z', '' ); // Not Supported\n\n /** Week */\n dateFormat = dateFormat.replace( 'W', 'W' );\n\n /** Month */\n dateFormat = dateFormat.replace( 'M', 'MMM' ); // \"M\" before \"F\" or \"m\" to avoid overriding.\n dateFormat = dateFormat.replace( 'F', 'MMMM' );\n dateFormat = dateFormat.replace( 'm', 'MM' );\n dateFormat = dateFormat.replace( 'n', 'M' );\n dateFormat = dateFormat.replace( 't', '' ); // Not Supported\n\n // Year\n dateFormat = dateFormat.replace( 'L', '' ); // Not Supported\n dateFormat = dateFormat.replace( 'o', 'YYYY' );\n dateFormat = dateFormat.replace( 'Y', 'YYYY' );\n dateFormat = dateFormat.replace( 'y', 'YY' );\n\n // Time - Not supported\n dateFormat = dateFormat.replace( 'a', '' );\n dateFormat = dateFormat.replace( 'A', '' );\n dateFormat = dateFormat.replace( 'B', '' );\n dateFormat = dateFormat.replace( 'g', '' );\n dateFormat = dateFormat.replace( 'G', '' );\n dateFormat = dateFormat.replace( 'h', '' );\n dateFormat = dateFormat.replace( 'H', '' );\n dateFormat = dateFormat.replace( 'i', '' );\n dateFormat = dateFormat.replace( 's', '' );\n dateFormat = dateFormat.replace( 'u', '' );\n dateFormat = dateFormat.replace( 'v', '' );\n\n // Timezone - Not supported\n dateFormat = dateFormat.replace( 'e', '' );\n dateFormat = dateFormat.replace( 'I', '' );\n dateFormat = dateFormat.replace( 'O', '' );\n dateFormat = dateFormat.replace( 'P', '' );\n dateFormat = dateFormat.replace( 'T', '' );\n dateFormat = dateFormat.replace( 'Z', '' );\n\n // Full Date/Time - Not Supported\n dateFormat = dateFormat.replace( 'c', '' );\n dateFormat = dateFormat.replace( 'r', '' );\n dateFormat = dateFormat.replace( 'u', '' );\n\n return dateFormat;\n }\n });\n\n return controller;\n});\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 '