{"version":3,"sources":["webpack:///js/give.js","webpack:///webpack/bootstrap d747366ea47814b49e2e","webpack:///(webpack)/buildin/amd-options.js","webpack:///./assets/src/js/frontend/give-donations.js","webpack:///(webpack)/buildin/global.js","webpack:///./assets/src/js/frontend/give.js","webpack:///./node_modules/jquery.payment/lib/jquery.payment.js","webpack:///./node_modules/uiblocker/uiblocker.js","webpack:///./node_modules/uiblocker/lib/jquery.blockUI.js","webpack:///./node_modules/underscore/underscore.js","webpack:///./assets/src/js/frontend/give-ajax.js","webpack:///./assets/src/js/frontend/give-misc.js","webpack:///./node_modules/float-labels.js/src/float-labels.js","webpack:///external \"jQuery\"","webpack:///./node_modules/magnific-popup/dist/jquery.magnific-popup.js","webpack:///./node_modules/accounting/accounting.js-exposed","webpack:///./node_modules/accounting/accounting.js","webpack:///./assets/src/js/plugins/give-hint.css.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","133","__webpack_amd_options__","134","__webpack_exports__","__WEBPACK_IMPORTED_MODULE_0_accounting__","__WEBPACK_IMPORTED_MODULE_0_accounting___default","_typeof","Symbol","iterator","obj","constructor","Give","init","subHelperObjs","counter","jQuery","document","trigger","this","fn","__initialize_cache","length","formatCurrency","price","args","$form","format_args","symbol","decimal","give_global_vars","decimal_separator","thousand","thousands_separator","precision","parseInt","number_decimals","currency","toString","trim","form","getInfo","extend","result","amount","actual_price","a","unformat","decimal_amount","decimal_index","indexOf","Number","substr","toFixed","undefined","position","format","formatMoney","unFormatCurrency","regex","replace","slice","Math","abs","parseFloat","getParameterByName","url","window","location","href","RegExp","results","exec","decodeURIComponent","getGlobalVar","str","setCache","key","value","cache","getCache","each","index","$item","field","formatCreditCard","onload","__sendBackToForm","disable","is_disable","find","prop","formatAmount","data","gateway","push","val","hasClass","hasAttribute","attr","setInfo","type","getGateway","getVariablePrices","formLevels","variable_prices","item","price_id","getPriceID","is_amount","current_amount","variable_price","getMinimumAmount","getMaximumAmount","getAmount","getNonce","nonce","resetNonce","post","ajaxurl","action","give_form_id","response","autoSelectDonationLevel","addClass","blur","focus","autoSetMultiLevel","$level","parents","level_amount","level_price_id","text","form_id","payment_mode","$form_wrapper","display_modal","display_button","display_reveal","removeClass","parent","level_id","level_field","magnificPopup","open","items","src","fixedContentPos","fixedBgPos","closeBtnInside","midClick","removalDelay","mainClass","give_open_form_modal","hide","slideDown","isValidDonationAmount","min_amount","max_amount","$forms","card_number","card_cvc","card_expiry","payment","notice","renderNotice","notice_code","$container","$notice","getNotice","insertBefore","show","error_code","notice_msg","formatted_amount","$","update_billing_state_field","$this","empty","append","general_loading","postData","country","field_name","ajax","xhrFields","withCredentials","success","html","states_label","states_found","default_state","states_require","closest","replaceWith","show_field","doc","fail","console","log","toggleError","errored","toggleClass","on","alert","new_payment_gateways","$gateways_li","old_payment_gateway","e","parent_form","current_total","$parent_form","donation_amount","pre_focus_amount","this_value","value_min","value_max","value_now","formatted_total","$default_level","slideUp","remove","invalid_minimum_notice","invalid_maximum_notice","preventDefault","$fieldset_wrapper","slideToggle","toggle","$inputField","load","el","give_form","id","cardType","error","validateCardNumber","validateCardCVC","validateCardExpiry","card_type","expiry","month","year","27","g","Function","eval","363","364","__WEBPACK_IMPORTED_MODULE_0_jquery_payment__","__WEBPACK_IMPORTED_MODULE_1_accounting__","__WEBPACK_IMPORTED_MODULE_2_uiblocker__","__WEBPACK_IMPORTED_MODULE_3_magnific_popup__","__WEBPACK_IMPORTED_MODULE_4__plugins_give_hint_css__","365","cardFromNumber","cardFromType","cards","defaultFormat","formatBackCardNumber","formatBackExpiry","formatCardNumber","formatExpiry","formatForwardExpiry","formatForwardSlashAndSpace","hasTextSelected","luhnCheck","reFormatCVC","reFormatCardNumber","reFormatExpiry","reFormatNumeric","replaceFullWidthChars","restrictCVC","restrictCardNumber","restrictExpiry","restrictNumeric","safeVal","setCardType","__slice","__indexOf","Zepto","method","arguments","apply","patterns","cvcLength","luhn","num","card","pattern","_i","_j","_len","_len1","_ref","digit","digits","odd","sum","split","reverse","$target","selection","createRange","currPair","cursor","last","prevPair","_error","is","test","chars","chr","fullWidth","halfWidth","idx","currentTarget","setTimeout","re","upperLength","String","fromCharCode","which","m1","m2","input","metaKey","ctrlKey","allTypes","_results","join","formatCardCVC","formatCardExpiry","cardExpiryVal","prefix","Date","getFullYear","currentTime","setMonth","getMonth","cvc","groups","global","match","shift","grep","mon","parts","sep","substring","366","_","UIBlocker","transitionDelay","blockWith","deferred","Deferred","context","rest","event","first","blockUI","message","isObject","always","isFunction","unblockUI","then","resolve","reject","promise","makeBlocked","wrap","367","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","setup","install","opts","css","themedCSS","full","msg","defaults","ignoreIfBlocked","overlayCSS","onOverlayClick","pageBlock","fadeOut","parentNode","jquery","node","display","style","removeChild","onUnblock","lyr1","lyr2","lyr3","z","baseZ","msie","forceIframe","iframeSrc","theme","blockMsgClass","title","layers","$par","appendTo","draggable","handle","cancel","expr","setExpr","support","boxModel","ie6","allowBodyStretch","t","sz","fixT","fixL","setExpression","quirksmodeOffsetHack","centerY","marginTop","top","expression","nodeType","showOverlay","fadeIn","cb","onBlock","noOp","cb1","cb2","_fadeIn","bind","pageBlockEls","focusableElements","focusInput","center","centerX","timeout","to","unblock","count","$el","clearTimeout","removeData","els","children","filter","add","cursorReset","stop","reset","appendChild","body","w","width","cssW","b","bindEvents","events","handler","unbind","keyCode","constrainTabKey","fwd","shiftKey","target","back","x","y","offsetWidth","offsetHeight","left","noop","navigator","userAgent","documentMode","createElement","growlUI","onClose","$m","callBlock","growlCSS","mouseover","displayBlock","fadeTo","mouseout","block","fullOpts","zoom","version","padding","margin","textAlign","color","border","backgroundColor","opacity","right","-webkit-border-radius","-moz-border-radius","border-radius","368","createReduce","dir","iteratee","memo","keys","currentKey","optimizeCb","isArrayLike","createPredicateIndexFinder","array","predicate","getLength","createIndexFinder","predicateFind","sortedIndex","max","min","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","proto","ObjProto","has","contains","root","previousUnderscore","ArrayProto","Array","FuncProto","nativeIsArray","isArray","nativeKeys","nativeBind","nativeCreate","create","Ctor","_wrapped","VERSION","func","argCount","other","collection","accumulator","identity","matcher","Infinity","createAssigner","keysFunc","undefinedOnly","source","baseCreate","MAX_ARRAY_INDEX","pow","forEach","map","collect","reduce","foldl","inject","reduceRight","foldr","detect","findIndex","findKey","select","list","negate","every","all","some","any","includes","include","fromIndex","guard","values","invoke","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","sortBy","criteria","sort","group","behavior","groupBy","indexBy","countBy","toArray","size","partition","pass","head","take","initial","tail","drop","compact","flatten","shallow","strict","startIndex","output","isArguments","j","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","bindAll","Error","memoize","hasher","address","delay","wait","defer","throttle","options","previous","later","leading","now","remaining","trailing","debounce","immediate","timestamp","callNow","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extendOwn","assign","pick","oiteratee","omit","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","Int8Array","isFinite","isNumber","isNull","isUndefined","noConflict","constant","propertyOf","matches","accum","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","string","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","settings","oldSettings","offset","variable","render","chain","instance","_chain","mixin","valueOf","toJSON","369","give_load_gateway","form_object","loading_element","give_total","give_form_id_prefix","background","give_payment_mode","__WEBPACK_IMPORTED_MODULE_0__give_donations__","ready","$nonceField","nonceTime","timeDiff","this_form","loading_animation","checkout_response","done","give_fl_trigger","parseJSON","fields","complete_purchase_val","purchase_loading","give_ajax","give_user_login","give_user_pass","email","ajaxNonce","loading","JSON","parse","status","give_purchase_form","checkValidity","serialize","submit","370","__WEBPACK_IMPORTED_MODULE_0_float_labels_js__","__WEBPACK_IMPORTED_MODULE_0_float_labels_js___default","give_change_html5_form_field_validation_message","ev","this_button","$payment_field","show_field_ids","payment_field_id","this_form_wrap","this_amount_field","this_amount","give_notices","update_profile_state_field","addEventListener","persisted","performance","navigation","$form_wrap","magnific_options","main_class","closeOnBgClick","close_on_bg_click","callbacks","beforeOpen","$form_content","$form_title","$form_goal","$form_error","$form_errors","prepend","$error","$mfp_content","outerWidth","not","close","give_float_labels","rebuild","exclude","prioritize","$input_fields","form_translation","oninvalid","setCustomValidity","validity","valid","371","Plugin","querySelectorAll","config","selectors","destroy","loop","removeEventListener","removeClasses","floatLabel","customEvent","customLabel","customPlaceholder","inputRegex","requiredClass","transform","initEvents","classList","prefixed","onBlur","change","onInput","onFocus","onReset","addRemove","bool","build","labelEl","getLabel","tagName","toLowerCase","setLabel","setPlaceholder","wrapLabel","handleEvents","current","createEl","tag","attributes","setAttribute","extenders","isValidField","hasParent","label","getAttribute","getLabelText","labelText","textContent","placeholderText","isMicrosoftSelectEl","nodeName","isMSBrowser","isInvalidInput","isInvalidSelect","elCallback","fieldCallback","resetFields","classes","fragment","createDocumentFragment","firstElementChild","childEl","replaceChild","resetPlaceholder","originalPlaceholder","removeAttribute","setSelectPlaceholder","selected","selectedIndex","defaultSelected","Option","class","372","43","52","factory","mfp","_prevStatus","_document","_prevContentType","_wrapClasses","_currPopupType","MagnificPopup","_isJQ","_window","_mfpOn","f","_getEl","raw","innerHTML","_mfpTrigger","triggerHandler","st","charAt","_getCloseBtn","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","supportsTransitions","v","appVersion","isLowIE","isIE8","isAndroid","isIOS","supportsTransition","probablyMobile","popupsCache","isObj","parsed","isOpen","updateItemHTML","types","mainEl","modal","closeOnContentClick","showCloseBtn","enableEscapeKey","bgOverlay","_checkIfClose","container","contentContainer","preloader","tLoading","toUpperCase","close_replaceWith","alignTop","overflow","overflowY","overflowX","scrollTop","height","updateSize","windowHeight","wH","windowStyles","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","classesToadd","_addClassToMFP","prependTo","_lastFocusedEl","activeElement","content","_setFocus","_onFocusIn","_close","classesToRemove","REMOVING_CLASS","detach","_removeClassFromMFP","off","removeAttr","currItem","autoFocusLast","prevHeight","winHeight","zoomLevel","documentElement","clientWidth","innerWidth","innerHeight","parseEl","markup","newContent","appendContent","preloaded","addGroup","eHandler","mfpEl","_openClick","eName","delegate","altKey","disableOn","stopPropagation","updateStatus","stopImmediatePropagation","closeOnContent","closeOnBg","cName","scrollHeight","_parseMarkup","arr","EVENT_NS","scrollbarSize","scrollDiv","cssText","registerModule","jqEl","itemOpts","_hiddenClass","_inlinePlaceholder","_lastInlineElement","_putInlineElementsBack","hiddenClass","tNotFound","initInline","CLOSE_EVENT","getInline","inlineSt","inline","inlineElement","_ajaxCur","_removeAjaxCursor","_destroyAjaxRequest","req","abort","tError","initAjax","getAjax","textStatus","jqXHR","temp","xhr","finished","loadError","_imgInterval","_getTitle","image","titleSrc","verticalFit","initImage","imgSt","ns","resizeImage","img","decr","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","mfpSetInterval","setInterval","naturalWidth","getImage","onLoadComplete","complete","loaded","onLoadError","alt","img_replaceWith","hasMozTransform","getHasMozTransform","MozTransform","enabled","easing","duration","opener","element","initZoom","zoomSt","openTimeout","animatedImg","getElToAnimate","newImg","transition","cssObj","zIndex","-webkit-backface-visibility","showMainContent","_allowZoom","_getItemToZoom","_getOffset","isLarge","paddingTop","paddingBottom","_fixIframeBugs","isShowing","srcAction","youtube","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","dataObj","_getLoopedId","numSlides","_replaceCurrTotal","curr","total","arrowMarkup","preload","navigateByImgClick","arrows","tPrev","tNext","tCounter","initGallery","gSt","gallery","direction","next","prev","arrowLeft","arrowRight","click","_preloadTimeout","preloadNearbyImages","goTo","newIndex","preloadBefore","preloadAfter","_preloadItem","replaceSrc","ratio","initRetina","devicePixelRatio","retina","max-width","68","96","charCodeAt","defs","nativeMap","checkPrecision","base","round","checkCurrencyFormat","lib","pos","neg","zero","grouping","number","unformatted","power","formatNumber","usePrecision","negative","mod","formats","formatColumn","padAfterSymbol","maxLength","useFormat","fVal","accounting","97","giveHintCss","$tooltip","outerHeight","reset_qtip","tooltip","icon_classes","label_length","qtip_tooltips"],"mappings":"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","file":"js/give.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 363);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 133:\n/***/ (function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))\n\n/***/ }),\n\n/***/ 134:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_accounting__ = __webpack_require__(68);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_accounting___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_accounting__);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nvar Give = {};\n\n/**\n * This API is under development.\n *\n * Currently used only for internal purpose.\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (Give = {\n\tinit: function init() {\n\t\tvar subHelperObjs = ['form'],\n\t\t counter = 0;\n\t\tjQuery(document).trigger('give:preInit');\n\n\t\tthis.fn.__initialize_cache();\n\n\t\t// Initialize all init methods od sub helper objects.\n\t\twhile (counter < subHelperObjs.length) {\n\t\t\tif (!!Give[subHelperObjs[counter]].init) {\n\t\t\t\tGive[subHelperObjs[counter]].init();\n\t\t\t}\n\t\t\tcounter++;\n\t\t}\n\n\t\tjQuery(document).trigger('give:postInit');\n\t},\n\n\tfn: {\n\t\t/**\n * Format Currency\n *\n * Formats the currency with accounting.js\n *\n * @param {string} price\n * @param {object} args\n * @param {object} $form\n * @returns {*|string}\n */\n\t\tformatCurrency: function formatCurrency(price, args, $form) {\n\t\t\t// Global currency setting.\n\t\t\tvar format_args = {\n\t\t\t\tsymbol: '',\n\t\t\t\tdecimal: give_global_vars.decimal_separator,\n\t\t\t\tthousand: give_global_vars.thousands_separator,\n\t\t\t\tprecision: parseInt(give_global_vars.number_decimals),\n\t\t\t\tcurrency: give_global_vars.currency\n\t\t\t};\n\n\t\t\tprice = price.toString().trim();\n\t\t\t$form = 'undefined' === typeof $form ? {} : $form;\n\n\t\t\t// Form specific currency setting.\n\t\t\tif ($form.length) {\n\t\t\t\t//Set the custom amount input value format properly\n\t\t\t\tformat_args = {\n\t\t\t\t\tsymbol: '',\n\t\t\t\t\tdecimal: Give.form.fn.getInfo('decimal_separator', $form),\n\t\t\t\t\tthousand: Give.form.fn.getInfo('thousands_separator', $form),\n\t\t\t\t\tprecision: Give.form.fn.getInfo('number_decimals', $form),\n\t\t\t\t\tcurrency: Give.form.fn.getInfo('currency_code', $form)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\targs = jQuery.extend(format_args, args);\n\n\t\t\t// Make sure precision is integer type\n\t\t\targs.precision = parseInt(args.precision);\n\n\t\t\tif ('INR' === args.currency) {\n\t\t\t\tvar actual_price = __WEBPACK_IMPORTED_MODULE_0_accounting___default.a.unformat(price, '.').toString();\n\n\t\t\t\tvar decimal_amount = '',\n\t\t\t\t result,\n\t\t\t\t amount,\n\t\t\t\t decimal_index = actual_price.indexOf('.');\n\n\t\t\t\tif (-1 !== decimal_index && args.precision) {\n\t\t\t\t\tdecimal_amount = Number(actual_price.substr(parseInt(decimal_index))).toFixed(args.precision).toString().substr(1);\n\t\t\t\t\tactual_price = actual_price.substr(0, parseInt(decimal_index));\n\n\t\t\t\t\tif (!decimal_amount.length) {\n\t\t\t\t\t\tdecimal_amount = '.0000000000'.substr(0, parseInt(decimal_index) + 1);\n\t\t\t\t\t} else if (args.precision + 1 > decimal_amount.length) {\n\t\t\t\t\t\tdecimal_amount = (decimal_amount + '000000000').substr(0, args.precision + 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdecimal_amount = '.000000000'.substr(0, args.precision + 1);\n\t\t\t\t}\n\n\t\t\t\t// Extract last 3 from amount\n\t\t\t\tresult = actual_price.substr(-3);\n\t\t\t\tamount = actual_price.substr(0, parseInt(actual_price.length) - 3);\n\n\t\t\t\t// Apply digits 2 by 2\n\t\t\t\twhile (amount.length > 0) {\n\t\t\t\t\tresult = amount.substr(-2) + args.thousand + result;\n\t\t\t\t\tamount = amount.substr(0, parseInt(amount.length) - 2);\n\t\t\t\t}\n\n\t\t\t\tif (decimal_amount.length) {\n\t\t\t\t\tresult = result + decimal_amount;\n\t\t\t\t}\n\n\t\t\t\tprice = result;\n\n\t\t\t\tif (undefined !== args.symbol && args.symbol.length) {\n\t\t\t\t\tif ('after' === args.position) {\n\t\t\t\t\t\tprice = price + args.symbol;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice = args.symbol + price;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//Properly position symbol after if selected\n\t\t\t\tif ('after' === args.position) {\n\t\t\t\t\targs.format = '%v%s';\n\t\t\t\t}\n\n\t\t\t\tprice = __WEBPACK_IMPORTED_MODULE_0_accounting___default.a.formatMoney(price, args);\n\t\t\t}\n\n\t\t\treturn price;\n\t\t},\n\n\t\t/**\n * Unformat Currency\n *\n * @param price\n * @param {string} decimal_separator\n * @returns {number}\n */\n\t\tunFormatCurrency: function unFormatCurrency(price, decimal_separator) {\n\t\t\tif ('string' === typeof price) {\n\t\t\t\tvar regex = ',' === decimal_separator.trim() ? /[^0-9\\,-]+/g : /[^0-9\\.-]+/g;\n\n\t\t\t\tprice = price.replace(regex, '');\n\n\t\t\t\tif (0 === price.indexOf(decimal_separator)) {\n\t\t\t\t\tprice = price.substr(1);\n\t\t\t\t} else if (price.length - 1 === price.indexOf(decimal_separator)) {\n\t\t\t\t\tprice = price.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Math.abs(parseFloat(__WEBPACK_IMPORTED_MODULE_0_accounting___default.a.unformat(price, decimal_separator)));\n\t\t},\n\n\t\t/**\n * Get Parameter by Name\n *\n * @see: http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n * @param name\n * @param url\n * @since 1.4.2\n * @returns {*}\n */\n\t\tgetParameterByName: function getParameterByName(name, url) {\n\t\t\tif (!url) {\n\t\t\t\turl = window.location.href;\n\t\t\t}\n\n\t\t\tname = name.replace(/[\\[\\]]/g, '\\\\$&');\n\n\t\t\tvar regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n\t\t\t results = regex.exec(url);\n\n\t\t\tif (!results) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!results[2]) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn decodeURIComponent(results[2].replace(/\\+/g, ' '));\n\t\t},\n\n\t\t/**\n * Get information from global var\n *\n * @since 1.8.17\n * @param {string} str\n *\n * @return {string}\n */\n\t\tgetGlobalVar: function getGlobalVar(str) {\n\t\t\tif ('undefined' === typeof give_global_vars[str]) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn give_global_vars[str];\n\t\t},\n\n\t\t/**\n * set cache\n *\n * @since 1.8.17\n *\n * @param {string} key\n * @param {string} value\n * @param {object} $form\n */\n\t\tsetCache: function setCache(key, value, $form) {\n\t\t\tif ($form.length) {\n\t\t\t\tGive.cache['form_' + Give.form.fn.getInfo('form-id', $form)][key] = value;\n\t\t\t} else {\n\t\t\t\tGive.cache[key] = value;\n\t\t\t}\n\t\t},\n\n\t\t/**\n * Get cache\n *\n * @since 1.8.17\n * @param key\n * @param $form\n * @return {string|*}\n */\n\t\tgetCache: function getCache(key, $form) {\n\t\t\tvar cache;\n\n\t\t\tif ($form.length) {\n\t\t\t\tcache = Give.cache['form_' + Give.form.fn.getInfo('form-id', $form)][key];\n\t\t\t} else {\n\t\t\t\tcache = Give.cache[key];\n\t\t\t}\n\n\t\t\tcache = 'undefined' === typeof cache ? '' : cache;\n\n\t\t\treturn cache;\n\t\t},\n\n\t\t/**\n * Initialize cache.\n *\n * @since 1.8.17\n * @private\n */\n\t\t__initialize_cache: function __initialize_cache() {\n\t\t\tjQuery.each(jQuery('.give-form'), function (index, $item) {\n\t\t\t\t$item = $item instanceof jQuery ? $item : jQuery($item);\n\n\t\t\t\tGive.cache['form_' + Give.form.fn.getInfo('form-id', $item)] = [];\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n * This object key will be use to cache predicted data or donor activity.\n *\n * @since 1.8.17\n */\n\tcache: {}\n});\n\nGive.form = {\n\tinit: function init() {\n\t\tthis.fn.field.formatCreditCard(jQuery('form.give-form'));\n\n\t\twindow.onload = function () {\n\t\t\tGive.form.fn.__sendBackToForm();\n\t\t};\n\t},\n\n\tfn: {\n\n\t\t/**\n * Disable donation form.\n *\n * @param {object} $form\n * @param {boolean} is_disable\n *\n * @return {*}\n */\n\t\tdisable: function disable($form, is_disable) {\n\t\t\tif (!$form.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$form.find('.give-submit').prop('disabled', is_disable);\n\t\t},\n\n\t\t/**\n * Get formatted amount\n *\n * @param {string/number} amount\n * @param {object} $form\n * @param {object} args\n */\n\t\tformatAmount: function formatAmount(amount, $form, args) {\n\t\t\t// Do not format amount if form did not exist.\n\t\t\tif (!$form.length) {\n\t\t\t\treturn amount;\n\t\t\t}\n\n\t\t\treturn Give.fn.formatCurrency(amount, args, $form);\n\t\t},\n\n\t\t/**\n * Get form information\n *\n * @since 1.8.17\n * @param {string} str\n * @param {object} $form\n *\n * @return {string}\n */\n\t\tgetInfo: function getInfo(str, $form) {\n\t\t\tvar data = '';\n\t\t\t$form = 'undefined' !== typeof $form ? $form : {};\n\n\t\t\t// Bailout.\n\t\t\tif (!str.length || !$form.length) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tswitch (str) {\n\t\t\t\tcase 'gateways':\n\t\t\t\t\tdata = [];\n\t\t\t\t\tjQuery.each($form.find('input[name=\"payment-mode\"]'), function (index, gateway) {\n\t\t\t\t\t\tgateway = !(gateway instanceof jQuery) ? jQuery(gateway) : gateway;\n\t\t\t\t\t\tdata.push(gateway.val().trim());\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-type':\n\t\t\t\t\tif ($form.hasClass('give-form-type-set')) {\n\t\t\t\t\t\tdata = 'set';\n\t\t\t\t\t} else if ($form.hasClass('give-form-type-multi')) {\n\t\t\t\t\t\tdata = 'multi';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-id':\n\t\t\t\t\tdata = $form.find('input[name=\"give-form-id\"]').val();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif ($form.get(0).hasAttribute('data-' + str)) {\n\t\t\t\t\t\tdata = $form.attr('data-' + str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = $form.attr(str);\n\t\t\t\t\t}\n\n\t\t\t\t\t'undefined' !== typeof data ? data.trim() : data;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\n\t\t/**\n * Set form information\n *\n * @since 1.8.17\n * @param {string} str\n * @param {string} val\n * @param {object} $form\n * @param {string} type\n *\n * @return {string|boolean}\n */\n\t\tsetInfo: function setInfo(type, val, $form, str) {\n\t\t\t// Bailout.\n\t\t\tif (!$form.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ttype = 'undefined' === typeof type ? 'data' : type;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'nonce':\n\t\t\t\t\t$form.find('input[name=\"give-form-hash\"]').val(val);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Bailout.\n\t\t\tif ('undefined' !== typeof str && !str.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'attr':\n\t\t\t\t\t$form.attr(str, val);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t$form.data(str, val);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n * Get formatted amount\n *\n * @since 1.8.17\n * @param {object} $form\n */\n\t\tgetGateway: function getGateway($form) {\n\t\t\tvar gateway = '';\n\n\t\t\tif (!$form.length) {\n\t\t\t\treturn gateway;\n\t\t\t}\n\n\t\t\tgateway = $form.find('input[name=\"payment-mode\"]:checked').val().trim();\n\n\t\t\treturn 'undefined' !== typeof gateway ? gateway : '';\n\t\t},\n\n\t\t/**\n * Get Price ID and levels for multi donation form\n *\n * @param {Object} $form Form jQuery object\n *\n * @returns {Object}\n */\n\t\tgetVariablePrices: function getVariablePrices($form) {\n\t\t\tvar variable_prices = [],\n\t\t\t formLevels;\n\n\t\t\t// check if correct form type is multi or not.\n\t\t\tif (!$form.length || !$form.hasClass('give-form-type-multi') || !(formLevels = $form.find('.give-donation-levels-wrap [data-price-id] '))) {\n\t\t\t\treturn variable_prices;\n\t\t\t}\n\n\t\t\tjQuery.each(formLevels, function (index, item) {\n\t\t\t\t// Get Jquery instance for item.\n\t\t\t\titem = !(item instanceof jQuery) ? jQuery(item) : item;\n\n\t\t\t\tvar decimal_separator = Give.form.fn.getInfo('decimal_separator', $form);\n\n\t\t\t\t// Add price id and amount to collector.\n\t\t\t\tvariable_prices.push({\n\t\t\t\t\tprice_id: item.data('price-id'),\n\t\t\t\t\tamount: Give.fn.unFormatCurrency(item.val(), decimal_separator)\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn variable_prices;\n\t\t},\n\n\t\t/**\n * Get form price ID\n *\n * @since 1.8.17\n * @param {object} $form\n * @param {boolean} is_amount\n *\n * @return {string}\n */\n\t\tgetPriceID: function getPriceID($form, is_amount) {\n\n\t\t\tvar variable_prices = this.getVariablePrices($form),\n\t\t\t current_amount = Give.fn.unFormatCurrency($form.find('input[name=\"give-amount\"]').val(), this.getInfo('decimal_separator', $form)),\n\n\n\t\t\t/**\n * Flag Multi-levels for min. donation conditional.\n *\n * Note: Value of this variable will be:\n * a. -1 if no any level found.\n * b. [0-*] Any number from zero if donation level found.\n * c custom if donation level not found and donation amount is greater than the custom minimum amount.\n *\n * @type {number/string} Donation level ID.\n */\n\t\t\tprice_id = !!Give.fn.getCache('amount_' + current_amount, $form) ? Give.fn.getCache('amount_' + current_amount, $form) : -1;\n\n\t\t\t// Flag to decide on which param we want to find price_id\n\t\t\tis_amount = 'undefined' === typeof is_amount ? true : is_amount;\n\n\t\t\t// Find price id with amount in variable prices.\n\t\t\tif (variable_prices.length) {\n\n\t\t\t\t// Get recent selected price id for same amount.\n\t\t\t\tif (-1 === price_id) {\n\t\t\t\t\tif (is_amount) {\n\t\t\t\t\t\t// Find amount in donation levels.\n\t\t\t\t\t\tjQuery.each(variable_prices, function (index, variable_price) {\n\t\t\t\t\t\t\tif (variable_price.amount === current_amount) {\n\t\t\t\t\t\t\t\tprice_id = variable_price.price_id;\n\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Set level to custom.\n\t\t\t\t\t\tif (-1 === price_id && this.getMinimumAmount($form) <= current_amount && this.getMaximumAmount($form) >= current_amount && this.getMinimumAmount($form) <= current_amount) {\n\t\t\t\t\t\t\tprice_id = 'custom';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice_id = jQuery('input[name=\"give-price-id\"]', $form).val();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn price_id;\n\t\t},\n\n\t\t/**\n * Get form minimum amount\n *\n * @since 1.8.17\n * @param {object} $form\n *\n * @return {string}\n */\n\t\tgetMinimumAmount: function getMinimumAmount($form) {\n\t\t\treturn $form.find('input[name=\"give-form-minimum\"]').val();\n\t\t},\n\n\t\t/**\n * Get form maximum amount\n *\n * @since 2.1\n * @param {object} $form\n *\n * @return {string}\n */\n\t\tgetMaximumAmount: function getMaximumAmount($form) {\n\t\t\treturn $form.find('input[name=\"give-form-maximum\"]').val();\n\t\t},\n\n\t\t/**\n * Get form amount\n *\n * @since 1.8.17\n * @param $form\n * @return {*}\n */\n\t\tgetAmount: function getAmount($form) {\n\t\t\t// Bailout\n\t\t\tif (!$form.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar amount = $form.find('input[name=\"give-amount\"]').val();\n\n\t\t\tif ('undefined' === typeof amount || !amount) {\n\t\t\t\tamount = 0;\n\t\t\t}\n\n\t\t\treturn Give.fn.unFormatCurrency(amount, this.getInfo('decimal_separator', $form));\n\t\t},\n\n\t\t/**\n * Get form security nonce\n *\n * @since 1.8.17\n * @param {object} $form\n * @return {string}\n */\n\t\tgetNonce: function getNonce($form) {\n\t\t\t// Bailout\n\t\t\tif (!$form.length) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar nonce = $form.find('input[name=\"give-form-hash\"]').val();\n\n\t\t\tif ('undefined' === typeof nonce || !nonce) {\n\t\t\t\tnonce = '';\n\t\t\t}\n\n\t\t\treturn nonce;\n\t\t},\n\n\t\t/**\n * Reset form noce.\n *\n * @since 2.0\n *\n * @param {object} $form Donation form object.\n * @returns {boolean}\n */\n\t\tresetNonce: function resetNonce($form) {\n\t\t\t// Return false, if form is missing.\n\t\t\tif (!$form.length || !jQuery('input[name=\"give-form-hash\"]', $form).length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tGive.form.fn.disable($form, true);\n\n\t\t\t//Post via AJAX to Give\n\t\t\tjQuery.post(give_global_vars.ajaxurl, {\n\t\t\t\taction: 'give_donation_form_nonce',\n\t\t\t\tgive_form_id: Give.form.fn.getInfo('form-id', $form)\n\t\t\t}, function (response) {\n\t\t\t\t// Update nonce field.\n\t\t\t\tGive.form.fn.setInfo('nonce', response.data, $form, '');\n\n\t\t\t\tGive.form.fn.disable($form, false);\n\t\t\t});\n\t\t},\n\n\t\t/**\n * Auto select donation level\n *\n * @since 1.8.17\n * @param {object} $form\n * @param {string} price_id\n *\n * @return {boolean}\n */\n\t\tautoSelectDonationLevel: function autoSelectDonationLevel($form, price_id) {\n\n\t\t\tif (!$form.length || 'multi' !== this.getInfo('form-type', $form)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tprice_id = 'undefined' === typeof price_id ? this.getPriceID($form, false) : price_id;\n\n\t\t\tswitch (true) {\n\n\t\t\t\t// Auto select radio button.\n\t\t\t\tcase !!$form.find('.give-radio-input').length:\n\t\t\t\t\t$form.find('.give-radio-input').prop('checked', false);\n\t\t\t\t\t$form.find('.give-radio-input[data-price-id=\"' + price_id + '\"]').prop('checked', true).addClass('give-default-level');\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Set focus to price id button.\n\t\t\t\tcase !!$form.find('button.give-donation-level-btn').length:\n\t\t\t\t\t$form.find('button.give-donation-level-btn').blur();\n\t\t\t\t\t$form.find('button.give-donation-level-btn[data-price-id=\"' + price_id + '\"]').focus().addClass('give-default-level');\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Auto select option.\n\t\t\t\tcase !!$form.find('select.give-select-level').length:\n\t\t\t\t\t$form.find('select.give-select-level option').prop('selected', false);\n\t\t\t\t\t$form.find('select.give-select-level option[data-price-id=\"' + price_id + '\"]').prop('selected', true).addClass('give-default-level');\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n * Update level values\n *\n * Helper function: Sets the multi-select amount values\n *\n * @since 1.8.17\n * @param {object} $level\n * @returns {boolean}\n */\n\t\tautoSetMultiLevel: function autoSetMultiLevel($level) {\n\n\t\t\tvar $form = $level.parents('form'),\n\t\t\t level_amount = $level.val(),\n\t\t\t level_price_id = $level.data('price-id');\n\n\t\t\t// Check if price ID blank because of dropdown type\n\t\t\tif ('undefined' === typeof level_price_id) {\n\t\t\t\tlevel_price_id = $level.find('option:selected').data('price-id');\n\t\t\t}\n\n\t\t\t// Is this a custom amount selection?\n\t\t\tif ('custom' === level_price_id) {\n\t\t\t\t// It is, so focus on the custom amount input.\n\t\t\t\t$form.find('.give-amount-top').val('').focus();\n\t\t\t\treturn false; // Bounce out\n\t\t\t}\n\n\t\t\t// Update custom amount field\n\t\t\t$form.find('.give-amount-top').val(level_amount);\n\t\t\t$form.find('span.give-amount-top').text(level_amount);\n\n\t\t\tvar decimal_separator = Give.form.fn.getInfo('decimal_separator', $form);\n\n\t\t\t// Cache previous amount and set data amount.\n\t\t\tjQuery('.give-donation-amount .give-text-input', $form).attr('data-amount', Give.fn.unFormatCurrency($form.find('.give-final-total-amount').attr('data-total'), decimal_separator));\n\n\t\t\t// Manually trigger blur event with two params:\n\t\t\t// (a) form jquery object\n\t\t\t// (b) price id\n\t\t\t// (c) donation amount\n\t\t\t$form.find('.give-donation-amount .give-text-input').trigger('blur', [$form, level_amount, level_price_id]);\n\t\t},\n\n\t\t/**\n * Donor sent back to the form\n *\n * @since 1.8.17\n * @access private\n */\n\t\t__sendBackToForm: function __sendBackToForm() {\n\n\t\t\tvar form_id = Give.fn.getParameterByName('form-id'),\n\t\t\t payment_mode = Give.fn.getParameterByName('payment-mode');\n\n\t\t\t// Sanity check - only proceed if query strings in place.\n\t\t\tif (!form_id || !payment_mode) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar $form_wrapper = jQuery('body').find('#give-form-' + form_id + '-wrap'),\n\t\t\t $form = $form_wrapper.find('form.give-form'),\n\t\t\t display_modal = $form_wrapper.hasClass('give-display-modal'),\n\t\t\t display_button = $form_wrapper.hasClass('give-display-button'),\n\t\t\t display_reveal = $form_wrapper.hasClass('give-display-reveal');\n\n\t\t\t// Update payment mode radio so it's correctly checked.\n\t\t\t$form.find('#give-gateway-radio-list label').removeClass('give-gateway-option-selected');\n\t\t\t$form.find('input[name=payment-mode][value=' + payment_mode + ']').prop('checked', true).parent().addClass('give-gateway-option-selected');\n\n\t\t\t// Select the proper level for Multi-level forms.\n\t\t\t// It can either be a dropdown, buttons, or radio list. Default is buttons field type.\n\t\t\tvar level_id = Give.fn.getParameterByName('level-id'),\n\t\t\t level_field = $form.find('*[data-price-id=\"' + level_id + '\"]');\n\n\t\t\tif (level_field.length > 0) {\n\t\t\t\tthis.autoSetMultiLevel(level_field);\n\t\t\t}\n\n\t\t\tvar give_form_wrap = jQuery('.give-form-wrap'),\n\t\t\t is_form_grid = give_form_wrap.hasClass('give-form-grid-wrap');\n\n\t\t\tif (is_form_grid && 1 === jQuery('#give-modal-form-' + form_id).length) {\n\t\t\t\tjQuery.magnificPopup.open({\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: 'inline',\n\t\t\t\t\t\tsrc: '#give-modal-form-' + form_id\n\t\t\t\t\t},\n\t\t\t\t\tfixedContentPos: true,\n\t\t\t\t\tfixedBgPos: true,\n\t\t\t\t\tcloseBtnInside: true,\n\t\t\t\t\tmidClick: true,\n\t\t\t\t\tremovalDelay: 300,\n\t\t\t\t\tmainClass: 'modal-fade-slide'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This form is modal display so show the modal.\n\t\t\tif (display_modal || display_button) {\n\t\t\t\tgive_open_form_modal($form_wrapper, $form);\n\t\t\t} else if (display_reveal) {\n\t\t\t\t// This is a reveal form, show it.\n\t\t\t\t$form.find('.give-btn-reveal').hide();\n\t\t\t\t$form.find('#give-payment-mode-select, #give_purchase_form_wrap').slideDown();\n\t\t\t}\n\t\t},\n\n\t\t/**\n * Check if donation amount valid or not\n * @since 1.8.17\n *\n * @param {object} $form\n *\n * @return {boolean}\n */\n\t\tisValidDonationAmount: function isValidDonationAmount($form) {\n\n\t\t\t// Return true, if custom amount is not enabled.\n\t\t\tif ($form.find('input[name=\"give-form-minimum\"]').length <= 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar min_amount = this.getMinimumAmount($form),\n\t\t\t max_amount = this.getMaximumAmount($form),\n\t\t\t amount = this.getAmount($form),\n\t\t\t price_id = this.getPriceID($form, true);\n\n\t\t\t// Don't allow zero donation amounts.\n\t\t\t// https://github.com/WordImpress/Give/issues/3181\n\t\t\tif (0 === amount) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn -1 < amount && amount >= min_amount && amount <= max_amount || -1 !== price_id;\n\t\t},\n\n\t\tfield: {\n\n\t\t\t/**\n * Format CC Fields\n *\n * Set variables and format cc fields.\n *\n * @since 1.2\n *\n * @param {object} $forms\n */\n\t\t\tformatCreditCard: function formatCreditCard($forms) {\n\t\t\t\t//Loop through forms on page and set CC validation\n\t\t\t\t$forms.each(function (index, form) {\n\t\t\t\t\tform = jQuery(form);\n\t\t\t\t\tvar card_number = form.find('.card-number'),\n\t\t\t\t\t card_cvc = form.find('.card-cvc'),\n\t\t\t\t\t card_expiry = form.find('.card-expiry');\n\n\t\t\t\t\t//Only validate if there is a card field\n\t\t\t\t\tif (card_number.length) {\n\t\t\t\t\t\tcard_number.payment('formatCardNumber');\n\t\t\t\t\t\tcard_cvc.payment('formatCardCVC');\n\t\t\t\t\t\tcard_expiry.payment('formatCardExpiry');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n};\n\nGive.notice = {\n\tfn: {\n\t\t/**\n * Render notice\n * @since 1.8.17\n *\n * @param {string} notice_code\n * @param {object} $container\n *\n * @return {string}\n */\n\t\trenderNotice: function renderNotice(notice_code, $container) {\n\t\t\tvar notice_html = '',\n\t\t\t $notice = void 0;\n\t\t\t$container = 'undefined' !== typeof $container ? $container : {};\n\n\t\t\tswitch (notice_code) {\n\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t$notice = jQuery('
' + this.getNotice(notice_code, $container) + '
');\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t$notice = jQuery('
' + this.getNotice(notice_code, $container) + '
');\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Return html if container did not find.\n\t\t\tif (!$container.length) {\n\t\t\t\treturn notice_html;\n\t\t\t}\n\n\t\t\t$notice.insertBefore($container.find('.give-total-wrap')).show();\n\t\t},\n\n\t\t/**\n * Get error notice\n *\n * @since 1.8.17\n * @param {string} error_code\n * @param {object} $form\n *\n * @return {*}\n */\n\t\tgetNotice: function getNotice(error_code, $form) {\n\t\t\t// Bailout.\n\t\t\tif (!error_code.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar notice, notice_msg, formatted_amount;\n\t\t\tnotice = notice_msg = formatted_amount = '';\n\n\t\t\tif ($form.length) {\n\t\t\t\tswitch (error_code) {\n\t\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar(error_code);\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMinimumAmount($form);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar(error_code);\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMaximumAmount($form);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($form.length && '' !== notice_msg) {\n\t\t\t\tnotice = notice_msg + ' ' + Give.fn.formatCurrency(formatted_amount, {\n\t\t\t\t\tsymbol: Give.form.fn.getInfo('currency_symbol', $form),\n\t\t\t\t\tposition: Give.form.fn.getInfo('currency_position', $form)\n\t\t\t\t}, $form);\n\t\t\t}\n\n\t\t\treturn notice;\n\t\t}\n\t}\n};\n\nwindow.Give = Give;\n\njQuery(function ($) {\n\n\tvar $forms = jQuery('form.give-form'),\n\t doc = $(document);\n\n\t// Toggle validation classes\n\t$.fn.toggleError = function (errored) {\n\t\tthis.toggleClass('error', errored);\n\t\tthis.toggleClass('valid', !errored);\n\n\t\treturn this;\n\t};\n\n\t// Initialize Give object.\n\tGive.init();\n\n\t/**\n * Update state/province fields per country selection\n */\n\tfunction update_billing_state_field() {\n\t\tvar $this = $(this),\n\t\t $form = $this.parents('form');\n\t\tif ('card_state' !== $this.attr('id')) {\n\n\t\t\t//Disable the State field until updated\n\t\t\t$form.find('#card_state').empty().append('').prop('disabled', true);\n\n\t\t\t// If the country field has changed, we need to update the state/province field\n\t\t\tvar postData = {\n\t\t\t\taction: 'give_get_states',\n\t\t\t\tcountry: $this.val(),\n\t\t\t\tfield_name: 'card_state'\n\t\t\t};\n\n\t\t\t$.ajax({\n\t\t\t\ttype: 'POST',\n\t\t\t\tdata: postData,\n\t\t\t\turl: give_global_vars.ajaxurl,\n\t\t\t\txhrFields: {\n\t\t\t\t\twithCredentials: true\n\t\t\t\t},\n\t\t\t\tsuccess: function success(response) {\n\t\t\t\t\tvar html = '';\n\t\t\t\t\tvar states_label = response.states_label;\n\t\t\t\t\tif (_typeof(response.states_found) != undefined && true == response.states_found) {\n\t\t\t\t\t\thtml = response.data;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (false === $form.hasClass('float-labels-enabled')) {\n\t\t\t\t\t\tif (typeof response.states_require != 'undefined' && true == response.states_require) {\n\t\t\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label .give-required-indicator').removeClass('give-hidden');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label .give-required-indicator').addClass('give-hidden');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label').text(states_label);\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label .state-label-text').text(states_label);\n\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').replaceWith(html);\n\n\t\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\t\tif (_typeof(response.show_field) != undefined && true == response.show_field) {\n\t\t\t\t\t\t$form.find('p#give-card-state-wrap').removeClass('give-hidden');\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-last');\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-wide');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find('p#give-card-state-wrap').addClass('give-hidden');\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-wide');\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-last');\n\t\t\t\t\t}\n\n\t\t\t\t\tdoc.trigger('give_checkout_billing_address_updated', [response, $form.attr('id')]);\n\t\t\t\t}\n\t\t\t}).fail(function (data) {\n\t\t\t\tif (window.console && window.console.log) {\n\t\t\t\t\tconsole.log(data);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Sync state field with country.\n\tdoc.on('change', '#give_cc_address input.card_state, #give_cc_address select', update_billing_state_field);\n\n\t// Trigger formatting function when gateway changes.\n\tdoc.on('give_gateway_loaded', function () {\n\t\tGive.form.fn.field.formatCreditCard($forms);\n\t});\n\n\t// Make sure a gateway is selected.\n\tdoc.on('submit', '#give_payment_mode', function () {\n\t\tvar gateway = Give.form.fn.getGateway($(this).closest('form'));\n\t\tif (!gateway.length) {\n\t\t\talert(Give.fn.getGlobalVar('no_gateway'));\n\t\t\treturn false;\n\t\t}\n\t});\n\n\t// Add a class to the currently selected gateway on click\n\tdoc.on('click', '#give-payment-mode-select input', function () {\n\t\tvar $form = $(this).parents('form'),\n\t\t $gateways_li = $form.find('#give-payment-mode-select li'),\n\t\t old_payment_gateway = $form.find('li.give-gateway-option-selected input[name=\"payment-mode\"]').val().trim(),\n\t\t new_payment_gateways;\n\n\t\t// Unselect all payment gateways.\n\t\t$gateways_li.removeClass('give-gateway-option-selected');\n\t\t$gateways_li.prop('checked', false);\n\n\t\t// Select payment gateway.\n\t\t$(this).prop('checked', true);\n\t\t$(this).parent().addClass('give-gateway-option-selected');\n\n\t\t// Get new payment gateway.\n\t\tnew_payment_gateways = Give.form.fn.getGateway($form);\n\n\t\t// Change form action.\n\t\t$form.attr('action', $form.attr('action').replace('payment-mode=' + old_payment_gateway, 'payment-mode=' + new_payment_gateways));\n\t});\n\n\t/**\n * Custom Donation Amount Focus In\n *\n * @description: If user focuses on field & changes value then updates price\n */\n\tdoc.on('focus', '.give-donation-amount .give-text-input', function (e) {\n\n\t\tvar parent_form = $(this).parents('form');\n\n\t\t// Remove any invalid class\n\t\t$(this).removeClass('invalid-amount');\n\n\t\t// Set data amount\n\t\tvar current_total = parent_form.find('.give-final-total-amount').attr('data-total');\n\t\tvar decimal_separator = Give.form.fn.getInfo('decimal_separator', parent_form);\n\t\t$(this).attr('data-amount', Give.fn.unFormatCurrency(current_total, decimal_separator));\n\n\t\t//This class is used for CSS purposes\n\t\t$(this).parent('.give-donation-amount').addClass('give-custom-amount-focus-in');\n\n\t\t//Set Multi-Level to Custom Amount Field\n\t\tparent_form.find('.give-default-level, .give-radio-input').removeClass('give-default-level');\n\t\tparent_form.find('.give-btn-level-custom').addClass('give-default-level');\n\t\tparent_form.find('.give-radio-input').prop('checked', false); // Radio\n\t\tparent_form.find('.give-radio-input.give-radio-level-custom').prop('checked', true); // Radio\n\t\tparent_form.find('.give-select-level').prop('selected', false); // Select\n\t\tparent_form.find('.give-select-level .give-donation-level-custom').prop('selected', true); // Select\n\t});\n\n\t/**\n * Custom Donation Focus Out\n *\n * Fires on focus end aka \"blur\"\n */\n\tdoc.on('blur', '.give-donation-amount .give-text-input', function (e, $parent_form, donation_amount, price_id) {\n\n\t\tvar parent_form = 'undefined' !== typeof $parent_form ? $parent_form : $(this).closest('form'),\n\t\t pre_focus_amount = $(this).attr('data-amount'),\n\t\t this_value = 'undefined' !== typeof donation_amount ? donation_amount : $(this).val(),\n\t\t decimal_separator = Give.form.fn.getInfo('decimal_separator', parent_form),\n\t\t value_min = Give.form.fn.getMinimumAmount(parent_form),\n\t\t value_max = Give.form.fn.getMaximumAmount(parent_form),\n\t\t value_now = this_value === 0 ? value_min : Give.fn.unFormatCurrency(this_value, decimal_separator),\n\t\t formatted_total = Give.form.fn.formatAmount(value_now, parent_form, {});\n\n\t\tprice_id = 'undefined' === typeof price_id ? Give.form.fn.getPriceID(parent_form, true) : price_id;\n\n\t\t// https://github.com/WordImpress/Give/issues/3299\n\t\t// If we change from custom amount to donation level then\n\t\t// this event fire twice. First on amount field blur and second time on level button/radio/select click which cause of minimum donation notice.\n\t\t// This condition will prevent minimum donation amount notice show by set default level.\n\t\tif ('' === value_now || 0 === value_now) {\n\t\t\tvar $default_level = $('.give-donation-levels-wrap [data-default=\"1\"]', $parent_form);\n\n\t\t\tif ($default_level.length) {\n\t\t\t\tprice_id = $default_level.data('price-id');\n\t\t\t\tthis_value = value_now = Give.fn.unFormatCurrency($default_level.val(), decimal_separator);\n\t\t\t\tformatted_total = Give.form.fn.formatAmount(value_now, parent_form, {});\n\t\t\t}\n\t\t}\n\n\t\t// Cache donor selected price id for a amount.\n\t\tGive.fn.setCache('amount_' + value_now, price_id, parent_form);\n\t\t$(this).val(formatted_total);\n\n\t\t// Does this number have an accepted min/max value?\n\t\tif (!Give.form.fn.isValidDonationAmount(parent_form)) {\n\n\t\t\t// It doesn't... add invalid class.\n\t\t\t$(this).addClass('give-invalid-amount');\n\n\t\t\t// Disable submit\n\t\t\tGive.form.fn.disable(parent_form, true);\n\t\t\tvar invalid_minimum_notice = parent_form.find('.give-invalid-minimum'),\n\t\t\t invalid_maximum_notice = parent_form.find('.give-invalid-maximum');\n\n\t\t\t// If no error present, create it, insert, slide down (show).\n\t\t\tif (0 === invalid_minimum_notice.length && value_now < value_min) {\n\t\t\t\tGive.notice.fn.renderNotice('bad_minimum', parent_form);\n\t\t\t} else if (value_now >= value_min) {\n\t\t\t\tinvalid_minimum_notice.slideUp(300, function () {\n\t\t\t\t\t$(this).remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// For maximum custom amount error.\n\t\t\tif (0 === invalid_maximum_notice.length && value_now > value_max) {\n\t\t\t\tGive.notice.fn.renderNotice('bad_maximum', parent_form);\n\t\t\t} else if (value_now <= value_max) {\n\t\t\t\tinvalid_maximum_notice.slideUp(300, function () {\n\t\t\t\t\t$(this).remove();\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Remove error message class from price field.\n\t\t\t$(this).removeClass('give-invalid-amount');\n\n\t\t\t// Minimum amount met - slide up error & remove it from DOM.\n\t\t\tparent_form.find('.give-invalid-minimum, .give-invalid-maximum').slideUp(300, function () {\n\t\t\t\t$(this).remove();\n\t\t\t});\n\n\t\t\t// Re-enable submit.\n\t\t\tGive.form.fn.disable(parent_form, false);\n\t\t}\n\n\t\t// If values don't match up then proceed with updating donation total value\n\t\tif (pre_focus_amount !== value_now) {\n\n\t\t\t// Update donation total (include currency symbol)\n\t\t\tparent_form.find('.give-final-total-amount').attr('data-total', value_now).text(Give.fn.formatCurrency(value_now, {\n\t\t\t\tsymbol: Give.form.fn.getInfo('currency_symbol', parent_form),\n\t\t\t\tposition: Give.form.fn.getInfo('currency_position', parent_form)\n\t\t\t}, parent_form));\n\t\t}\n\n\t\t// Set price id for current amount.\n\t\tif (-1 !== price_id) {\n\n\t\t\t// Auto set give price id.\n\t\t\t$('input[name=\"give-price-id\"]', parent_form).val(price_id);\n\n\t\t\t// Update hidden amount field\n\t\t\tparent_form.find('.give-amount-hidden').val(Give.form.fn.formatAmount(value_now, parent_form, {}));\n\n\t\t\t// Remove old selected class & add class for CSS purposes\n\t\t\tparent_form.find('.give-default-level').removeClass('give-default-level');\n\n\t\t\t// Auto select variable price items ( Radio/Button/Select ).\n\t\t\tGive.form.fn.autoSelectDonationLevel(parent_form, price_id);\n\t\t}\n\n\t\t// This class is used for CSS purposes\n\t\t$(this).parent('.give-donation-amount').removeClass('give-custom-amount-focus-in');\n\n\t\t// trigger an event for hooks\n\t\tjQuery(document).trigger('give_donation_value_updated', [parent_form, value_now, price_id]);\n\t});\n\n\t// Multi-level Buttons: Update Amount Field based on Multi-level Donation Select\n\tdoc.on('click touchend', '.give-donation-level-btn', function (e) {\n\t\te.preventDefault(); //don't let the form submit\n\t\tGive.form.fn.autoSetMultiLevel($(this));\n\t});\n\n\t// Multi-level Radios: Update Amount Field based on Multi-level Donation Select\n\tdoc.on('click touchend', '.give-radio-input-level', function (e) {\n\t\tGive.form.fn.autoSetMultiLevel($(this));\n\t});\n\n\t// Multi-level Checkboxes: Update Amount Field based on Multi-level Donation Select\n\tdoc.on('change', '.give-select-level', function (e) {\n\t\tGive.form.fn.autoSetMultiLevel($(this));\n\t});\n\n\t/**\n * Show/Hide terms and conditions.\n */\n\tdoc.on('click', '.give_terms_links', function (e) {\n\t\te.preventDefault();\n\t\tvar $fieldset_wrapper = $(this).closest('fieldset');\n\t\t$('[class^=give_terms-]', $fieldset_wrapper).slideToggle();\n\t\t$('a.give_terms_links', $fieldset_wrapper).toggle();\n\t\treturn false;\n\t});\n\n\t/**\n * Prevent level jump which happens due to same id.\n * @see https://github.com/WordImpress/Give/issues/2292\n */\n\t$('label[for^=\"give-radio-level\"]').on('click', function (e) {\n\t\tvar $form = $(this).closest('form'),\n\t\t $inputField = $form.find('#' + $(this).attr('for'));\n\n\t\tif ($inputField.length) {\n\t\t\t$inputField.trigger('click');\n\t\t\te.preventDefault();\n\t\t}\n\t});\n});\n\njQuery(window).load(function () {\n\n\t/**\n * Validate cc fields on change\n */\n\tjQuery('body').on('keyup change focusout', '.give-form .card-number, .give-form .card-cvc, .give-form .card-expiry', function (e) {\n\t\tvar el = jQuery(this),\n\t\t give_form = el.parents('form.give-form'),\n\t\t id = el.attr('id'),\n\t\t card_number = give_form.find('.card-number'),\n\t\t card_cvc = give_form.find('.card-cvc'),\n\t\t card_expiry = give_form.find('.card-expiry'),\n\t\t type = jQuery.payment.cardType(card_number.val()),\n\t\t error = false;\n\n\t\tswitch (e.type) {\n\t\t\tcase 'focusout':\n\t\t\t\tif (id.indexOf('card_number') > -1) {\n\t\t\t\t\t// Set card number error.\n\t\t\t\t\terror = !jQuery.payment.validateCardNumber(card_number.val());\n\t\t\t\t\tcard_number.toggleError(error);\n\t\t\t\t} else if (id.indexOf('card_cvc') > -1) {\n\t\t\t\t\t// Set card cvc error.\n\t\t\t\t\terror = !jQuery.payment.validateCardCVC(card_cvc.val(), type);\n\t\t\t\t\tcard_cvc.toggleError(error);\n\t\t\t\t} else if (id.indexOf('card_expiry') > -1) {\n\t\t\t\t\t// Set card expiry error.\n\t\t\t\t\terror = !jQuery.payment.validateCardExpiry(card_expiry.payment('cardExpiryVal'));\n\t\t\t\t\tcard_expiry.toggleError(error);\n\t\t\t\t}\n\n\t\t\t\t// Disable submit button\n\t\t\t\tGive.form.fn.disable(el.parents('form'), error);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Remove error class.\n\t\t\t\tif (el.hasClass('error')) {\n\t\t\t\t\tel.removeClass('error');\n\t\t\t\t}\n\n\t\t\t\tif (id.indexOf('card_number') > -1) {\n\t\t\t\t\t// Add card related classes.\n\t\t\t\t\tvar card_type = give_form.find('.card-type');\n\n\t\t\t\t\tif (type === null) {\n\t\t\t\t\t\tcard_type.removeClass().addClass('off card-type');\n\t\t\t\t\t\tel.removeClass('valid').addClass('error');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcard_type.removeClass().addClass('card-type ' + type);\n\t\t\t\t\t}\n\t\t\t\t} else if (id.indexOf('card_expiry') > -1) {\n\t\t\t\t\t// set expiry date params.\n\t\t\t\t\tvar expiry = card_expiry.payment('cardExpiryVal');\n\n\t\t\t\t\tgive_form.find('.card-expiry-month').val(expiry.month);\n\t\t\t\t\tgive_form.find('.card-expiry-year').val(expiry.year);\n\t\t\t\t}\n\t\t}\n\t});\n});\n\n/***/ }),\n\n/***/ 27:\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n\n/***/ 363:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(364);\nmodule.exports = __webpack_require__(372);\n\n\n/***/ }),\n\n/***/ 364:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery_payment__ = __webpack_require__(365);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery_payment___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery_payment__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_accounting__ = __webpack_require__(68);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_accounting___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_accounting__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_uiblocker__ = __webpack_require__(366);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_uiblocker___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_uiblocker__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_magnific_popup__ = __webpack_require__(52);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_magnific_popup___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_magnific_popup__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__plugins_give_hint_css__ = __webpack_require__(97);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__plugins_give_hint_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__plugins_give_hint_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__give_ajax__ = __webpack_require__(369);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__give_donations__ = __webpack_require__(134);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__give_misc__ = __webpack_require__(370);\n// Plugins\n\n\n\n\n\n// Give plugins.\n\n\n// Give core.\n\n\n\n\n/***/ }),\n\n/***/ 365:\n/***/ (function(module, exports) {\n\n// Generated by CoffeeScript 1.7.1\n(function() {\n var $, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, reFormatCVC, reFormatCardNumber, reFormatExpiry, reFormatNumeric, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, safeVal, setCardType,\n __slice = [].slice,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n $ = window.jQuery || window.Zepto || window.$;\n\n $.payment = {};\n\n $.payment.fn = {};\n\n $.fn.payment = function() {\n var args, method;\n method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n return $.payment.fn[method].apply(this, args);\n };\n\n defaultFormat = /(\\d{1,4})/g;\n\n $.payment.cards = cards = [\n {\n type: 'maestro',\n patterns: [5018, 502, 503, 506, 56, 58, 639, 6220, 67],\n format: defaultFormat,\n length: [12, 13, 14, 15, 16, 17, 18, 19],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'forbrugsforeningen',\n patterns: [600],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'dankort',\n patterns: [5019],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'visa',\n patterns: [4],\n format: defaultFormat,\n length: [13, 16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'mastercard',\n patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'amex',\n patterns: [34, 37],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,\n length: [15],\n cvcLength: [3, 4],\n luhn: true\n }, {\n type: 'dinersclub',\n patterns: [30, 36, 38, 39],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,\n length: [14],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'discover',\n patterns: [60, 64, 65, 622],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'unionpay',\n patterns: [62, 88],\n format: defaultFormat,\n length: [16, 17, 18, 19],\n cvcLength: [3],\n luhn: false\n }, {\n type: 'jcb',\n patterns: [35],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }\n ];\n\n cardFromNumber = function(num) {\n var card, p, pattern, _i, _j, _len, _len1, _ref;\n num = (num + '').replace(/\\D/g, '');\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n _ref = card.patterns;\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n pattern = _ref[_j];\n p = pattern + '';\n if (num.substr(0, p.length) === p) {\n return card;\n }\n }\n }\n };\n\n cardFromType = function(type) {\n var card, _i, _len;\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n if (card.type === type) {\n return card;\n }\n }\n };\n\n luhnCheck = function(num) {\n var digit, digits, odd, sum, _i, _len;\n odd = true;\n sum = 0;\n digits = (num + '').split('').reverse();\n for (_i = 0, _len = digits.length; _i < _len; _i++) {\n digit = digits[_i];\n digit = parseInt(digit, 10);\n if ((odd = !odd)) {\n digit *= 2;\n }\n if (digit > 9) {\n digit -= 9;\n }\n sum += digit;\n }\n return sum % 10 === 0;\n };\n\n hasTextSelected = function($target) {\n var _ref;\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== $target.prop('selectionEnd')) {\n return true;\n }\n if ((typeof document !== \"undefined\" && document !== null ? (_ref = document.selection) != null ? _ref.createRange : void 0 : void 0) != null) {\n if (document.selection.createRange().text) {\n return true;\n }\n }\n return false;\n };\n\n safeVal = function(value, $target) {\n var currPair, cursor, digit, error, last, prevPair;\n try {\n cursor = $target.prop('selectionStart');\n } catch (_error) {\n error = _error;\n cursor = null;\n }\n last = $target.val();\n $target.val(value);\n if (cursor !== null && $target.is(\":focus\")) {\n if (cursor === last.length) {\n cursor = value.length;\n }\n if (last !== value) {\n prevPair = last.slice(cursor - 1, +cursor + 1 || 9e9);\n currPair = value.slice(cursor - 1, +cursor + 1 || 9e9);\n digit = value[cursor];\n if (/\\d/.test(digit) && prevPair === (\"\" + digit + \" \") && currPair === (\" \" + digit)) {\n cursor = cursor + 1;\n }\n }\n $target.prop('selectionStart', cursor);\n return $target.prop('selectionEnd', cursor);\n }\n };\n\n replaceFullWidthChars = function(str) {\n var chars, chr, fullWidth, halfWidth, idx, value, _i, _len;\n if (str == null) {\n str = '';\n }\n fullWidth = '\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19';\n halfWidth = '0123456789';\n value = '';\n chars = str.split('');\n for (_i = 0, _len = chars.length; _i < _len; _i++) {\n chr = chars[_i];\n idx = fullWidth.indexOf(chr);\n if (idx > -1) {\n chr = halfWidth[idx];\n }\n value += chr;\n }\n return value;\n };\n\n reFormatNumeric = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = value.replace(/\\D/g, '');\n return safeVal(value, $target);\n });\n };\n\n reFormatCardNumber = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = $.payment.formatCardNumber(value);\n return safeVal(value, $target);\n });\n };\n\n formatCardNumber = function(e) {\n var $target, card, digit, length, re, upperLength, value;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n value = $target.val();\n card = cardFromNumber(value + digit);\n length = (value.replace(/\\D/g, '') + digit).length;\n upperLength = 16;\n if (card) {\n upperLength = card.length[card.length.length - 1];\n }\n if (length >= upperLength) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (card && card.type === 'amex') {\n re = /^(\\d{4}|\\d{4}\\s\\d{6})$/;\n } else {\n re = /(?:^|\\s)(\\d{4})$/;\n }\n if (re.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value + ' ' + digit);\n });\n } else if (re.test(value + digit)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value + digit + ' ');\n });\n }\n };\n\n formatBackCardNumber = function(e) {\n var $target, value;\n $target = $(e.currentTarget);\n value = $target.val();\n if (e.which !== 8) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (/\\d\\s$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d\\s$/, ''));\n });\n } else if (/\\s\\d?$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d$/, ''));\n });\n }\n };\n\n reFormatExpiry = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = $.payment.formatExpiry(value);\n return safeVal(value, $target);\n });\n };\n\n formatExpiry = function(e) {\n var $target, digit, val;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val() + digit;\n if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(\"0\" + val + \" / \");\n });\n } else if (/^\\d\\d$/.test(val)) {\n e.preventDefault();\n return setTimeout(function() {\n var m1, m2;\n m1 = parseInt(val[0], 10);\n m2 = parseInt(val[1], 10);\n if (m2 > 2 && m1 !== 0) {\n return $target.val(\"0\" + m1 + \" / \" + m2);\n } else {\n return $target.val(\"\" + val + \" / \");\n }\n });\n }\n };\n\n formatForwardExpiry = function(e) {\n var $target, digit, val;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val();\n if (/^\\d\\d$/.test(val)) {\n return $target.val(\"\" + val + \" / \");\n }\n };\n\n formatForwardSlashAndSpace = function(e) {\n var $target, val, which;\n which = String.fromCharCode(e.which);\n if (!(which === '/' || which === ' ')) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val();\n if (/^\\d$/.test(val) && val !== '0') {\n return $target.val(\"0\" + val + \" / \");\n }\n };\n\n formatBackExpiry = function(e) {\n var $target, value;\n $target = $(e.currentTarget);\n value = $target.val();\n if (e.which !== 8) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (/\\d\\s\\/\\s$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d\\s\\/\\s$/, ''));\n });\n }\n };\n\n reFormatCVC = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = value.replace(/\\D/g, '').slice(0, 4);\n return safeVal(value, $target);\n });\n };\n\n restrictNumeric = function(e) {\n var input;\n if (e.metaKey || e.ctrlKey) {\n return true;\n }\n if (e.which === 32) {\n return false;\n }\n if (e.which === 0) {\n return true;\n }\n if (e.which < 33) {\n return true;\n }\n input = String.fromCharCode(e.which);\n return !!/[\\d\\s]/.test(input);\n };\n\n restrictCardNumber = function(e) {\n var $target, card, digit, value;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n value = ($target.val() + digit).replace(/\\D/g, '');\n card = cardFromNumber(value);\n if (card) {\n return value.length <= card.length[card.length.length - 1];\n } else {\n return value.length <= 16;\n }\n };\n\n restrictExpiry = function(e) {\n var $target, digit, value;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n value = $target.val() + digit;\n value = value.replace(/\\D/g, '');\n if (value.length > 6) {\n return false;\n }\n };\n\n restrictCVC = function(e) {\n var $target, digit, val;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n val = $target.val() + digit;\n return val.length <= 4;\n };\n\n setCardType = function(e) {\n var $target, allTypes, card, cardType, val;\n $target = $(e.currentTarget);\n val = $target.val();\n cardType = $.payment.cardType(val) || 'unknown';\n if (!$target.hasClass(cardType)) {\n allTypes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n _results.push(card.type);\n }\n return _results;\n })();\n $target.removeClass('unknown');\n $target.removeClass(allTypes.join(' '));\n $target.addClass(cardType);\n $target.toggleClass('identified', cardType !== 'unknown');\n return $target.trigger('payment.cardType', cardType);\n }\n };\n\n $.payment.fn.formatCardCVC = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictCVC);\n this.on('paste', reFormatCVC);\n this.on('change', reFormatCVC);\n this.on('input', reFormatCVC);\n return this;\n };\n\n $.payment.fn.formatCardExpiry = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictExpiry);\n this.on('keypress', formatExpiry);\n this.on('keypress', formatForwardSlashAndSpace);\n this.on('keypress', formatForwardExpiry);\n this.on('keydown', formatBackExpiry);\n this.on('change', reFormatExpiry);\n this.on('input', reFormatExpiry);\n return this;\n };\n\n $.payment.fn.formatCardNumber = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictCardNumber);\n this.on('keypress', formatCardNumber);\n this.on('keydown', formatBackCardNumber);\n this.on('keyup', setCardType);\n this.on('paste', reFormatCardNumber);\n this.on('change', reFormatCardNumber);\n this.on('input', reFormatCardNumber);\n this.on('input', setCardType);\n return this;\n };\n\n $.payment.fn.restrictNumeric = function() {\n this.on('keypress', restrictNumeric);\n this.on('paste', reFormatNumeric);\n this.on('change', reFormatNumeric);\n this.on('input', reFormatNumeric);\n return this;\n };\n\n $.payment.fn.cardExpiryVal = function() {\n return $.payment.cardExpiryVal($(this).val());\n };\n\n $.payment.cardExpiryVal = function(value) {\n var month, prefix, year, _ref;\n _ref = value.split(/[\\s\\/]+/, 2), month = _ref[0], year = _ref[1];\n if ((year != null ? year.length : void 0) === 2 && /^\\d+$/.test(year)) {\n prefix = (new Date).getFullYear();\n prefix = prefix.toString().slice(0, 2);\n year = prefix + year;\n }\n month = parseInt(month, 10);\n year = parseInt(year, 10);\n return {\n month: month,\n year: year\n };\n };\n\n $.payment.validateCardNumber = function(num) {\n var card, _ref;\n num = (num + '').replace(/\\s+|-/g, '');\n if (!/^\\d+$/.test(num)) {\n return false;\n }\n card = cardFromNumber(num);\n if (!card) {\n return false;\n }\n return (_ref = num.length, __indexOf.call(card.length, _ref) >= 0) && (card.luhn === false || luhnCheck(num));\n };\n\n $.payment.validateCardExpiry = function(month, year) {\n var currentTime, expiry, _ref;\n if (typeof month === 'object' && 'month' in month) {\n _ref = month, month = _ref.month, year = _ref.year;\n }\n if (!(month && year)) {\n return false;\n }\n month = $.trim(month);\n year = $.trim(year);\n if (!/^\\d+$/.test(month)) {\n return false;\n }\n if (!/^\\d+$/.test(year)) {\n return false;\n }\n if (!((1 <= month && month <= 12))) {\n return false;\n }\n if (year.length === 2) {\n if (year < 70) {\n year = \"20\" + year;\n } else {\n year = \"19\" + year;\n }\n }\n if (year.length !== 4) {\n return false;\n }\n expiry = new Date(year, month);\n currentTime = new Date;\n expiry.setMonth(expiry.getMonth() - 1);\n expiry.setMonth(expiry.getMonth() + 1, 1);\n return expiry > currentTime;\n };\n\n $.payment.validateCardCVC = function(cvc, type) {\n var card, _ref;\n cvc = $.trim(cvc);\n if (!/^\\d+$/.test(cvc)) {\n return false;\n }\n card = cardFromType(type);\n if (card != null) {\n return _ref = cvc.length, __indexOf.call(card.cvcLength, _ref) >= 0;\n } else {\n return cvc.length >= 3 && cvc.length <= 4;\n }\n };\n\n $.payment.cardType = function(num) {\n var _ref;\n if (!num) {\n return null;\n }\n return ((_ref = cardFromNumber(num)) != null ? _ref.type : void 0) || null;\n };\n\n $.payment.formatCardNumber = function(num) {\n var card, groups, upperLength, _ref;\n num = num.replace(/\\D/g, '');\n card = cardFromNumber(num);\n if (!card) {\n return num;\n }\n upperLength = card.length[card.length.length - 1];\n num = num.slice(0, upperLength);\n if (card.format.global) {\n return (_ref = num.match(card.format)) != null ? _ref.join(' ') : void 0;\n } else {\n groups = card.format.exec(num);\n if (groups == null) {\n return;\n }\n groups.shift();\n groups = $.grep(groups, function(n) {\n return n;\n });\n return groups.join(' ');\n }\n };\n\n $.payment.formatExpiry = function(expiry) {\n var mon, parts, sep, year;\n parts = expiry.match(/^\\D*(\\d{1,2})(\\D+)?(\\d{1,4})?/);\n if (!parts) {\n return '';\n }\n mon = parts[1] || '';\n sep = parts[2] || '';\n year = parts[3] || '';\n if (year.length > 0) {\n sep = ' / ';\n } else if (sep === ' /') {\n mon = mon.substring(0, 1);\n sep = '';\n } else if (mon.length === 2 || sep.length > 0) {\n sep = ' / ';\n } else if (mon.length === 1 && (mon !== '0' && mon !== '1')) {\n mon = \"0\" + mon;\n sep = ' / ';\n }\n return mon + sep + year;\n };\n\n}).call(this);\n\n\n/***/ }),\n\n/***/ 366:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(43);\n__webpack_require__(367);\nvar _ = __webpack_require__(368);\n\nvar UIBlocker = {};\nUIBlocker.transitionDelay = 250;\n\nUIBlocker.blockWith = function(fn) {\n\tvar deferred = $.Deferred();\n\tvar context = this;\n\tvar args = _(arguments).rest();\n\tvar event = _(args).first();\n\tif (event && event.preventDefault) {\n\t\tevent.preventDefault();\n\t}\n\t$.blockUI({ message: null });\n\n\tsetTimeout(function() {\n\t\tvar result = fn.apply(context, args);\n\t\tif (_(result).isObject() && _(result.always).isFunction()) {\n\t\t\tresult.always(function() {\n\t\t\t\t$.unblockUI();\n\t\t\t}).then(deferred.resolve, deferred.reject);\n\t\t} else {\n\t\t\t$.unblockUI();\n\t\t}\n\t}, UIBlocker.transitionDelay);\n\treturn deferred.promise();\n};\n\nUIBlocker.makeBlocked = function(fn) {\n\treturn _.wrap(fn, UIBlocker.blockWith);\n};\n\nmodule.exports = UIBlocker;\n\n\n/***/ }),\n\n/***/ 367:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery blockUI plugin\n * Version 2.70.0-2014.11.23\n * Requires jQuery v1.7 or later\n *\n * Examples at: http://malsup.com/jquery/block/\n * Copyright (c) 2007-2013 M. Alsup\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n * Thanks to Amir-Hossein Sobhi for some excellent contributions!\n */\n\n;(function() {\n/*jshint eqeqeq:false curly:false latedef:false */\n\"use strict\";\n\n\tfunction setup($) {\n\t\t$.fn._fadeIn = $.fn.fadeIn;\n\n\t\tvar noOp = $.noop || function() {};\n\n\t\t// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle\n\t\t// confusing userAgent strings on Vista)\n\t\tvar msie = /MSIE/.test(navigator.userAgent);\n\t\tvar ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);\n\t\tvar mode = document.documentMode || 0;\n\t\tvar setExpr = $.isFunction( document.createElement('div').style.setExpression );\n\n\t\t// global $ methods for blocking/unblocking the entire page\n\t\t$.blockUI = function(opts) { install(window, opts); };\n\t\t$.unblockUI = function(opts) { remove(window, opts); };\n\n\t\t// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)\n\t\t$.growlUI = function(title, message, timeout, onClose) {\n\t\t\tvar $m = $('
');\n\t\t\tif (title) $m.append('

'+title+'

');\n\t\t\tif (message) $m.append('

'+message+'

');\n\t\t\tif (timeout === undefined) timeout = 3000;\n\n\t\t\t// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications\n\t\t\tvar callBlock = function(opts) {\n\t\t\t\topts = opts || {};\n\n\t\t\t\t$.blockUI({\n\t\t\t\t\tmessage: $m,\n\t\t\t\t\tfadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,\n\t\t\t\t\tfadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,\n\t\t\t\t\ttimeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,\n\t\t\t\t\tcenterY: false,\n\t\t\t\t\tshowOverlay: false,\n\t\t\t\t\tonUnblock: onClose,\n\t\t\t\t\tcss: $.blockUI.defaults.growlCSS\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tcallBlock();\n\t\t\tvar nonmousedOpacity = $m.css('opacity');\n\t\t\t$m.mouseover(function() {\n\t\t\t\tcallBlock({\n\t\t\t\t\tfadeIn: 0,\n\t\t\t\t\ttimeout: 30000\n\t\t\t\t});\n\n\t\t\t\tvar displayBlock = $('.blockMsg');\n\t\t\t\tdisplayBlock.stop(); // cancel fadeout if it has started\n\t\t\t\tdisplayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency\n\t\t\t}).mouseout(function() {\n\t\t\t\t$('.blockMsg').fadeOut(1000);\n\t\t\t});\n\t\t\t// End konapun additions\n\t\t};\n\n\t\t// plugin method for blocking element content\n\t\t$.fn.block = function(opts) {\n\t\t\tif ( this[0] === window ) {\n\t\t\t\t$.blockUI( opts );\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tvar fullOpts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tthis.each(function() {\n\t\t\t\tvar $el = $(this);\n\t\t\t\tif (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))\n\t\t\t\t\treturn;\n\t\t\t\t$el.unblock({ fadeOut: 0 });\n\t\t\t});\n\n\t\t\treturn this.each(function() {\n\t\t\t\tif ($.css(this,'position') == 'static') {\n\t\t\t\t\tthis.style.position = 'relative';\n\t\t\t\t\t$(this).data('blockUI.static', true);\n\t\t\t\t}\n\t\t\t\tthis.style.zoom = 1; // force 'hasLayout' in ie\n\t\t\t\tinstall(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t// plugin method for unblocking element content\n\t\t$.fn.unblock = function(opts) {\n\t\t\tif ( this[0] === window ) {\n\t\t\t\t$.unblockUI( opts );\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.each(function() {\n\t\t\t\tremove(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!\n\n\t\t// override these in your code to change the default behavior and style\n\t\t$.blockUI.defaults = {\n\t\t\t// message displayed when blocking (use null for no message)\n\t\t\tmessage: '

Please wait...

',\n\n\t\t\ttitle: null,\t\t// title string; only used when theme == true\n\t\t\tdraggable: true,\t// only used when theme == true (requires jquery-ui.js to be loaded)\n\n\t\t\ttheme: false, // set to true to use with jQuery UI themes\n\n\t\t\t// styles for the message when blocking; if you wish to disable\n\t\t\t// these and use an external stylesheet then do this in your code:\n\t\t\t// $.blockUI.defaults.css = {};\n\t\t\tcss: {\n\t\t\t\tpadding:\t0,\n\t\t\t\tmargin:\t\t0,\n\t\t\t\twidth:\t\t'30%',\n\t\t\t\ttop:\t\t'40%',\n\t\t\t\tleft:\t\t'35%',\n\t\t\t\ttextAlign:\t'center',\n\t\t\t\tcolor:\t\t'#000',\n\t\t\t\tborder:\t\t'3px solid #aaa',\n\t\t\t\tbackgroundColor:'#fff',\n\t\t\t\tcursor:\t\t'wait'\n\t\t\t},\n\n\t\t\t// minimal style set used when themes are used\n\t\t\tthemedCSS: {\n\t\t\t\twidth:\t'30%',\n\t\t\t\ttop:\t'40%',\n\t\t\t\tleft:\t'35%'\n\t\t\t},\n\n\t\t\t// styles for the overlay\n\t\t\toverlayCSS: {\n\t\t\t\tbackgroundColor:\t'#000',\n\t\t\t\topacity:\t\t\t0.6,\n\t\t\t\tcursor:\t\t\t\t'wait'\n\t\t\t},\n\n\t\t\t// style to replace wait cursor before unblocking to correct issue\n\t\t\t// of lingering wait cursor\n\t\t\tcursorReset: 'default',\n\n\t\t\t// styles applied when using $.growlUI\n\t\t\tgrowlCSS: {\n\t\t\t\twidth:\t\t'350px',\n\t\t\t\ttop:\t\t'10px',\n\t\t\t\tleft:\t\t'',\n\t\t\t\tright:\t\t'10px',\n\t\t\t\tborder:\t\t'none',\n\t\t\t\tpadding:\t'5px',\n\t\t\t\topacity:\t0.6,\n\t\t\t\tcursor:\t\t'default',\n\t\t\t\tcolor:\t\t'#fff',\n\t\t\t\tbackgroundColor: '#000',\n\t\t\t\t'-webkit-border-radius':'10px',\n\t\t\t\t'-moz-border-radius':\t'10px',\n\t\t\t\t'border-radius':\t\t'10px'\n\t\t\t},\n\n\t\t\t// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w\n\t\t\t// (hat tip to Jorge H. N. de Vasconcelos)\n\t\t\t/*jshint scripturl:true */\n\t\t\tiframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',\n\n\t\t\t// force usage of iframe in non-IE browsers (handy for blocking applets)\n\t\t\tforceIframe: false,\n\n\t\t\t// z-index for the blocking overlay\n\t\t\tbaseZ: 1000,\n\n\t\t\t// set these to true to have the message automatically centered\n\t\t\tcenterX: true, // <-- only effects element blocking (page block controlled via css above)\n\t\t\tcenterY: true,\n\n\t\t\t// allow body element to be stetched in ie6; this makes blocking look better\n\t\t\t// on \"short\" pages. disable if you wish to prevent changes to the body height\n\t\t\tallowBodyStretch: true,\n\n\t\t\t// enable if you want key and mouse events to be disabled for content that is blocked\n\t\t\tbindEvents: true,\n\n\t\t\t// be default blockUI will supress tab navigation from leaving blocking content\n\t\t\t// (if bindEvents is true)\n\t\t\tconstrainTabKey: true,\n\n\t\t\t// fadeIn time in millis; set to 0 to disable fadeIn on block\n\t\t\tfadeIn: 200,\n\n\t\t\t// fadeOut time in millis; set to 0 to disable fadeOut on unblock\n\t\t\tfadeOut: 400,\n\n\t\t\t// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock\n\t\t\ttimeout: 0,\n\n\t\t\t// disable if you don't want to show the overlay\n\t\t\tshowOverlay: true,\n\n\t\t\t// if true, focus will be placed in the first available input field when\n\t\t\t// page blocking\n\t\t\tfocusInput: true,\n\n // elements that can receive focus\n focusableElements: ':input:enabled:visible',\n\n\t\t\t// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)\n\t\t\t// no longer needed in 2012\n\t\t\t// applyPlatformOpacityRules: true,\n\n\t\t\t// callback method invoked when fadeIn has completed and blocking message is visible\n\t\t\tonBlock: null,\n\n\t\t\t// callback method invoked when unblocking has completed; the callback is\n\t\t\t// passed the element that has been unblocked (which is the window object for page\n\t\t\t// blocks) and the options that were passed to the unblock call:\n\t\t\t//\tonUnblock(element, options)\n\t\t\tonUnblock: null,\n\n\t\t\t// callback method invoked when the overlay area is clicked.\n\t\t\t// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.\n\t\t\tonOverlayClick: null,\n\n\t\t\t// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493\n\t\t\tquirksmodeOffsetHack: 4,\n\n\t\t\t// class name of the message block\n\t\t\tblockMsgClass: 'blockMsg',\n\n\t\t\t// if it is already blocked, then ignore it (don't unblock and reblock)\n\t\t\tignoreIfBlocked: false\n\t\t};\n\n\t\t// private data and functions follow...\n\n\t\tvar pageBlock = null;\n\t\tvar pageBlockEls = [];\n\n\t\tfunction install(el, opts) {\n\t\t\tvar css, themedCSS;\n\t\t\tvar full = (el == window);\n\t\t\tvar msg = (opts && opts.message !== undefined ? opts.message : undefined);\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\n\t\t\tif (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))\n\t\t\t\treturn;\n\n\t\t\topts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});\n\t\t\tcss = $.extend({}, $.blockUI.defaults.css, opts.css || {});\n\t\t\tif (opts.onOverlayClick)\n\t\t\t\topts.overlayCSS.cursor = 'pointer';\n\n\t\t\tthemedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});\n\t\t\tmsg = msg === undefined ? opts.message : msg;\n\n\t\t\t// remove the current block (if there is one)\n\t\t\tif (full && pageBlock)\n\t\t\t\tremove(window, {fadeOut:0});\n\n\t\t\t// if an existing element is being used as the blocking content then we capture\n\t\t\t// its current place in the DOM (and current display style) so we can restore\n\t\t\t// it when we unblock\n\t\t\tif (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {\n\t\t\t\tvar node = msg.jquery ? msg[0] : msg;\n\t\t\t\tvar data = {};\n\t\t\t\t$(el).data('blockUI.history', data);\n\t\t\t\tdata.el = node;\n\t\t\t\tdata.parent = node.parentNode;\n\t\t\t\tdata.display = node.style.display;\n\t\t\t\tdata.position = node.style.position;\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.removeChild(node);\n\t\t\t}\n\n\t\t\t$(el).data('blockUI.onUnblock', opts.onUnblock);\n\t\t\tvar z = opts.baseZ;\n\n\t\t\t// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;\n\t\t\t// layer1 is the iframe layer which is used to supress bleed through of underlying content\n\t\t\t// layer2 is the overlay layer which has opacity and a wait cursor (by default)\n\t\t\t// layer3 is the message content that is displayed while blocking\n\t\t\tvar lyr1, lyr2, lyr3, s;\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1 = $('');\n\t\t\telse\n\t\t\t\tlyr1 = $('
');\n\n\t\t\tif (opts.theme)\n\t\t\t\tlyr2 = $('
');\n\t\t\telse\n\t\t\t\tlyr2 = $('
');\n\n\t\t\tif (opts.theme && full) {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\telse if (opts.theme) {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\telse if (full) {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\telse {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\tlyr3 = $(s);\n\n\t\t\t// if we have a message, style it\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme) {\n\t\t\t\t\tlyr3.css(themedCSS);\n\t\t\t\t\tlyr3.addClass('ui-widget-content');\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tlyr3.css(css);\n\t\t\t}\n\n\t\t\t// style the overlay\n\t\t\tif (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\n\t\t\t\tlyr2.css(opts.overlayCSS);\n\t\t\tlyr2.css('position', full ? 'fixed' : 'absolute');\n\n\t\t\t// make iframe layer transparent in IE\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1.css('opacity',0.0);\n\n\t\t\t//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\n\t\t\tvar layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);\n\t\t\t$.each(layers, function() {\n\t\t\t\tthis.appendTo($par);\n\t\t\t});\n\n\t\t\tif (opts.theme && opts.draggable && $.fn.draggable) {\n\t\t\t\tlyr3.draggable({\n\t\t\t\t\thandle: '.ui-dialog-titlebar',\n\t\t\t\t\tcancel: 'li'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\n\t\t\tvar expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\n\t\t\tif (ie6 || expr) {\n\t\t\t\t// give body 100% height\n\t\t\t\tif (full && opts.allowBodyStretch && $.support.boxModel)\n\t\t\t\t\t$('html,body').css('height','100%');\n\n\t\t\t\t// fix ie6 issue when blocked element has a border width\n\t\t\t\tif ((ie6 || !$.support.boxModel) && !full) {\n\t\t\t\t\tvar t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');\n\t\t\t\t\tvar fixT = t ? '(0 - '+t+')' : 0;\n\t\t\t\t\tvar fixL = l ? '(0 - '+l+')' : 0;\n\t\t\t\t}\n\n\t\t\t\t// simulate fixed position\n\t\t\t\t$.each(layers, function(i,o) {\n\t\t\t\t\tvar s = o[0].style;\n\t\t\t\t\ts.position = 'absolute';\n\t\t\t\t\tif (i < 2) {\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('height','this.parentNode.offsetHeight + \"px\"');\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('width','this.parentNode.offsetWidth + \"px\"');\n\t\t\t\t\t\tif (fixL) s.setExpression('left', fixL);\n\t\t\t\t\t\tif (fixT) s.setExpression('top', fixT);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opts.centerY) {\n\t\t\t\t\t\tif (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\n\t\t\t\t\t\ts.marginTop = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!opts.centerY && full) {\n\t\t\t\t\t\tvar top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\n\t\t\t\t\t\tvar expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + \"px\"';\n\t\t\t\t\t\ts.setExpression('top',expression);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// show the message\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme)\n\t\t\t\t\tlyr3.find('.ui-widget-content').append(msg);\n\t\t\t\telse\n\t\t\t\t\tlyr3.append(msg);\n\t\t\t\tif (msg.jquery || msg.nodeType)\n\t\t\t\t\t$(msg).show();\n\t\t\t}\n\n\t\t\tif ((msie || opts.forceIframe) && opts.showOverlay)\n\t\t\t\tlyr1.show(); // opacity is zero\n\t\t\tif (opts.fadeIn) {\n\t\t\t\tvar cb = opts.onBlock ? opts.onBlock : noOp;\n\t\t\t\tvar cb1 = (opts.showOverlay && !msg) ? cb : noOp;\n\t\t\t\tvar cb2 = msg ? cb : noOp;\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2._fadeIn(opts.fadeIn, cb1);\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3._fadeIn(opts.fadeIn, cb2);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2.show();\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3.show();\n\t\t\t\tif (opts.onBlock)\n\t\t\t\t\topts.onBlock.bind(lyr3)();\n\t\t\t}\n\n\t\t\t// bind key and mouse events\n\t\t\tbind(1, el, opts);\n\n\t\t\tif (full) {\n\t\t\t\tpageBlock = lyr3[0];\n\t\t\t\tpageBlockEls = $(opts.focusableElements,pageBlock);\n\t\t\t\tif (opts.focusInput)\n\t\t\t\t\tsetTimeout(focus, 20);\n\t\t\t}\n\t\t\telse\n\t\t\t\tcenter(lyr3[0], opts.centerX, opts.centerY);\n\n\t\t\tif (opts.timeout) {\n\t\t\t\t// auto-unblock\n\t\t\t\tvar to = setTimeout(function() {\n\t\t\t\t\tif (full)\n\t\t\t\t\t\t$.unblockUI(opts);\n\t\t\t\t\telse\n\t\t\t\t\t\t$(el).unblock(opts);\n\t\t\t\t}, opts.timeout);\n\t\t\t\t$(el).data('blockUI.timeout', to);\n\t\t\t}\n\t\t}\n\n\t\t// remove the block\n\t\tfunction remove(el, opts) {\n\t\t\tvar count;\n\t\t\tvar full = (el == window);\n\t\t\tvar $el = $(el);\n\t\t\tvar data = $el.data('blockUI.history');\n\t\t\tvar to = $el.data('blockUI.timeout');\n\t\t\tif (to) {\n\t\t\t\tclearTimeout(to);\n\t\t\t\t$el.removeData('blockUI.timeout');\n\t\t\t}\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tbind(0, el, opts); // unbind events\n\n\t\t\tif (opts.onUnblock === null) {\n\t\t\t\topts.onUnblock = $el.data('blockUI.onUnblock');\n\t\t\t\t$el.removeData('blockUI.onUnblock');\n\t\t\t}\n\n\t\t\tvar els;\n\t\t\tif (full) // crazy selector to handle odd field errors in ie6/7\n\t\t\t\tels = $('body').children().filter('.blockUI').add('body > .blockUI');\n\t\t\telse\n\t\t\t\tels = $el.find('>.blockUI');\n\n\t\t\t// fix cursor issue\n\t\t\tif ( opts.cursorReset ) {\n\t\t\t\tif ( els.length > 1 )\n\t\t\t\t\tels[1].style.cursor = opts.cursorReset;\n\t\t\t\tif ( els.length > 2 )\n\t\t\t\t\tels[2].style.cursor = opts.cursorReset;\n\t\t\t}\n\n\t\t\tif (full)\n\t\t\t\tpageBlock = pageBlockEls = null;\n\n\t\t\tif (opts.fadeOut) {\n\t\t\t\tcount = els.length;\n\t\t\t\tels.stop().fadeOut(opts.fadeOut, function() {\n\t\t\t\t\tif ( --count === 0)\n\t\t\t\t\t\treset(els,data,opts,el);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t\treset(els, data, opts, el);\n\t\t}\n\n\t\t// move blocking element back into the DOM where it started\n\t\tfunction reset(els,data,opts,el) {\n\t\t\tvar $el = $(el);\n\t\t\tif ( $el.data('blockUI.isBlocked') )\n\t\t\t\treturn;\n\n\t\t\tels.each(function(i,o) {\n\t\t\t\t// remove via DOM calls so we don't lose event handlers\n\t\t\t\tif (this.parentNode)\n\t\t\t\t\tthis.parentNode.removeChild(this);\n\t\t\t});\n\n\t\t\tif (data && data.el) {\n\t\t\t\tdata.el.style.display = data.display;\n\t\t\t\tdata.el.style.position = data.position;\n\t\t\t\tdata.el.style.cursor = 'default'; // #59\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.appendChild(data.el);\n\t\t\t\t$el.removeData('blockUI.history');\n\t\t\t}\n\n\t\t\tif ($el.data('blockUI.static')) {\n\t\t\t\t$el.css('position', 'static'); // #22\n\t\t\t}\n\n\t\t\tif (typeof opts.onUnblock == 'function')\n\t\t\t\topts.onUnblock(el,opts);\n\n\t\t\t// fix issue in Safari 6 where block artifacts remain until reflow\n\t\t\tvar body = $(document.body), w = body.width(), cssW = body[0].style.width;\n\t\t\tbody.width(w-1).width(w);\n\t\t\tbody[0].style.width = cssW;\n\t\t}\n\n\t\t// bind/unbind the handler\n\t\tfunction bind(b, el, opts) {\n\t\t\tvar full = el == window, $el = $(el);\n\n\t\t\t// don't bother unbinding if there is nothing to unbind\n\t\t\tif (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\n\t\t\t\treturn;\n\n\t\t\t$el.data('blockUI.isBlocked', b);\n\n\t\t\t// don't bind events when overlay is not in use or if bindEvents is false\n\t\t\tif (!full || !opts.bindEvents || (b && !opts.showOverlay))\n\t\t\t\treturn;\n\n\t\t\t// bind anchors and inputs for mouse and key events\n\t\t\tvar events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';\n\t\t\tif (b)\n\t\t\t\t$(document).bind(events, opts, handler);\n\t\t\telse\n\t\t\t\t$(document).unbind(events, handler);\n\n\t\t// former impl...\n\t\t//\t\tvar $e = $('a,:input');\n\t\t//\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\n\t\t}\n\n\t\t// event handler to suppress keyboard/mouse events when blocking\n\t\tfunction handler(e) {\n\t\t\t// allow tab navigation (conditionally)\n\t\t\tif (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {\n\t\t\t\tif (pageBlock && e.data.constrainTabKey) {\n\t\t\t\t\tvar els = pageBlockEls;\n\t\t\t\t\tvar fwd = !e.shiftKey && e.target === els[els.length-1];\n\t\t\t\t\tvar back = e.shiftKey && e.target === els[0];\n\t\t\t\t\tif (fwd || back) {\n\t\t\t\t\t\tsetTimeout(function(){focus(back);},10);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar opts = e.data;\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.hasClass('blockOverlay') && opts.onOverlayClick)\n\t\t\t\topts.onOverlayClick(e);\n\n\t\t\t// allow events within the message content\n\t\t\tif (target.parents('div.' + opts.blockMsgClass).length > 0)\n\t\t\t\treturn true;\n\n\t\t\t// allow events for content that is not being blocked\n\t\t\treturn target.parents().children().filter('div.blockUI').length === 0;\n\t\t}\n\n\t\tfunction focus(back) {\n\t\t\tif (!pageBlockEls)\n\t\t\t\treturn;\n\t\t\tvar e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];\n\t\t\tif (e)\n\t\t\t\te.focus();\n\t\t}\n\n\t\tfunction center(el, x, y) {\n\t\t\tvar p = el.parentNode, s = el.style;\n\t\t\tvar l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');\n\t\t\tvar t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');\n\t\t\tif (x) s.left = l > 0 ? (l+'px') : '0';\n\t\t\tif (y) s.top = t > 0 ? (t+'px') : '0';\n\t\t}\n\n\t\tfunction sz(el, p) {\n\t\t\treturn parseInt($.css(el,p),10)||0;\n\t\t}\n\n\t}\n\n\n\t/*global define:true */\n\tif (\"function\" === 'function' && __webpack_require__(133) && __webpack_require__(133).jQuery) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(43)], __WEBPACK_AMD_DEFINE_FACTORY__ = (setup),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {\n\t\tsetup(jQuery);\n\t}\n\n})();\n\n\n/***/ }),\n\n/***/ 368:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (true) {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n return _;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n}.call(this));\n\n\n/***/ }),\n\n/***/ 369:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__give_donations__ = __webpack_require__(134);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Give AJAX JS\n *\n * @description: The Give AJAX scripts\n * @package: Give\n * @subpackage: Assets/JS\n * @copyright: Copyright (c) 2016, WordImpress\n * @license: http://opensource.org/licenses/gpl-2.0.php GNU Public License\n */\n\n\n\n/* global jQuery, Give */\n\njQuery(document).ready(function ($) {\n\n\t//Hide loading elements\n\t$('.give-loading-text').hide();\n\n\t// Update and invalidate cached nonce.\n\t$('.give-form').each(function (index, $form) {\n\t\t$form = jQuery($form);\n\n\t\tvar $nonceField = jQuery('input[name=\"give-form-hash\"]', $form),\n\t\t nonceTime = (parseInt($nonceField.data('time')) + parseInt($nonceField.data('nonce-life'))) * 1000,\n\t\t currentTime = Date.now();\n\n\t\t// We need time in ms.\n\t\tvar timeDiff = nonceTime - currentTime;\n\n\t\ttimeDiff = 0 > timeDiff ? timeDiff : timeDiff + 100;\n\n\t\t// Update nonce in background.\n\t\twindow.setTimeout(function () {\n\t\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.resetNonce($form);\n\t\t}, timeDiff);\n\t});\n\n\t// Show the login form in the checkout when the user clicks the \"Login\" link\n\t$(document).on('click', '.give-checkout-login', function (e) {\n\t\tvar $this = $(this);\n\t\tvar this_form = $(this).parents('form');\n\t\tvar loading_animation = $(this_form).find('[id^=\"give-checkout-login-register\"] .give-loading-text');\n\t\tvar data = {\n\t\t\taction: $this.data('action'),\n\t\t\tform_id: $(this_form).find('[name=\"give-form-id\"]').val()\n\t\t};\n\n\t\t// Show the ajax loader\n\t\tloading_animation.show();\n\n\t\t$.post(give_global_vars.ajaxurl, data, function (checkout_response) {\n\n\t\t\t//Clear form HTML and add AJAX response containing fields\n\t\t\t$(this_form).find('[id^=give-checkout-login-register]').html(checkout_response);\n\t\t\t$(this_form).find('.give-submit-button-wrap').hide();\n\t\t}).done(function () {\n\t\t\t// Hide the ajax loader\n\t\t\tloading_animation.hide();\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t});\n\t\treturn false;\n\t});\n\n\t// Register/Login Cancel\n\t$(document).on('click', '.give-checkout-register-cancel', function (e) {\n\t\te.preventDefault();\n\t\t// User cancelled login.\n\t\tvar $this = $(this);\n\t\tvar this_form = $(this).parents('form');\n\t\tvar data = {\n\t\t\taction: $this.data('action'),\n\t\t\tform_id: $(this_form).find('[name=\"give-form-id\"]').val()\n\t\t};\n\t\t// AJAX get the payment fields.\n\t\t$.post(give_global_vars.ajaxurl, data, function (checkout_response) {\n\t\t\t//Show fields\n\t\t\t$(this_form).find('[id^=give-checkout-login-register]').html($.parseJSON(checkout_response.fields));\n\t\t\t$(this_form).find('.give-submit-button-wrap').show();\n\t\t}).done(function () {\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t});\n\t});\n\n\t// Process the login form via ajax when the user clicks \"login\"\n\t$(document).on('click', '[id^=give-login-fields] input[type=submit]', function (e) {\n\n\t\te.preventDefault();\n\n\t\tvar complete_purchase_val = $(this).val();\n\t\tvar this_form = $(this).parents('form');\n\n\t\t$(this).val(give_global_vars.purchase_loading);\n\n\t\tthis_form.find('[id^=give-login-fields] .give-loading-animation').fadeIn();\n\n\t\tvar data = {\n\t\t\taction: 'give_process_donation_login',\n\t\t\tgive_ajax: 1,\n\t\t\tgive_user_login: this_form.find('[name=give_user_login]').val(),\n\t\t\tgive_user_pass: this_form.find('[name=give_user_pass]').val(),\n\t\t\tgive_form_id: this_form.find('[name=give-form-id]').val()\n\t\t};\n\n\t\t$.post(give_global_vars.ajaxurl, data, function (response) {\n\t\t\t//user is logged in\n\t\t\tif ($.trim(_typeof(response.success)) != undefined && response.success == true && _typeof(response.data) != undefined) {\n\n\t\t\t\t//remove errors\n\t\t\t\tthis_form.find('.give_errors').remove();\n\n\t\t\t\t// Login successfully message.\n\t\t\t\tthis_form.find('#give-payment-mode-select').after(response.data);\n\t\t\t\tthis_form.find('.give_notices.give_errors').delay(5000).slideUp();\n\n\t\t\t\t// Create and update nonce.\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.resetNonce(this_form);\n\n\t\t\t\t//reload the selected gateway so it contains their logged in information\n\t\t\t\tgive_load_gateway(this_form, this_form.find('.give-gateway-option-selected input').val());\n\t\t\t} else {\n\t\t\t\t//Login failed, show errors\n\t\t\t\tthis_form.find('[id^=give-login-fields] input[type=submit]').val(complete_purchase_val);\n\t\t\t\tthis_form.find('.give-loading-animation').fadeOut();\n\t\t\t\tthis_form.find('.give_errors').remove();\n\t\t\t\tthis_form.find('[id^=give-user-login-submit]').before(response.data);\n\t\t\t}\n\t\t});\n\t});\n\n\t//Switch the gateway on gateway selection field change\n\t$('select#give-gateway, input.give-gateway').on('change', function (e) {\n\t\te.preventDefault();\n\n\t\t//Which payment gateway to load?\n\t\tvar payment_mode = $(this).val();\n\n\t\t//Problema? Bounce\n\t\tif (payment_mode == '0') {\n\t\t\tconsole.log('There was a problem loading the selected gateway');\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_load_gateway($(this).parents('form'), payment_mode);\n\n\t\treturn false;\n\t});\n\n\t/**\n * Donation history non login user want to see email list after making a donation\n *\n * @since 1.8.17\n */\n\t$('body').on('click', '#give-confirm-email-btn', function (e) {\n\n\t\tvar $this = $(this);\n\t\tvar data = {\n\t\t\taction: 'give_confirm_email_for_donations_access',\n\t\t\temail: $this.data('email'),\n\t\t\tnonce: give_global_vars.ajaxNonce\n\t\t};\n\n\t\t$this.text(give_global_vars.loading);\n\t\t$this.attr('disabled', 'disabled');\n\n\t\t$.post(give_global_vars.ajaxurl, data, function (response) {\n\t\t\tresponse = JSON.parse(response);\n\t\t\tif ('error' === response.status) {\n\t\t\t\t$this.closest('#give_user_history tfoot').hide();\n\t\t\t\t$this.closest('.give_user_history_main').find('.give_user_history_notice').html(response.message);\n\t\t\t} else if ('success' === response.status) {\n\t\t\t\t$this.closest('.give_user_history_main').find('.give_user_history_notice').html(response.message);\n\t\t\t\t$this.hide();\n\t\t\t\t$this.closest('.give-security-button-wrap').find('span').show();\n\t\t\t}\n\t\t});\n\n\t\treturn false;\n\t});\n\n\t/**\n * Donation Form AJAX Submission\n *\n * @description: Process the donation submit\n */\n\t$('body').on('click touchend', 'form.give-form input[name=\"give-purchase\"].give-submit', function (e) {\n\n\t\t//this form object\n\t\tvar this_form = $(this).parents('form.give-form');\n\n\t\t//loading animation\n\t\tvar loading_animation = this_form.find('input[type=\"submit\"].give-submit + .give-loading-animation');\n\t\tloading_animation.fadeIn();\n\n\t\t//this form selector\n\t\tvar give_purchase_form = this_form.get(0);\n\n\t\t//HTML5 required check validity\n\t\tif (typeof give_purchase_form.checkValidity === 'function' && give_purchase_form.checkValidity() === false) {\n\n\t\t\t//Don't leave any hanging loading animations\n\t\t\tloading_animation.fadeOut();\n\n\t\t\t//Check for Safari (doesn't support HTML5 required)\n\t\t\tif ((navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) === false) {\n\t\t\t\t//Not safari: Support HTML5 \"required\" so skip the rest of this function\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t//prevent form from submitting normally\n\t\te.preventDefault();\n\n\t\t//Submit btn text\n\t\tvar complete_purchase_val = $(this).val();\n\n\t\t//Update submit button text\n\t\t$(this).val(give_global_vars.purchase_loading);\n\n\t\t// Disable the form donation button.\n\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.disable(this_form, true);\n\n\t\t//Submit form via AJAX\n\t\t$.post(give_global_vars.ajaxurl, this_form.serialize() + '&action=give_process_donation&give_ajax=true', function (data) {\n\n\t\t\tif ($.trim(data) == 'success') {\n\t\t\t\t//Remove any errors\n\t\t\t\tthis_form.find('.give_errors').remove();\n\t\t\t\t//Submit form for normal processing\n\t\t\t\t$(give_purchase_form).submit();\n\n\t\t\t\tthis_form.trigger('give_form_validation_passed');\n\t\t\t} else {\n\t\t\t\t//There was an error / remove old errors and prepend new ones\n\t\t\t\tthis_form.find('input[type=\"submit\"].give-submit').val(complete_purchase_val);\n\t\t\t\tloading_animation.fadeOut();\n\t\t\t\tthis_form.find('.give_errors').remove();\n\t\t\t\tthis_form.find('#give_purchase_submit input[type=\"submit\"].give-submit').before(data);\n\n\t\t\t\t// Enable the form donation button.\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.disable(this_form, false);\n\t\t\t}\n\t\t});\n\t});\n});\n\n/**\n * Load the Payment Gateways\n *\n * @description: AJAX load appropriate gateway fields\n * @param form_object Obj The specific form to load a gateway for\n * @param payment_mode\n */\nfunction give_load_gateway(form_object, payment_mode) {\n\n\tvar loading_element = jQuery(form_object).find('#give-payment-mode-select .give-loading-text');\n\tvar give_total = jQuery(form_object).find('#give-amount').val();\n\tvar give_form_id = jQuery(form_object).find('input[name=\"give-form-id\"]').val();\n\tvar give_form_id_prefix = jQuery(form_object).find('input[name=\"give-form-id-prefix\"]').val();\n\n\t// Show the ajax loader\n\tloading_element.fadeIn();\n\n\tvar form_data = jQuery(form_object).data();\n\n\tif (form_data['blockUI.isBlocked'] != 1) {\n\t\tjQuery(form_object).find('#give_purchase_form_wrap').block({\n\t\t\tmessage: null,\n\t\t\toverlayCSS: {\n\t\t\t\tbackground: '#fff',\n\t\t\t\topacity: 0.6\n\t\t\t}\n\t\t});\n\t}\n\n\t//Post via AJAX to Give\n\tjQuery.post(give_global_vars.ajaxurl + '?payment-mode=' + payment_mode, {\n\t\taction: 'give_load_gateway',\n\t\tgive_total: give_total,\n\t\tgive_form_id: give_form_id,\n\t\tgive_form_id_prefix: give_form_id_prefix,\n\t\tgive_payment_mode: payment_mode\n\t}, function (response) {\n\t\t//Success: let's output the gateway fields in the appropriate form space\n\t\tjQuery(form_object).unblock();\n\t\tjQuery(form_object).find('#give_purchase_form_wrap').html(response);\n\t\tjQuery('.give-no-js').hide();\n\t\tjQuery(form_object).find('#give-payment-mode-select .give-loading-text').fadeOut();\n\n\t\t// trigger an event on success for hooks\n\t\tjQuery(document).trigger('give_gateway_loaded', [response, jQuery(form_object).attr('id')]);\n\t});\n}\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_float_labels_js__ = __webpack_require__(371);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_float_labels_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_float_labels_js__);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\njQuery(function ($) {\n\n\tvar doc = $(document);\n\n\t// Trigger float-labels\n\tgive_fl_trigger();\n\n\t// Set custom validation message.\n\tgive_change_html5_form_field_validation_message();\n\n\t// Donation grid shortcode popup.\n\t$('.js-give-grid-modal-launcher').magnificPopup({\n\t\ttype: 'inline',\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tcloseBtnInside: true,\n\t\tmidClick: true,\n\t\tremovalDelay: 300,\n\t\tmainClass: 'modal-fade-slide'\n\t});\n\n\t// Disable button if it have give-disabled class init.\n\tdoc.on('click touchend', '.give-disabled', function (e) {\n\t\te.preventDefault();\n\t\treturn false;\n\t});\n\n\tdoc.on('give_gateway_loaded', function (ev, response, form_id) {\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t});\n\n\tdoc.on('give_checkout_billing_address_updated', function (ev, response, form_id) {\n\t\tif (!$('form#' + form_id).hasClass('float-labels-enabled')) return;\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t});\n\n\t// Reveal Btn which displays the checkout content\n\tdoc.on('click', '.give-btn-reveal', function (e) {\n\t\te.preventDefault();\n\t\tvar this_button = $(this);\n\t\tvar this_form = $(this).parents('form');\n\t\tvar payment_field_id = '#give-payment-mode-select',\n\t\t $payment_field = $(payment_field_id),\n\t\t show_field_ids = '';\n\t\tthis_button.hide();\n\n\t\t// Show payment field if active payment gateway count greater then one.\n\t\tif ($('li', $payment_field).length > 1) {\n\t\t\tshow_field_ids = payment_field_id + ', ';\n\t\t}\n\n\t\tthis_form.find(show_field_ids + '#give_purchase_form_wrap').slideDown();\n\t\treturn false;\n\t});\n\n\t// Modal with Magnific\n\tdoc.on('click', '.give-btn-modal', function (e) {\n\t\te.preventDefault();\n\t\tvar this_form_wrap = $(this).parents('div.give-form-wrap');\n\t\tvar this_form = this_form_wrap.find('form.give-form');\n\t\tvar this_amount_field = this_form.find('#give-amount');\n\t\tvar this_amount = this_amount_field.val();\n\n\t\t//Check to ensure our amount is greater than 0\n\t\t//Does this number have a value\n\t\tif (!this_amount || this_amount <= 0) {\n\t\t\tthis_amount_field.focus();\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_open_form_modal(this_form_wrap, this_form);\n\t});\n\n\t// Auto hide frontend notices.\n\tvar give_notices = jQuery('.give_notice[data-dismiss-type=\"auto\"]');\n\tif (give_notices.length) {\n\t\tgive_notices.each(function (index, $notice) {\n\t\t\t$notice = $($notice);\n\n\t\t\t// auto hide setting message in 5 seconds.\n\t\t\twindow.setTimeout(function () {\n\t\t\t\t$notice.slideUp();\n\t\t\t}, $notice.data('dismiss-interval'));\n\t\t});\n\t}\n\n\t// Button to close notices on front-end.\n\t$('body').on('click', '.give-notice-close', function () {\n\t\t$(this).hide();\n\t\tvar notice_container = $(this).closest('.give_notices');\n\t\tnotice_container.slideUp();\n\t});\n\n\tdoc.on('change', '#give_profile_billing_address_wrap #give_address_country', update_profile_state_field);\n\n\t// Reset Form Fields on clicking back button of browser.\n\t// @see https://developer.mozilla.org/en-US/Firefox/Releases/1.5/Using_Firefox_1.5_caching\n\t// @see https://webkit.org/blog/427/webkit-page-cache-i-the-basics/\n\twindow.addEventListener('pageshow', function (event) {\n\t\tvar historyTraversal = event.persisted || _typeof('undefined') !== window.performance && 2 === window.performance.navigation.type;\n\n\t\tif (historyTraversal) {\n\t\t\tvar form = $('body').find('form.give-form')[0];\n\n\t\t\tif (undefined !== form) {\n\t\t\t\tform.reset();\n\t\t\t}\n\t\t}\n\t});\n});\n\n/**\n * Open form modal\n *\n * @param {object} $form_wrap\n * @param {object} $form\n */\nwindow.give_open_form_modal = function ($form_wrap, $form) {\n\t// Hide form children.\n\tvar children = '#give_purchase_form_wrap, #give-payment-mode-select, .mfp-close, .give-hidden';\n\n\t//Alls well, open popup!\n\tjQuery.magnificPopup.open({\n\t\tmainClass: give_global_vars.magnific_options.main_class,\n\t\tcloseOnBgClick: give_global_vars.magnific_options.close_on_bg_click,\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tremovalDelay: 250, //delay removal by X to allow out-animation\n\t\titems: {\n\t\t\tsrc: $form,\n\t\t\ttype: 'inline'\n\t\t},\n\t\tcallbacks: {\n\t\t\tbeforeOpen: function beforeOpen() {\n\n\t\t\t\tjQuery('body').addClass('give-modal-open');\n\n\t\t\t\t// add title, content, goal and error to form if admin want to show button only\n\t\t\t\tif ($form_wrap.hasClass('give-display-button-only') && !$form.data('content')) {\n\n\t\t\t\t\tvar $form_content = jQuery('.give-form-content-wrap', $form_wrap),\n\t\t\t\t\t $form_title = jQuery('.give-form-title', $form_wrap),\n\t\t\t\t\t $form_goal = jQuery('.give-goal-progress', $form_wrap),\n\t\t\t\t\t $form_error = jQuery('>.give_error', $form_wrap),\n\t\t\t\t\t $form_errors = jQuery('.give_errors', $form_wrap);\n\n\t\t\t\t\t// Add content container to form.\n\t\t\t\t\tif ($form_content.length && !jQuery('.give-form-content-wrap', $form).length) {\n\t\t\t\t\t\tif ($form_content.hasClass('give_post_form-content')) {\n\t\t\t\t\t\t\t$form.append($form_content);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.prepend($form_content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add errors container to form.\n\t\t\t\t\tif ($form_errors.length && !jQuery('.give_errors', $form).length) {\n\t\t\t\t\t\t$form_errors.each(function (index, $error) {\n\t\t\t\t\t\t\t$form.prepend(jQuery($error));\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add error container to form.\n\t\t\t\t\tif ($form_error.length && !jQuery('>.give_error', $form).length) {\n\t\t\t\t\t\t$form_error.each(function (index, $error) {\n\t\t\t\t\t\t\t$form.prepend(jQuery($error));\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add goal container to form.\n\t\t\t\t\tif ($form_goal.length && !jQuery('.give-goal-progress', $form).length) {\n\t\t\t\t\t\t$form.prepend($form_goal);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add title container to form.\n\t\t\t\t\tif ($form_title.length && !jQuery('.give-form-title', $form).length) {\n\t\t\t\t\t\t$form.prepend($form_title);\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.data('content', 'loaded');\n\t\t\t\t}\n\t\t\t},\n\t\t\topen: function open() {\n\n\t\t\t\t// Will fire when this exact popup is opened\n\t\t\t\t// this - is Magnific Popup object\n\t\t\t\tvar $mfp_content = jQuery('.mfp-content');\n\t\t\t\tif ($mfp_content.outerWidth() >= 500) {\n\t\t\t\t\t$mfp_content.addClass('give-responsive-mfp-content');\n\t\t\t\t}\n\n\t\t\t\t// Hide .give-hidden and .give-btn-modal if admin only want to show only button.\n\t\t\t\tif ($form_wrap.hasClass('give-display-button-only')) {\n\t\t\t\t\tchildren = $form.children().not('.give-btn-modal');\n\t\t\t\t}\n\n\t\t\t\t//Hide all form elements besides the ones required for payment\n\t\t\t\t$form.children().not(children).hide();\n\t\t\t},\n\t\t\tclose: function close() {\n\t\t\t\t//Remove popup class\n\t\t\t\t$form.removeClass('mfp-hide');\n\n\t\t\t\tjQuery('body').removeClass('give-modal-open');\n\n\t\t\t\t//Show all fields again\n\t\t\t\t$form.children().not(children).show();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/**\n * Floating Labels Custom Events\n */\nwindow.give_fl_trigger = function () {\n\twindow.give_float_labels = 'undefined' === typeof window.give_float_labels ? {} : window.give_float_labels;\n\n\tif (window.give_float_labels instanceof __WEBPACK_IMPORTED_MODULE_0_float_labels_js___default.a) {\n\t\twindow.give_float_labels.rebuild();\n\t} else {\n\t\twindow.give_float_labels = new __WEBPACK_IMPORTED_MODULE_0_float_labels_js___default.a('.float-labels-enabled', {\n\t\t\texclude: '#give-amount, .give-select-level, [multiple]',\n\t\t\tprioritize: 'placeholder',\n\t\t\tprefix: 'give-fl-',\n\t\t\tstyle: 'give'\n\t\t});\n\t}\n};\n\n/**\n * Change localize html5 form validation message\n */\nwindow.give_change_html5_form_field_validation_message = function () {\n\tvar $forms = jQuery('.give-form'),\n\t $input_fields;\n\n\t// Bailout if no any donation from exist.\n\tif (!$forms.length) {\n\t\treturn;\n\t}\n\n\tjQuery.each($forms, function (index, $form) {\n\t\t// Get form input fields.\n\t\t$input_fields = jQuery('input', $form);\n\n\t\t// Bailout.\n\t\tif (!$input_fields.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tjQuery.each($input_fields, function (index, item) {\n\t\t\titem = jQuery(item).get(0);\n\n\t\t\t// Set custom message only if translation exit in give global object.\n\t\t\tif (give_global_vars.form_translation.hasOwnProperty(item.name)) {\n\t\t\t\titem.oninvalid = function (e) {\n\t\t\t\t\te.target.setCustomValidity('');\n\t\t\t\t\tif (!e.target.validity.valid) {\n\t\t\t\t\t\te.target.setCustomValidity(give_global_vars.form_translation[item.name]);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t});\n};\n\n/**\n * Update state/province fields per country selection\n *\n * @since 1.8.14\n */\nwindow.update_profile_state_field = function () {\n\tvar $this = jQuery(this),\n\t $form = $this.parents('form');\n\tif ('give_address_country' === $this.attr('id')) {\n\n\t\t//Disable the State field until updated\n\t\t$form.find('#give_address_state').empty().append('').prop('disabled', true);\n\n\t\t// If the country field has changed, we need to update the state/province field\n\t\tvar postData = {\n\t\t\taction: 'give_get_states',\n\t\t\tcountry: $this.val(),\n\t\t\tfield_name: 'give_address_state'\n\t\t};\n\n\t\tjQuery.ajax({\n\t\t\ttype: 'POST',\n\t\t\tdata: postData,\n\t\t\turl: give_global_vars.ajaxurl,\n\t\t\txhrFields: {\n\t\t\t\twithCredentials: true\n\t\t\t},\n\t\t\tsuccess: function success(response) {\n\t\t\t\tvar html = '';\n\t\t\t\tvar states_label = response.states_label;\n\t\t\t\tif (_typeof(response.states_found) != undefined && true == response.states_found) {\n\t\t\t\t\thtml = response.data;\n\t\t\t\t} else {\n\t\t\t\t\thtml = '';\n\t\t\t\t}\n\t\t\t\t$form.find('input[name=\"give_address_state\"], select[name=\"give_address_state\"]').replaceWith(html);\n\n\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\tif (_typeof(response.show_field) != undefined && true == response.show_field) {\n\t\t\t\t\t$form.find('p#give-card-state-wrap').removeClass('give-hidden');\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-last');\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-wide');\n\t\t\t\t} else {\n\t\t\t\t\t$form.find('p#give-card-state-wrap').addClass('give-hidden');\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-wide');\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-last');\n\t\t\t\t}\n\t\t\t}\n\t\t}).fail(function (data) {\n\t\t\tif (window.console && window.console.log) {\n\t\t\t\tconsole.log(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn false;\n};\n\n/***/ }),\n\n/***/ 371:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Float Labels\n * @version: 3.3.4\n * @author: Paul Ryley (http://geminilabs.io)\n * @url: https://geminilabs.github.io/float-labels.js\n * @license: MIT\n */\n\n/** global: define, navigator, NodeList, Option */\n\n;(function( window, document, undefined )\n{\n\t\"use strict\";\n\n\tvar Plugin = function( el, options )\n\t{\n\t\tthis.el = this.isString( el ) ? document.querySelectorAll( el ) : [el];\n\t\tthis.config = [];\n\t\tthis.options = options;\n\t\tthis.selectors = [];\n\t\tthis.init();\n\t\tthis.destroy = function() {\n\t\t\tthis.loop( function( el ) {\n\t\t\t\tel.removeEventListener( 'reset', this.events.reset );\n\t\t\t\tthis.removeClasses( el );\n\t\t\t}, function( field ) {\n\t\t\t\tthis.reset( field );\n\t\t\t});\n\t\t};\n\t\tthis.rebuild = function() {\n\t\t\tthis.loop( null, function( field ) {\n\t\t\t\tthis.floatLabel( field, true );\n\t\t\t});\n\t\t};\n\t};\n\n\tPlugin.prototype = {\n\n\t\tdefaults: {\n\t\t\tcustomEvent: null,\n\t\t\tcustomLabel: null,\n\t\t\tcustomPlaceholder: null,\n\t\t\texclude: '.no-label',\n\t\t\tinputRegex: /email|number|password|search|tel|text|url/,\n\t\t\tprefix: 'fl-',\n\t\t\tprioritize: 'label', // label|placeholder\n\t\t\trequiredClass: 'required',\n\t\t\tstyle: 0, // 0|1|2\n\t\t\ttransform: 'input,select,textarea'\n\t\t},\n\n\t\t/** @return void */\n\t\tinit: function() {\n\t\t\tthis.initEvents();\n\t\t\tthis.loop( function( el, i ) {\n\t\t\t\tvar style = this.config[i].style;\n\t\t\t\tel.addEventListener( 'reset', this.events.reset );\n\t\t\t\tel.classList.add( this.prefixed( 'form' ));\n\t\t\t\tif( style ) {\n\t\t\t\t\tel.classList.add( this.prefixed( 'style-' + style ));\n\t\t\t\t}\n\t\t\t}, function( field ) {\n\t\t\t\tthis.floatLabel( field );\n\t\t\t});\n\t\t},\n\n\t\t/** @return void */\n\t\tinitEvents: function() {\n\t\t\tthis.events = {\n\t\t\t\tblur: this.onBlur.bind( this ),\n\t\t\t\tchange: this.onInput.bind( this ),\n\t\t\t\tfocus: this.onFocus.bind( this ),\n\t\t\t\tinput: this.onInput.bind( this ),\n\t\t\t\treset: this.onReset.bind( this ),\n\t\t\t};\n\t\t},\n\n\t\t/** @return string */\n\t\taddRemove: function( bool ) {\n\t\t\treturn bool ? 'add' : 'remove';\n\t\t},\n\n\t\t/** @return null|void */\n\t\tbuild: function( el ) {\n\t\t\tvar labelEl = this.getLabel( el );\n\t\t\tif( !labelEl )return;\n\t\t\tel.classList.add( this.prefixed( el.tagName.toLowerCase() ));\n\t\t\tthis.setLabel( labelEl, el );\n\t\t\tthis.setPlaceholder( labelEl, el );\n\t\t\tthis.wrapLabel( labelEl, el );\n\t\t\tthis.handleEvents( el, 'add' );\n\t\t\tif( typeof this.config[this.current].customEvent === 'function' ) {\n\t\t\t\tthis.config[this.current].customEvent.call( this, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return Element */\n\t\tcreateEl: function( tag, attributes ) {\n\t\t\tvar el = ( typeof tag === 'string' ) ? document.createElement( tag ) : tag;\n\t\t\tattributes = attributes || {};\n\t\t\tfor( var key in attributes ) {\n\t\t\t\tif( !attributes.hasOwnProperty( key ))continue;\n\t\t\t\tel.setAttribute( key, attributes[key] );\n\t\t\t}\n\t\t\treturn el;\n\t\t},\n\n\t\t/** @return object */\n\t\textend: function() {\n\t\t\tvar args = [].slice.call( arguments );\n\t\t\tvar result = args[0];\n\t\t\tvar extenders = args.slice(1);\n\t\t\tObject.keys( extenders ).forEach( function( i ) {\n\t\t\t\tfor( var key in extenders[i] ) {\n\t\t\t\t\tif( !extenders[i].hasOwnProperty( key ))continue;\n\t\t\t\t\tresult[key] = extenders[i][key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\n\t\t/** @return null|void */\n\t\tfloatLabel: function( el, rebuild ) {\n\t\t\tif( !this.isValidField( el ))return;\n\t\t\tif( this.hasParent( el )) {\n\t\t\t\tif( rebuild !== true )return;\n\t\t\t\tthis.reset( el );\n\t\t\t}\n\t\t\tthis.build( el );\n\t\t},\n\n\t\t/** @return string|false */\n\t\tgetLabel: function( el ) {\n\t\t\tvar label = 'label[for=\"' + el.getAttribute( 'id' ) + '\"]';\n\t\t\tvar labelEl = this.el[this.current].querySelectorAll( label );\n\t\t\t// check for multiple labels with identical 'for' attributes\n\t\t\tif( labelEl.length > 1 ) {\n\t\t\t\tlabelEl = el.parentNode.querySelectorAll( label );\n\t\t\t}\n\t\t\tif( labelEl.length === 1 ) {\n\t\t\t\treturn labelEl[0];\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/** @return string */\n\t\tgetLabelText: function( labelEl, el ) {\n\t\t\tvar labelText = labelEl.textContent.replace( /[*:]/g, '' ).trim();\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( !labelText || ( labelText && placeholderText && this.config[this.current].prioritize === 'placeholder' )) {\n\t\t\t\tlabelText = placeholderText;\n\t\t\t}\n\t\t\treturn labelText;\n\t\t},\n\n\t\t/** @return void */\n\t\thandleEvents: function( el, action ) {\n\t\t\tvar events = this.events;\n\t\t\tvar isMicrosoftSelectEl = el.nodeName === 'SELECT' && this.isMSBrowser();\n\t\t\t['blur','input','focus'].forEach( function( event ) {\n\t\t\t\tif( event === 'input' && ( el.type === 'file' || isMicrosoftSelectEl )) {\n\t\t\t\t\tevent = 'change';\n\t\t\t\t}\n\t\t\t\tel[ action + 'EventListener']( event, events[event] );\n\t\t\t});\n\t\t},\n\n\t\t/** @return bool */\n\t\thasParent: function( el ) {\n\t\t\treturn el.parentNode.classList.contains( this.prefixed( 'wrap' ));\n\t\t},\n\n\t\t/** @return bool */\n\t\tisMSBrowser: function() {\n\t\t\treturn !!navigator.userAgent.match(/Edge|MSIE|Trident/g);\n\t\t},\n\n\t\t/** @return bool */\n\t\tisString: function( str ) {\n\t\t\treturn Object.prototype.toString.call( str ) === \"[object String]\";\n\t\t},\n\n\t\t/** @return bool */\n\t\tisValidField: function( el ) {\n\t\t\tvar isInvalidInput = el.tagName === 'INPUT' && !this.config[this.current].inputRegex.test( el.getAttribute( 'type' ));\n\t\t\tvar isInvalidSelect = el.tagName === 'SELECT' && el.getAttribute( 'multiple' ) !== null;\n\t\t\treturn el.getAttribute( 'id' ) && !isInvalidInput && !isInvalidSelect;\n\t\t},\n\n\t\t/** @return void */\n\t\tloop: function( elCallback, fieldCallback ) {\n\t\t\tfor( var i = 0; i < this.el.length; ++i ) {\n\t\t\t\tif( typeof this.selectors[i] === 'undefined' ) {\n\t\t\t\t\tvar config = this.extend( {}, this.defaults, this.options, this.el[i].getAttribute( 'data-options' ));\n\t\t\t\t\tvar exclude = ':not(' + config.exclude.split( /[\\s,]+/ ).join( '):not(' ) + ')';\n\t\t\t\t\tthis.selectors[i] = config.transform.replace( /,/g, exclude + ',' ) + exclude;\n\t\t\t\t\tthis.config[i] = config;\n\t\t\t\t}\n\t\t\t\tvar fields = this.el[i].querySelectorAll( this.selectors[i] );\n\t\t\t\tthis.current = i;\n\t\t\t\tif( typeof elCallback === 'function' ) {\n\t\t\t\t\telCallback.call( this, this.el[i], i );\n\t\t\t\t}\n\t\t\t\tfor( var x = 0; x < fields.length; ++x ) {\n\t\t\t\t\tif( typeof fieldCallback === 'function' ) {\n\t\t\t\t\t\tfieldCallback.call( this, fields[x], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tonBlur: function( ev ) {\n\t\t\tev.target.parentNode.classList.remove( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonInput: function( ev ) {\n\t\t\tev.target.parentNode.classList[\n\t\t\t\tthis.addRemove( ev.target.value.length )\n\t\t\t]( this.prefixed( 'is-active' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonFocus: function( ev ) {\n\t\t\tev.target.parentNode.classList.add( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonReset: function() {\n\t\t\tsetTimeout( this.resetFields.bind( this ));\n\t\t},\n\n\t\t/** @return string */\n\t\tprefixed: function( value ) {\n\t\t\treturn this.config[this.current].prefix + value;\n\t\t},\n\n\t\t/** @return void */\n\t\tremoveClasses: function( el ) {\n\t\t\tvar prefix = this.config[this.current].prefix;\n\t\t\tvar classes = el.className.split( ' ' ).filter( function( c ) {\n\t\t\t\treturn c.lastIndexOf( prefix, 0 ) !== 0;\n\t\t\t});\n\t\t\tel.className = classes.join( ' ' ).trim();\n\t\t},\n\n\t\t/** @return null|void */\n\t\treset: function( el ) {\n\t\t\tvar parent = el.parentNode;\n\t\t\tif( !this.hasParent( el ))return;\n\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\twhile( parent.firstElementChild ) {\n\t\t\t\tvar childEl = parent.firstElementChild;\n\t\t\t\tthis.removeClasses( childEl );\n\t\t\t\tfragment.appendChild( childEl );\n\t\t\t}\n\t\t\tparent.parentNode.replaceChild( fragment, parent );\n\t\t\tthis.resetPlaceholder( el );\n\t\t\tthis.handleEvents( el, 'remove' );\n\t\t},\n\n\t\t/** @return void */\n\t\tresetFields: function() {\n\t\t\tvar fields = this.el[this.current].querySelectorAll( this.selectors[this.current] );\n\t\t\tfor( var i = 0; i < fields.length; ++i ) {\n\t\t\t\tfields[i].parentNode.classList[\n\t\t\t\t\tthis.addRemove( fields[i].tagName === 'SELECT' && fields[i].value !== '' )\n\t\t\t\t]( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tresetPlaceholder: function( el ) {\n\t\t\tvar dataPlaceholder = 'data-placeholder';\n\t\t\tvar originalPlaceholder = el.getAttribute( dataPlaceholder );\n\t\t\tif( originalPlaceholder !== null ) {\n\t\t\t\tel.removeAttribute( dataPlaceholder );\n\t\t\t\tel.setAttribute( 'placeholder', originalPlaceholder );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetLabel: function( labelEl, el ) {\n\t\t\tlabelEl.classList.add( this.prefixed( 'label' ));\n\t\t\tlabelEl.textContent = this.getLabelText( labelEl, el );\n\t\t\tif( typeof this.config[this.current].customLabel === 'function' ) {\n\t\t\t\tlabelEl.textContent = this.config[this.current].customLabel.call( this, labelEl, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetPlaceholder: function( labelEl, el ) {\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( this.config[this.current].prioritize === 'label' || !placeholderText ) {\n\t\t\t\tif( placeholderText ) {\n\t\t\t\t\tel.setAttribute( 'data-placeholder', placeholderText );\n\t\t\t\t}\n\t\t\t\tplaceholderText = this.getLabelText( labelEl, el );\n\t\t\t}\n\t\t\tif( typeof this.config[this.current].customPlaceholder === 'function' ) {\n\t\t\t\tplaceholderText = this.config[this.current].customPlaceholder.call( this, placeholderText, el, labelEl );\n\t\t\t}\n\t\t\tif( el.tagName === 'SELECT' ) {\n\t\t\t\tthis.setSelectPlaceholder( el, placeholderText );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tel.setAttribute( 'placeholder', placeholderText );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetSelectPlaceholder: function( el, placeholderText ) {\n\t\t\tvar childEl = el.firstElementChild;\n\t\t\tif( childEl.hasAttribute( 'value' ) && childEl.value ) {\n\t\t\t\tvar selected = el.options[el.selectedIndex].defaultSelected !== true ? true : false;\n\t\t\t\tel.insertBefore( new Option( placeholderText, '', selected, selected ), childEl );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchildEl.setAttribute( 'value', '' );\n\t\t\t}\n\t\t\tif( childEl.textContent === '' ) {\n\t\t\t\tchildEl.textContent = placeholderText;\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\twrapLabel: function( labelEl, el ) {\n\t\t\tvar wrapper = this.createEl( 'div', {\n\t\t\t\tclass: this.prefixed( 'wrap' ) + ' ' + this.prefixed( 'wrap-' + el.tagName.toLowerCase() ),\n\t\t\t});\n\t\t\tif( el.value !== undefined && el.value.length ) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t\tif( el.getAttribute( 'required' ) !== null || el.classList.contains( this.config[this.current].requiredClass )) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-required' ));\n\t\t\t}\n\t\t\tel.parentNode.insertBefore( wrapper, el );\n\t\t\twrapper.appendChild( labelEl );\n\t\t\twrapper.appendChild( el );\n\t\t},\n\t};\n\n\tif( true ) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { return Plugin; }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t}\n\telse if( typeof module === \"object\" && module.exports ) {\n\t\tmodule.exports = Plugin;\n\t}\n\telse {\n\t\twindow.FloatLabels = Plugin;\n\t}\n\n})( window, document );\n\n\n/***/ }),\n\n/***/ 372:\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ 43:\n/***/ (function(module, exports) {\n\nmodule.exports = jQuery;\n\n/***/ }),\n\n/***/ 52:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (true) { \n // AMD. Register as an anonymous module. \n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(43)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n if(mfp._hasScrollBar(windowHeight)){\n var s = mfp._getScrollbarSize();\n if(s) {\n windowStyles.marginRight = s;\n }\n }\n }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('
');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: 'The content could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t'
'+\n\t\t\t\t'
',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: 'The image could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t''+\n\t\t\t\t'
',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number. Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));\n\n/***/ }),\n\n/***/ 68:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {module.exports = global[\"accounting\"] = __webpack_require__(96);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))\n\n/***/ }),\n\n/***/ 96:\n/***/ (function(module, exports, __webpack_require__) {\n\n/*!\n * accounting.js v0.4.1\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.1';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '') // strip out any cruft\n\t\t\t\t.replace(decimal, '.') // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\t\tvar power = Math.pow(10, precision);\n\n\t\t// Multiply up by precision, round accurately, then divide and use native toFixed():\n\t\treturn (Math.round(lib.unformat(value) * power) / power).toFixed(precision);\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (true) {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n\n\n/***/ }),\n\n/***/ 97:\n/***/ (function(module, exports) {\n\njQuery.fn.giveHintCss = function (action, settings) {\n\treturn this.each(function () {\n\t\tvar $this = jQuery(this);\n\t\tsettings = jQuery.extend({\n\t\t\tlabel: ''\n\t\t}, settings);\n\n\t\tvar $tooltip = $this.next('span.give-hint-tooltip-js');\n\t\tif (!$tooltip.length) {\n\t\t\tvar label = !settings.label.length ? $this.data('hint-aria-label') : settings.label;\n\n\t\t\t// bailout.\n\t\t\tif (!label.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$this.after('');\n\t\t\t$tooltip = $this.next();\n\n\t\t\t$tooltip.css({\n\t\t\t\ttop: -$this.outerHeight(),\n\t\t\t\tleft: -($this.outerWidth() / 2)\n\t\t\t});\n\t\t}\n\n\t\tif (action === 'show') {\n\t\t\t$tooltip.addClass('hint--always');\n\t\t} else if (action === 'hide') {\n\t\t\t$tooltip.removeClass('hint--always');\n\t\t}\n\t});\n};\n\n// Qtip2 backward compatibility.\njQuery(document).ready(function ($) {\n\tvar qtip_tooltips = $('[data-tooltip]');\n\n\t// Add hintcss tooltip to existing qtip.\n\tif (qtip_tooltips.length) {\n\t\tqtip_tooltips.each(function (index, tooltip) {\n\t\t\ttooltip = tooltip instanceof jQuery ? tooltip : $(tooltip);\n\t\t\treset_qtip(tooltip);\n\t\t});\n\t}\n\n\t// Add hintcss tooltip to dynamically created qtip.\n\t$('body').on('hover', '[data-tooltip]', function () {\n\t\treset_qtip($(this));\n\t});\n\n\t/**\n * Reset qtip to hintcss\n * @param tooltip\n */\n\tfunction reset_qtip(tooltip) {\n\t\tif (!tooltip.is('[class*=\"hint\"]')) {\n\t\t\tvar classes = tooltip.attr('class'),\n\t\t\t icon_classes = [],\n\t\t\t label_length = tooltip.data('tooltip').split(' ').length;\n\n\t\t\tif (classes) {\n\t\t\t\tclasses = classes.split(' ');\n\t\t\t\ticon_classes = $.grep(classes, function (item) {\n\t\t\t\t\treturn -1 !== item.indexOf('give-icon');\n\t\t\t\t});\n\n\t\t\t\tif (icon_classes.length) {\n\t\t\t\t\t// Set icon classes string.\n\t\t\t\t\ticon_classes = icon_classes.join(' ');\n\n\t\t\t\t\t// Remove icon class.\n\t\t\t\t\ttooltip.removeClass(icon_classes);\n\n\t\t\t\t\t// Add icon.\n\t\t\t\t\ttooltip.append('');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add hint.css related classes.\n\t\t\ttooltip.addClass('hint--top');\n\n\t\t\tif (15 < label_length) {\n\t\t\t\ttooltip.addClass('hint--large');\n\t\t\t} else if (7 < label_length) {\n\t\t\t\ttooltip.addClass('hint--medium');\n\t\t\t}\n\n\t\t\ttooltip.attr('aria-label', tooltip.data('tooltip'));\n\t\t}\n\t}\n});\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// js/give.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 363);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d747366ea47814b49e2e","/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/amd-options.js\n// module id = 133\n// module chunks = 3","import accounting from 'accounting';\n\nlet Give = {};\n\n/**\n * This API is under development.\n *\n * Currently used only for internal purpose.\n */\nexport default Give = {\n\tinit: function() {\n\t\tvar subHelperObjs = [ 'form' ],\n\t\t\tcounter = 0;\n\t\tjQuery( document ).trigger( 'give:preInit' );\n\n\t\tthis.fn.__initialize_cache();\n\n\t\t// Initialize all init methods od sub helper objects.\n\t\twhile ( counter < subHelperObjs.length ) {\n\t\t\tif ( ! ! Give[ subHelperObjs[ counter ] ].init ) {\n\t\t\t\tGive[ subHelperObjs[ counter ] ].init();\n\t\t\t}\n\t\t\tcounter ++;\n\t\t}\n\n\t\tjQuery( document ).trigger( 'give:postInit' );\n\t},\n\n\tfn: {\n\t\t/**\n\t\t * Format Currency\n\t\t *\n\t\t * Formats the currency with accounting.js\n\t\t *\n\t\t * @param {string} price\n\t\t * @param {object} args\n\t\t * @param {object} $form\n\t\t * @returns {*|string}\n\t\t */\n\t\tformatCurrency: function( price, args, $form ) {\n\t\t\t// Global currency setting.\n\t\t\tvar format_args = {\n\t\t\t\tsymbol: '',\n\t\t\t\tdecimal: give_global_vars.decimal_separator,\n\t\t\t\tthousand: give_global_vars.thousands_separator,\n\t\t\t\tprecision: parseInt( give_global_vars.number_decimals ),\n\t\t\t\tcurrency: give_global_vars.currency\n\t\t\t};\n\n\t\t\tprice = price.toString().trim();\n\t\t\t$form = 'undefined' === typeof $form ? {} : $form;\n\n\t\t\t// Form specific currency setting.\n\t\t\tif ( $form.length ) {\n\t\t\t\t//Set the custom amount input value format properly\n\t\t\t\tformat_args = {\n\t\t\t\t\tsymbol: '',\n\t\t\t\t\tdecimal: Give.form.fn.getInfo( 'decimal_separator', $form ),\n\t\t\t\t\tthousand: Give.form.fn.getInfo( 'thousands_separator', $form ),\n\t\t\t\t\tprecision: Give.form.fn.getInfo( 'number_decimals', $form ),\n\t\t\t\t\tcurrency: Give.form.fn.getInfo( 'currency_code', $form ),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\targs = jQuery.extend( format_args, args );\n\n\t\t\t// Make sure precision is integer type\n\t\t\targs.precision = parseInt( args.precision );\n\n\t\t\tif ( 'INR' === args.currency ) {\n\t\t\t\tvar actual_price = accounting.unformat( price, '.' ).toString();\n\n\t\t\t\tvar decimal_amount = '',\n\t\t\t\t\tresult,\n\t\t\t\t\tamount,\n\t\t\t\t\tdecimal_index = actual_price.indexOf( '.' );\n\n\t\t\t\tif ( (- 1 !== decimal_index) && args.precision ) {\n\t\t\t\t\tdecimal_amount = Number( actual_price.substr( parseInt( decimal_index ) ) )\n\t\t\t\t\t\t.toFixed( args.precision )\n\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t.substr( 1 );\n\t\t\t\t\tactual_price = actual_price.substr( 0, parseInt( decimal_index ) );\n\n\t\t\t\t\tif ( ! decimal_amount.length ) {\n\t\t\t\t\t\tdecimal_amount = '.0000000000'.substr( 0, (parseInt( decimal_index ) + 1) );\n\t\t\t\t\t} else if ( (args.precision + 1) > decimal_amount.length ) {\n\t\t\t\t\t\tdecimal_amount = (decimal_amount + '000000000').substr( 0, args.precision + 1 );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdecimal_amount = '.000000000'.substr( 0, args.precision + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Extract last 3 from amount\n\t\t\t\tresult = actual_price.substr( - 3 );\n\t\t\t\tamount = actual_price.substr( 0, parseInt( actual_price.length ) - 3 );\n\n\t\t\t\t// Apply digits 2 by 2\n\t\t\t\twhile ( amount.length > 0 ) {\n\t\t\t\t\tresult = amount.substr( - 2 ) + args.thousand + result;\n\t\t\t\t\tamount = amount.substr( 0, parseInt( amount.length ) - 2 );\n\t\t\t\t}\n\n\t\t\t\tif ( decimal_amount.length ) {\n\t\t\t\t\tresult = result + decimal_amount;\n\t\t\t\t}\n\n\t\t\t\tprice = result;\n\n\t\t\t\tif ( undefined !== args.symbol && args.symbol.length ) {\n\t\t\t\t\tif ( 'after' === args.position ) {\n\t\t\t\t\t\tprice = price + args.symbol;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice = args.symbol + price;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//Properly position symbol after if selected\n\t\t\t\tif ( 'after' === args.position ) {\n\t\t\t\t\targs.format = '%v%s';\n\t\t\t\t}\n\n\t\t\t\tprice = accounting.formatMoney( price, args );\n\t\t\t}\n\n\t\t\treturn price;\n\n\t\t},\n\n\t\t/**\n\t\t * Unformat Currency\n\t\t *\n\t\t * @param price\n\t\t * @param {string} decimal_separator\n\t\t * @returns {number}\n\t\t */\n\t\tunFormatCurrency: function( price, decimal_separator ) {\n\t\t\tif ( 'string' === typeof price ) {\n\t\t\t\tvar regex = ',' === decimal_separator.trim() ? /[^0-9\\,-]+/g : /[^0-9\\.-]+/g;\n\n\t\t\t\tprice = price.replace( regex, '' );\n\n\t\t\t\tif ( 0 === price.indexOf( decimal_separator ) ) {\n\t\t\t\t\tprice = price.substr( 1 );\n\t\t\t\t} else if ( (price.length - 1) === price.indexOf( decimal_separator ) ) {\n\t\t\t\t\tprice = price.slice( 0, - 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Math.abs( parseFloat( accounting.unformat( price, decimal_separator ) ) );\n\t\t},\n\n\t\t/**\n\t\t * Get Parameter by Name\n\t\t *\n\t\t * @see: http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n\t\t * @param name\n\t\t * @param url\n\t\t * @since 1.4.2\n\t\t * @returns {*}\n\t\t */\n\t\tgetParameterByName: function( name, url ) {\n\t\t\tif ( ! url ) {\n\t\t\t\turl = window.location.href;\n\t\t\t}\n\n\t\t\tname = name.replace( /[\\[\\]]/g, '\\\\$&' );\n\n\t\t\tvar regex = new RegExp( '[?&]' + name + '(=([^&#]*)|&|#|$)' ),\n\t\t\t\tresults = regex.exec( url );\n\n\t\t\tif ( ! results ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( ! results[ 2 ] ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn decodeURIComponent( results[ 2 ].replace( /\\+/g, ' ' ) );\n\t\t},\n\n\t\t/**\n\t\t * Get information from global var\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} str\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetGlobalVar: function( str ) {\n\t\t\tif ( 'undefined' === typeof give_global_vars[ str ] ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn give_global_vars[ str ];\n\t\t},\n\n\t\t/**\n\t\t * set cache\n\t\t *\n\t\t * @since 1.8.17\n\t\t *\n\t\t * @param {string} key\n\t\t * @param {string} value\n\t\t * @param {object} $form\n\t\t */\n\t\tsetCache: function( key, value, $form ) {\n\t\t\tif ( $form.length ) {\n\t\t\t\tGive.cache[ 'form_' + Give.form.fn.getInfo( 'form-id', $form ) ][ key ] = value;\n\t\t\t} else {\n\t\t\t\tGive.cache[ key ] = value;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get cache\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param key\n\t\t * @param $form\n\t\t * @return {string|*}\n\t\t */\n\t\tgetCache: function( key, $form ) {\n\t\t\tvar cache;\n\n\t\t\tif ( $form.length ) {\n\t\t\t\tcache = Give.cache[ 'form_' + Give.form.fn.getInfo( 'form-id', $form ) ][ key ];\n\t\t\t} else {\n\t\t\t\tcache = Give.cache[ key ];\n\t\t\t}\n\n\t\t\tcache = 'undefined' === typeof cache ? '' : cache;\n\n\t\t\treturn cache;\n\t\t},\n\n\t\t/**\n\t\t * Initialize cache.\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @private\n\t\t */\n\t\t__initialize_cache: function() {\n\t\t\tjQuery.each( jQuery( '.give-form' ), function( index, $item ) {\n\t\t\t\t$item = $item instanceof jQuery ? $item : jQuery( $item );\n\n\t\t\t\tGive.cache[ 'form_' + Give.form.fn.getInfo( 'form-id', $item ) ] = [];\n\t\t\t} );\n\t\t}\n\t}\n\t,\n\n\t/**\n\t * This object key will be use to cache predicted data or donor activity.\n\t *\n\t * @since 1.8.17\n\t */\n\tcache: {}\n};\n\nGive.form = {\n\tinit: function() {\n\t\tthis.fn.field.formatCreditCard( jQuery( 'form.give-form' ) );\n\n\t\twindow.onload = function() {\n\t\t\tGive.form.fn.__sendBackToForm();\n\t\t};\n\t},\n\n\tfn: {\n\n\t\t/**\n\t\t * Disable donation form.\n\t\t *\n\t\t * @param {object} $form\n\t\t * @param {boolean} is_disable\n\t\t *\n\t\t * @return {*}\n\t\t */\n\t\tdisable: function( $form, is_disable ) {\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$form.find( '.give-submit' ).prop( 'disabled', is_disable );\n\t\t},\n\n\t\t/**\n\t\t * Get formatted amount\n\t\t *\n\t\t * @param {string/number} amount\n\t\t * @param {object} $form\n\t\t * @param {object} args\n\t\t */\n\t\tformatAmount: function( amount, $form, args ) {\n\t\t\t// Do not format amount if form did not exist.\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn amount;\n\t\t\t}\n\n\t\t\treturn Give.fn.formatCurrency( amount, args, $form );\n\t\t},\n\n\t\t/**\n\t\t * Get form information\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} str\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetInfo: function( str, $form ) {\n\t\t\tvar data = '';\n\t\t\t$form = 'undefined' !== typeof $form ? $form : {};\n\n\t\t\t// Bailout.\n\t\t\tif ( ! str.length || ! $form.length ) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tswitch ( str ) {\n\t\t\t\tcase 'gateways':\n\t\t\t\t\tdata = [];\n\t\t\t\t\tjQuery.each( $form.find( 'input[name=\"payment-mode\"]' ), function( index, gateway ) {\n\t\t\t\t\t\tgateway = ! (gateway instanceof jQuery) ? jQuery( gateway ) : gateway;\n\t\t\t\t\t\tdata.push( gateway.val().trim() );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-type':\n\t\t\t\t\tif ( $form.hasClass( 'give-form-type-set' ) ) {\n\t\t\t\t\t\tdata = 'set';\n\t\t\t\t\t} else if ( $form.hasClass( 'give-form-type-multi' ) ) {\n\t\t\t\t\t\tdata = 'multi';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-id':\n\t\t\t\t\tdata = $form.find( 'input[name=\"give-form-id\"]' ).val();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif ( $form.get( 0 ).hasAttribute( 'data-' + str ) ) {\n\t\t\t\t\t\tdata = $form.attr( 'data-' + str );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = $form.attr( str );\n\t\t\t\t\t}\n\n\t\t\t\t\t'undefined' !== typeof data ? data.trim() : data;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\n\t\t/**\n\t\t * Set form information\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} str\n\t\t * @param {string} val\n\t\t * @param {object} $form\n\t\t * @param {string} type\n\t\t *\n\t\t * @return {string|boolean}\n\t\t */\n\t\tsetInfo: function( type, val, $form, str ) {\n\t\t\t// Bailout.\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ttype = 'undefined' === typeof type ? 'data' : type;\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase 'nonce':\n\t\t\t\t\t$form.find( 'input[name=\"give-form-hash\"]' ).val( val );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Bailout.\n\t\t\tif ( 'undefined' !== typeof str && ! str.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase 'attr':\n\t\t\t\t\t$form.attr( str, val );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t$form.data( str, val );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Get formatted amount\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t */\n\t\tgetGateway: function( $form ) {\n\t\t\tvar gateway = '';\n\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn gateway;\n\t\t\t}\n\n\t\t\tgateway = $form.find( 'input[name=\"payment-mode\"]:checked' ).val().trim();\n\n\t\t\treturn 'undefined' !== typeof gateway ? gateway : '';\n\t\t},\n\n\t\t/**\n\t\t * Get Price ID and levels for multi donation form\n\t\t *\n\t\t * @param {Object} $form Form jQuery object\n\t\t *\n\t\t * @returns {Object}\n\t\t */\n\t\tgetVariablePrices: function( $form ) {\n\t\t\tvar variable_prices = [], formLevels;\n\n\t\t\t// check if correct form type is multi or not.\n\t\t\tif (\n\t\t\t\t! $form.length ||\n\t\t\t\t! $form.hasClass( 'give-form-type-multi' ) ||\n\t\t\t\t! (formLevels = $form.find( '.give-donation-levels-wrap [data-price-id] ' ))\n\t\t\t) {\n\t\t\t\treturn variable_prices;\n\t\t\t}\n\n\t\t\tjQuery.each( formLevels, function( index, item ) {\n\t\t\t\t// Get Jquery instance for item.\n\t\t\t\titem = ! (item instanceof jQuery) ? jQuery( item ) : item;\n\n\t\t\t\tvar decimal_separator = Give.form.fn.getInfo( 'decimal_separator', $form );\n\n\t\t\t\t// Add price id and amount to collector.\n\t\t\t\tvariable_prices.push( {\n\t\t\t\t\tprice_id: item.data( 'price-id' ),\n\t\t\t\t\tamount: Give.fn.unFormatCurrency( item.val(), decimal_separator )\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\treturn variable_prices;\n\t\t},\n\n\t\t/**\n\t\t * Get form price ID\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t * @param {boolean} is_amount\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetPriceID: function( $form, is_amount ) {\n\n\t\t\tvar variable_prices = this.getVariablePrices( $form ),\n\t\t\t\tcurrent_amount = Give.fn.unFormatCurrency(\n\t\t\t\t\t$form.find( 'input[name=\"give-amount\"]' ).val(),\n\t\t\t\t\tthis.getInfo( 'decimal_separator', $form )\n\t\t\t\t),\n\n\t\t\t\t/**\n\t\t\t\t * Flag Multi-levels for min. donation conditional.\n\t\t\t\t *\n\t\t\t\t * Note: Value of this variable will be:\n\t\t\t\t * a. -1 if no any level found.\n\t\t\t\t * b. [0-*] Any number from zero if donation level found.\n\t\t\t\t * c custom if donation level not found and donation amount is greater than the custom minimum amount.\n\t\t\t\t *\n\t\t\t\t * @type {number/string} Donation level ID.\n\t\t\t\t */\n\t\t\t\tprice_id = ! ! Give.fn.getCache( 'amount_' + current_amount, $form ) ? Give.fn.getCache( 'amount_' + current_amount, $form ) : - 1;\n\n\t\t\t// Flag to decide on which param we want to find price_id\n\t\t\tis_amount = 'undefined' === typeof is_amount ? true : is_amount;\n\n\t\t\t// Find price id with amount in variable prices.\n\t\t\tif ( variable_prices.length ) {\n\n\t\t\t\t// Get recent selected price id for same amount.\n\t\t\t\tif ( - 1 === price_id ) {\n\t\t\t\t\tif ( is_amount ) {\n\t\t\t\t\t\t// Find amount in donation levels.\n\t\t\t\t\t\tjQuery.each( variable_prices, function( index, variable_price ) {\n\t\t\t\t\t\t\tif ( variable_price.amount === current_amount ) {\n\t\t\t\t\t\t\t\tprice_id = variable_price.price_id;\n\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// Set level to custom.\n\t\t\t\t\t\tif ( - 1 === price_id && (this.getMinimumAmount( $form ) <= current_amount && (this.getMaximumAmount( $form ) >= current_amount) && this.getMinimumAmount( $form ) <= current_amount) ) {\n\t\t\t\t\t\t\tprice_id = 'custom';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice_id = jQuery( 'input[name=\"give-price-id\"]', $form ).val();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn price_id;\n\t\t},\n\n /**\n * Get form minimum amount\n *\n * @since 1.8.17\n * @param {object} $form\n *\n * @return {string}\n */\n getMinimumAmount: function ($form) {\n return $form.find('input[name=\"give-form-minimum\"]').val();\n },\n\n /**\n * Get form maximum amount\n *\n * @since 2.1\n * @param {object} $form\n *\n * @return {string}\n */\n getMaximumAmount: function ($form) {\n return $form.find('input[name=\"give-form-maximum\"]').val();\n },\n\n\t\t/**\n\t\t * Get form amount\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param $form\n\t\t * @return {*}\n\t\t */\n\t\tgetAmount: function( $form ) {\n\t\t\t// Bailout\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar amount = $form.find( 'input[name=\"give-amount\"]' ).val();\n\n\t\t\tif ( 'undefined' === typeof amount || ! amount ) {\n\t\t\t\tamount = 0;\n\t\t\t}\n\n\t\t\treturn Give.fn.unFormatCurrency( amount, this.getInfo( 'decimal_separator', $form ) );\n\t\t},\n\n\t\t/**\n\t\t * Get form security nonce\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t * @return {string}\n\t\t */\n\t\tgetNonce: function( $form ) {\n\t\t\t// Bailout\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tlet nonce = $form.find( 'input[name=\"give-form-hash\"]' ).val();\n\n\t\t\tif ( 'undefined' === typeof nonce || ! nonce ) {\n\t\t\t\tnonce = '';\n\t\t\t}\n\n\t\t\treturn nonce;\n\t\t},\n\n\t\t/**\n\t\t * Reset form noce.\n\t\t *\n\t\t * @since 2.0\n\t\t *\n\t\t * @param {object} $form Donation form object.\n\t\t * @returns {boolean}\n\t\t */\n\t\tresetNonce: function( $form ) {\n\t\t\t// Return false, if form is missing.\n\t\t\tif ( ! $form.length || ! jQuery( 'input[name=\"give-form-hash\"]', $form ).length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tGive.form.fn.disable( $form, true );\n\n\t\t\t//Post via AJAX to Give\n\t\t\tjQuery.post( give_global_vars.ajaxurl, {\n\t\t\t\t\taction: 'give_donation_form_nonce',\n\t\t\t\t\tgive_form_id: Give.form.fn.getInfo( 'form-id', $form )\n\t\t\t\t},\n\t\t\t\tfunction( response ) {\n\t\t\t\t\t// Update nonce field.\n\t\t\t\t\tGive.form.fn.setInfo( 'nonce', response.data, $form, '' );\n\n\t\t\t\t\tGive.form.fn.disable( $form, false );\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Auto select donation level\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t * @param {string} price_id\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tautoSelectDonationLevel: function( $form, price_id ) {\n\n\t\t\tif ( ! $form.length || 'multi' !== this.getInfo( 'form-type', $form ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tprice_id = ('undefined' === typeof price_id) ? this.getPriceID( $form, false ) : price_id;\n\n\t\t\tswitch ( true ) {\n\n\t\t\t\t// Auto select radio button.\n\t\t\t\tcase (! ! $form.find( '.give-radio-input' ).length) :\n\t\t\t\t\t$form.find( '.give-radio-input' )\n\t\t\t\t\t\t.prop( 'checked', false );\n\t\t\t\t\t$form.find( '.give-radio-input[data-price-id=\"' + price_id + '\"]' )\n\t\t\t\t\t\t.prop( 'checked', true )\n\t\t\t\t\t\t.addClass( 'give-default-level' );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Set focus to price id button.\n\t\t\t\tcase (! ! $form.find( 'button.give-donation-level-btn' ).length) :\n\t\t\t\t\t$form.find( 'button.give-donation-level-btn' )\n\t\t\t\t\t\t.blur();\n\t\t\t\t\t$form.find( 'button.give-donation-level-btn[data-price-id=\"' + price_id + '\"]' )\n\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t.addClass( 'give-default-level' );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Auto select option.\n\t\t\t\tcase (! ! $form.find( 'select.give-select-level' ).length) :\n\t\t\t\t\t$form.find( 'select.give-select-level option' )\n\t\t\t\t\t\t.prop( 'selected', false );\n\t\t\t\t\t$form.find( 'select.give-select-level option[data-price-id=\"' + price_id + '\"]' )\n\t\t\t\t\t\t.prop( 'selected', true )\n\t\t\t\t\t\t.addClass( 'give-default-level' );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update level values\n\t\t *\n\t\t * Helper function: Sets the multi-select amount values\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $level\n\t\t * @returns {boolean}\n\t\t */\n\t\tautoSetMultiLevel: function( $level ) {\n\n\t\t\tvar $form = $level.parents( 'form' ),\n\t\t\t\tlevel_amount = $level.val(),\n\t\t\t\tlevel_price_id = $level.data( 'price-id' );\n\n\t\t\t// Check if price ID blank because of dropdown type\n\t\t\tif ( 'undefined' === typeof level_price_id ) {\n\t\t\t\tlevel_price_id = $level.find( 'option:selected' ).data( 'price-id' );\n\t\t\t}\n\n\t\t\t// Is this a custom amount selection?\n\t\t\tif ( 'custom' === level_price_id ) {\n\t\t\t\t// It is, so focus on the custom amount input.\n\t\t\t\t$form.find( '.give-amount-top' ).val( '' ).focus();\n\t\t\t\treturn false; // Bounce out\n\t\t\t}\n\n\t\t\t// Update custom amount field\n\t\t\t$form.find( '.give-amount-top' ).val( level_amount );\n\t\t\t$form.find( 'span.give-amount-top' ).text( level_amount );\n\n\t\t\tvar decimal_separator = Give.form.fn.getInfo( 'decimal_separator', $form );\n\n\t\t\t// Cache previous amount and set data amount.\n\t\t\tjQuery( '.give-donation-amount .give-text-input', $form )\n\t\t\t\t.attr(\n\t\t\t\t\t'data-amount',\n\t\t\t\t\tGive.fn.unFormatCurrency(\n\t\t\t\t\t\t$form.find( '.give-final-total-amount' ).attr( 'data-total' ),\n\t\t\t\t\t\tdecimal_separator\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t// Manually trigger blur event with two params:\n\t\t\t// (a) form jquery object\n\t\t\t// (b) price id\n\t\t\t// (c) donation amount\n\t\t\t$form.find( '.give-donation-amount .give-text-input' )\n\t\t\t\t.trigger( 'blur', [ $form, level_amount, level_price_id ] );\n\t\t},\n\n\t\t/**\n\t\t * Donor sent back to the form\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @access private\n\t\t */\n\t\t__sendBackToForm: function() {\n\n\t\t\tlet form_id = Give.fn.getParameterByName( 'form-id' ),\n\t\t\t\tpayment_mode = Give.fn.getParameterByName( 'payment-mode' );\n\n\t\t\t// Sanity check - only proceed if query strings in place.\n\t\t\tif ( ! form_id || ! payment_mode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet $form_wrapper = jQuery( 'body' ).find( '#give-form-' + form_id + '-wrap' ),\n\t\t\t\t$form = $form_wrapper.find( 'form.give-form' ),\n\t\t\t\tdisplay_modal = $form_wrapper.hasClass( 'give-display-modal' ),\n\t\t\t\tdisplay_button = $form_wrapper.hasClass( 'give-display-button' ),\n\t\t\t\tdisplay_reveal = $form_wrapper.hasClass( 'give-display-reveal' );\n\n\t\t\t// Update payment mode radio so it's correctly checked.\n\t\t\t$form.find( '#give-gateway-radio-list label' )\n\t\t\t\t.removeClass( 'give-gateway-option-selected' );\n\t\t\t$form.find( 'input[name=payment-mode][value=' + payment_mode + ']' )\n\t\t\t\t.prop( 'checked', true )\n\t\t\t\t.parent()\n\t\t\t\t.addClass( 'give-gateway-option-selected' );\n\n\t\t\t// Select the proper level for Multi-level forms.\n\t\t\t// It can either be a dropdown, buttons, or radio list. Default is buttons field type.\n\t\t\tlet level_id = Give.fn.getParameterByName( 'level-id' ),\n\t\t\t\tlevel_field = $form.find( '*[data-price-id=\"' + level_id + '\"]' );\n\n\t\t\tif ( level_field.length > 0 ) {\n\t\t\t\tthis.autoSetMultiLevel( level_field );\n\t\t\t}\n\n\t\t\tlet give_form_wrap = jQuery( '.give-form-wrap' ),\n\t\t\t is_form_grid = give_form_wrap.hasClass( 'give-form-grid-wrap' );\n\n\t\t\tif ( is_form_grid && 1 === jQuery( '#give-modal-form-' + form_id ).length ) {\n\t\t\t\tjQuery.magnificPopup.open( {\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: 'inline',\n\t\t\t\t\t\tsrc: '#give-modal-form-' + form_id,\n\t\t\t\t\t},\n\t\t\t\t\tfixedContentPos: true,\n\t\t\t\t\tfixedBgPos: true,\n\t\t\t\t\tcloseBtnInside: true,\n\t\t\t\t\tmidClick: true,\n\t\t\t\t\tremovalDelay: 300,\n\t\t\t\t\tmainClass: 'modal-fade-slide',\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This form is modal display so show the modal.\n\t\t\tif ( display_modal || display_button ) {\n\t\t\t\tgive_open_form_modal( $form_wrapper, $form );\n\t\t\t} else if ( display_reveal ) {\n\t\t\t\t// This is a reveal form, show it.\n\t\t\t\t$form.find( '.give-btn-reveal' ).hide();\n\t\t\t\t$form.find( '#give-payment-mode-select, #give_purchase_form_wrap' ).slideDown();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Check if donation amount valid or not\n\t\t * @since 1.8.17\n\t\t *\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisValidDonationAmount: function( $form ) {\n\n\t\t\t// Return true, if custom amount is not enabled.\n\t\t\tif ( $form.find( 'input[name=\"give-form-minimum\"]' ).length <= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet min_amount = this.getMinimumAmount( $form ),\n\t\t\t\tmax_amount = this.getMaximumAmount( $form ),\n\t\t\t\tamount = this.getAmount( $form ),\n\t\t\t\tprice_id = this.getPriceID( $form, true );\n\n\t\t\t// Don't allow zero donation amounts.\n\t\t\t// https://github.com/WordImpress/Give/issues/3181\n\t\t\tif( 0 === amount ) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t((- 1 < amount) && amount >= min_amount && amount <= max_amount)\n\t\t\t\t|| (- 1 !== price_id)\n\t\t\t);\n\t\t},\n\n\t\tfield: {\n\n\t\t\t/**\n\t\t\t * Format CC Fields\n\t\t\t *\n\t\t\t * Set variables and format cc fields.\n\t\t\t *\n\t\t\t * @since 1.2\n\t\t\t *\n\t\t\t * @param {object} $forms\n\t\t\t */\n\t\t\tformatCreditCard: function( $forms ) {\n\t\t\t\t//Loop through forms on page and set CC validation\n\t\t\t\t$forms.each( function( index, form ) {\n\t\t\t\t\tform = jQuery( form );\n\t\t\t\t\tvar card_number = form.find( '.card-number' ),\n\t\t\t\t\t\tcard_cvc = form.find( '.card-cvc' ),\n\t\t\t\t\t\tcard_expiry = form.find( '.card-expiry' );\n\n\t\t\t\t\t//Only validate if there is a card field\n\t\t\t\t\tif ( card_number.length ) {\n\t\t\t\t\t\tcard_number.payment( 'formatCardNumber' );\n\t\t\t\t\t\tcard_cvc.payment( 'formatCardCVC' );\n\t\t\t\t\t\tcard_expiry.payment( 'formatCardExpiry' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n};\n\nGive.notice = {\n\tfn: {\n\t\t/**\n\t\t * Render notice\n\t\t * @since 1.8.17\n\t\t *\n\t\t * @param {string} notice_code\n\t\t * @param {object} $container\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderNotice: function( notice_code, $container ) {\n\t\t\tlet notice_html = '',\n\t\t\t\t$notice;\n\t\t\t$container = 'undefined' !== typeof $container ? $container : {};\n\n\t\t\tswitch ( notice_code ) {\n\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t$notice = jQuery(\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\tthis.getNotice( notice_code, $container ) +\n\t\t\t\t\t\t'
'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t$notice = jQuery(\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\tthis.getNotice( notice_code, $container ) +\n\t\t\t\t\t\t'
'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Return html if container did not find.\n\t\t\tif ( ! $container.length ) {\n\t\t\t\treturn notice_html;\n\t\t\t}\n\n\t\t\t$notice.insertBefore( $container.find( '.give-total-wrap' ) ).show();\n\t\t},\n\n\t\t/**\n\t\t * Get error notice\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} error_code\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {*}\n\t\t */\n\t\tgetNotice: function( error_code, $form ) {\n\t\t\t// Bailout.\n\t\t\tif ( ! error_code.length ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar notice, notice_msg, formatted_amount;\n\t\t\tnotice = notice_msg = formatted_amount = '';\n\n\t\t\tif ( $form.length ) {\n\t\t\t\tswitch ( error_code ) {\n\t\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar( error_code );\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMinimumAmount( $form );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar( error_code );\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMaximumAmount( $form );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( $form.length && '' !== notice_msg ) {\n\t\t\t\tnotice = notice_msg + ' ' + Give.fn.formatCurrency(\n\t\t\t\t\tformatted_amount,\n\t\t\t\t\t{\n\t\t\t\t\t\tsymbol: Give.form.fn.getInfo( 'currency_symbol', $form ),\n\t\t\t\t\t\tposition: Give.form.fn.getInfo( 'currency_position', $form )\n\t\t\t\t\t},\n\t\t\t\t\t$form\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn notice;\n\t\t}\n\t}\n};\n\nwindow.Give = Give;\n\njQuery( function( $ ) {\n\n\tvar $forms = jQuery( 'form.give-form' ),\n\t\tdoc = $( document );\n\n\t// Toggle validation classes\n\t$.fn.toggleError = function( errored ) {\n\t\tthis.toggleClass( 'error', errored );\n\t\tthis.toggleClass( 'valid', ! errored );\n\n\t\treturn this;\n\t};\n\n\t// Initialize Give object.\n\tGive.init();\n\n\t/**\n\t * Update state/province fields per country selection\n\t */\n\tfunction update_billing_state_field() {\n\t\tvar $this = $( this ),\n\t\t\t$form = $this.parents( 'form' );\n\t\tif ( 'card_state' !== $this.attr( 'id' ) ) {\n\n\t\t\t//Disable the State field until updated\n\t\t\t$form.find( '#card_state' ).empty().append( '' ).prop( 'disabled', true );\n\n\t\t\t// If the country field has changed, we need to update the state/province field\n\t\t\tvar postData = {\n\t\t\t\taction: 'give_get_states',\n\t\t\t\tcountry: $this.val(),\n\t\t\t\tfield_name: 'card_state'\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\ttype: 'POST',\n\t\t\t\tdata: postData,\n\t\t\t\turl: give_global_vars.ajaxurl,\n\t\t\t\txhrFields: {\n\t\t\t\t\twithCredentials: true\n\t\t\t\t},\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar html = '';\n\t\t\t\t\tvar states_label = response.states_label;\n\t\t\t\t\tif ( typeof (response.states_found) != undefined && true == response.states_found ) {\n\t\t\t\t\t\thtml = response.data;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml = ``;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( false === $form.hasClass( 'float-labels-enabled' ) ) {\n\t\t\t\t\t\tif ( typeof (response.states_require) != 'undefined' && true == response.states_require ) {\n\t\t\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label .give-required-indicator' ).removeClass( 'give-hidden' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label .give-required-indicator' ).addClass( 'give-hidden' );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label' ).text( states_label );\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label .state-label-text' ).text( states_label );\n\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).replaceWith( html );\n\n\t\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\t\tif ( typeof (response.show_field) != undefined && true == response.show_field ) {\n\t\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).removeClass( 'give-hidden' );\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-last' );\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-wide' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).addClass( 'give-hidden' );\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-wide' );\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-last' );\n\t\t\t\t\t}\n\n\t\t\t\t\tdoc.trigger( 'give_checkout_billing_address_updated', [ response, $form.attr( 'id' ) ] );\n\t\t\t\t}\n\t\t\t} ).fail( function( data ) {\n\t\t\t\tif ( window.console && window.console.log ) {\n\t\t\t\t\tconsole.log( data );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Sync state field with country.\n\tdoc.on(\n\t\t'change',\n\t\t'#give_cc_address input.card_state, #give_cc_address select',\n\t\tupdate_billing_state_field\n\t);\n\n\t// Trigger formatting function when gateway changes.\n\tdoc.on(\n\t\t'give_gateway_loaded',\n\t\tfunction() {\n\t\t\tGive.form.fn.field.formatCreditCard( $forms );\n\t\t}\n\t);\n\n\t// Make sure a gateway is selected.\n\tdoc.on(\n\t\t'submit',\n\t\t'#give_payment_mode',\n\t\tfunction() {\n\t\t\tvar gateway = Give.form.fn.getGateway( $( this ).closest( 'form' ) );\n\t\t\tif ( ! gateway.length ) {\n\t\t\t\talert( Give.fn.getGlobalVar( 'no_gateway' ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t);\n\n\t// Add a class to the currently selected gateway on click\n\tdoc.on(\n\t\t'click',\n\t\t'#give-payment-mode-select input',\n\t\tfunction() {\n\t\t\tvar $form = $( this ).parents( 'form' ),\n\t\t\t\t$gateways_li = $form.find( '#give-payment-mode-select li' ),\n\t\t\t\told_payment_gateway = $form.find( 'li.give-gateway-option-selected input[name=\"payment-mode\"]' ).val().trim(),\n\t\t\t\tnew_payment_gateways;\n\n\t\t\t// Unselect all payment gateways.\n\t\t\t$gateways_li.removeClass( 'give-gateway-option-selected' );\n\t\t\t$gateways_li.prop( 'checked', false );\n\n\t\t\t// Select payment gateway.\n\t\t\t$( this ).prop( 'checked', true );\n\t\t\t$( this ).parent().addClass( 'give-gateway-option-selected' );\n\n\t\t\t// Get new payment gateway.\n\t\t\tnew_payment_gateways = Give.form.fn.getGateway( $form );\n\n\t\t\t// Change form action.\n\t\t\t$form.attr( 'action', $form.attr( 'action' ).replace(\n\t\t\t\t'payment-mode=' + old_payment_gateway,\n\t\t\t\t'payment-mode=' + new_payment_gateways )\n\t\t\t);\n\t\t}\n\t);\n\n\t/**\n\t * Custom Donation Amount Focus In\n\t *\n\t * @description: If user focuses on field & changes value then updates price\n\t */\n\tdoc.on( 'focus', '.give-donation-amount .give-text-input', function( e ) {\n\n\t\tvar parent_form = $( this ).parents( 'form' );\n\n\t\t// Remove any invalid class\n\t\t$( this ).removeClass( 'invalid-amount' );\n\n\t\t// Set data amount\n\t\tvar current_total = parent_form.find( '.give-final-total-amount' ).attr( 'data-total' );\n\t\tvar decimal_separator = Give.form.fn.getInfo( 'decimal_separator', parent_form );\n\t\t$( this ).attr( 'data-amount', Give.fn.unFormatCurrency( current_total, decimal_separator ) );\n\n\t\t//This class is used for CSS purposes\n\t\t$( this ).parent( '.give-donation-amount' ).addClass( 'give-custom-amount-focus-in' );\n\n\t\t//Set Multi-Level to Custom Amount Field\n\t\tparent_form.find( '.give-default-level, .give-radio-input' ).removeClass( 'give-default-level' );\n\t\tparent_form.find( '.give-btn-level-custom' ).addClass( 'give-default-level' );\n\t\tparent_form.find( '.give-radio-input' ).prop( 'checked', false ); // Radio\n\t\tparent_form.find( '.give-radio-input.give-radio-level-custom' ).prop( 'checked', true ); // Radio\n\t\tparent_form.find( '.give-select-level' ).prop( 'selected', false ); // Select\n\t\tparent_form.find( '.give-select-level .give-donation-level-custom' ).prop( 'selected', true ); // Select\n\n\t} );\n\n\t/**\n\t * Custom Donation Focus Out\n\t *\n\t * Fires on focus end aka \"blur\"\n\t */\n\tdoc.on( 'blur', '.give-donation-amount .give-text-input', function( e, $parent_form, donation_amount, price_id ) {\n\n\t\tlet parent_form = ('undefined' !== typeof $parent_form) ? $parent_form : $( this ).closest( 'form' ),\n\t\t\tpre_focus_amount = $( this ).attr( 'data-amount' ),\n\t\t\tthis_value = ('undefined' !== typeof donation_amount) ? donation_amount : $( this ).val(),\n\t\t\tdecimal_separator = Give.form.fn.getInfo( 'decimal_separator', parent_form ),\n\t\t\tvalue_min = Give.form.fn.getMinimumAmount( parent_form ),\n\t\t\tvalue_max = Give.form.fn.getMaximumAmount( parent_form ),\n\t\t\tvalue_now = (this_value === 0) ? value_min : Give.fn.unFormatCurrency( this_value, decimal_separator ),\n\t\t\tformatted_total = Give.form.fn.formatAmount( value_now, parent_form, {} );\n\n\t\tprice_id = 'undefined' === typeof price_id ? Give.form.fn.getPriceID( parent_form, true ) : price_id;\n\n\t\t// https://github.com/WordImpress/Give/issues/3299\n\t\t// If we change from custom amount to donation level then\n\t\t// this event fire twice. First on amount field blur and second time on level button/radio/select click which cause of minimum donation notice.\n\t\t// This condition will prevent minimum donation amount notice show by set default level.\n\t\tif( '' === value_now || 0 === value_now ) {\n\t\t\tlet $default_level = $( '.give-donation-levels-wrap [data-default=\"1\"]', $parent_form );\n\n\t\t\tif( $default_level.length ) {\n\t\t\t\tprice_id = $default_level.data('price-id');\n\t\t\t\tthis_value = value_now = Give.fn.unFormatCurrency( $default_level.val(), decimal_separator );\n\t\t\t\tformatted_total = Give.form.fn.formatAmount( value_now, parent_form, {} );\n\t\t\t}\n\t\t}\n\n\t\t// Cache donor selected price id for a amount.\n\t\tGive.fn.setCache( 'amount_' + value_now, price_id, parent_form );\n\t\t$( this ).val( formatted_total );\n\n\t\t// Does this number have an accepted min/max value?\n\t\tif ( ! Give.form.fn.isValidDonationAmount( parent_form ) ) {\n\n\t\t\t// It doesn't... add invalid class.\n\t\t\t$( this ).addClass( 'give-invalid-amount' );\n\n\t\t\t// Disable submit\n\t\t\tGive.form.fn.disable( parent_form, true );\n\t\t\tlet invalid_minimum_notice = parent_form.find( '.give-invalid-minimum' ),\n\t\t\t\tinvalid_maximum_notice = parent_form.find( '.give-invalid-maximum' );\n\n\t\t\t// If no error present, create it, insert, slide down (show).\n\t\t\tif ( 0 === invalid_minimum_notice.length && value_now < value_min ) {\n\t\t\t\tGive.notice.fn.renderNotice( 'bad_minimum', parent_form );\n\t\t\t} else if( value_now >= value_min ) {\n\t\t\t\tinvalid_minimum_notice.slideUp( 300, function() { $( this ).remove(); } );\n\t\t\t}\n\n\t\t\t// For maximum custom amount error.\n\t\t\tif ( 0 === invalid_maximum_notice.length && value_now > value_max ) {\n\t\t\t\tGive.notice.fn.renderNotice( 'bad_maximum', parent_form );\n\t\t\t} else if (value_now <= value_max ){\n\t\t\t\tinvalid_maximum_notice.slideUp( 300, function() { $( this ).remove(); } );\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Remove error message class from price field.\n\t\t\t$( this ).removeClass( 'give-invalid-amount' );\n\n\t\t\t// Minimum amount met - slide up error & remove it from DOM.\n\t\t\tparent_form.find( '.give-invalid-minimum, .give-invalid-maximum' ).slideUp( 300, function() {\n\t\t\t\t$( this ).remove();\n\t\t\t} );\n\n\t\t\t// Re-enable submit.\n\t\t\tGive.form.fn.disable( parent_form, false );\n\t\t}\n\n\t\t// If values don't match up then proceed with updating donation total value\n\t\tif ( pre_focus_amount !== value_now ) {\n\n\t\t\t// Update donation total (include currency symbol)\n\t\t\tparent_form.find( '.give-final-total-amount' )\n\t\t\t\t.attr( 'data-total', value_now )\n\t\t\t\t.text( Give.fn.formatCurrency(\n\t\t\t\t\tvalue_now,\n\t\t\t\t\t{\n\t\t\t\t\t\tsymbol: Give.form.fn.getInfo( 'currency_symbol', parent_form ),\n\t\t\t\t\t\tposition: Give.form.fn.getInfo( 'currency_position', parent_form )\n\t\t\t\t\t},\n\t\t\t\t\tparent_form )\n\t\t\t\t);\n\n\t\t}\n\n\t\t// Set price id for current amount.\n\t\tif ( - 1 !== price_id ) {\n\n\t\t\t// Auto set give price id.\n\t\t\t$( 'input[name=\"give-price-id\"]', parent_form ).val( price_id );\n\n\t\t\t// Update hidden amount field\n\t\t\tparent_form.find( '.give-amount-hidden' ).val( Give.form.fn.formatAmount( value_now, parent_form, {} ) );\n\n\t\t\t// Remove old selected class & add class for CSS purposes\n\t\t\tparent_form.find( '.give-default-level' ).removeClass( 'give-default-level' );\n\n\t\t\t// Auto select variable price items ( Radio/Button/Select ).\n\t\t\tGive.form.fn.autoSelectDonationLevel( parent_form, price_id );\n\t\t}\n\n\t\t// This class is used for CSS purposes\n\t\t$( this ).parent( '.give-donation-amount' )\n\t\t\t.removeClass( 'give-custom-amount-focus-in' );\n\n\t\t// trigger an event for hooks\n\t\tjQuery( document ).trigger( 'give_donation_value_updated', [ parent_form, value_now, price_id ] );\n\n\t} );\n\n\t// Multi-level Buttons: Update Amount Field based on Multi-level Donation Select\n\tdoc.on( 'click touchend', '.give-donation-level-btn', function( e ) {\n\t\te.preventDefault(); //don't let the form submit\n\t\tGive.form.fn.autoSetMultiLevel( $( this ) );\n\t} );\n\n\t// Multi-level Radios: Update Amount Field based on Multi-level Donation Select\n\tdoc.on( 'click touchend', '.give-radio-input-level', function( e ) {\n\t\tGive.form.fn.autoSetMultiLevel( $( this ) );\n\t} );\n\n\t// Multi-level Checkboxes: Update Amount Field based on Multi-level Donation Select\n\tdoc.on( 'change', '.give-select-level', function( e ) {\n\t\tGive.form.fn.autoSetMultiLevel( $( this ) );\n\t} );\n\n\t/**\n\t * Show/Hide terms and conditions.\n\t */\n\tdoc.on( 'click', '.give_terms_links', function( e ) {\n\t\te.preventDefault();\n\t\tvar $fieldset_wrapper = $( this ).closest( 'fieldset' );\n\t\t$( '[class^=give_terms-]', $fieldset_wrapper ).slideToggle();\n\t\t$( 'a.give_terms_links', $fieldset_wrapper ).toggle();\n\t\treturn false;\n\t} );\n\n\t/**\n\t * Prevent level jump which happens due to same id.\n\t * @see https://github.com/WordImpress/Give/issues/2292\n\t */\n\t$( 'label[for^=\"give-radio-level\"]' ).on( 'click', function( e ) {\n\t\tvar $form = $( this ).closest( 'form' ),\n\t\t\t$inputField = $form.find( '#' + $( this ).attr( 'for' ) );\n\n\t\tif ( $inputField.length ) {\n\t\t\t$inputField.trigger( 'click' );\n\t\t\te.preventDefault();\n\t\t}\n\t} );\n} );\n\njQuery( window ).load( function() {\n\n\t/**\n\t * Validate cc fields on change\n\t */\n\tjQuery( 'body' ).on( 'keyup change focusout', '.give-form .card-number, .give-form .card-cvc, .give-form .card-expiry', function( e ) {\n\t\tvar el = jQuery( this ),\n\t\t\tgive_form = el.parents( 'form.give-form' ),\n\t\t\tid = el.attr( 'id' ),\n\t\t\tcard_number = give_form.find( '.card-number' ),\n\t\t\tcard_cvc = give_form.find( '.card-cvc' ),\n\t\t\tcard_expiry = give_form.find( '.card-expiry' ),\n\t\t\ttype = jQuery.payment.cardType( card_number.val() ),\n\t\t\terror = false;\n\n\t\tswitch ( e.type ) {\n\t\t\tcase 'focusout':\n\t\t\t\tif ( id.indexOf( 'card_number' ) > - 1 ) {\n\t\t\t\t\t// Set card number error.\n\t\t\t\t\terror = ! jQuery.payment.validateCardNumber( card_number.val() );\n\t\t\t\t\tcard_number.toggleError( error );\n\n\t\t\t\t} else if ( id.indexOf( 'card_cvc' ) > - 1 ) {\n\t\t\t\t\t// Set card cvc error.\n\t\t\t\t\terror = ! jQuery.payment.validateCardCVC( card_cvc.val(), type );\n\t\t\t\t\tcard_cvc.toggleError( error );\n\n\t\t\t\t} else if ( id.indexOf( 'card_expiry' ) > - 1 ) {\n\t\t\t\t\t// Set card expiry error.\n\t\t\t\t\terror = ! jQuery.payment.validateCardExpiry( card_expiry.payment( 'cardExpiryVal' ) );\n\t\t\t\t\tcard_expiry.toggleError( error );\n\t\t\t\t}\n\n\t\t\t\t// Disable submit button\n\t\t\t\tGive.form.fn.disable( el.parents( 'form' ), error );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Remove error class.\n\t\t\t\tif ( el.hasClass( 'error' ) ) {\n\t\t\t\t\tel.removeClass( 'error' );\n\t\t\t\t}\n\n\t\t\t\tif ( id.indexOf( 'card_number' ) > - 1 ) {\n\t\t\t\t\t// Add card related classes.\n\t\t\t\t\tvar card_type = give_form.find( '.card-type' );\n\n\t\t\t\t\tif ( type === null ) {\n\t\t\t\t\t\tcard_type.removeClass().addClass( 'off card-type' );\n\t\t\t\t\t\tel.removeClass( 'valid' ).addClass( 'error' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcard_type.removeClass().addClass( 'card-type ' + type );\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( id.indexOf( 'card_expiry' ) > - 1 ) {\n\t\t\t\t\t// set expiry date params.\n\t\t\t\t\tvar expiry = card_expiry.payment( 'cardExpiryVal' );\n\n\t\t\t\t\tgive_form.find( '.card-expiry-month' ).val( expiry.month );\n\t\t\t\t\tgive_form.find( '.card-expiry-year' ).val( expiry.year );\n\t\t\t\t}\n\t\t}\n\t} );\n} );\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give-donations.js","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 27\n// module chunks = 0 1 2 3","// Plugins\nimport 'jquery.payment';\nimport 'accounting';\nimport 'uiblocker';\nimport 'magnific-popup';\n\n// Give plugins.\nimport '../plugins/give-hint.css';\n\n// Give core.\nimport './give-ajax';\nimport './give-donations';\nimport './give-misc';\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give.js","// Generated by CoffeeScript 1.7.1\n(function() {\n var $, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, reFormatCVC, reFormatCardNumber, reFormatExpiry, reFormatNumeric, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, safeVal, setCardType,\n __slice = [].slice,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n $ = window.jQuery || window.Zepto || window.$;\n\n $.payment = {};\n\n $.payment.fn = {};\n\n $.fn.payment = function() {\n var args, method;\n method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n return $.payment.fn[method].apply(this, args);\n };\n\n defaultFormat = /(\\d{1,4})/g;\n\n $.payment.cards = cards = [\n {\n type: 'maestro',\n patterns: [5018, 502, 503, 506, 56, 58, 639, 6220, 67],\n format: defaultFormat,\n length: [12, 13, 14, 15, 16, 17, 18, 19],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'forbrugsforeningen',\n patterns: [600],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'dankort',\n patterns: [5019],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'visa',\n patterns: [4],\n format: defaultFormat,\n length: [13, 16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'mastercard',\n patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'amex',\n patterns: [34, 37],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,\n length: [15],\n cvcLength: [3, 4],\n luhn: true\n }, {\n type: 'dinersclub',\n patterns: [30, 36, 38, 39],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,\n length: [14],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'discover',\n patterns: [60, 64, 65, 622],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'unionpay',\n patterns: [62, 88],\n format: defaultFormat,\n length: [16, 17, 18, 19],\n cvcLength: [3],\n luhn: false\n }, {\n type: 'jcb',\n patterns: [35],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }\n ];\n\n cardFromNumber = function(num) {\n var card, p, pattern, _i, _j, _len, _len1, _ref;\n num = (num + '').replace(/\\D/g, '');\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n _ref = card.patterns;\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n pattern = _ref[_j];\n p = pattern + '';\n if (num.substr(0, p.length) === p) {\n return card;\n }\n }\n }\n };\n\n cardFromType = function(type) {\n var card, _i, _len;\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n if (card.type === type) {\n return card;\n }\n }\n };\n\n luhnCheck = function(num) {\n var digit, digits, odd, sum, _i, _len;\n odd = true;\n sum = 0;\n digits = (num + '').split('').reverse();\n for (_i = 0, _len = digits.length; _i < _len; _i++) {\n digit = digits[_i];\n digit = parseInt(digit, 10);\n if ((odd = !odd)) {\n digit *= 2;\n }\n if (digit > 9) {\n digit -= 9;\n }\n sum += digit;\n }\n return sum % 10 === 0;\n };\n\n hasTextSelected = function($target) {\n var _ref;\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== $target.prop('selectionEnd')) {\n return true;\n }\n if ((typeof document !== \"undefined\" && document !== null ? (_ref = document.selection) != null ? _ref.createRange : void 0 : void 0) != null) {\n if (document.selection.createRange().text) {\n return true;\n }\n }\n return false;\n };\n\n safeVal = function(value, $target) {\n var currPair, cursor, digit, error, last, prevPair;\n try {\n cursor = $target.prop('selectionStart');\n } catch (_error) {\n error = _error;\n cursor = null;\n }\n last = $target.val();\n $target.val(value);\n if (cursor !== null && $target.is(\":focus\")) {\n if (cursor === last.length) {\n cursor = value.length;\n }\n if (last !== value) {\n prevPair = last.slice(cursor - 1, +cursor + 1 || 9e9);\n currPair = value.slice(cursor - 1, +cursor + 1 || 9e9);\n digit = value[cursor];\n if (/\\d/.test(digit) && prevPair === (\"\" + digit + \" \") && currPair === (\" \" + digit)) {\n cursor = cursor + 1;\n }\n }\n $target.prop('selectionStart', cursor);\n return $target.prop('selectionEnd', cursor);\n }\n };\n\n replaceFullWidthChars = function(str) {\n var chars, chr, fullWidth, halfWidth, idx, value, _i, _len;\n if (str == null) {\n str = '';\n }\n fullWidth = '\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19';\n halfWidth = '0123456789';\n value = '';\n chars = str.split('');\n for (_i = 0, _len = chars.length; _i < _len; _i++) {\n chr = chars[_i];\n idx = fullWidth.indexOf(chr);\n if (idx > -1) {\n chr = halfWidth[idx];\n }\n value += chr;\n }\n return value;\n };\n\n reFormatNumeric = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = value.replace(/\\D/g, '');\n return safeVal(value, $target);\n });\n };\n\n reFormatCardNumber = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = $.payment.formatCardNumber(value);\n return safeVal(value, $target);\n });\n };\n\n formatCardNumber = function(e) {\n var $target, card, digit, length, re, upperLength, value;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n value = $target.val();\n card = cardFromNumber(value + digit);\n length = (value.replace(/\\D/g, '') + digit).length;\n upperLength = 16;\n if (card) {\n upperLength = card.length[card.length.length - 1];\n }\n if (length >= upperLength) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (card && card.type === 'amex') {\n re = /^(\\d{4}|\\d{4}\\s\\d{6})$/;\n } else {\n re = /(?:^|\\s)(\\d{4})$/;\n }\n if (re.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value + ' ' + digit);\n });\n } else if (re.test(value + digit)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value + digit + ' ');\n });\n }\n };\n\n formatBackCardNumber = function(e) {\n var $target, value;\n $target = $(e.currentTarget);\n value = $target.val();\n if (e.which !== 8) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (/\\d\\s$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d\\s$/, ''));\n });\n } else if (/\\s\\d?$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d$/, ''));\n });\n }\n };\n\n reFormatExpiry = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = $.payment.formatExpiry(value);\n return safeVal(value, $target);\n });\n };\n\n formatExpiry = function(e) {\n var $target, digit, val;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val() + digit;\n if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(\"0\" + val + \" / \");\n });\n } else if (/^\\d\\d$/.test(val)) {\n e.preventDefault();\n return setTimeout(function() {\n var m1, m2;\n m1 = parseInt(val[0], 10);\n m2 = parseInt(val[1], 10);\n if (m2 > 2 && m1 !== 0) {\n return $target.val(\"0\" + m1 + \" / \" + m2);\n } else {\n return $target.val(\"\" + val + \" / \");\n }\n });\n }\n };\n\n formatForwardExpiry = function(e) {\n var $target, digit, val;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val();\n if (/^\\d\\d$/.test(val)) {\n return $target.val(\"\" + val + \" / \");\n }\n };\n\n formatForwardSlashAndSpace = function(e) {\n var $target, val, which;\n which = String.fromCharCode(e.which);\n if (!(which === '/' || which === ' ')) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val();\n if (/^\\d$/.test(val) && val !== '0') {\n return $target.val(\"0\" + val + \" / \");\n }\n };\n\n formatBackExpiry = function(e) {\n var $target, value;\n $target = $(e.currentTarget);\n value = $target.val();\n if (e.which !== 8) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (/\\d\\s\\/\\s$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d\\s\\/\\s$/, ''));\n });\n }\n };\n\n reFormatCVC = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = value.replace(/\\D/g, '').slice(0, 4);\n return safeVal(value, $target);\n });\n };\n\n restrictNumeric = function(e) {\n var input;\n if (e.metaKey || e.ctrlKey) {\n return true;\n }\n if (e.which === 32) {\n return false;\n }\n if (e.which === 0) {\n return true;\n }\n if (e.which < 33) {\n return true;\n }\n input = String.fromCharCode(e.which);\n return !!/[\\d\\s]/.test(input);\n };\n\n restrictCardNumber = function(e) {\n var $target, card, digit, value;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n value = ($target.val() + digit).replace(/\\D/g, '');\n card = cardFromNumber(value);\n if (card) {\n return value.length <= card.length[card.length.length - 1];\n } else {\n return value.length <= 16;\n }\n };\n\n restrictExpiry = function(e) {\n var $target, digit, value;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n value = $target.val() + digit;\n value = value.replace(/\\D/g, '');\n if (value.length > 6) {\n return false;\n }\n };\n\n restrictCVC = function(e) {\n var $target, digit, val;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n val = $target.val() + digit;\n return val.length <= 4;\n };\n\n setCardType = function(e) {\n var $target, allTypes, card, cardType, val;\n $target = $(e.currentTarget);\n val = $target.val();\n cardType = $.payment.cardType(val) || 'unknown';\n if (!$target.hasClass(cardType)) {\n allTypes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n _results.push(card.type);\n }\n return _results;\n })();\n $target.removeClass('unknown');\n $target.removeClass(allTypes.join(' '));\n $target.addClass(cardType);\n $target.toggleClass('identified', cardType !== 'unknown');\n return $target.trigger('payment.cardType', cardType);\n }\n };\n\n $.payment.fn.formatCardCVC = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictCVC);\n this.on('paste', reFormatCVC);\n this.on('change', reFormatCVC);\n this.on('input', reFormatCVC);\n return this;\n };\n\n $.payment.fn.formatCardExpiry = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictExpiry);\n this.on('keypress', formatExpiry);\n this.on('keypress', formatForwardSlashAndSpace);\n this.on('keypress', formatForwardExpiry);\n this.on('keydown', formatBackExpiry);\n this.on('change', reFormatExpiry);\n this.on('input', reFormatExpiry);\n return this;\n };\n\n $.payment.fn.formatCardNumber = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictCardNumber);\n this.on('keypress', formatCardNumber);\n this.on('keydown', formatBackCardNumber);\n this.on('keyup', setCardType);\n this.on('paste', reFormatCardNumber);\n this.on('change', reFormatCardNumber);\n this.on('input', reFormatCardNumber);\n this.on('input', setCardType);\n return this;\n };\n\n $.payment.fn.restrictNumeric = function() {\n this.on('keypress', restrictNumeric);\n this.on('paste', reFormatNumeric);\n this.on('change', reFormatNumeric);\n this.on('input', reFormatNumeric);\n return this;\n };\n\n $.payment.fn.cardExpiryVal = function() {\n return $.payment.cardExpiryVal($(this).val());\n };\n\n $.payment.cardExpiryVal = function(value) {\n var month, prefix, year, _ref;\n _ref = value.split(/[\\s\\/]+/, 2), month = _ref[0], year = _ref[1];\n if ((year != null ? year.length : void 0) === 2 && /^\\d+$/.test(year)) {\n prefix = (new Date).getFullYear();\n prefix = prefix.toString().slice(0, 2);\n year = prefix + year;\n }\n month = parseInt(month, 10);\n year = parseInt(year, 10);\n return {\n month: month,\n year: year\n };\n };\n\n $.payment.validateCardNumber = function(num) {\n var card, _ref;\n num = (num + '').replace(/\\s+|-/g, '');\n if (!/^\\d+$/.test(num)) {\n return false;\n }\n card = cardFromNumber(num);\n if (!card) {\n return false;\n }\n return (_ref = num.length, __indexOf.call(card.length, _ref) >= 0) && (card.luhn === false || luhnCheck(num));\n };\n\n $.payment.validateCardExpiry = function(month, year) {\n var currentTime, expiry, _ref;\n if (typeof month === 'object' && 'month' in month) {\n _ref = month, month = _ref.month, year = _ref.year;\n }\n if (!(month && year)) {\n return false;\n }\n month = $.trim(month);\n year = $.trim(year);\n if (!/^\\d+$/.test(month)) {\n return false;\n }\n if (!/^\\d+$/.test(year)) {\n return false;\n }\n if (!((1 <= month && month <= 12))) {\n return false;\n }\n if (year.length === 2) {\n if (year < 70) {\n year = \"20\" + year;\n } else {\n year = \"19\" + year;\n }\n }\n if (year.length !== 4) {\n return false;\n }\n expiry = new Date(year, month);\n currentTime = new Date;\n expiry.setMonth(expiry.getMonth() - 1);\n expiry.setMonth(expiry.getMonth() + 1, 1);\n return expiry > currentTime;\n };\n\n $.payment.validateCardCVC = function(cvc, type) {\n var card, _ref;\n cvc = $.trim(cvc);\n if (!/^\\d+$/.test(cvc)) {\n return false;\n }\n card = cardFromType(type);\n if (card != null) {\n return _ref = cvc.length, __indexOf.call(card.cvcLength, _ref) >= 0;\n } else {\n return cvc.length >= 3 && cvc.length <= 4;\n }\n };\n\n $.payment.cardType = function(num) {\n var _ref;\n if (!num) {\n return null;\n }\n return ((_ref = cardFromNumber(num)) != null ? _ref.type : void 0) || null;\n };\n\n $.payment.formatCardNumber = function(num) {\n var card, groups, upperLength, _ref;\n num = num.replace(/\\D/g, '');\n card = cardFromNumber(num);\n if (!card) {\n return num;\n }\n upperLength = card.length[card.length.length - 1];\n num = num.slice(0, upperLength);\n if (card.format.global) {\n return (_ref = num.match(card.format)) != null ? _ref.join(' ') : void 0;\n } else {\n groups = card.format.exec(num);\n if (groups == null) {\n return;\n }\n groups.shift();\n groups = $.grep(groups, function(n) {\n return n;\n });\n return groups.join(' ');\n }\n };\n\n $.payment.formatExpiry = function(expiry) {\n var mon, parts, sep, year;\n parts = expiry.match(/^\\D*(\\d{1,2})(\\D+)?(\\d{1,4})?/);\n if (!parts) {\n return '';\n }\n mon = parts[1] || '';\n sep = parts[2] || '';\n year = parts[3] || '';\n if (year.length > 0) {\n sep = ' / ';\n } else if (sep === ' /') {\n mon = mon.substring(0, 1);\n sep = '';\n } else if (mon.length === 2 || sep.length > 0) {\n sep = ' / ';\n } else if (mon.length === 1 && (mon !== '0' && mon !== '1')) {\n mon = \"0\" + mon;\n sep = ' / ';\n }\n return mon + sep + year;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/jquery.payment/lib/jquery.payment.js\n// module id = 365\n// module chunks = 3","var $ = require('jquery');\nrequire('blockui');\nvar _ = require('underscore');\n\nvar UIBlocker = {};\nUIBlocker.transitionDelay = 250;\n\nUIBlocker.blockWith = function(fn) {\n\tvar deferred = $.Deferred();\n\tvar context = this;\n\tvar args = _(arguments).rest();\n\tvar event = _(args).first();\n\tif (event && event.preventDefault) {\n\t\tevent.preventDefault();\n\t}\n\t$.blockUI({ message: null });\n\n\tsetTimeout(function() {\n\t\tvar result = fn.apply(context, args);\n\t\tif (_(result).isObject() && _(result.always).isFunction()) {\n\t\t\tresult.always(function() {\n\t\t\t\t$.unblockUI();\n\t\t\t}).then(deferred.resolve, deferred.reject);\n\t\t} else {\n\t\t\t$.unblockUI();\n\t\t}\n\t}, UIBlocker.transitionDelay);\n\treturn deferred.promise();\n};\n\nUIBlocker.makeBlocked = function(fn) {\n\treturn _.wrap(fn, UIBlocker.blockWith);\n};\n\nmodule.exports = UIBlocker;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/uiblocker/uiblocker.js\n// module id = 366\n// module chunks = 3","/*!\n * jQuery blockUI plugin\n * Version 2.70.0-2014.11.23\n * Requires jQuery v1.7 or later\n *\n * Examples at: http://malsup.com/jquery/block/\n * Copyright (c) 2007-2013 M. Alsup\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n * Thanks to Amir-Hossein Sobhi for some excellent contributions!\n */\n\n;(function() {\n/*jshint eqeqeq:false curly:false latedef:false */\n\"use strict\";\n\n\tfunction setup($) {\n\t\t$.fn._fadeIn = $.fn.fadeIn;\n\n\t\tvar noOp = $.noop || function() {};\n\n\t\t// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle\n\t\t// confusing userAgent strings on Vista)\n\t\tvar msie = /MSIE/.test(navigator.userAgent);\n\t\tvar ie6 = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);\n\t\tvar mode = document.documentMode || 0;\n\t\tvar setExpr = $.isFunction( document.createElement('div').style.setExpression );\n\n\t\t// global $ methods for blocking/unblocking the entire page\n\t\t$.blockUI = function(opts) { install(window, opts); };\n\t\t$.unblockUI = function(opts) { remove(window, opts); };\n\n\t\t// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)\n\t\t$.growlUI = function(title, message, timeout, onClose) {\n\t\t\tvar $m = $('
');\n\t\t\tif (title) $m.append('

'+title+'

');\n\t\t\tif (message) $m.append('

'+message+'

');\n\t\t\tif (timeout === undefined) timeout = 3000;\n\n\t\t\t// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications\n\t\t\tvar callBlock = function(opts) {\n\t\t\t\topts = opts || {};\n\n\t\t\t\t$.blockUI({\n\t\t\t\t\tmessage: $m,\n\t\t\t\t\tfadeIn : typeof opts.fadeIn !== 'undefined' ? opts.fadeIn : 700,\n\t\t\t\t\tfadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,\n\t\t\t\t\ttimeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,\n\t\t\t\t\tcenterY: false,\n\t\t\t\t\tshowOverlay: false,\n\t\t\t\t\tonUnblock: onClose,\n\t\t\t\t\tcss: $.blockUI.defaults.growlCSS\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tcallBlock();\n\t\t\tvar nonmousedOpacity = $m.css('opacity');\n\t\t\t$m.mouseover(function() {\n\t\t\t\tcallBlock({\n\t\t\t\t\tfadeIn: 0,\n\t\t\t\t\ttimeout: 30000\n\t\t\t\t});\n\n\t\t\t\tvar displayBlock = $('.blockMsg');\n\t\t\t\tdisplayBlock.stop(); // cancel fadeout if it has started\n\t\t\t\tdisplayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency\n\t\t\t}).mouseout(function() {\n\t\t\t\t$('.blockMsg').fadeOut(1000);\n\t\t\t});\n\t\t\t// End konapun additions\n\t\t};\n\n\t\t// plugin method for blocking element content\n\t\t$.fn.block = function(opts) {\n\t\t\tif ( this[0] === window ) {\n\t\t\t\t$.blockUI( opts );\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tvar fullOpts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tthis.each(function() {\n\t\t\t\tvar $el = $(this);\n\t\t\t\tif (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))\n\t\t\t\t\treturn;\n\t\t\t\t$el.unblock({ fadeOut: 0 });\n\t\t\t});\n\n\t\t\treturn this.each(function() {\n\t\t\t\tif ($.css(this,'position') == 'static') {\n\t\t\t\t\tthis.style.position = 'relative';\n\t\t\t\t\t$(this).data('blockUI.static', true);\n\t\t\t\t}\n\t\t\t\tthis.style.zoom = 1; // force 'hasLayout' in ie\n\t\t\t\tinstall(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t// plugin method for unblocking element content\n\t\t$.fn.unblock = function(opts) {\n\t\t\tif ( this[0] === window ) {\n\t\t\t\t$.unblockUI( opts );\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\treturn this.each(function() {\n\t\t\t\tremove(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!\n\n\t\t// override these in your code to change the default behavior and style\n\t\t$.blockUI.defaults = {\n\t\t\t// message displayed when blocking (use null for no message)\n\t\t\tmessage: '

Please wait...

',\n\n\t\t\ttitle: null,\t\t// title string; only used when theme == true\n\t\t\tdraggable: true,\t// only used when theme == true (requires jquery-ui.js to be loaded)\n\n\t\t\ttheme: false, // set to true to use with jQuery UI themes\n\n\t\t\t// styles for the message when blocking; if you wish to disable\n\t\t\t// these and use an external stylesheet then do this in your code:\n\t\t\t// $.blockUI.defaults.css = {};\n\t\t\tcss: {\n\t\t\t\tpadding:\t0,\n\t\t\t\tmargin:\t\t0,\n\t\t\t\twidth:\t\t'30%',\n\t\t\t\ttop:\t\t'40%',\n\t\t\t\tleft:\t\t'35%',\n\t\t\t\ttextAlign:\t'center',\n\t\t\t\tcolor:\t\t'#000',\n\t\t\t\tborder:\t\t'3px solid #aaa',\n\t\t\t\tbackgroundColor:'#fff',\n\t\t\t\tcursor:\t\t'wait'\n\t\t\t},\n\n\t\t\t// minimal style set used when themes are used\n\t\t\tthemedCSS: {\n\t\t\t\twidth:\t'30%',\n\t\t\t\ttop:\t'40%',\n\t\t\t\tleft:\t'35%'\n\t\t\t},\n\n\t\t\t// styles for the overlay\n\t\t\toverlayCSS: {\n\t\t\t\tbackgroundColor:\t'#000',\n\t\t\t\topacity:\t\t\t0.6,\n\t\t\t\tcursor:\t\t\t\t'wait'\n\t\t\t},\n\n\t\t\t// style to replace wait cursor before unblocking to correct issue\n\t\t\t// of lingering wait cursor\n\t\t\tcursorReset: 'default',\n\n\t\t\t// styles applied when using $.growlUI\n\t\t\tgrowlCSS: {\n\t\t\t\twidth:\t\t'350px',\n\t\t\t\ttop:\t\t'10px',\n\t\t\t\tleft:\t\t'',\n\t\t\t\tright:\t\t'10px',\n\t\t\t\tborder:\t\t'none',\n\t\t\t\tpadding:\t'5px',\n\t\t\t\topacity:\t0.6,\n\t\t\t\tcursor:\t\t'default',\n\t\t\t\tcolor:\t\t'#fff',\n\t\t\t\tbackgroundColor: '#000',\n\t\t\t\t'-webkit-border-radius':'10px',\n\t\t\t\t'-moz-border-radius':\t'10px',\n\t\t\t\t'border-radius':\t\t'10px'\n\t\t\t},\n\n\t\t\t// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w\n\t\t\t// (hat tip to Jorge H. N. de Vasconcelos)\n\t\t\t/*jshint scripturl:true */\n\t\t\tiframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',\n\n\t\t\t// force usage of iframe in non-IE browsers (handy for blocking applets)\n\t\t\tforceIframe: false,\n\n\t\t\t// z-index for the blocking overlay\n\t\t\tbaseZ: 1000,\n\n\t\t\t// set these to true to have the message automatically centered\n\t\t\tcenterX: true, // <-- only effects element blocking (page block controlled via css above)\n\t\t\tcenterY: true,\n\n\t\t\t// allow body element to be stetched in ie6; this makes blocking look better\n\t\t\t// on \"short\" pages. disable if you wish to prevent changes to the body height\n\t\t\tallowBodyStretch: true,\n\n\t\t\t// enable if you want key and mouse events to be disabled for content that is blocked\n\t\t\tbindEvents: true,\n\n\t\t\t// be default blockUI will supress tab navigation from leaving blocking content\n\t\t\t// (if bindEvents is true)\n\t\t\tconstrainTabKey: true,\n\n\t\t\t// fadeIn time in millis; set to 0 to disable fadeIn on block\n\t\t\tfadeIn: 200,\n\n\t\t\t// fadeOut time in millis; set to 0 to disable fadeOut on unblock\n\t\t\tfadeOut: 400,\n\n\t\t\t// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock\n\t\t\ttimeout: 0,\n\n\t\t\t// disable if you don't want to show the overlay\n\t\t\tshowOverlay: true,\n\n\t\t\t// if true, focus will be placed in the first available input field when\n\t\t\t// page blocking\n\t\t\tfocusInput: true,\n\n // elements that can receive focus\n focusableElements: ':input:enabled:visible',\n\n\t\t\t// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)\n\t\t\t// no longer needed in 2012\n\t\t\t// applyPlatformOpacityRules: true,\n\n\t\t\t// callback method invoked when fadeIn has completed and blocking message is visible\n\t\t\tonBlock: null,\n\n\t\t\t// callback method invoked when unblocking has completed; the callback is\n\t\t\t// passed the element that has been unblocked (which is the window object for page\n\t\t\t// blocks) and the options that were passed to the unblock call:\n\t\t\t//\tonUnblock(element, options)\n\t\t\tonUnblock: null,\n\n\t\t\t// callback method invoked when the overlay area is clicked.\n\t\t\t// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.\n\t\t\tonOverlayClick: null,\n\n\t\t\t// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493\n\t\t\tquirksmodeOffsetHack: 4,\n\n\t\t\t// class name of the message block\n\t\t\tblockMsgClass: 'blockMsg',\n\n\t\t\t// if it is already blocked, then ignore it (don't unblock and reblock)\n\t\t\tignoreIfBlocked: false\n\t\t};\n\n\t\t// private data and functions follow...\n\n\t\tvar pageBlock = null;\n\t\tvar pageBlockEls = [];\n\n\t\tfunction install(el, opts) {\n\t\t\tvar css, themedCSS;\n\t\t\tvar full = (el == window);\n\t\t\tvar msg = (opts && opts.message !== undefined ? opts.message : undefined);\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\n\t\t\tif (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))\n\t\t\t\treturn;\n\n\t\t\topts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});\n\t\t\tcss = $.extend({}, $.blockUI.defaults.css, opts.css || {});\n\t\t\tif (opts.onOverlayClick)\n\t\t\t\topts.overlayCSS.cursor = 'pointer';\n\n\t\t\tthemedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});\n\t\t\tmsg = msg === undefined ? opts.message : msg;\n\n\t\t\t// remove the current block (if there is one)\n\t\t\tif (full && pageBlock)\n\t\t\t\tremove(window, {fadeOut:0});\n\n\t\t\t// if an existing element is being used as the blocking content then we capture\n\t\t\t// its current place in the DOM (and current display style) so we can restore\n\t\t\t// it when we unblock\n\t\t\tif (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {\n\t\t\t\tvar node = msg.jquery ? msg[0] : msg;\n\t\t\t\tvar data = {};\n\t\t\t\t$(el).data('blockUI.history', data);\n\t\t\t\tdata.el = node;\n\t\t\t\tdata.parent = node.parentNode;\n\t\t\t\tdata.display = node.style.display;\n\t\t\t\tdata.position = node.style.position;\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.removeChild(node);\n\t\t\t}\n\n\t\t\t$(el).data('blockUI.onUnblock', opts.onUnblock);\n\t\t\tvar z = opts.baseZ;\n\n\t\t\t// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;\n\t\t\t// layer1 is the iframe layer which is used to supress bleed through of underlying content\n\t\t\t// layer2 is the overlay layer which has opacity and a wait cursor (by default)\n\t\t\t// layer3 is the message content that is displayed while blocking\n\t\t\tvar lyr1, lyr2, lyr3, s;\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1 = $('');\n\t\t\telse\n\t\t\t\tlyr1 = $('
');\n\n\t\t\tif (opts.theme)\n\t\t\t\tlyr2 = $('
');\n\t\t\telse\n\t\t\t\tlyr2 = $('
');\n\n\t\t\tif (opts.theme && full) {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\telse if (opts.theme) {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\telse if (full) {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\telse {\n\t\t\t\ts = '';\n\t\t\t}\n\t\t\tlyr3 = $(s);\n\n\t\t\t// if we have a message, style it\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme) {\n\t\t\t\t\tlyr3.css(themedCSS);\n\t\t\t\t\tlyr3.addClass('ui-widget-content');\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tlyr3.css(css);\n\t\t\t}\n\n\t\t\t// style the overlay\n\t\t\tif (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\n\t\t\t\tlyr2.css(opts.overlayCSS);\n\t\t\tlyr2.css('position', full ? 'fixed' : 'absolute');\n\n\t\t\t// make iframe layer transparent in IE\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1.css('opacity',0.0);\n\n\t\t\t//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\n\t\t\tvar layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);\n\t\t\t$.each(layers, function() {\n\t\t\t\tthis.appendTo($par);\n\t\t\t});\n\n\t\t\tif (opts.theme && opts.draggable && $.fn.draggable) {\n\t\t\t\tlyr3.draggable({\n\t\t\t\t\thandle: '.ui-dialog-titlebar',\n\t\t\t\t\tcancel: 'li'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\n\t\t\tvar expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\n\t\t\tif (ie6 || expr) {\n\t\t\t\t// give body 100% height\n\t\t\t\tif (full && opts.allowBodyStretch && $.support.boxModel)\n\t\t\t\t\t$('html,body').css('height','100%');\n\n\t\t\t\t// fix ie6 issue when blocked element has a border width\n\t\t\t\tif ((ie6 || !$.support.boxModel) && !full) {\n\t\t\t\t\tvar t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');\n\t\t\t\t\tvar fixT = t ? '(0 - '+t+')' : 0;\n\t\t\t\t\tvar fixL = l ? '(0 - '+l+')' : 0;\n\t\t\t\t}\n\n\t\t\t\t// simulate fixed position\n\t\t\t\t$.each(layers, function(i,o) {\n\t\t\t\t\tvar s = o[0].style;\n\t\t\t\t\ts.position = 'absolute';\n\t\t\t\t\tif (i < 2) {\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('height','this.parentNode.offsetHeight + \"px\"');\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('width','this.parentNode.offsetWidth + \"px\"');\n\t\t\t\t\t\tif (fixL) s.setExpression('left', fixL);\n\t\t\t\t\t\tif (fixT) s.setExpression('top', fixT);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opts.centerY) {\n\t\t\t\t\t\tif (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\n\t\t\t\t\t\ts.marginTop = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!opts.centerY && full) {\n\t\t\t\t\t\tvar top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\n\t\t\t\t\t\tvar expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + \"px\"';\n\t\t\t\t\t\ts.setExpression('top',expression);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// show the message\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme)\n\t\t\t\t\tlyr3.find('.ui-widget-content').append(msg);\n\t\t\t\telse\n\t\t\t\t\tlyr3.append(msg);\n\t\t\t\tif (msg.jquery || msg.nodeType)\n\t\t\t\t\t$(msg).show();\n\t\t\t}\n\n\t\t\tif ((msie || opts.forceIframe) && opts.showOverlay)\n\t\t\t\tlyr1.show(); // opacity is zero\n\t\t\tif (opts.fadeIn) {\n\t\t\t\tvar cb = opts.onBlock ? opts.onBlock : noOp;\n\t\t\t\tvar cb1 = (opts.showOverlay && !msg) ? cb : noOp;\n\t\t\t\tvar cb2 = msg ? cb : noOp;\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2._fadeIn(opts.fadeIn, cb1);\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3._fadeIn(opts.fadeIn, cb2);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2.show();\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3.show();\n\t\t\t\tif (opts.onBlock)\n\t\t\t\t\topts.onBlock.bind(lyr3)();\n\t\t\t}\n\n\t\t\t// bind key and mouse events\n\t\t\tbind(1, el, opts);\n\n\t\t\tif (full) {\n\t\t\t\tpageBlock = lyr3[0];\n\t\t\t\tpageBlockEls = $(opts.focusableElements,pageBlock);\n\t\t\t\tif (opts.focusInput)\n\t\t\t\t\tsetTimeout(focus, 20);\n\t\t\t}\n\t\t\telse\n\t\t\t\tcenter(lyr3[0], opts.centerX, opts.centerY);\n\n\t\t\tif (opts.timeout) {\n\t\t\t\t// auto-unblock\n\t\t\t\tvar to = setTimeout(function() {\n\t\t\t\t\tif (full)\n\t\t\t\t\t\t$.unblockUI(opts);\n\t\t\t\t\telse\n\t\t\t\t\t\t$(el).unblock(opts);\n\t\t\t\t}, opts.timeout);\n\t\t\t\t$(el).data('blockUI.timeout', to);\n\t\t\t}\n\t\t}\n\n\t\t// remove the block\n\t\tfunction remove(el, opts) {\n\t\t\tvar count;\n\t\t\tvar full = (el == window);\n\t\t\tvar $el = $(el);\n\t\t\tvar data = $el.data('blockUI.history');\n\t\t\tvar to = $el.data('blockUI.timeout');\n\t\t\tif (to) {\n\t\t\t\tclearTimeout(to);\n\t\t\t\t$el.removeData('blockUI.timeout');\n\t\t\t}\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tbind(0, el, opts); // unbind events\n\n\t\t\tif (opts.onUnblock === null) {\n\t\t\t\topts.onUnblock = $el.data('blockUI.onUnblock');\n\t\t\t\t$el.removeData('blockUI.onUnblock');\n\t\t\t}\n\n\t\t\tvar els;\n\t\t\tif (full) // crazy selector to handle odd field errors in ie6/7\n\t\t\t\tels = $('body').children().filter('.blockUI').add('body > .blockUI');\n\t\t\telse\n\t\t\t\tels = $el.find('>.blockUI');\n\n\t\t\t// fix cursor issue\n\t\t\tif ( opts.cursorReset ) {\n\t\t\t\tif ( els.length > 1 )\n\t\t\t\t\tels[1].style.cursor = opts.cursorReset;\n\t\t\t\tif ( els.length > 2 )\n\t\t\t\t\tels[2].style.cursor = opts.cursorReset;\n\t\t\t}\n\n\t\t\tif (full)\n\t\t\t\tpageBlock = pageBlockEls = null;\n\n\t\t\tif (opts.fadeOut) {\n\t\t\t\tcount = els.length;\n\t\t\t\tels.stop().fadeOut(opts.fadeOut, function() {\n\t\t\t\t\tif ( --count === 0)\n\t\t\t\t\t\treset(els,data,opts,el);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t\treset(els, data, opts, el);\n\t\t}\n\n\t\t// move blocking element back into the DOM where it started\n\t\tfunction reset(els,data,opts,el) {\n\t\t\tvar $el = $(el);\n\t\t\tif ( $el.data('blockUI.isBlocked') )\n\t\t\t\treturn;\n\n\t\t\tels.each(function(i,o) {\n\t\t\t\t// remove via DOM calls so we don't lose event handlers\n\t\t\t\tif (this.parentNode)\n\t\t\t\t\tthis.parentNode.removeChild(this);\n\t\t\t});\n\n\t\t\tif (data && data.el) {\n\t\t\t\tdata.el.style.display = data.display;\n\t\t\t\tdata.el.style.position = data.position;\n\t\t\t\tdata.el.style.cursor = 'default'; // #59\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.appendChild(data.el);\n\t\t\t\t$el.removeData('blockUI.history');\n\t\t\t}\n\n\t\t\tif ($el.data('blockUI.static')) {\n\t\t\t\t$el.css('position', 'static'); // #22\n\t\t\t}\n\n\t\t\tif (typeof opts.onUnblock == 'function')\n\t\t\t\topts.onUnblock(el,opts);\n\n\t\t\t// fix issue in Safari 6 where block artifacts remain until reflow\n\t\t\tvar body = $(document.body), w = body.width(), cssW = body[0].style.width;\n\t\t\tbody.width(w-1).width(w);\n\t\t\tbody[0].style.width = cssW;\n\t\t}\n\n\t\t// bind/unbind the handler\n\t\tfunction bind(b, el, opts) {\n\t\t\tvar full = el == window, $el = $(el);\n\n\t\t\t// don't bother unbinding if there is nothing to unbind\n\t\t\tif (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\n\t\t\t\treturn;\n\n\t\t\t$el.data('blockUI.isBlocked', b);\n\n\t\t\t// don't bind events when overlay is not in use or if bindEvents is false\n\t\t\tif (!full || !opts.bindEvents || (b && !opts.showOverlay))\n\t\t\t\treturn;\n\n\t\t\t// bind anchors and inputs for mouse and key events\n\t\t\tvar events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';\n\t\t\tif (b)\n\t\t\t\t$(document).bind(events, opts, handler);\n\t\t\telse\n\t\t\t\t$(document).unbind(events, handler);\n\n\t\t// former impl...\n\t\t//\t\tvar $e = $('a,:input');\n\t\t//\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\n\t\t}\n\n\t\t// event handler to suppress keyboard/mouse events when blocking\n\t\tfunction handler(e) {\n\t\t\t// allow tab navigation (conditionally)\n\t\t\tif (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {\n\t\t\t\tif (pageBlock && e.data.constrainTabKey) {\n\t\t\t\t\tvar els = pageBlockEls;\n\t\t\t\t\tvar fwd = !e.shiftKey && e.target === els[els.length-1];\n\t\t\t\t\tvar back = e.shiftKey && e.target === els[0];\n\t\t\t\t\tif (fwd || back) {\n\t\t\t\t\t\tsetTimeout(function(){focus(back);},10);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar opts = e.data;\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.hasClass('blockOverlay') && opts.onOverlayClick)\n\t\t\t\topts.onOverlayClick(e);\n\n\t\t\t// allow events within the message content\n\t\t\tif (target.parents('div.' + opts.blockMsgClass).length > 0)\n\t\t\t\treturn true;\n\n\t\t\t// allow events for content that is not being blocked\n\t\t\treturn target.parents().children().filter('div.blockUI').length === 0;\n\t\t}\n\n\t\tfunction focus(back) {\n\t\t\tif (!pageBlockEls)\n\t\t\t\treturn;\n\t\t\tvar e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];\n\t\t\tif (e)\n\t\t\t\te.focus();\n\t\t}\n\n\t\tfunction center(el, x, y) {\n\t\t\tvar p = el.parentNode, s = el.style;\n\t\t\tvar l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');\n\t\t\tvar t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');\n\t\t\tif (x) s.left = l > 0 ? (l+'px') : '0';\n\t\t\tif (y) s.top = t > 0 ? (t+'px') : '0';\n\t\t}\n\n\t\tfunction sz(el, p) {\n\t\t\treturn parseInt($.css(el,p),10)||0;\n\t\t}\n\n\t}\n\n\n\t/*global define:true */\n\tif (typeof define === 'function' && define.amd && define.amd.jQuery) {\n\t\tdefine(['jquery'], setup);\n\t} else {\n\t\tsetup(jQuery);\n\t}\n\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/uiblocker/lib/jquery.blockUI.js\n// module id = 367\n// module chunks = 3","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/underscore/underscore.js\n// module id = 368\n// module chunks = 3","/*!\n * Give AJAX JS\n *\n * @description: The Give AJAX scripts\n * @package: Give\n * @subpackage: Assets/JS\n * @copyright: Copyright (c) 2016, WordImpress\n * @license: http://opensource.org/licenses/gpl-2.0.php GNU Public License\n */\n\nimport Give from './give-donations';\n\n/* global jQuery, Give */\n\njQuery( document ).ready( function( $ ) {\n\n\t//Hide loading elements\n\t$( '.give-loading-text' ).hide();\n\n\t// Update and invalidate cached nonce.\n\t$('.give-form').each(function (index, $form) {\n\t\t$form = jQuery($form);\n\n\t\tconst $nonceField = jQuery('input[name=\"give-form-hash\"]', $form),\n\t\t\tnonceTime = ( parseInt($nonceField.data('time')) + parseInt($nonceField.data('nonce-life') ) ) * 1000,\n\t\t\tcurrentTime = Date.now();\n\n\t\t// We need time in ms.\n\t\tlet timeDiff = nonceTime - currentTime;\n\n\t\ttimeDiff = 0 > timeDiff ? timeDiff : (timeDiff + 100);\n\t\t\n\t\t// Update nonce in background.\n\t\twindow.setTimeout(function () {\n\t\t\tGive.form.fn.resetNonce($form);\n\t\t}, timeDiff);\n\t});\n\n\t// Show the login form in the checkout when the user clicks the \"Login\" link\n\t$( document ).on( 'click', '.give-checkout-login', function( e ) {\n\t\tvar $this = $( this );\n\t\tvar this_form = $( this ).parents( 'form' );\n\t\tvar loading_animation = $( this_form ).find( '[id^=\"give-checkout-login-register\"] .give-loading-text' );\n\t\tvar data = {\n\t\t\taction: $this.data( 'action' ),\n\t\t\tform_id: $( this_form ).find( '[name=\"give-form-id\"]' ).val()\n\t\t};\n\n\t\t// Show the ajax loader\n\t\tloading_animation.show();\n\n\t\t$.post( give_global_vars.ajaxurl, data, function( checkout_response ) {\n\n\t\t\t//Clear form HTML and add AJAX response containing fields\n\t\t\t$( this_form ).find( '[id^=give-checkout-login-register]' ).html( checkout_response );\n\t\t\t$( this_form ).find( '.give-submit-button-wrap' ).hide();\n\n\t\t} ).done( function() {\n\t\t\t// Hide the ajax loader\n\t\t\tloading_animation.hide();\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t} );\n\t\treturn false;\n\t} );\n\n\t// Register/Login Cancel\n\t$( document ).on( 'click', '.give-checkout-register-cancel', function( e ) {\n\t\te.preventDefault();\n\t\t// User cancelled login.\n\t\tvar $this = $( this );\n\t\tvar this_form = $( this ).parents( 'form' );\n\t\tvar data = {\n\t\t\taction: $this.data( 'action' ),\n\t\t\tform_id: $( this_form ).find( '[name=\"give-form-id\"]' ).val()\n\t\t};\n\t\t// AJAX get the payment fields.\n\t\t$.post( give_global_vars.ajaxurl, data, function( checkout_response ) {\n\t\t\t//Show fields\n\t\t\t$( this_form ).find( '[id^=give-checkout-login-register]' ).html( $.parseJSON( checkout_response.fields ) );\n\t\t\t$( this_form ).find( '.give-submit-button-wrap' ).show();\n\t\t} ).done( function() {\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t} );\n\t} );\n\n\t// Process the login form via ajax when the user clicks \"login\"\n\t$( document ).on( 'click', '[id^=give-login-fields] input[type=submit]', function( e ) {\n\n\t\te.preventDefault();\n\n\t\tvar complete_purchase_val = $( this ).val();\n\t\tvar this_form = $( this ).parents( 'form' );\n\n\t\t$( this ).val( give_global_vars.purchase_loading );\n\n\t\tthis_form.find( '[id^=give-login-fields] .give-loading-animation' ).fadeIn();\n\n\t\tvar data = {\n\t\t\taction: 'give_process_donation_login',\n\t\t\tgive_ajax: 1,\n\t\t\tgive_user_login: this_form.find( '[name=give_user_login]' ).val(),\n\t\t\tgive_user_pass: this_form.find( '[name=give_user_pass]' ).val(),\n\t\t\tgive_form_id: this_form.find( '[name=give-form-id]' ).val()\n\t\t};\n\n\t\t$.post( give_global_vars.ajaxurl, data, function( response ) {\n\t\t\t//user is logged in\n\t\t\tif ( $.trim( typeof (response.success) ) != undefined && response.success == true && typeof (response.data) != undefined ) {\n\n\t\t\t\t//remove errors\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\n\t\t\t\t// Login successfully message.\n\t\t\t\tthis_form.find( '#give-payment-mode-select' ).after( response.data );\n\t\t\t\tthis_form.find( '.give_notices.give_errors' ).delay( 5000 ).slideUp();\n\n\t\t\t\t// Create and update nonce.\n\t\t\t\tGive.form.fn.resetNonce( this_form );\n\n\t\t\t\t//reload the selected gateway so it contains their logged in information\n\t\t\t\tgive_load_gateway( this_form, this_form.find( '.give-gateway-option-selected input' ).val() );\n\t\t\t} else {\n\t\t\t\t//Login failed, show errors\n\t\t\t\tthis_form.find( '[id^=give-login-fields] input[type=submit]' ).val( complete_purchase_val );\n\t\t\t\tthis_form.find( '.give-loading-animation' ).fadeOut();\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\t\t\t\tthis_form.find( '[id^=give-user-login-submit]' ).before( response.data );\n\t\t\t}\n\t\t} );\n\n\t} );\n\n\t//Switch the gateway on gateway selection field change\n\t$( 'select#give-gateway, input.give-gateway' ).on( 'change', function( e ) {\n\t\te.preventDefault();\n\n\t\t//Which payment gateway to load?\n\t\tvar payment_mode = $( this ).val();\n\n\t\t//Problema? Bounce\n\t\tif ( payment_mode == '0' ) {\n\t\t\tconsole.log( 'There was a problem loading the selected gateway' );\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_load_gateway( $( this ).parents( 'form' ), payment_mode );\n\n\t\treturn false;\n\n\t} );\n\n\t/**\n\t * Donation history non login user want to see email list after making a donation\n\t *\n\t * @since 1.8.17\n\t */\n\t$( 'body' ).on( 'click', '#give-confirm-email-btn', function( e ) {\n\n\t\tvar $this = $( this );\n\t\tvar data = {\n\t\t\taction: 'give_confirm_email_for_donations_access',\n\t\t\temail: $this.data( 'email' ),\n\t\t\tnonce: give_global_vars.ajaxNonce\n\t\t};\n\n\t\t$this.text( give_global_vars.loading );\n\t\t$this.attr( 'disabled', 'disabled' );\n\n\t\t$.post( give_global_vars.ajaxurl, data, function( response ) {\n\t\t\tresponse = JSON.parse( response );\n\t\t\tif ( 'error' === response.status ) {\n\t\t\t\t$this.closest( '#give_user_history tfoot' ).hide();\n\t\t\t\t$this.closest( '.give_user_history_main' ).find( '.give_user_history_notice' ).html( response.message );\n\t\t\t} else if ( 'success' === response.status ) {\n\t\t\t\t$this.closest( '.give_user_history_main' ).find( '.give_user_history_notice' ).html( response.message );\n\t\t\t\t$this.hide();\n\t\t\t\t$this.closest( '.give-security-button-wrap' ).find( 'span' ).show();\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t} );\n\n\t/**\n\t * Donation Form AJAX Submission\n\t *\n\t * @description: Process the donation submit\n\t */\n\t$( 'body' ).on( 'click touchend', 'form.give-form input[name=\"give-purchase\"].give-submit', function( e ) {\n\n\t\t//this form object\n\t\tvar this_form = $( this ).parents( 'form.give-form' );\n\n\t\t//loading animation\n\t\tvar loading_animation = this_form.find( 'input[type=\"submit\"].give-submit + .give-loading-animation' );\n\t\tloading_animation.fadeIn();\n\n\t\t//this form selector\n\t\tvar give_purchase_form = this_form.get( 0 );\n\n\t\t//HTML5 required check validity\n\t\tif ( typeof give_purchase_form.checkValidity === 'function' && give_purchase_form.checkValidity() === false ) {\n\n\t\t\t//Don't leave any hanging loading animations\n\t\t\tloading_animation.fadeOut();\n\n\t\t\t//Check for Safari (doesn't support HTML5 required)\n\t\t\tif ( (navigator.userAgent.indexOf( 'Safari' ) != - 1 && navigator.userAgent.indexOf( 'Chrome' ) == - 1) === false ) {\n\t\t\t\t//Not safari: Support HTML5 \"required\" so skip the rest of this function\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t}\n\n\t\t//prevent form from submitting normally\n\t\te.preventDefault();\n\n\t\t//Submit btn text\n\t\tvar complete_purchase_val = $( this ).val();\n\n\t\t//Update submit button text\n\t\t$( this ).val( give_global_vars.purchase_loading );\n\n\t\t// Disable the form donation button.\n\t\tGive.form.fn.disable( this_form, true );\n\n\t\t//Submit form via AJAX\n\t\t$.post( give_global_vars.ajaxurl, this_form.serialize() + '&action=give_process_donation&give_ajax=true', function( data ) {\n\n\t\t\tif ( $.trim( data ) == 'success' ) {\n\t\t\t\t//Remove any errors\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\t\t\t\t//Submit form for normal processing\n\t\t\t\t$( give_purchase_form ).submit();\n\n\t\t\t\tthis_form.trigger( 'give_form_validation_passed' );\n\t\t\t} else {\n\t\t\t\t//There was an error / remove old errors and prepend new ones\n\t\t\t\tthis_form.find( 'input[type=\"submit\"].give-submit' ).val( complete_purchase_val );\n\t\t\t\tloading_animation.fadeOut();\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\t\t\t\tthis_form.find( '#give_purchase_submit input[type=\"submit\"].give-submit' ).before( data );\n\n\t\t\t\t// Enable the form donation button.\n\t\t\t\tGive.form.fn.disable( this_form, false );\n\t\t\t}\n\t\t} );\n\n\t} );\n\n} );\n\n/**\n * Load the Payment Gateways\n *\n * @description: AJAX load appropriate gateway fields\n * @param form_object Obj The specific form to load a gateway for\n * @param payment_mode\n */\nfunction give_load_gateway( form_object, payment_mode ) {\n\n\tvar loading_element = jQuery( form_object ).find( '#give-payment-mode-select .give-loading-text' );\n\tvar give_total = jQuery( form_object ).find( '#give-amount' ).val();\n\tvar give_form_id = jQuery( form_object ).find( 'input[name=\"give-form-id\"]' ).val();\n\tvar give_form_id_prefix = jQuery( form_object ).find( 'input[name=\"give-form-id-prefix\"]' ).val();\n\n\t// Show the ajax loader\n\tloading_element.fadeIn();\n\n\tvar form_data = jQuery( form_object ).data();\n\n\tif ( form_data[ 'blockUI.isBlocked' ] != 1 ) {\n\t\tjQuery( form_object ).find( '#give_purchase_form_wrap' ).block( {\n\t\t\tmessage: null,\n\t\t\toverlayCSS: {\n\t\t\t\tbackground: '#fff',\n\t\t\t\topacity: 0.6\n\t\t\t}\n\t\t} );\n\t}\n\n\t//Post via AJAX to Give\n\tjQuery.post( give_global_vars.ajaxurl + '?payment-mode=' + payment_mode, {\n\t\t\taction: 'give_load_gateway',\n\t\t\tgive_total: give_total,\n\t\t\tgive_form_id: give_form_id,\n\t\t\tgive_form_id_prefix: give_form_id_prefix,\n\t\t\tgive_payment_mode: payment_mode\n\t\t},\n\t\tfunction( response ) {\n\t\t\t//Success: let's output the gateway fields in the appropriate form space\n\t\t\tjQuery( form_object ).unblock();\n\t\t\tjQuery( form_object ).find( '#give_purchase_form_wrap' ).html( response );\n\t\t\tjQuery( '.give-no-js' ).hide();\n\t\t\tjQuery( form_object ).find( '#give-payment-mode-select .give-loading-text' ).fadeOut();\n\n\t\t\t// trigger an event on success for hooks\n\t\t\tjQuery( document ).trigger( 'give_gateway_loaded', [ response, jQuery( form_object ).attr( 'id' ) ] );\n\t\t}\n\t);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give-ajax.js","import FloatLabels from 'float-labels.js';\n\njQuery( function( $ ) {\n\n\tvar doc = $( document );\n\n\t// Trigger float-labels\n\tgive_fl_trigger();\n\n\t// Set custom validation message.\n\tgive_change_html5_form_field_validation_message();\n\n\t// Donation grid shortcode popup.\n\t$( '.js-give-grid-modal-launcher' ).magnificPopup( {\n\t\ttype: 'inline',\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tcloseBtnInside: true,\n\t\tmidClick: true,\n\t\tremovalDelay: 300,\n\t\tmainClass: 'modal-fade-slide',\n\t});\n\n\t// Disable button if it have give-disabled class init.\n\tdoc.on( 'click touchend', '.give-disabled', function ( e ) {\n\t\te.preventDefault();\n\t\treturn false;\n\t} );\n\n\tdoc.on( 'give_gateway_loaded', function( ev, response, form_id ) {\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t} );\n\n\tdoc.on( 'give_checkout_billing_address_updated', function( ev, response, form_id ) {\n\t\tif ( ! $( 'form#' + form_id ).hasClass( 'float-labels-enabled' ) ) return;\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t} );\n\n\t// Reveal Btn which displays the checkout content\n\tdoc.on( 'click', '.give-btn-reveal', function( e ) {\n\t\te.preventDefault();\n\t\tvar this_button = $( this );\n\t\tvar this_form = $( this ).parents( 'form' );\n\t\tvar payment_field_id = '#give-payment-mode-select',\n\t\t\t$payment_field = $( payment_field_id ),\n\t\t\tshow_field_ids = '';\n\t\tthis_button.hide();\n\n\t\t// Show payment field if active payment gateway count greater then one.\n\t\tif ( $( 'li', $payment_field ).length > 1 ) {\n\t\t\tshow_field_ids = payment_field_id + ', ';\n\t\t}\n\n\t\tthis_form.find( show_field_ids + '#give_purchase_form_wrap' ).slideDown();\n\t\treturn false;\n\t} );\n\n\t// Modal with Magnific\n\tdoc.on( 'click', '.give-btn-modal', function( e ) {\n\t\te.preventDefault();\n\t\tvar this_form_wrap = $( this ).parents( 'div.give-form-wrap' );\n\t\tvar this_form = this_form_wrap.find( 'form.give-form' );\n\t\tvar this_amount_field = this_form.find( '#give-amount' );\n\t\tvar this_amount = this_amount_field.val();\n\n\t\t//Check to ensure our amount is greater than 0\n\t\t//Does this number have a value\n\t\tif ( ! this_amount || this_amount <= 0 ) {\n\t\t\tthis_amount_field.focus();\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_open_form_modal( this_form_wrap, this_form );\n\n\t} );\n\n\t// Auto hide frontend notices.\n\tvar give_notices = jQuery( '.give_notice[data-dismiss-type=\"auto\"]' );\n\tif ( give_notices.length ) {\n\t\tgive_notices.each( function( index, $notice ) {\n\t\t\t$notice = $( $notice );\n\n\t\t\t// auto hide setting message in 5 seconds.\n\t\t\twindow.setTimeout(\n\t\t\t\tfunction() {\n\t\t\t\t\t$notice.slideUp();\n\t\t\t\t},\n\t\t\t\t$notice.data( 'dismiss-interval' )\n\t\t\t);\n\t\t} );\n\t}\n\n\t// Button to close notices on front-end.\n\t$('body').on( 'click', '.give-notice-close', function() {\n\t\t$(this).hide();\n\t\tconst notice_container = $(this).closest( '.give_notices' );\n\t\tnotice_container.slideUp();\n\t});\n\n\tdoc.on( 'change', '#give_profile_billing_address_wrap #give_address_country', update_profile_state_field );\n\n\t// Reset Form Fields on clicking back button of browser.\n\t// @see https://developer.mozilla.org/en-US/Firefox/Releases/1.5/Using_Firefox_1.5_caching\n\t// @see https://webkit.org/blog/427/webkit-page-cache-i-the-basics/\n\twindow.addEventListener( 'pageshow', function( event ) {\n\t\tvar historyTraversal = event.persisted || ( typeof 'undefined' !== window.performance && 2 === window.performance.navigation.type );\n\n\t\tif ( historyTraversal ) {\n\t\t\tlet form = $( 'body' ).find( 'form.give-form' )[0];\n\n\t\t\tif ( undefined !== form ) {\n\t\t\t\tform.reset();\n\t\t\t}\n\t\t}\n\t});\n});\n\n/**\n * Open form modal\n *\n * @param {object} $form_wrap\n * @param {object} $form\n */\nwindow.give_open_form_modal = function ( $form_wrap, $form ) {\n\t// Hide form children.\n\tvar children = '#give_purchase_form_wrap, #give-payment-mode-select, .mfp-close, .give-hidden';\n\n\t//Alls well, open popup!\n\tjQuery.magnificPopup.open( {\n\t\tmainClass: give_global_vars.magnific_options.main_class,\n\t\tcloseOnBgClick: give_global_vars.magnific_options.close_on_bg_click,\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tremovalDelay: 250, //delay removal by X to allow out-animation\n\t\titems: {\n\t\t\tsrc: $form,\n\t\t\ttype: 'inline'\n\t\t},\n\t\tcallbacks: {\n\t\t\tbeforeOpen: function() {\n\n\t\t\t\tjQuery( 'body' ).addClass( 'give-modal-open' );\n\n\t\t\t\t// add title, content, goal and error to form if admin want to show button only\n\t\t\t\tif ( $form_wrap.hasClass( 'give-display-button-only' ) && ! $form.data( 'content' ) ) {\n\n\t\t\t\t\tvar $form_content = jQuery( '.give-form-content-wrap', $form_wrap ),\n\t\t\t\t\t\t$form_title = jQuery( '.give-form-title', $form_wrap ),\n\t\t\t\t\t\t$form_goal = jQuery( '.give-goal-progress', $form_wrap ),\n\t\t\t\t\t\t$form_error = jQuery( '>.give_error', $form_wrap ),\n\t\t\t\t\t\t$form_errors = jQuery( '.give_errors', $form_wrap );\n\n\t\t\t\t\t// Add content container to form.\n\t\t\t\t\tif ( $form_content.length && ! jQuery( '.give-form-content-wrap', $form ).length ) {\n\t\t\t\t\t\tif ( $form_content.hasClass( 'give_post_form-content' ) ) {\n\t\t\t\t\t\t\t$form.append( $form_content );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.prepend( $form_content );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add errors container to form.\n\t\t\t\t\tif ( $form_errors.length && ! jQuery( '.give_errors', $form ).length ) {\n\t\t\t\t\t\t$form_errors.each( function( index, $error ) {\n\t\t\t\t\t\t\t$form.prepend( jQuery( $error ) );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add error container to form.\n\t\t\t\t\tif ( $form_error.length && ! jQuery( '>.give_error', $form ).length ) {\n\t\t\t\t\t\t$form_error.each( function( index, $error ) {\n\t\t\t\t\t\t\t$form.prepend( jQuery( $error ) );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add goal container to form.\n\t\t\t\t\tif ( $form_goal.length && ! jQuery( '.give-goal-progress', $form ).length ) {\n\t\t\t\t\t\t$form.prepend( $form_goal );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add title container to form.\n\t\t\t\t\tif ( $form_title.length && ! jQuery( '.give-form-title', $form ).length ) {\n\t\t\t\t\t\t$form.prepend( $form_title );\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.data( 'content', 'loaded' );\n\t\t\t\t}\n\t\t\t},\n\t\t\topen: function() {\n\n\t\t\t\t// Will fire when this exact popup is opened\n\t\t\t\t// this - is Magnific Popup object\n\t\t\t\tvar $mfp_content = jQuery( '.mfp-content' );\n\t\t\t\tif ( $mfp_content.outerWidth() >= 500 ) {\n\t\t\t\t\t$mfp_content.addClass( 'give-responsive-mfp-content' );\n\t\t\t\t}\n\n\t\t\t\t// Hide .give-hidden and .give-btn-modal if admin only want to show only button.\n\t\t\t\tif ( $form_wrap.hasClass( 'give-display-button-only' ) ) {\n\t\t\t\t\tchildren = $form.children().not( '.give-btn-modal' );\n\t\t\t\t}\n\n\t\t\t\t//Hide all form elements besides the ones required for payment\n\t\t\t\t$form.children().not( children ).hide();\n\t\t\t},\n\t\t\tclose: function() {\n\t\t\t\t//Remove popup class\n\t\t\t\t$form.removeClass( 'mfp-hide' );\n\n\t\t\t\tjQuery( 'body' ).removeClass( 'give-modal-open' );\n\n\t\t\t\t//Show all fields again\n\t\t\t\t$form.children().not( children ).show();\n\t\t\t}\n\t\t}\n\t} );\n};\n\n/**\n * Floating Labels Custom Events\n */\nwindow.give_fl_trigger = function() {\n\twindow.give_float_labels = 'undefined' === typeof window.give_float_labels ? {} : window.give_float_labels;\n\n\tif ( window.give_float_labels instanceof FloatLabels ) {\n\t\twindow.give_float_labels.rebuild();\n\t}\n\telse {\n\t\twindow.give_float_labels = new FloatLabels( '.float-labels-enabled', {\n\t\t\texclude: '#give-amount, .give-select-level, [multiple]',\n\t\t\tprioritize: 'placeholder',\n\t\t\tprefix: 'give-fl-',\n\t\t\tstyle: 'give',\n\t\t} );\n\t}\n};\n\n/**\n * Change localize html5 form validation message\n */\nwindow.give_change_html5_form_field_validation_message = function() {\n\tvar $forms = jQuery( '.give-form' ),\n\t\t$input_fields;\n\n\t// Bailout if no any donation from exist.\n\tif ( ! $forms.length ) {\n\t\treturn;\n\t}\n\n\tjQuery.each( $forms, function( index, $form ) {\n\t\t// Get form input fields.\n\t\t$input_fields = jQuery( 'input', $form );\n\n\t\t// Bailout.\n\t\tif ( ! $input_fields.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tjQuery.each( $input_fields, function( index, item ) {\n\t\t\titem = jQuery( item ).get( 0 );\n\n\t\t\t// Set custom message only if translation exit in give global object.\n\t\t\tif ( give_global_vars.form_translation.hasOwnProperty( item.name ) ) {\n\t\t\t\titem.oninvalid = function( e ) {\n\t\t\t\t\te.target.setCustomValidity( '' );\n\t\t\t\t\tif ( ! e.target.validity.valid ) {\n\t\t\t\t\t\te.target.setCustomValidity( give_global_vars.form_translation[ item.name ] );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\t} );\n};\n\n/**\n * Update state/province fields per country selection\n *\n * @since 1.8.14\n */\nwindow.update_profile_state_field = function() {\n\tvar $this = jQuery( this ),\n\t\t$form = $this.parents( 'form' );\n\tif ( 'give_address_country' === $this.attr( 'id' ) ) {\n\n\t\t//Disable the State field until updated\n\t\t$form.find( '#give_address_state' ).empty().append( '' ).prop( 'disabled', true );\n\n\t\t// If the country field has changed, we need to update the state/province field\n\t\tvar postData = {\n\t\t\taction: 'give_get_states',\n\t\t\tcountry: $this.val(),\n\t\t\tfield_name: 'give_address_state'\n\t\t};\n\n\t\tjQuery.ajax( {\n\t\t\ttype: 'POST',\n\t\t\tdata: postData,\n\t\t\turl: give_global_vars.ajaxurl,\n\t\t\txhrFields: {\n\t\t\t\twithCredentials: true\n\t\t\t},\n\t\t\tsuccess: function( response ) {\n\t\t\t\tvar html = '';\n\t\t\t\tvar states_label = response.states_label;\n\t\t\t\tif ( typeof (response.states_found) != undefined && true == response.states_found ) {\n\t\t\t\t\thtml = response.data;\n\t\t\t\t} else {\n\t\t\t\t\thtml = '';\n\t\t\t\t}\n\t\t\t\t$form.find( 'input[name=\"give_address_state\"], select[name=\"give_address_state\"]' ).replaceWith( html );\n\n\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\tif ( typeof (response.show_field) != undefined && true == response.show_field ) {\n\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).removeClass( 'give-hidden' );\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-last' );\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-wide' );\n\t\t\t\t} else {\n\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).addClass( 'give-hidden' );\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-wide' );\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-last' );\n\t\t\t\t}\n\t\t\t}\n\t\t} ).fail( function( data ) {\n\t\t\tif ( window.console && window.console.log ) {\n\t\t\t\tconsole.log( data );\n\t\t\t}\n\t\t} );\n\t}\n\treturn false;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give-misc.js","/*!\n * Float Labels\n * @version: 3.3.4\n * @author: Paul Ryley (http://geminilabs.io)\n * @url: https://geminilabs.github.io/float-labels.js\n * @license: MIT\n */\n\n/** global: define, navigator, NodeList, Option */\n\n;(function( window, document, undefined )\n{\n\t\"use strict\";\n\n\tvar Plugin = function( el, options )\n\t{\n\t\tthis.el = this.isString( el ) ? document.querySelectorAll( el ) : [el];\n\t\tthis.config = [];\n\t\tthis.options = options;\n\t\tthis.selectors = [];\n\t\tthis.init();\n\t\tthis.destroy = function() {\n\t\t\tthis.loop( function( el ) {\n\t\t\t\tel.removeEventListener( 'reset', this.events.reset );\n\t\t\t\tthis.removeClasses( el );\n\t\t\t}, function( field ) {\n\t\t\t\tthis.reset( field );\n\t\t\t});\n\t\t};\n\t\tthis.rebuild = function() {\n\t\t\tthis.loop( null, function( field ) {\n\t\t\t\tthis.floatLabel( field, true );\n\t\t\t});\n\t\t};\n\t};\n\n\tPlugin.prototype = {\n\n\t\tdefaults: {\n\t\t\tcustomEvent: null,\n\t\t\tcustomLabel: null,\n\t\t\tcustomPlaceholder: null,\n\t\t\texclude: '.no-label',\n\t\t\tinputRegex: /email|number|password|search|tel|text|url/,\n\t\t\tprefix: 'fl-',\n\t\t\tprioritize: 'label', // label|placeholder\n\t\t\trequiredClass: 'required',\n\t\t\tstyle: 0, // 0|1|2\n\t\t\ttransform: 'input,select,textarea'\n\t\t},\n\n\t\t/** @return void */\n\t\tinit: function() {\n\t\t\tthis.initEvents();\n\t\t\tthis.loop( function( el, i ) {\n\t\t\t\tvar style = this.config[i].style;\n\t\t\t\tel.addEventListener( 'reset', this.events.reset );\n\t\t\t\tel.classList.add( this.prefixed( 'form' ));\n\t\t\t\tif( style ) {\n\t\t\t\t\tel.classList.add( this.prefixed( 'style-' + style ));\n\t\t\t\t}\n\t\t\t}, function( field ) {\n\t\t\t\tthis.floatLabel( field );\n\t\t\t});\n\t\t},\n\n\t\t/** @return void */\n\t\tinitEvents: function() {\n\t\t\tthis.events = {\n\t\t\t\tblur: this.onBlur.bind( this ),\n\t\t\t\tchange: this.onInput.bind( this ),\n\t\t\t\tfocus: this.onFocus.bind( this ),\n\t\t\t\tinput: this.onInput.bind( this ),\n\t\t\t\treset: this.onReset.bind( this ),\n\t\t\t};\n\t\t},\n\n\t\t/** @return string */\n\t\taddRemove: function( bool ) {\n\t\t\treturn bool ? 'add' : 'remove';\n\t\t},\n\n\t\t/** @return null|void */\n\t\tbuild: function( el ) {\n\t\t\tvar labelEl = this.getLabel( el );\n\t\t\tif( !labelEl )return;\n\t\t\tel.classList.add( this.prefixed( el.tagName.toLowerCase() ));\n\t\t\tthis.setLabel( labelEl, el );\n\t\t\tthis.setPlaceholder( labelEl, el );\n\t\t\tthis.wrapLabel( labelEl, el );\n\t\t\tthis.handleEvents( el, 'add' );\n\t\t\tif( typeof this.config[this.current].customEvent === 'function' ) {\n\t\t\t\tthis.config[this.current].customEvent.call( this, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return Element */\n\t\tcreateEl: function( tag, attributes ) {\n\t\t\tvar el = ( typeof tag === 'string' ) ? document.createElement( tag ) : tag;\n\t\t\tattributes = attributes || {};\n\t\t\tfor( var key in attributes ) {\n\t\t\t\tif( !attributes.hasOwnProperty( key ))continue;\n\t\t\t\tel.setAttribute( key, attributes[key] );\n\t\t\t}\n\t\t\treturn el;\n\t\t},\n\n\t\t/** @return object */\n\t\textend: function() {\n\t\t\tvar args = [].slice.call( arguments );\n\t\t\tvar result = args[0];\n\t\t\tvar extenders = args.slice(1);\n\t\t\tObject.keys( extenders ).forEach( function( i ) {\n\t\t\t\tfor( var key in extenders[i] ) {\n\t\t\t\t\tif( !extenders[i].hasOwnProperty( key ))continue;\n\t\t\t\t\tresult[key] = extenders[i][key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\n\t\t/** @return null|void */\n\t\tfloatLabel: function( el, rebuild ) {\n\t\t\tif( !this.isValidField( el ))return;\n\t\t\tif( this.hasParent( el )) {\n\t\t\t\tif( rebuild !== true )return;\n\t\t\t\tthis.reset( el );\n\t\t\t}\n\t\t\tthis.build( el );\n\t\t},\n\n\t\t/** @return string|false */\n\t\tgetLabel: function( el ) {\n\t\t\tvar label = 'label[for=\"' + el.getAttribute( 'id' ) + '\"]';\n\t\t\tvar labelEl = this.el[this.current].querySelectorAll( label );\n\t\t\t// check for multiple labels with identical 'for' attributes\n\t\t\tif( labelEl.length > 1 ) {\n\t\t\t\tlabelEl = el.parentNode.querySelectorAll( label );\n\t\t\t}\n\t\t\tif( labelEl.length === 1 ) {\n\t\t\t\treturn labelEl[0];\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/** @return string */\n\t\tgetLabelText: function( labelEl, el ) {\n\t\t\tvar labelText = labelEl.textContent.replace( /[*:]/g, '' ).trim();\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( !labelText || ( labelText && placeholderText && this.config[this.current].prioritize === 'placeholder' )) {\n\t\t\t\tlabelText = placeholderText;\n\t\t\t}\n\t\t\treturn labelText;\n\t\t},\n\n\t\t/** @return void */\n\t\thandleEvents: function( el, action ) {\n\t\t\tvar events = this.events;\n\t\t\tvar isMicrosoftSelectEl = el.nodeName === 'SELECT' && this.isMSBrowser();\n\t\t\t['blur','input','focus'].forEach( function( event ) {\n\t\t\t\tif( event === 'input' && ( el.type === 'file' || isMicrosoftSelectEl )) {\n\t\t\t\t\tevent = 'change';\n\t\t\t\t}\n\t\t\t\tel[ action + 'EventListener']( event, events[event] );\n\t\t\t});\n\t\t},\n\n\t\t/** @return bool */\n\t\thasParent: function( el ) {\n\t\t\treturn el.parentNode.classList.contains( this.prefixed( 'wrap' ));\n\t\t},\n\n\t\t/** @return bool */\n\t\tisMSBrowser: function() {\n\t\t\treturn !!navigator.userAgent.match(/Edge|MSIE|Trident/g);\n\t\t},\n\n\t\t/** @return bool */\n\t\tisString: function( str ) {\n\t\t\treturn Object.prototype.toString.call( str ) === \"[object String]\";\n\t\t},\n\n\t\t/** @return bool */\n\t\tisValidField: function( el ) {\n\t\t\tvar isInvalidInput = el.tagName === 'INPUT' && !this.config[this.current].inputRegex.test( el.getAttribute( 'type' ));\n\t\t\tvar isInvalidSelect = el.tagName === 'SELECT' && el.getAttribute( 'multiple' ) !== null;\n\t\t\treturn el.getAttribute( 'id' ) && !isInvalidInput && !isInvalidSelect;\n\t\t},\n\n\t\t/** @return void */\n\t\tloop: function( elCallback, fieldCallback ) {\n\t\t\tfor( var i = 0; i < this.el.length; ++i ) {\n\t\t\t\tif( typeof this.selectors[i] === 'undefined' ) {\n\t\t\t\t\tvar config = this.extend( {}, this.defaults, this.options, this.el[i].getAttribute( 'data-options' ));\n\t\t\t\t\tvar exclude = ':not(' + config.exclude.split( /[\\s,]+/ ).join( '):not(' ) + ')';\n\t\t\t\t\tthis.selectors[i] = config.transform.replace( /,/g, exclude + ',' ) + exclude;\n\t\t\t\t\tthis.config[i] = config;\n\t\t\t\t}\n\t\t\t\tvar fields = this.el[i].querySelectorAll( this.selectors[i] );\n\t\t\t\tthis.current = i;\n\t\t\t\tif( typeof elCallback === 'function' ) {\n\t\t\t\t\telCallback.call( this, this.el[i], i );\n\t\t\t\t}\n\t\t\t\tfor( var x = 0; x < fields.length; ++x ) {\n\t\t\t\t\tif( typeof fieldCallback === 'function' ) {\n\t\t\t\t\t\tfieldCallback.call( this, fields[x], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tonBlur: function( ev ) {\n\t\t\tev.target.parentNode.classList.remove( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonInput: function( ev ) {\n\t\t\tev.target.parentNode.classList[\n\t\t\t\tthis.addRemove( ev.target.value.length )\n\t\t\t]( this.prefixed( 'is-active' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonFocus: function( ev ) {\n\t\t\tev.target.parentNode.classList.add( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonReset: function() {\n\t\t\tsetTimeout( this.resetFields.bind( this ));\n\t\t},\n\n\t\t/** @return string */\n\t\tprefixed: function( value ) {\n\t\t\treturn this.config[this.current].prefix + value;\n\t\t},\n\n\t\t/** @return void */\n\t\tremoveClasses: function( el ) {\n\t\t\tvar prefix = this.config[this.current].prefix;\n\t\t\tvar classes = el.className.split( ' ' ).filter( function( c ) {\n\t\t\t\treturn c.lastIndexOf( prefix, 0 ) !== 0;\n\t\t\t});\n\t\t\tel.className = classes.join( ' ' ).trim();\n\t\t},\n\n\t\t/** @return null|void */\n\t\treset: function( el ) {\n\t\t\tvar parent = el.parentNode;\n\t\t\tif( !this.hasParent( el ))return;\n\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\twhile( parent.firstElementChild ) {\n\t\t\t\tvar childEl = parent.firstElementChild;\n\t\t\t\tthis.removeClasses( childEl );\n\t\t\t\tfragment.appendChild( childEl );\n\t\t\t}\n\t\t\tparent.parentNode.replaceChild( fragment, parent );\n\t\t\tthis.resetPlaceholder( el );\n\t\t\tthis.handleEvents( el, 'remove' );\n\t\t},\n\n\t\t/** @return void */\n\t\tresetFields: function() {\n\t\t\tvar fields = this.el[this.current].querySelectorAll( this.selectors[this.current] );\n\t\t\tfor( var i = 0; i < fields.length; ++i ) {\n\t\t\t\tfields[i].parentNode.classList[\n\t\t\t\t\tthis.addRemove( fields[i].tagName === 'SELECT' && fields[i].value !== '' )\n\t\t\t\t]( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tresetPlaceholder: function( el ) {\n\t\t\tvar dataPlaceholder = 'data-placeholder';\n\t\t\tvar originalPlaceholder = el.getAttribute( dataPlaceholder );\n\t\t\tif( originalPlaceholder !== null ) {\n\t\t\t\tel.removeAttribute( dataPlaceholder );\n\t\t\t\tel.setAttribute( 'placeholder', originalPlaceholder );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetLabel: function( labelEl, el ) {\n\t\t\tlabelEl.classList.add( this.prefixed( 'label' ));\n\t\t\tlabelEl.textContent = this.getLabelText( labelEl, el );\n\t\t\tif( typeof this.config[this.current].customLabel === 'function' ) {\n\t\t\t\tlabelEl.textContent = this.config[this.current].customLabel.call( this, labelEl, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetPlaceholder: function( labelEl, el ) {\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( this.config[this.current].prioritize === 'label' || !placeholderText ) {\n\t\t\t\tif( placeholderText ) {\n\t\t\t\t\tel.setAttribute( 'data-placeholder', placeholderText );\n\t\t\t\t}\n\t\t\t\tplaceholderText = this.getLabelText( labelEl, el );\n\t\t\t}\n\t\t\tif( typeof this.config[this.current].customPlaceholder === 'function' ) {\n\t\t\t\tplaceholderText = this.config[this.current].customPlaceholder.call( this, placeholderText, el, labelEl );\n\t\t\t}\n\t\t\tif( el.tagName === 'SELECT' ) {\n\t\t\t\tthis.setSelectPlaceholder( el, placeholderText );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tel.setAttribute( 'placeholder', placeholderText );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetSelectPlaceholder: function( el, placeholderText ) {\n\t\t\tvar childEl = el.firstElementChild;\n\t\t\tif( childEl.hasAttribute( 'value' ) && childEl.value ) {\n\t\t\t\tvar selected = el.options[el.selectedIndex].defaultSelected !== true ? true : false;\n\t\t\t\tel.insertBefore( new Option( placeholderText, '', selected, selected ), childEl );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchildEl.setAttribute( 'value', '' );\n\t\t\t}\n\t\t\tif( childEl.textContent === '' ) {\n\t\t\t\tchildEl.textContent = placeholderText;\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\twrapLabel: function( labelEl, el ) {\n\t\t\tvar wrapper = this.createEl( 'div', {\n\t\t\t\tclass: this.prefixed( 'wrap' ) + ' ' + this.prefixed( 'wrap-' + el.tagName.toLowerCase() ),\n\t\t\t});\n\t\t\tif( el.value !== undefined && el.value.length ) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t\tif( el.getAttribute( 'required' ) !== null || el.classList.contains( this.config[this.current].requiredClass )) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-required' ));\n\t\t\t}\n\t\t\tel.parentNode.insertBefore( wrapper, el );\n\t\t\twrapper.appendChild( labelEl );\n\t\t\twrapper.appendChild( el );\n\t\t},\n\t};\n\n\tif( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [], function() { return Plugin; });\n\t}\n\telse if( typeof module === \"object\" && module.exports ) {\n\t\tmodule.exports = Plugin;\n\t}\n\telse {\n\t\twindow.FloatLabels = Plugin;\n\t}\n\n})( window, document );\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/float-labels.js/src/float-labels.js\n// module id = 371\n// module chunks = 3","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 43\n// module chunks = 2 3 4","/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n;(function (factory) { \nif (typeof define === 'function' && define.amd) { \n // AMD. Register as an anonymous module. \n define(['jquery'], factory); \n } else if (typeof exports === 'object') { \n // Node/CommonJS \n factory(require('jquery')); \n } else { \n // Browser globals \n factory(window.jQuery || window.Zepto); \n } \n }(function($) { \n\n/*>>core*/\n/**\n * \n * Magnific Popup Core JS file\n * \n */\n\n\n/**\n * Private static constants\n */\nvar CLOSE_EVENT = 'Close',\n\tBEFORE_CLOSE_EVENT = 'BeforeClose',\n\tAFTER_CLOSE_EVENT = 'AfterClose',\n\tBEFORE_APPEND_EVENT = 'BeforeAppend',\n\tMARKUP_PARSE_EVENT = 'MarkupParse',\n\tOPEN_EVENT = 'Open',\n\tCHANGE_EVENT = 'Change',\n\tNS = 'mfp',\n\tEVENT_NS = '.' + NS,\n\tREADY_CLASS = 'mfp-ready',\n\tREMOVING_CLASS = 'mfp-removing',\n\tPREVENT_CLOSE_CLASS = 'mfp-prevent-close';\n\n\n/**\n * Private vars \n */\n/*jshint -W079 */\nvar mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'\n\tMagnificPopup = function(){},\n\t_isJQ = !!(window.jQuery),\n\t_prevStatus,\n\t_window = $(window),\n\t_document,\n\t_prevContentType,\n\t_wrapClasses,\n\t_currPopupType;\n\n\n/**\n * Private functions\n */\nvar _mfpOn = function(name, f) {\n\t\tmfp.ev.on(NS + name + EVENT_NS, f);\n\t},\n\t_getEl = function(className, appendTo, html, raw) {\n\t\tvar el = document.createElement('div');\n\t\tel.className = 'mfp-'+className;\n\t\tif(html) {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t\tif(!raw) {\n\t\t\tel = $(el);\n\t\t\tif(appendTo) {\n\t\t\t\tel.appendTo(appendTo);\n\t\t\t}\n\t\t} else if(appendTo) {\n\t\t\tappendTo.appendChild(el);\n\t\t}\n\t\treturn el;\n\t},\n\t_mfpTrigger = function(e, data) {\n\t\tmfp.ev.triggerHandler(NS + e, data);\n\n\t\tif(mfp.st.callbacks) {\n\t\t\t// converts \"mfpEventName\" to \"eventName\" callback and triggers it if it's present\n\t\t\te = e.charAt(0).toLowerCase() + e.slice(1);\n\t\t\tif(mfp.st.callbacks[e]) {\n\t\t\t\tmfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);\n\t\t\t}\n\t\t}\n\t},\n\t_getCloseBtn = function(type) {\n\t\tif(type !== _currPopupType || !mfp.currTemplate.closeBtn) {\n\t\t\tmfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );\n\t\t\t_currPopupType = type;\n\t\t}\n\t\treturn mfp.currTemplate.closeBtn;\n\t},\n\t// Initialize Magnific Popup only when called at least once\n\t_checkInstance = function() {\n\t\tif(!$.magnificPopup.instance) {\n\t\t\t/*jshint -W020 */\n\t\t\tmfp = new MagnificPopup();\n\t\t\tmfp.init();\n\t\t\t$.magnificPopup.instance = mfp;\n\t\t}\n\t},\n\t// CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\n\tsupportsTransitions = function() {\n\t\tvar s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist\n\t\t\tv = ['ms','O','Moz','Webkit']; // 'v' for vendor\n\n\t\tif( s['transition'] !== undefined ) {\n\t\t\treturn true; \n\t\t}\n\t\t\t\n\t\twhile( v.length ) {\n\t\t\tif( v.pop() + 'Transition' in s ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t\t\t\n\t\treturn false;\n\t};\n\n\n\n/**\n * Public functions\n */\nMagnificPopup.prototype = {\n\n\tconstructor: MagnificPopup,\n\n\t/**\n\t * Initializes Magnific Popup plugin. \n\t * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed\n\t */\n\tinit: function() {\n\t\tvar appVersion = navigator.appVersion;\n\t\tmfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;\n\t\tmfp.isAndroid = (/android/gi).test(appVersion);\n\t\tmfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);\n\t\tmfp.supportsTransition = supportsTransitions();\n\n\t\t// We disable fixed positioned lightbox on devices that don't handle it nicely.\n\t\t// If you know a better way of detecting this - let me know.\n\t\tmfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );\n\t\t_document = $(document);\n\n\t\tmfp.popupsCache = {};\n\t},\n\n\t/**\n\t * Opens popup\n\t * @param data [description]\n\t */\n\topen: function(data) {\n\n\t\tvar i;\n\n\t\tif(data.isObj === false) { \n\t\t\t// convert jQuery collection to array to avoid conflicts later\n\t\t\tmfp.items = data.items.toArray();\n\n\t\t\tmfp.index = 0;\n\t\t\tvar items = data.items,\n\t\t\t\titem;\n\t\t\tfor(i = 0; i < items.length; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tif(item.parsed) {\n\t\t\t\t\titem = item.el[0];\n\t\t\t\t}\n\t\t\t\tif(item === data.el[0]) {\n\t\t\t\t\tmfp.index = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.items = $.isArray(data.items) ? data.items : [data.items];\n\t\t\tmfp.index = data.index || 0;\n\t\t}\n\n\t\t// if popup is already opened - we just update the content\n\t\tif(mfp.isOpen) {\n\t\t\tmfp.updateItemHTML();\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tmfp.types = []; \n\t\t_wrapClasses = '';\n\t\tif(data.mainEl && data.mainEl.length) {\n\t\t\tmfp.ev = data.mainEl.eq(0);\n\t\t} else {\n\t\t\tmfp.ev = _document;\n\t\t}\n\n\t\tif(data.key) {\n\t\t\tif(!mfp.popupsCache[data.key]) {\n\t\t\t\tmfp.popupsCache[data.key] = {};\n\t\t\t}\n\t\t\tmfp.currTemplate = mfp.popupsCache[data.key];\n\t\t} else {\n\t\t\tmfp.currTemplate = {};\n\t\t}\n\n\n\n\t\tmfp.st = $.extend(true, {}, $.magnificPopup.defaults, data ); \n\t\tmfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;\n\n\t\tif(mfp.st.modal) {\n\t\t\tmfp.st.closeOnContentClick = false;\n\t\t\tmfp.st.closeOnBgClick = false;\n\t\t\tmfp.st.showCloseBtn = false;\n\t\t\tmfp.st.enableEscapeKey = false;\n\t\t}\n\t\t\n\n\t\t// Building markup\n\t\t// main containers are created only once\n\t\tif(!mfp.bgOverlay) {\n\n\t\t\t// Dark overlay\n\t\t\tmfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {\n\t\t\t\tmfp.close();\n\t\t\t});\n\n\t\t\tmfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {\n\t\t\t\tif(mfp._checkIfClose(e.target)) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmfp.container = _getEl('container', mfp.wrap);\n\t\t}\n\n\t\tmfp.contentContainer = _getEl('content');\n\t\tif(mfp.st.preloader) {\n\t\t\tmfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);\n\t\t}\n\n\n\t\t// Initializing modules\n\t\tvar modules = $.magnificPopup.modules;\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar n = modules[i];\n\t\t\tn = n.charAt(0).toUpperCase() + n.slice(1);\n\t\t\tmfp['init'+n].call(mfp);\n\t\t}\n\t\t_mfpTrigger('BeforeOpen');\n\n\n\t\tif(mfp.st.showCloseBtn) {\n\t\t\t// Close button\n\t\t\tif(!mfp.st.closeBtnInside) {\n\t\t\t\tmfp.wrap.append( _getCloseBtn() );\n\t\t\t} else {\n\t\t\t\t_mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {\n\t\t\t\t\tvalues.close_replaceWith = _getCloseBtn(item.type);\n\t\t\t\t});\n\t\t\t\t_wrapClasses += ' mfp-close-btn-in';\n\t\t\t}\n\t\t}\n\n\t\tif(mfp.st.alignTop) {\n\t\t\t_wrapClasses += ' mfp-align-top';\n\t\t}\n\n\t\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css({\n\t\t\t\toverflow: mfp.st.overflowY,\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\toverflowY: mfp.st.overflowY\n\t\t\t});\n\t\t} else {\n\t\t\tmfp.wrap.css({ \n\t\t\t\ttop: _window.scrollTop(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\t\tif( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {\n\t\t\tmfp.bgOverlay.css({\n\t\t\t\theight: _document.height(),\n\t\t\t\tposition: 'absolute'\n\t\t\t});\n\t\t}\n\n\t\t\n\n\t\tif(mfp.st.enableEscapeKey) {\n\t\t\t// Close on ESC key\n\t\t\t_document.on('keyup' + EVENT_NS, function(e) {\n\t\t\t\tif(e.keyCode === 27) {\n\t\t\t\t\tmfp.close();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_window.on('resize' + EVENT_NS, function() {\n\t\t\tmfp.updateSize();\n\t\t});\n\n\n\t\tif(!mfp.st.closeOnContentClick) {\n\t\t\t_wrapClasses += ' mfp-auto-cursor';\n\t\t}\n\t\t\n\t\tif(_wrapClasses)\n\t\t\tmfp.wrap.addClass(_wrapClasses);\n\n\n\t\t// this triggers recalculation of layout, so we get it once to not to trigger twice\n\t\tvar windowHeight = mfp.wH = _window.height();\n\n\t\t\n\t\tvar windowStyles = {};\n\n\t\tif( mfp.fixedContentPos ) {\n if(mfp._hasScrollBar(windowHeight)){\n var s = mfp._getScrollbarSize();\n if(s) {\n windowStyles.marginRight = s;\n }\n }\n }\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tif(!mfp.isIE7) {\n\t\t\t\twindowStyles.overflow = 'hidden';\n\t\t\t} else {\n\t\t\t\t// ie7 double-scroll bug\n\t\t\t\t$('body, html').css('overflow', 'hidden');\n\t\t\t}\n\t\t}\n\n\t\t\n\t\t\n\t\tvar classesToadd = mfp.st.mainClass;\n\t\tif(mfp.isIE7) {\n\t\t\tclassesToadd += ' mfp-ie7';\n\t\t}\n\t\tif(classesToadd) {\n\t\t\tmfp._addClassToMFP( classesToadd );\n\t\t}\n\n\t\t// add content\n\t\tmfp.updateItemHTML();\n\n\t\t_mfpTrigger('BuildControls');\n\n\t\t// remove scrollbar, add margin e.t.c\n\t\t$('html').css(windowStyles);\n\t\t\n\t\t// add everything to DOM\n\t\tmfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );\n\n\t\t// Save last focused element\n\t\tmfp._lastFocusedEl = document.activeElement;\n\t\t\n\t\t// Wait for next cycle to allow CSS transition\n\t\tsetTimeout(function() {\n\t\t\t\n\t\t\tif(mfp.content) {\n\t\t\t\tmfp._addClassToMFP(READY_CLASS);\n\t\t\t\tmfp._setFocus();\n\t\t\t} else {\n\t\t\t\t// if content is not defined (not loaded e.t.c) we add class only for BG\n\t\t\t\tmfp.bgOverlay.addClass(READY_CLASS);\n\t\t\t}\n\t\t\t\n\t\t\t// Trap the focus in popup\n\t\t\t_document.on('focusin' + EVENT_NS, mfp._onFocusIn);\n\n\t\t}, 16);\n\n\t\tmfp.isOpen = true;\n\t\tmfp.updateSize(windowHeight);\n\t\t_mfpTrigger(OPEN_EVENT);\n\n\t\treturn data;\n\t},\n\n\t/**\n\t * Closes the popup\n\t */\n\tclose: function() {\n\t\tif(!mfp.isOpen) return;\n\t\t_mfpTrigger(BEFORE_CLOSE_EVENT);\n\n\t\tmfp.isOpen = false;\n\t\t// for CSS3 animation\n\t\tif(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {\n\t\t\tmfp._addClassToMFP(REMOVING_CLASS);\n\t\t\tsetTimeout(function() {\n\t\t\t\tmfp._close();\n\t\t\t}, mfp.st.removalDelay);\n\t\t} else {\n\t\t\tmfp._close();\n\t\t}\n\t},\n\n\t/**\n\t * Helper for close() function\n\t */\n\t_close: function() {\n\t\t_mfpTrigger(CLOSE_EVENT);\n\n\t\tvar classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';\n\n\t\tmfp.bgOverlay.detach();\n\t\tmfp.wrap.detach();\n\t\tmfp.container.empty();\n\n\t\tif(mfp.st.mainClass) {\n\t\t\tclassesToRemove += mfp.st.mainClass + ' ';\n\t\t}\n\n\t\tmfp._removeClassFromMFP(classesToRemove);\n\n\t\tif(mfp.fixedContentPos) {\n\t\t\tvar windowStyles = {marginRight: ''};\n\t\t\tif(mfp.isIE7) {\n\t\t\t\t$('body, html').css('overflow', '');\n\t\t\t} else {\n\t\t\t\twindowStyles.overflow = '';\n\t\t\t}\n\t\t\t$('html').css(windowStyles);\n\t\t}\n\t\t\n\t\t_document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);\n\t\tmfp.ev.off(EVENT_NS);\n\n\t\t// clean up DOM elements that aren't removed\n\t\tmfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');\n\t\tmfp.bgOverlay.attr('class', 'mfp-bg');\n\t\tmfp.container.attr('class', 'mfp-container');\n\n\t\t// remove close button from target element\n\t\tif(mfp.st.showCloseBtn &&\n\t\t(!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {\n\t\t\tif(mfp.currTemplate.closeBtn)\n\t\t\t\tmfp.currTemplate.closeBtn.detach();\n\t\t}\n\n\n\t\tif(mfp.st.autoFocusLast && mfp._lastFocusedEl) {\n\t\t\t$(mfp._lastFocusedEl).focus(); // put tab focus back\n\t\t}\n\t\tmfp.currItem = null;\t\n\t\tmfp.content = null;\n\t\tmfp.currTemplate = null;\n\t\tmfp.prevHeight = 0;\n\n\t\t_mfpTrigger(AFTER_CLOSE_EVENT);\n\t},\n\t\n\tupdateSize: function(winHeight) {\n\n\t\tif(mfp.isIOS) {\n\t\t\t// fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2\n\t\t\tvar zoomLevel = document.documentElement.clientWidth / window.innerWidth;\n\t\t\tvar height = window.innerHeight * zoomLevel;\n\t\t\tmfp.wrap.css('height', height);\n\t\t\tmfp.wH = height;\n\t\t} else {\n\t\t\tmfp.wH = winHeight || _window.height();\n\t\t}\n\t\t// Fixes #84: popup incorrectly positioned with position:relative on body\n\t\tif(!mfp.fixedContentPos) {\n\t\t\tmfp.wrap.css('height', mfp.wH);\n\t\t}\n\n\t\t_mfpTrigger('Resize');\n\n\t},\n\n\t/**\n\t * Set content of popup based on current index\n\t */\n\tupdateItemHTML: function() {\n\t\tvar item = mfp.items[mfp.index];\n\n\t\t// Detach and perform modifications\n\t\tmfp.contentContainer.detach();\n\n\t\tif(mfp.content)\n\t\t\tmfp.content.detach();\n\n\t\tif(!item.parsed) {\n\t\t\titem = mfp.parseEl( mfp.index );\n\t\t}\n\n\t\tvar type = item.type;\n\n\t\t_mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);\n\t\t// BeforeChange event works like so:\n\t\t// _mfpOn('BeforeChange', function(e, prevType, newType) { });\n\n\t\tmfp.currItem = item;\n\n\t\tif(!mfp.currTemplate[type]) {\n\t\t\tvar markup = mfp.st[type] ? mfp.st[type].markup : false;\n\n\t\t\t// allows to modify markup\n\t\t\t_mfpTrigger('FirstMarkupParse', markup);\n\n\t\t\tif(markup) {\n\t\t\t\tmfp.currTemplate[type] = $(markup);\n\t\t\t} else {\n\t\t\t\t// if there is no markup found we just define that template is parsed\n\t\t\t\tmfp.currTemplate[type] = true;\n\t\t\t}\n\t\t}\n\n\t\tif(_prevContentType && _prevContentType !== item.type) {\n\t\t\tmfp.container.removeClass('mfp-'+_prevContentType+'-holder');\n\t\t}\n\n\t\tvar newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);\n\t\tmfp.appendContent(newContent, type);\n\n\t\titem.preloaded = true;\n\n\t\t_mfpTrigger(CHANGE_EVENT, item);\n\t\t_prevContentType = item.type;\n\n\t\t// Append container back after its content changed\n\t\tmfp.container.prepend(mfp.contentContainer);\n\n\t\t_mfpTrigger('AfterChange');\n\t},\n\n\n\t/**\n\t * Set HTML content of popup\n\t */\n\tappendContent: function(newContent, type) {\n\t\tmfp.content = newContent;\n\n\t\tif(newContent) {\n\t\t\tif(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&\n\t\t\t\tmfp.currTemplate[type] === true) {\n\t\t\t\t// if there is no markup, we just append close button element inside\n\t\t\t\tif(!mfp.content.find('.mfp-close').length) {\n\t\t\t\t\tmfp.content.append(_getCloseBtn());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmfp.content = newContent;\n\t\t\t}\n\t\t} else {\n\t\t\tmfp.content = '';\n\t\t}\n\n\t\t_mfpTrigger(BEFORE_APPEND_EVENT);\n\t\tmfp.container.addClass('mfp-'+type+'-holder');\n\n\t\tmfp.contentContainer.append(mfp.content);\n\t},\n\n\n\t/**\n\t * Creates Magnific Popup data object based on given data\n\t * @param {int} index Index of item to parse\n\t */\n\tparseEl: function(index) {\n\t\tvar item = mfp.items[index],\n\t\t\ttype;\n\n\t\tif(item.tagName) {\n\t\t\titem = { el: $(item) };\n\t\t} else {\n\t\t\ttype = item.type;\n\t\t\titem = { data: item, src: item.src };\n\t\t}\n\n\t\tif(item.el) {\n\t\t\tvar types = mfp.types;\n\n\t\t\t// check for 'mfp-TYPE' class\n\t\t\tfor(var i = 0; i < types.length; i++) {\n\t\t\t\tif( item.el.hasClass('mfp-'+types[i]) ) {\n\t\t\t\t\ttype = types[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\titem.src = item.el.attr('data-mfp-src');\n\t\t\tif(!item.src) {\n\t\t\t\titem.src = item.el.attr('href');\n\t\t\t}\n\t\t}\n\n\t\titem.type = type || mfp.st.type || 'inline';\n\t\titem.index = index;\n\t\titem.parsed = true;\n\t\tmfp.items[index] = item;\n\t\t_mfpTrigger('ElementParse', item);\n\n\t\treturn mfp.items[index];\n\t},\n\n\n\t/**\n\t * Initializes single popup or a group of popups\n\t */\n\taddGroup: function(el, options) {\n\t\tvar eHandler = function(e) {\n\t\t\te.mfpEl = this;\n\t\t\tmfp._openClick(e, el, options);\n\t\t};\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tvar eName = 'click.magnificPopup';\n\t\toptions.mainEl = el;\n\n\t\tif(options.items) {\n\t\t\toptions.isObj = true;\n\t\t\tel.off(eName).on(eName, eHandler);\n\t\t} else {\n\t\t\toptions.isObj = false;\n\t\t\tif(options.delegate) {\n\t\t\t\tel.off(eName).on(eName, options.delegate , eHandler);\n\t\t\t} else {\n\t\t\t\toptions.items = el;\n\t\t\t\tel.off(eName).on(eName, eHandler);\n\t\t\t}\n\t\t}\n\t},\n\t_openClick: function(e, el, options) {\n\t\tvar midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;\n\n\n\t\tif(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;\n\n\t\tif(disableOn) {\n\t\t\tif($.isFunction(disableOn)) {\n\t\t\t\tif( !disableOn.call(mfp) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else { // else it's number\n\t\t\t\tif( _window.width() < disableOn ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(e.type) {\n\t\t\te.preventDefault();\n\n\t\t\t// This will prevent popup from closing if element is inside and popup is already opened\n\t\t\tif(mfp.isOpen) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t}\n\n\t\toptions.el = $(e.mfpEl);\n\t\tif(options.delegate) {\n\t\t\toptions.items = el.find(options.delegate);\n\t\t}\n\t\tmfp.open(options);\n\t},\n\n\n\t/**\n\t * Updates text on preloader\n\t */\n\tupdateStatus: function(status, text) {\n\n\t\tif(mfp.preloader) {\n\t\t\tif(_prevStatus !== status) {\n\t\t\t\tmfp.container.removeClass('mfp-s-'+_prevStatus);\n\t\t\t}\n\n\t\t\tif(!text && status === 'loading') {\n\t\t\t\ttext = mfp.st.tLoading;\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tstatus: status,\n\t\t\t\ttext: text\n\t\t\t};\n\t\t\t// allows to modify status\n\t\t\t_mfpTrigger('UpdateStatus', data);\n\n\t\t\tstatus = data.status;\n\t\t\ttext = data.text;\n\n\t\t\tmfp.preloader.html(text);\n\n\t\t\tmfp.preloader.find('a').on('click', function(e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t});\n\n\t\t\tmfp.container.addClass('mfp-s-'+status);\n\t\t\t_prevStatus = status;\n\t\t}\n\t},\n\n\n\t/*\n\t\t\"Private\" helpers that aren't private at all\n\t */\n\t// Check to close popup or not\n\t// \"target\" is an element that was clicked\n\t_checkIfClose: function(target) {\n\n\t\tif($(target).hasClass(PREVENT_CLOSE_CLASS)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar closeOnContent = mfp.st.closeOnContentClick;\n\t\tvar closeOnBg = mfp.st.closeOnBgClick;\n\n\t\tif(closeOnContent && closeOnBg) {\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\t// We close the popup if click is on close button or on preloader. Or if there is no content.\n\t\t\tif(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// if click is outside the content\n\t\t\tif( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {\n\t\t\t\tif(closeOnBg) {\n\t\t\t\t\t// last check, if the clicked element is in DOM, (in case it's removed onclick)\n\t\t\t\t\tif( $.contains(document, target) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(closeOnContent) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t}\n\t\treturn false;\n\t},\n\t_addClassToMFP: function(cName) {\n\t\tmfp.bgOverlay.addClass(cName);\n\t\tmfp.wrap.addClass(cName);\n\t},\n\t_removeClassFromMFP: function(cName) {\n\t\tthis.bgOverlay.removeClass(cName);\n\t\tmfp.wrap.removeClass(cName);\n\t},\n\t_hasScrollBar: function(winHeight) {\n\t\treturn ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );\n\t},\n\t_setFocus: function() {\n\t\t(mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();\n\t},\n\t_onFocusIn: function(e) {\n\t\tif( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {\n\t\t\tmfp._setFocus();\n\t\t\treturn false;\n\t\t}\n\t},\n\t_parseMarkup: function(template, values, item) {\n\t\tvar arr;\n\t\tif(item.data) {\n\t\t\tvalues = $.extend(item.data, values);\n\t\t}\n\t\t_mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );\n\n\t\t$.each(values, function(key, value) {\n\t\t\tif(value === undefined || value === false) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tarr = key.split('_');\n\t\t\tif(arr.length > 1) {\n\t\t\t\tvar el = template.find(EVENT_NS + '-'+arr[0]);\n\n\t\t\t\tif(el.length > 0) {\n\t\t\t\t\tvar attr = arr[1];\n\t\t\t\t\tif(attr === 'replaceWith') {\n\t\t\t\t\t\tif(el[0] !== value[0]) {\n\t\t\t\t\t\t\tel.replaceWith(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if(attr === 'img') {\n\t\t\t\t\t\tif(el.is('img')) {\n\t\t\t\t\t\t\tel.attr('src', value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.attr(arr[1], value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\ttemplate.find(EVENT_NS + '-'+key).html(value);\n\t\t\t}\n\t\t});\n\t},\n\n\t_getScrollbarSize: function() {\n\t\t// thx David\n\t\tif(mfp.scrollbarSize === undefined) {\n\t\t\tvar scrollDiv = document.createElement(\"div\");\n\t\t\tscrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';\n\t\t\tdocument.body.appendChild(scrollDiv);\n\t\t\tmfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t\tdocument.body.removeChild(scrollDiv);\n\t\t}\n\t\treturn mfp.scrollbarSize;\n\t}\n\n}; /* MagnificPopup core prototype end */\n\n\n\n\n/**\n * Public static functions\n */\n$.magnificPopup = {\n\tinstance: null,\n\tproto: MagnificPopup.prototype,\n\tmodules: [],\n\n\topen: function(options, index) {\n\t\t_checkInstance();\n\n\t\tif(!options) {\n\t\t\toptions = {};\n\t\t} else {\n\t\t\toptions = $.extend(true, {}, options);\n\t\t}\n\n\t\toptions.isObj = true;\n\t\toptions.index = index || 0;\n\t\treturn this.instance.open(options);\n\t},\n\n\tclose: function() {\n\t\treturn $.magnificPopup.instance && $.magnificPopup.instance.close();\n\t},\n\n\tregisterModule: function(name, module) {\n\t\tif(module.options) {\n\t\t\t$.magnificPopup.defaults[name] = module.options;\n\t\t}\n\t\t$.extend(this.proto, module.proto);\n\t\tthis.modules.push(name);\n\t},\n\n\tdefaults: {\n\n\t\t// Info about options is in docs:\n\t\t// http://dimsemenov.com/plugins/magnific-popup/documentation.html#options\n\n\t\tdisableOn: 0,\n\n\t\tkey: null,\n\n\t\tmidClick: false,\n\n\t\tmainClass: '',\n\n\t\tpreloader: true,\n\n\t\tfocus: '', // CSS selector of input to focus after popup is opened\n\n\t\tcloseOnContentClick: false,\n\n\t\tcloseOnBgClick: true,\n\n\t\tcloseBtnInside: true,\n\n\t\tshowCloseBtn: true,\n\n\t\tenableEscapeKey: true,\n\n\t\tmodal: false,\n\n\t\talignTop: false,\n\n\t\tremovalDelay: 0,\n\n\t\tprependTo: null,\n\n\t\tfixedContentPos: 'auto',\n\n\t\tfixedBgPos: 'auto',\n\n\t\toverflowY: 'auto',\n\n\t\tcloseMarkup: '',\n\n\t\ttClose: 'Close (Esc)',\n\n\t\ttLoading: 'Loading...',\n\n\t\tautoFocusLast: true\n\n\t}\n};\n\n\n\n$.fn.magnificPopup = function(options) {\n\t_checkInstance();\n\n\tvar jqEl = $(this);\n\n\t// We call some API method of first param is a string\n\tif (typeof options === \"string\" ) {\n\n\t\tif(options === 'open') {\n\t\t\tvar items,\n\t\t\t\titemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,\n\t\t\t\tindex = parseInt(arguments[1], 10) || 0;\n\n\t\t\tif(itemOpts.items) {\n\t\t\t\titems = itemOpts.items[index];\n\t\t\t} else {\n\t\t\t\titems = jqEl;\n\t\t\t\tif(itemOpts.delegate) {\n\t\t\t\t\titems = items.find(itemOpts.delegate);\n\t\t\t\t}\n\t\t\t\titems = items.eq( index );\n\t\t\t}\n\t\t\tmfp._openClick({mfpEl:items}, jqEl, itemOpts);\n\t\t} else {\n\t\t\tif(mfp.isOpen)\n\t\t\t\tmfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));\n\t\t}\n\n\t} else {\n\t\t// clone options obj\n\t\toptions = $.extend(true, {}, options);\n\n\t\t/*\n\t\t * As Zepto doesn't support .data() method for objects\n\t\t * and it works only in normal browsers\n\t\t * we assign \"options\" object directly to the DOM element. FTW!\n\t\t */\n\t\tif(_isJQ) {\n\t\t\tjqEl.data('magnificPopup', options);\n\t\t} else {\n\t\t\tjqEl[0].magnificPopup = options;\n\t\t}\n\n\t\tmfp.addGroup(jqEl, options);\n\n\t}\n\treturn jqEl;\n};\n\n/*>>core*/\n\n/*>>inline*/\n\nvar INLINE_NS = 'inline',\n\t_hiddenClass,\n\t_inlinePlaceholder,\n\t_lastInlineElement,\n\t_putInlineElementsBack = function() {\n\t\tif(_lastInlineElement) {\n\t\t\t_inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();\n\t\t\t_lastInlineElement = null;\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(INLINE_NS, {\n\toptions: {\n\t\thiddenClass: 'hide', // will be appended with `mfp-` prefix\n\t\tmarkup: '',\n\t\ttNotFound: 'Content not found'\n\t},\n\tproto: {\n\n\t\tinitInline: function() {\n\t\t\tmfp.types.push(INLINE_NS);\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {\n\t\t\t\t_putInlineElementsBack();\n\t\t\t});\n\t\t},\n\n\t\tgetInline: function(item, template) {\n\n\t\t\t_putInlineElementsBack();\n\n\t\t\tif(item.src) {\n\t\t\t\tvar inlineSt = mfp.st.inline,\n\t\t\t\t\tel = $(item.src);\n\n\t\t\t\tif(el.length) {\n\n\t\t\t\t\t// If target element has parent - we replace it with placeholder and put it back after popup is closed\n\t\t\t\t\tvar parent = el[0].parentNode;\n\t\t\t\t\tif(parent && parent.tagName) {\n\t\t\t\t\t\tif(!_inlinePlaceholder) {\n\t\t\t\t\t\t\t_hiddenClass = inlineSt.hiddenClass;\n\t\t\t\t\t\t\t_inlinePlaceholder = _getEl(_hiddenClass);\n\t\t\t\t\t\t\t_hiddenClass = 'mfp-'+_hiddenClass;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace target inline element with placeholder\n\t\t\t\t\t\t_lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);\n\t\t\t\t\t}\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t} else {\n\t\t\t\t\tmfp.updateStatus('error', inlineSt.tNotFound);\n\t\t\t\t\tel = $('
');\n\t\t\t\t}\n\n\t\t\t\titem.inlineElement = el;\n\t\t\t\treturn el;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('ready');\n\t\t\tmfp._parseMarkup(template, {}, item);\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>inline*/\n\n/*>>ajax*/\nvar AJAX_NS = 'ajax',\n\t_ajaxCur,\n\t_removeAjaxCursor = function() {\n\t\tif(_ajaxCur) {\n\t\t\t$(document.body).removeClass(_ajaxCur);\n\t\t}\n\t},\n\t_destroyAjaxRequest = function() {\n\t\t_removeAjaxCursor();\n\t\tif(mfp.req) {\n\t\t\tmfp.req.abort();\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(AJAX_NS, {\n\n\toptions: {\n\t\tsettings: null,\n\t\tcursor: 'mfp-ajax-cur',\n\t\ttError: 'The content could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitAjax: function() {\n\t\t\tmfp.types.push(AJAX_NS);\n\t\t\t_ajaxCur = mfp.st.ajax.cursor;\n\n\t\t\t_mfpOn(CLOSE_EVENT+'.'+AJAX_NS, _destroyAjaxRequest);\n\t\t\t_mfpOn('BeforeChange.' + AJAX_NS, _destroyAjaxRequest);\n\t\t},\n\t\tgetAjax: function(item) {\n\n\t\t\tif(_ajaxCur) {\n\t\t\t\t$(document.body).addClass(_ajaxCur);\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\n\t\t\tvar opts = $.extend({\n\t\t\t\turl: item.src,\n\t\t\t\tsuccess: function(data, textStatus, jqXHR) {\n\t\t\t\t\tvar temp = {\n\t\t\t\t\t\tdata:data,\n\t\t\t\t\t\txhr:jqXHR\n\t\t\t\t\t};\n\n\t\t\t\t\t_mfpTrigger('ParseAjax', temp);\n\n\t\t\t\t\tmfp.appendContent( $(temp.data), AJAX_NS );\n\n\t\t\t\t\titem.finished = true;\n\n\t\t\t\t\t_removeAjaxCursor();\n\n\t\t\t\t\tmfp._setFocus();\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tmfp.wrap.addClass(READY_CLASS);\n\t\t\t\t\t}, 16);\n\n\t\t\t\t\tmfp.updateStatus('ready');\n\n\t\t\t\t\t_mfpTrigger('AjaxContentAdded');\n\t\t\t\t},\n\t\t\t\terror: function() {\n\t\t\t\t\t_removeAjaxCursor();\n\t\t\t\t\titem.finished = item.loadError = true;\n\t\t\t\t\tmfp.updateStatus('error', mfp.st.ajax.tError.replace('%url%', item.src));\n\t\t\t\t}\n\t\t\t}, mfp.st.ajax.settings);\n\n\t\t\tmfp.req = $.ajax(opts);\n\n\t\t\treturn '';\n\t\t}\n\t}\n});\n\n/*>>ajax*/\n\n/*>>image*/\nvar _imgInterval,\n\t_getTitle = function(item) {\n\t\tif(item.data && item.data.title !== undefined)\n\t\t\treturn item.data.title;\n\n\t\tvar src = mfp.st.image.titleSrc;\n\n\t\tif(src) {\n\t\t\tif($.isFunction(src)) {\n\t\t\t\treturn src.call(mfp, item);\n\t\t\t} else if(item.el) {\n\t\t\t\treturn item.el.attr(src) || '';\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\n$.magnificPopup.registerModule('image', {\n\n\toptions: {\n\t\tmarkup: '
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t\t'
'+\n\t\t\t\t\t\t'
'+\n\t\t\t\t\t'
'+\n\t\t\t\t'
',\n\t\tcursor: 'mfp-zoom-out-cur',\n\t\ttitleSrc: 'title',\n\t\tverticalFit: true,\n\t\ttError: 'The image could not be loaded.'\n\t},\n\n\tproto: {\n\t\tinitImage: function() {\n\t\t\tvar imgSt = mfp.st.image,\n\t\t\t\tns = '.image';\n\n\t\t\tmfp.types.push('image');\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\t\t\t\tif(mfp.currItem.type === 'image' && imgSt.cursor) {\n\t\t\t\t\t$(document.body).addClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(imgSt.cursor) {\n\t\t\t\t\t$(document.body).removeClass(imgSt.cursor);\n\t\t\t\t}\n\t\t\t\t_window.off('resize' + EVENT_NS);\n\t\t\t});\n\n\t\t\t_mfpOn('Resize'+ns, mfp.resizeImage);\n\t\t\tif(mfp.isLowIE) {\n\t\t\t\t_mfpOn('AfterChange', mfp.resizeImage);\n\t\t\t}\n\t\t},\n\t\tresizeImage: function() {\n\t\t\tvar item = mfp.currItem;\n\t\t\tif(!item || !item.img) return;\n\n\t\t\tif(mfp.st.image.verticalFit) {\n\t\t\t\tvar decr = 0;\n\t\t\t\t// fix box-sizing in ie7/8\n\t\t\t\tif(mfp.isLowIE) {\n\t\t\t\t\tdecr = parseInt(item.img.css('padding-top'), 10) + parseInt(item.img.css('padding-bottom'),10);\n\t\t\t\t}\n\t\t\t\titem.img.css('max-height', mfp.wH-decr);\n\t\t\t}\n\t\t},\n\t\t_onImageHasSize: function(item) {\n\t\t\tif(item.img) {\n\n\t\t\t\titem.hasSize = true;\n\n\t\t\t\tif(_imgInterval) {\n\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t}\n\n\t\t\t\titem.isCheckingImgSize = false;\n\n\t\t\t\t_mfpTrigger('ImageHasSize', item);\n\n\t\t\t\tif(item.imgHidden) {\n\t\t\t\t\tif(mfp.content)\n\t\t\t\t\t\tmfp.content.removeClass('mfp-loading');\n\n\t\t\t\t\titem.imgHidden = false;\n\t\t\t\t}\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Function that loops until the image has size to display elements that rely on it asap\n\t\t */\n\t\tfindImageSize: function(item) {\n\n\t\t\tvar counter = 0,\n\t\t\t\timg = item.img[0],\n\t\t\t\tmfpSetInterval = function(delay) {\n\n\t\t\t\t\tif(_imgInterval) {\n\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t}\n\t\t\t\t\t// decelerating interval that checks for size of an image\n\t\t\t\t\t_imgInterval = setInterval(function() {\n\t\t\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter > 200) {\n\t\t\t\t\t\t\tclearInterval(_imgInterval);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcounter++;\n\t\t\t\t\t\tif(counter === 3) {\n\t\t\t\t\t\t\tmfpSetInterval(10);\n\t\t\t\t\t\t} else if(counter === 40) {\n\t\t\t\t\t\t\tmfpSetInterval(50);\n\t\t\t\t\t\t} else if(counter === 100) {\n\t\t\t\t\t\t\tmfpSetInterval(500);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, delay);\n\t\t\t\t};\n\n\t\t\tmfpSetInterval(1);\n\t\t},\n\n\t\tgetImage: function(item, template) {\n\n\t\t\tvar guard = 0,\n\n\t\t\t\t// image load complete handler\n\t\t\t\tonLoadComplete = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\tif (item.img[0].complete) {\n\t\t\t\t\t\t\titem.img.off('.mfploader');\n\n\t\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\n\t\t\t\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\t\titem.loaded = true;\n\n\t\t\t\t\t\t\t_mfpTrigger('ImageLoadComplete');\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// if image complete check fails 200 times (20 sec), we assume that there was an error.\n\t\t\t\t\t\t\tguard++;\n\t\t\t\t\t\t\tif(guard < 200) {\n\t\t\t\t\t\t\t\tsetTimeout(onLoadComplete,100);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonLoadError();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t// image error handler\n\t\t\t\tonLoadError = function() {\n\t\t\t\t\tif(item) {\n\t\t\t\t\t\titem.img.off('.mfploader');\n\t\t\t\t\t\tif(item === mfp.currItem){\n\t\t\t\t\t\t\tmfp._onImageHasSize(item);\n\t\t\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\t\titem.loaded = true;\n\t\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timgSt = mfp.st.image;\n\n\n\t\t\tvar el = template.find('.mfp-img');\n\t\t\tif(el.length) {\n\t\t\t\tvar img = document.createElement('img');\n\t\t\t\timg.className = 'mfp-img';\n\t\t\t\tif(item.el && item.el.find('img').length) {\n\t\t\t\t\timg.alt = item.el.find('img').attr('alt');\n\t\t\t\t}\n\t\t\t\titem.img = $(img).on('load.mfploader', onLoadComplete).on('error.mfploader', onLoadError);\n\t\t\t\timg.src = item.src;\n\n\t\t\t\t// without clone() \"error\" event is not firing when IMG is replaced by new IMG\n\t\t\t\t// TODO: find a way to avoid such cloning\n\t\t\t\tif(el.is('img')) {\n\t\t\t\t\titem.img = item.img.clone();\n\t\t\t\t}\n\n\t\t\t\timg = item.img[0];\n\t\t\t\tif(img.naturalWidth > 0) {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t} else if(!img.width) {\n\t\t\t\t\titem.hasSize = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmfp._parseMarkup(template, {\n\t\t\t\ttitle: _getTitle(item),\n\t\t\t\timg_replaceWith: item.img\n\t\t\t}, item);\n\n\t\t\tmfp.resizeImage();\n\n\t\t\tif(item.hasSize) {\n\t\t\t\tif(_imgInterval) clearInterval(_imgInterval);\n\n\t\t\t\tif(item.loadError) {\n\t\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('error', imgSt.tError.replace('%url%', item.src) );\n\t\t\t\t} else {\n\t\t\t\t\ttemplate.removeClass('mfp-loading');\n\t\t\t\t\tmfp.updateStatus('ready');\n\t\t\t\t}\n\t\t\t\treturn template;\n\t\t\t}\n\n\t\t\tmfp.updateStatus('loading');\n\t\t\titem.loading = true;\n\n\t\t\tif(!item.hasSize) {\n\t\t\t\titem.imgHidden = true;\n\t\t\t\ttemplate.addClass('mfp-loading');\n\t\t\t\tmfp.findImageSize(item);\n\t\t\t}\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n/*>>image*/\n\n/*>>zoom*/\nvar hasMozTransform,\n\tgetHasMozTransform = function() {\n\t\tif(hasMozTransform === undefined) {\n\t\t\thasMozTransform = document.createElement('p').style.MozTransform !== undefined;\n\t\t}\n\t\treturn hasMozTransform;\n\t};\n\n$.magnificPopup.registerModule('zoom', {\n\n\toptions: {\n\t\tenabled: false,\n\t\teasing: 'ease-in-out',\n\t\tduration: 300,\n\t\topener: function(element) {\n\t\t\treturn element.is('img') ? element : element.find('img');\n\t\t}\n\t},\n\n\tproto: {\n\n\t\tinitZoom: function() {\n\t\t\tvar zoomSt = mfp.st.zoom,\n\t\t\t\tns = '.zoom',\n\t\t\t\timage;\n\n\t\t\tif(!zoomSt.enabled || !mfp.supportsTransition) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar duration = zoomSt.duration,\n\t\t\t\tgetElToAnimate = function(image) {\n\t\t\t\t\tvar newImg = image.clone().removeAttr('style').removeAttr('class').addClass('mfp-animated-image'),\n\t\t\t\t\t\ttransition = 'all '+(zoomSt.duration/1000)+'s ' + zoomSt.easing,\n\t\t\t\t\t\tcssObj = {\n\t\t\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\t\t\tzIndex: 9999,\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\t\t'-webkit-backface-visibility': 'hidden'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tt = 'transition';\n\n\t\t\t\t\tcssObj['-webkit-'+t] = cssObj['-moz-'+t] = cssObj['-o-'+t] = cssObj[t] = transition;\n\n\t\t\t\t\tnewImg.css(cssObj);\n\t\t\t\t\treturn newImg;\n\t\t\t\t},\n\t\t\t\tshowMainContent = function() {\n\t\t\t\t\tmfp.content.css('visibility', 'visible');\n\t\t\t\t},\n\t\t\t\topenTimeout,\n\t\t\t\tanimatedImg;\n\n\t\t\t_mfpOn('BuildControls'+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\t// Basically, all code below does is clones existing image, puts in on top of the current one and animated it\n\n\t\t\t\t\timage = mfp._getItemToZoom();\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\tshowMainContent();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\n\t\t\t\t\topenTimeout = setTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset( true ) );\n\t\t\t\t\t\topenTimeout = setTimeout(function() {\n\n\t\t\t\t\t\t\tshowMainContent();\n\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t\t\t\timage = animatedImg = null;\n\t\t\t\t\t\t\t\t_mfpTrigger('ZoomAnimationEnded');\n\t\t\t\t\t\t\t}, 16); // avoid blink when switching images\n\n\t\t\t\t\t\t}, duration); // this timeout equals animation duration\n\n\t\t\t\t\t}, 16); // by adding this timeout we avoid short glitch at the beginning of animation\n\n\n\t\t\t\t\t// Lots of timeouts...\n\t\t\t\t}\n\t\t\t});\n\t\t\t_mfpOn(BEFORE_CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\n\t\t\t\t\tclearTimeout(openTimeout);\n\n\t\t\t\t\tmfp.st.removalDelay = duration;\n\n\t\t\t\t\tif(!image) {\n\t\t\t\t\t\timage = mfp._getItemToZoom();\n\t\t\t\t\t\tif(!image) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tanimatedImg = getElToAnimate(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tanimatedImg.css( mfp._getOffset(true) );\n\t\t\t\t\tmfp.wrap.append(animatedImg);\n\t\t\t\t\tmfp.content.css('visibility', 'hidden');\n\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tanimatedImg.css( mfp._getOffset() );\n\t\t\t\t\t}, 16);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\tif(mfp._allowZoom()) {\n\t\t\t\t\tshowMainContent();\n\t\t\t\t\tif(animatedImg) {\n\t\t\t\t\t\tanimatedImg.remove();\n\t\t\t\t\t}\n\t\t\t\t\timage = null;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t_allowZoom: function() {\n\t\t\treturn mfp.currItem.type === 'image';\n\t\t},\n\n\t\t_getItemToZoom: function() {\n\t\t\tif(mfp.currItem.hasSize) {\n\t\t\t\treturn mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Get element postion relative to viewport\n\t\t_getOffset: function(isLarge) {\n\t\t\tvar el;\n\t\t\tif(isLarge) {\n\t\t\t\tel = mfp.currItem.img;\n\t\t\t} else {\n\t\t\t\tel = mfp.st.zoom.opener(mfp.currItem.el || mfp.currItem);\n\t\t\t}\n\n\t\t\tvar offset = el.offset();\n\t\t\tvar paddingTop = parseInt(el.css('padding-top'),10);\n\t\t\tvar paddingBottom = parseInt(el.css('padding-bottom'),10);\n\t\t\toffset.top -= ( $(window).scrollTop() - paddingTop );\n\n\n\t\t\t/*\n\n\t\t\tAnimating left + top + width/height looks glitchy in Firefox, but perfect in Chrome. And vice-versa.\n\n\t\t\t */\n\t\t\tvar obj = {\n\t\t\t\twidth: el.width(),\n\t\t\t\t// fix Zepto height+padding issue\n\t\t\t\theight: (_isJQ ? el.innerHeight() : el[0].offsetHeight) - paddingBottom - paddingTop\n\t\t\t};\n\n\t\t\t// I hate to do this, but there is no another option\n\t\t\tif( getHasMozTransform() ) {\n\t\t\t\tobj['-moz-transform'] = obj['transform'] = 'translate(' + offset.left + 'px,' + offset.top + 'px)';\n\t\t\t} else {\n\t\t\t\tobj.left = offset.left;\n\t\t\t\tobj.top = offset.top;\n\t\t\t}\n\t\t\treturn obj;\n\t\t}\n\n\t}\n});\n\n\n\n/*>>zoom*/\n\n/*>>iframe*/\n\nvar IFRAME_NS = 'iframe',\n\t_emptyPage = '//about:blank',\n\n\t_fixIframeBugs = function(isShowing) {\n\t\tif(mfp.currTemplate[IFRAME_NS]) {\n\t\t\tvar el = mfp.currTemplate[IFRAME_NS].find('iframe');\n\t\t\tif(el.length) {\n\t\t\t\t// reset src after the popup is closed to avoid \"video keeps playing after popup is closed\" bug\n\t\t\t\tif(!isShowing) {\n\t\t\t\t\tel[0].src = _emptyPage;\n\t\t\t\t}\n\n\t\t\t\t// IE8 black screen bug fix\n\t\t\t\tif(mfp.isIE8) {\n\t\t\t\t\tel.css('display', isShowing ? 'block' : 'none');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n$.magnificPopup.registerModule(IFRAME_NS, {\n\n\toptions: {\n\t\tmarkup: '
'+\n\t\t\t\t\t'
'+\n\t\t\t\t\t''+\n\t\t\t\t'
',\n\n\t\tsrcAction: 'iframe_src',\n\n\t\t// we don't care and support only one default type of URL by default\n\t\tpatterns: {\n\t\t\tyoutube: {\n\t\t\t\tindex: 'youtube.com',\n\t\t\t\tid: 'v=',\n\t\t\t\tsrc: '//www.youtube.com/embed/%id%?autoplay=1'\n\t\t\t},\n\t\t\tvimeo: {\n\t\t\t\tindex: 'vimeo.com/',\n\t\t\t\tid: '/',\n\t\t\t\tsrc: '//player.vimeo.com/video/%id%?autoplay=1'\n\t\t\t},\n\t\t\tgmaps: {\n\t\t\t\tindex: '//maps.google.',\n\t\t\t\tsrc: '%id%&output=embed'\n\t\t\t}\n\t\t}\n\t},\n\n\tproto: {\n\t\tinitIframe: function() {\n\t\t\tmfp.types.push(IFRAME_NS);\n\n\t\t\t_mfpOn('BeforeChange', function(e, prevType, newType) {\n\t\t\t\tif(prevType !== newType) {\n\t\t\t\t\tif(prevType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(); // iframe if removed\n\t\t\t\t\t} else if(newType === IFRAME_NS) {\n\t\t\t\t\t\t_fixIframeBugs(true); // iframe is showing\n\t\t\t\t\t}\n\t\t\t\t}// else {\n\t\t\t\t\t// iframe source is switched, don't do anything\n\t\t\t\t//}\n\t\t\t});\n\n\t\t\t_mfpOn(CLOSE_EVENT + '.' + IFRAME_NS, function() {\n\t\t\t\t_fixIframeBugs();\n\t\t\t});\n\t\t},\n\n\t\tgetIframe: function(item, template) {\n\t\t\tvar embedSrc = item.src;\n\t\t\tvar iframeSt = mfp.st.iframe;\n\n\t\t\t$.each(iframeSt.patterns, function() {\n\t\t\t\tif(embedSrc.indexOf( this.index ) > -1) {\n\t\t\t\t\tif(this.id) {\n\t\t\t\t\t\tif(typeof this.id === 'string') {\n\t\t\t\t\t\t\tembedSrc = embedSrc.substr(embedSrc.lastIndexOf(this.id)+this.id.length, embedSrc.length);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tembedSrc = this.id.call( this, embedSrc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tembedSrc = this.src.replace('%id%', embedSrc );\n\t\t\t\t\treturn false; // break;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar dataObj = {};\n\t\t\tif(iframeSt.srcAction) {\n\t\t\t\tdataObj[iframeSt.srcAction] = embedSrc;\n\t\t\t}\n\t\t\tmfp._parseMarkup(template, dataObj, item);\n\n\t\t\tmfp.updateStatus('ready');\n\n\t\t\treturn template;\n\t\t}\n\t}\n});\n\n\n\n/*>>iframe*/\n\n/*>>gallery*/\n/**\n * Get looped index depending on number of slides\n */\nvar _getLoopedId = function(index) {\n\t\tvar numSlides = mfp.items.length;\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t_replaceCurrTotal = function(text, curr, total) {\n\t\treturn text.replace(/%curr%/gi, curr + 1).replace(/%total%/gi, total);\n\t};\n\n$.magnificPopup.registerModule('gallery', {\n\n\toptions: {\n\t\tenabled: false,\n\t\tarrowMarkup: '',\n\t\tpreload: [0,2],\n\t\tnavigateByImgClick: true,\n\t\tarrows: true,\n\n\t\ttPrev: 'Previous (Left arrow key)',\n\t\ttNext: 'Next (Right arrow key)',\n\t\ttCounter: '%curr% of %total%'\n\t},\n\n\tproto: {\n\t\tinitGallery: function() {\n\n\t\t\tvar gSt = mfp.st.gallery,\n\t\t\t\tns = '.mfp-gallery';\n\n\t\t\tmfp.direction = true; // true - next, false - prev\n\n\t\t\tif(!gSt || !gSt.enabled ) return false;\n\n\t\t\t_wrapClasses += ' mfp-gallery';\n\n\t\t\t_mfpOn(OPEN_EVENT+ns, function() {\n\n\t\t\t\tif(gSt.navigateByImgClick) {\n\t\t\t\t\tmfp.wrap.on('click'+ns, '.mfp-img', function() {\n\t\t\t\t\t\tif(mfp.items.length > 1) {\n\t\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t_document.on('keydown'+ns, function(e) {\n\t\t\t\t\tif (e.keyCode === 37) {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t} else if (e.keyCode === 39) {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t_mfpOn('UpdateStatus'+ns, function(e, data) {\n\t\t\t\tif(data.text) {\n\t\t\t\t\tdata.text = _replaceCurrTotal(data.text, mfp.currItem.index, mfp.items.length);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(MARKUP_PARSE_EVENT+ns, function(e, element, values, item) {\n\t\t\t\tvar l = mfp.items.length;\n\t\t\t\tvalues.counter = l > 1 ? _replaceCurrTotal(gSt.tCounter, item.index, l) : '';\n\t\t\t});\n\n\t\t\t_mfpOn('BuildControls' + ns, function() {\n\t\t\t\tif(mfp.items.length > 1 && gSt.arrows && !mfp.arrowLeft) {\n\t\t\t\t\tvar markup = gSt.arrowMarkup,\n\t\t\t\t\t\tarrowLeft = mfp.arrowLeft = $( markup.replace(/%title%/gi, gSt.tPrev).replace(/%dir%/gi, 'left') ).addClass(PREVENT_CLOSE_CLASS),\n\t\t\t\t\t\tarrowRight = mfp.arrowRight = $( markup.replace(/%title%/gi, gSt.tNext).replace(/%dir%/gi, 'right') ).addClass(PREVENT_CLOSE_CLASS);\n\n\t\t\t\t\tarrowLeft.click(function() {\n\t\t\t\t\t\tmfp.prev();\n\t\t\t\t\t});\n\t\t\t\t\tarrowRight.click(function() {\n\t\t\t\t\t\tmfp.next();\n\t\t\t\t\t});\n\n\t\t\t\t\tmfp.container.append(arrowLeft.add(arrowRight));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_mfpOn(CHANGE_EVENT+ns, function() {\n\t\t\t\tif(mfp._preloadTimeout) clearTimeout(mfp._preloadTimeout);\n\n\t\t\t\tmfp._preloadTimeout = setTimeout(function() {\n\t\t\t\t\tmfp.preloadNearbyImages();\n\t\t\t\t\tmfp._preloadTimeout = null;\n\t\t\t\t}, 16);\n\t\t\t});\n\n\n\t\t\t_mfpOn(CLOSE_EVENT+ns, function() {\n\t\t\t\t_document.off(ns);\n\t\t\t\tmfp.wrap.off('click'+ns);\n\t\t\t\tmfp.arrowRight = mfp.arrowLeft = null;\n\t\t\t});\n\n\t\t},\n\t\tnext: function() {\n\t\t\tmfp.direction = true;\n\t\t\tmfp.index = _getLoopedId(mfp.index + 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tprev: function() {\n\t\t\tmfp.direction = false;\n\t\t\tmfp.index = _getLoopedId(mfp.index - 1);\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tgoTo: function(newIndex) {\n\t\t\tmfp.direction = (newIndex >= mfp.index);\n\t\t\tmfp.index = newIndex;\n\t\t\tmfp.updateItemHTML();\n\t\t},\n\t\tpreloadNearbyImages: function() {\n\t\t\tvar p = mfp.st.gallery.preload,\n\t\t\t\tpreloadBefore = Math.min(p[0], mfp.items.length),\n\t\t\t\tpreloadAfter = Math.min(p[1], mfp.items.length),\n\t\t\t\ti;\n\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadAfter : preloadBefore); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index+i);\n\t\t\t}\n\t\t\tfor(i = 1; i <= (mfp.direction ? preloadBefore : preloadAfter); i++) {\n\t\t\t\tmfp._preloadItem(mfp.index-i);\n\t\t\t}\n\t\t},\n\t\t_preloadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\n\t\t\tif(mfp.items[index].preloaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar item = mfp.items[index];\n\t\t\tif(!item.parsed) {\n\t\t\t\titem = mfp.parseEl( index );\n\t\t\t}\n\n\t\t\t_mfpTrigger('LazyLoad', item);\n\n\t\t\tif(item.type === 'image') {\n\t\t\t\titem.img = $('').on('load.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t}).on('error.mfploader', function() {\n\t\t\t\t\titem.hasSize = true;\n\t\t\t\t\titem.loadError = true;\n\t\t\t\t\t_mfpTrigger('LazyLoadError', item);\n\t\t\t\t}).attr('src', item.src);\n\t\t\t}\n\n\n\t\t\titem.preloaded = true;\n\t\t}\n\t}\n});\n\n/*>>gallery*/\n\n/*>>retina*/\n\nvar RETINA_NS = 'retina';\n\n$.magnificPopup.registerModule(RETINA_NS, {\n\toptions: {\n\t\treplaceSrc: function(item) {\n\t\t\treturn item.src.replace(/\\.\\w+$/, function(m) { return '@2x' + m; });\n\t\t},\n\t\tratio: 1 // Function or number. Set to 1 to disable.\n\t},\n\tproto: {\n\t\tinitRetina: function() {\n\t\t\tif(window.devicePixelRatio > 1) {\n\n\t\t\t\tvar st = mfp.st.retina,\n\t\t\t\t\tratio = st.ratio;\n\n\t\t\t\tratio = !isNaN(ratio) ? ratio : ratio();\n\n\t\t\t\tif(ratio > 1) {\n\t\t\t\t\t_mfpOn('ImageHasSize' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.img.css({\n\t\t\t\t\t\t\t'max-width': item.img[0].naturalWidth / ratio,\n\t\t\t\t\t\t\t'width': '100%'\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\t_mfpOn('ElementParse' + '.' + RETINA_NS, function(e, item) {\n\t\t\t\t\t\titem.src = st.replaceSrc(item, ratio);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t}\n});\n\n/*>>retina*/\n _checkInstance(); }));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/magnific-popup/dist/jquery.magnific-popup.js\n// module id = 52\n// module chunks = 2 3 4","module.exports = global[\"accounting\"] = require(\"-!./accounting.js\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/accounting/accounting.js-exposed\n// module id = 68\n// module chunks = 2 3","/*!\n * accounting.js v0.4.1\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.1';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '') // strip out any cruft\n\t\t\t\t.replace(decimal, '.') // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\t\tvar power = Math.pow(10, precision);\n\n\t\t// Multiply up by precision, round accurately, then divide and use native toFixed():\n\t\treturn (Math.round(lib.unformat(value) * power) / power).toFixed(precision);\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (typeof exports !== 'undefined') {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/accounting/accounting.js\n// module id = 96\n// module chunks = 2 3","jQuery.fn.giveHintCss = function(action, settings ) {\n\treturn this.each(function(){\n\t\tvar $this = jQuery(this);\n\t\tsettings = jQuery.extend({\n\t\t\tlabel: ''\n\t\t}, settings );\n\n\t\tvar $tooltip = $this.next('span.give-hint-tooltip-js');\n\t\tif( ! $tooltip.length ){\n\t\t\tvar label = ! settings.label.length ? $this.data('hint-aria-label') : settings.label;\n\n\t\t\t// bailout.\n\t\t\tif( ! label.length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$this.after( '' );\n\t\t\t$tooltip = $this.next();\n\n\t\t\t$tooltip.css({\n\t\t\t\ttop:-( $this.outerHeight() ),\n\t\t\t\tleft: - ($this.outerWidth()/2 )\n\t\t\t});\n\t\t}\n\n\n\t\tif ( action === 'show' ) {\n\t\t\t$tooltip.addClass( 'hint--always' );\n\t\t}else if ( action === 'hide' ) {\n\t\t\t$tooltip.removeClass( 'hint--always' );\n\t\t}\n\t});\n};\n\n// Qtip2 backward compatibility.\njQuery(document).ready(function ($) {\n\tvar qtip_tooltips = $('[data-tooltip]');\n\n\t// Add hintcss tooltip to existing qtip.\n\tif (qtip_tooltips.length) {\n\t\tqtip_tooltips.each(function (index, tooltip) {\n\t\t\ttooltip = ( tooltip instanceof jQuery ) ? tooltip : $(tooltip);\n\t\t\treset_qtip(tooltip);\n\t\t});\n\t}\n\n\t// Add hintcss tooltip to dynamically created qtip.\n\t$('body').on('hover', '[data-tooltip]', function () {\n\t\treset_qtip($(this));\n\t});\n\n\t/**\n\t * Reset qtip to hintcss\n\t * @param tooltip\n\t */\n\tfunction reset_qtip(tooltip) {\n\t\tif (!tooltip.is('[class*=\"hint\"]')) {\n\t\t\tvar classes = tooltip.attr('class'),\n\t\t\t\ticon_classes = [],\n\t\t\t\tlabel_length = tooltip.data('tooltip').split( ' ' ).length;\n\n\t\t\tif (classes) {\n\t\t\t\tclasses = classes.split(' ');\n\t\t\t\ticon_classes = $.grep(classes, function (item) {\n\t\t\t\t\treturn ( -1 !== item.indexOf('give-icon') );\n\t\t\t\t});\n\n\t\t\t\tif (icon_classes.length) {\n\t\t\t\t\t// Set icon classes string.\n\t\t\t\t\ticon_classes = icon_classes.join(' ');\n\n\t\t\t\t\t// Remove icon class.\n\t\t\t\t\ttooltip.removeClass(icon_classes);\n\n\t\t\t\t\t// Add icon.\n\t\t\t\t\ttooltip.append('');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add hint.css related classes.\n\t\t\ttooltip.addClass('hint--top');\n\n\t\t\tif( 15 < label_length ) {\n\t\t\t\ttooltip.addClass('hint--large');\n\t\t\t}else if( 7 < label_length ) {\n\t\t\t\ttooltip.addClass('hint--medium');\n\t\t\t}\n\n\t\t\ttooltip.attr('aria-label', tooltip.data('tooltip') );\n\t\t}\n\t}\n});\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/plugins/give-hint.css.js"],"sourceRoot":""}