{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///js/give.js","webpack:///webpack/bootstrap a540077f58150dcced64","webpack:///external \"jQuery\"","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/accounting/accounting.js-exposed","webpack:///./node_modules/accounting/accounting.js","webpack:///./node_modules/magnific-popup/dist/jquery.magnific-popup.js","webpack:///./assets/src/js/plugins/give-hint.css.js","webpack:///./assets/src/js/plugins/give-api/api.js","webpack:///./assets/src/js/plugins/give-api/notice.js","webpack:///./assets/src/js/plugins/give-api/form.js","webpack:///./assets/src/js/plugins/give-api/donor.js","webpack:///./assets/src/js/plugins/dynamicListener.js","webpack:///(webpack)/buildin/amd-options.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:///(webpack)/buildin/module.js","webpack:///./assets/src/js/frontend/give-donations.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:///./assets/src/js/frontend/give-donor-wall.js","webpack:///./node_modules/gravatar/index.js","webpack:///./node_modules/gravatar/lib/gravatar.js","webpack:///./node_modules/blueimp-md5/js/md5.js","webpack:///./node_modules/querystring-es3/index.js","webpack:///./node_modules/querystring-es3/decode.js","webpack:///./node_modules/querystring-es3/encode.js"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE_0__","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","g","Function","eval","e","window","global","undefined","isString","obj","charCodeAt","substr","isArray","nativeIsArray","toString","isObject","defaults","defs","key","map","iterator","context","j","results","nativeMap","length","checkPrecision","val","base","Math","round","abs","isNaN","checkCurrencyFormat","format","lib","settings","currency","match","pos","neg","replace","zero","version","symbol","decimal","thousand","precision","grouping","number","Array","unformat","parse","value","regex","RegExp","unformatted","parseFloat","toFixed","power","pow","formatNumber","opts","usePrecision","negative","parseInt","mod","split","formatMoney","formats","formatColumn","list","padAfterSymbol","indexOf","maxLength","useFormat","fVal","join","accounting","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","apply","$","mfp","_prevStatus","_document","_prevContentType","_wrapClasses","_currPopupType","MagnificPopup","_isJQ","_window","_mfpOn","f","ev","on","_getEl","className","appendTo","html","raw","el","document","createElement","innerHTML","appendChild","_mfpTrigger","data","triggerHandler","st","callbacks","charAt","toLowerCase","slice","_getCloseBtn","type","currTemplate","closeBtn","closeMarkup","tClose","_checkInstance","magnificPopup","instance","init","supportsTransitions","style","v","pop","constructor","appVersion","navigator","isLowIE","isIE8","all","addEventListener","isAndroid","test","isIOS","supportsTransition","probablyMobile","userAgent","popupsCache","open","isObj","items","toArray","index","item","parsed","isOpen","updateItemHTML","types","mainEl","eq","extend","fixedContentPos","modal","closeOnContentClick","closeOnBgClick","showCloseBtn","enableEscapeKey","bgOverlay","close","wrap","attr","_checkIfClose","target","container","contentContainer","preloader","tLoading","toUpperCase","closeBtnInside","template","values","close_replaceWith","append","alignTop","css","overflow","overflowY","overflowX","top","scrollTop","position","fixedBgPos","height","keyCode","updateSize","addClass","windowHeight","wH","windowStyles","_hasScrollBar","_getScrollbarSize","marginRight","isIE7","classesToadd","mainClass","_addClassToMFP","add","prependTo","body","_lastFocusedEl","activeElement","setTimeout","content","_setFocus","_onFocusIn","removalDelay","_close","classesToRemove","REMOVING_CLASS","detach","empty","_removeClassFromMFP","off","removeAttr","currItem","autoFocusLast","focus","prevHeight","winHeight","zoomLevel","documentElement","clientWidth","innerWidth","innerHeight","parseEl","markup","removeClass","newContent","appendContent","preloaded","prepend","find","tagName","src","hasClass","addGroup","options","eHandler","mfpEl","_openClick","eName","delegate","midClick","which","ctrlKey","metaKey","altKey","shiftKey","disableOn","isFunction","width","preventDefault","stopPropagation","updateStatus","status","text","stopImmediatePropagation","closeOnContent","closeOnBg","contains","cName","scrollHeight","_parseMarkup","arr","each","EVENT_NS","replaceWith","is","scrollbarSize","scrollDiv","cssText","offsetWidth","removeChild","proto","registerModule","push","fn","jqEl","itemOpts","arguments","_hiddenClass","_inlinePlaceholder","_lastInlineElement","_putInlineElementsBack","after","hiddenClass","tNotFound","initInline","CLOSE_EVENT","getInline","inlineSt","inline","parent","parentNode","inlineElement","_ajaxCur","_removeAjaxCursor","_destroyAjaxRequest","req","abort","cursor","tError","initAjax","ajax","getAjax","url","success","textStatus","jqXHR","temp","xhr","finished","error","loadError","_imgInterval","_getTitle","title","image","titleSrc","verticalFit","initImage","imgSt","ns","resizeImage","img","decr","_onImageHasSize","hasSize","clearInterval","isCheckingImgSize","imgHidden","findImageSize","counter","mfpSetInterval","delay","setInterval","naturalWidth","getImage","guard","onLoadComplete","complete","loaded","onLoadError","alt","clone","img_replaceWith","loading","hasMozTransform","getHasMozTransform","MozTransform","enabled","easing","duration","opener","element","initZoom","zoomSt","zoom","openTimeout","animatedImg","getElToAnimate","newImg","transition","cssObj","zIndex","left","-webkit-backface-visibility","t","showMainContent","_allowZoom","clearTimeout","_getItemToZoom","_getOffset","remove","isLarge","offset","paddingTop","paddingBottom","offsetHeight","_fixIframeBugs","isShowing","srcAction","patterns","youtube","id","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","lastIndexOf","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","min","preloadAfter","_preloadItem","replaceSrc","ratio","initRetina","devicePixelRatio","retina","max-width","jQuery","giveHintCss","action","$this","label","$tooltip","outerHeight","outerWidth","ready","reset_qtip","tooltip","classes","icon_classes","label_length","grep","qtip_tooltips","__webpack_exports__","__WEBPACK_IMPORTED_MODULE_0__notice__","__WEBPACK_IMPORTED_MODULE_1__form__","__WEBPACK_IMPORTED_MODULE_2__donor__","Give","subHelperObjs","trigger","formatCurrency","price","args","$form","format_args","getGlobalVar","trim","form","getInfo","actual_price","afterPoint","lastThree","otherNumbers","result","lastDotPosition","substring","floor","unFormatCurrency","decimal_separator","getParameterByName","location","href","exec","decodeURIComponent","str","giveGlobals","getGlobal","give_global_vars","give_vars","setCache","cache","getCache","formObj","__getCookie","cookie","parts","shift","notice","donor","renderNotice","notice_code","$container","$notice","getNotice","insertBefore","show","error_code","notice_msg","formatted_amount","getMinimumAmount","getMaximumAmount","field","formatCreditCard","__initialize_cache","__sendBackToForm","isFormExist","getElementsByName","disable","is_disable","prop","formatAmount","amount","gateway","hasAttribute","setInfo","getGateway","getVariablePrices","formLevels","variable_prices","price_id","getPriceID","is_amount","current_amount","variable_price","getAmount","getNonce","nonce","getNonceInfo","createdInDonorSession","resetNonce","post","give_form_id","response","resetAllNonce","Promise","resolve","reject","createUserNonceField","give_form_hash","give_form_user_register_hash","done","autoSelectDonationLevel","blur","autoSetMultiLevel","$level","parents","level_amount","level_price_id","form_id","payment_mode","$form_wrapper","display_modal","display_button","display_reveal","level_id","level_field","give_open_form_modal","hide","slideDown","isValidDonationAmount","min_amount","max_amount","$item","$forms","card_number","card_cvc","card_expiry","payment","hasSession","isLoggedIn","globalSope","getConditionalCallback","selector","callback","matches","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","ownerDocument","querySelectorAll","addDynamicEventListener","rootElement","eventType","__webpack_amd_options__","__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__","__WEBPACK_IMPORTED_MODULE_5__plugins_give_api_api__","__WEBPACK_IMPORTED_MODULE_6__give_donations__","__WEBPACK_IMPORTED_MODULE_7__give_ajax__","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","cvcLength","luhn","num","card","pattern","_i","_j","_len","_len1","_ref","digit","digits","odd","sum","reverse","$target","selection","createRange","currPair","last","prevPair","_error","chars","chr","fullWidth","halfWidth","idx","currentTarget","re","upperLength","String","fromCharCode","m1","m2","input","allTypes","cardType","_results","toggleClass","formatCardCVC","formatCardExpiry","cardExpiryVal","month","prefix","year","Date","getFullYear","validateCardNumber","validateCardExpiry","currentTime","expiry","setMonth","getMonth","validateCardCVC","cvc","groups","mon","sep","_","UIBlocker","transitionDelay","blockWith","deferred","Deferred","rest","event","first","blockUI","message","always","unblockUI","then","promise","makeBlocked","setup","install","themedCSS","full","msg","ignoreIfBlocked","overlayCSS","onOverlayClick","pageBlock","fadeOut","jquery","node","display","onUnblock","lyr1","lyr2","lyr3","z","baseZ","msie","forceIframe","iframeSrc","theme","blockMsgClass","layers","$par","draggable","handle","cancel","expr","setExpr","support","boxModel","ie6","allowBodyStretch","sz","fixT","fixL","setExpression","quirksmodeOffsetHack","centerY","marginTop","expression","nodeType","showOverlay","fadeIn","cb","onBlock","noOp","cb1","cb2","_fadeIn","bind","pageBlockEls","focusableElements","focusInput","center","centerX","timeout","to","unblock","count","$el","removeData","els","children","filter","cursorReset","stop","reset","w","cssW","b","bindEvents","events","handler","unbind","constrainTabKey","fwd","back","x","y","noop","documentMode","growlUI","onClose","$m","callBlock","growlCSS","mouseover","displayBlock","fadeTo","mouseout","block","fullOpts","padding","margin","textAlign","color","border","backgroundColor","opacity","right","-webkit-border-radius","-moz-border-radius","border-radius","previousUnderscore","ArrayProto","ObjProto","SymbolProto","Symbol","nativeKeys","keys","nativeCreate","create","Ctor","_wrapped","VERSION","builtinIteratee","optimizeCb","func","argCount","collection","accumulator","iteratee","identity","matcher","Infinity","restArguments","startIndex","max","baseCreate","shallowProperty","has","path","deepGet","MAX_ARRAY_INDEX","getLength","isArrayLike","forEach","collect","currentKey","createReduce","dir","reducer","memo","initial","reduce","foldl","inject","reduceRight","foldr","detect","predicate","keyFinder","findIndex","findKey","select","negate","every","some","any","includes","include","fromIndex","invoke","contextPath","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","sample","random","rand","sortBy","criteria","sort","a","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","size","pass","head","take","array","tail","drop","compact","Boolean","flatten","shallow","strict","output","isArguments","len","without","otherArrays","difference","uniq","unique","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","mid","createIndexFinder","predicateFind","range","start","step","ceil","chunk","executeBound","sourceFunc","boundFunc","callingContext","TypeError","bound","callArgs","concat","partial","boundArgs","placeholder","bindAll","Error","memoize","hasher","address","wait","defer","throttle","previous","later","leading","now","throttled","remaining","trailing","debounce","immediate","debounced","callNow","wrapper","compose","times","before","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","allKeys","mapObject","pairs","invert","functions","methods","names","createAssigner","keysFunc","source","extendOwn","assign","keyInObj","pick","omit","props","tap","interceptor","isMatch","deepEq","aStack","bStack","valueOf","areArrays","aCtor","bCtor","isEqual","isEmpty","isElement","nodelist","childNodes","Int8Array","isFinite","isSymbol","isNumber","isNull","isUndefined","noConflict","constant","propertyOf","accum","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","string","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeRegExp","escapeChar","oldSettings","variable","render","chain","_chain","chainResult","mixin","toJSON","webpackPolyfill","deprecate","paths","update_billing_state_field","postData","country","field_name","xhrFields","withCredentials","states_label","states_found","default_state","states_require","closest","$city","city_require","show_field","doc","fail","console","log","toggleError","errored","alert","new_payment_gateways","$gateways_li","old_payment_gateway","parent_form","current_total","$parent_form","donation_amount","pre_focus_amount","this_value","value_min","value_max","value_now","formatted_total","$default_level","slideUp","invalid_minimum_notice","invalid_maximum_notice","$fieldset_wrapper","slideToggle","toggle","$inputField","give_form","card_type","give_load_gateway","form_object","loading_element","give_total","give_form_id_prefix","background","give_payment_mode","_typeof","nonceInfo","nonceTime","timeDiff","this_form","loading_animation","checkout_response","give_fl_trigger","parseJSON","fields","complete_purchase_val","give_ajax","give_user_login","give_user_pass","email","ajaxNonce","JSON","give_purchase_form","checkValidity","serialize","submit","receiptContainer","getElementById","shortcode_atts","getAttribute","donation_id","__WEBPACK_IMPORTED_MODULE_0_float_labels_js__","__WEBPACK_IMPORTED_MODULE_0_float_labels_js___default","give_change_html5_form_field_validation_message","this_button","$payment_field","show_field_ids","payment_field_id","this_form_wrap","this_amount_field","this_amount","give_notices","update_profile_state_field","persisted","performance","navigation","$form_wrap","magnific_options","main_class","close_on_bg_click","beforeOpen","$form_content","$form_title","$form_goal","$form_error","$form_errors","$error","$mfp_content","not","give_float_labels","rebuild","exclude","prioritize","$input_fields","form_translation","oninvalid","setCustomValidity","validity","valid","Plugin","el_","isString_","config_","options_","selectors_","init_","destroy","loop_","removeEventListener","removeClasses_","reset_","floatLabel_","defaults_","customEvent","customLabel","customPlaceholder","inputRegex","requiredClass","transform","initEvents_","classList","prefixed_","onBlur_","change","onInput_","onFocus_","onReset_","addRemove_","bool","build_","labelEl","getLabel_","setLabel_","setPlaceholder_","wrapLabel_","handleEvents_","current_","createEl_","tag","attributes","setAttribute","extend_","extenders","isValidField_","hasParent_","getLabelText_","labelText","textContent","placeholderText","nodeName","isInvalidInput","isInvalidSelect","elCallback","fieldCallback","config","resetFields_","fragment","createDocumentFragment","firstElementChild","childEl","replaceChild","resetPlaceholder_","originalPlaceholder","removeAttribute","setSelectPlaceholder_","Option","selectedIndex","defaultSelected","class","_classCallCheck","Constructor","__WEBPACK_IMPORTED_MODULE_0__plugins_dynamicListener_js__","_createClass","defineProperties","descriptor","writable","protoProps","staticProps","GiveDonorWall","readMoreBtnEvent","loadMoreBtnEvent","loadGravatars","evt","getElementsByClassName","loaderButton","shortcodeAttrHiddenField","beforeSend","res","insertAdjacentHTML","shortcode","loadGravatar","gravatar","gridWraps","gravatarContainer","donorEmail","hasValidGravatar","gridWrap","querySelector","gravatarElement","params","removing","protocol","getHash","MD5_REGEX","md5","getQueryString","queryData","querystring","stringify","baseURL","query","profile_url","https","safeAdd","lsw","bitRotateLeft","cnt","md5cmn","q","md5ff","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","rstr2binl","length8","rstrMD5","rstrHMACMD5","hash","bkey","ipad","opad","rstr2hex","hexTab","str2rstrUTF8","encodeURIComponent","rawMD5","hexMD5","rawHMACMD5","k","hexHMACMD5","decode","encode","qs","regexp","maxKeys","kstr","vstr","xs","stringifyPrimitive","objectKeys","ks"],"mappings":"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","file":"js/give.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Give\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"Give\"] = factory(root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Give\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"Give\"] = factory(root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__) {\nreturn /******/ (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 = 14);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */\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/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {module.exports = global[\"accounting\"] = __webpack_require__(3);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 3 */\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/* 4 */\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__(0)], __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/* 5 */\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/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__notice__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__form__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__donor__ = __webpack_require__(9);\n/* global accounting, give_global_vars, jQuery */\n\n\n\n\n/**\n * This API is under development.\n *\n * Currently used only for internal purpose.\n */\nvar 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\t// Initialize all init methods of 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: this.getGlobalVar('decimal_separator'),\n\t\t\t\tthousand: this.getGlobalVar('thousands_separator'),\n\t\t\t\tprecision: parseInt(this.getGlobalVar('number_decimals')),\n\t\t\t\tcurrency: this.getGlobalVar('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 = parseFloat(price).toFixed(format_args.precision),\n\t\t\t\t afterPoint = args.precision ? '.0' : '',\n\t\t\t\t lastThree = '',\n\t\t\t\t otherNumbers = '',\n\t\t\t\t result = '',\n\t\t\t\t lastDotPosition = '';\n\n\t\t\t\tactual_price = accounting.unformat(actual_price, '.').toString();\n\t\t\t\tactual_price = actual_price.toString();\n\n\t\t\t\tif (actual_price.indexOf('.') > 0) {\n\t\t\t\t\tafterPoint = actual_price.substring(actual_price.indexOf('.'), actual_price.length);\n\t\t\t\t}\n\n\t\t\t\tactual_price = Math.floor(actual_price).toString();\n\t\t\t\tlastThree = actual_price.substring(actual_price.length - 3);\n\t\t\t\totherNumbers = actual_price.substring(0, actual_price.length - 3);\n\n\t\t\t\tif ('' !== otherNumbers) {\n\t\t\t\t\tlastThree = format_args.thousand + lastThree;\n\t\t\t\t}\n\n\t\t\t\tresult = otherNumbers.replace(/\\B(?=(\\d{2})+(?!\\d))/g, format_args.thousand) + lastThree + afterPoint;\n\t\t\t\tlastDotPosition = result.lastIndexOf('.');\n\t\t\t\tresult = result.slice(0, lastDotPosition) + (result.slice(lastDotPosition) + '000000000000').substr(0, args.precision + 1);\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\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(accounting.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 Variable in global param.\n *\n * @return {string}\n */\n\t\tgetGlobalVar: function getGlobalVar(str) {\n\t\t\tvar giveGlobals = this.getGlobal();\n\n\t\t\treturn 'undefined' === typeof giveGlobals[str] ? '' : giveGlobals[str];\n\t\t},\n\n\t\t/**\n * Get global param\n *\n * @since 2.2.4\n *\n * @return {object} WordPress localized global param.\n */\n\t\tgetGlobal: function getGlobal() {\n\t\t\treturn 'undefined' === typeof give_global_vars ? give_vars : give_global_vars;\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 = void 0,\n\t\t\t formObj = Give.cache['form_' + Give.form.fn.getInfo('form-id', $form)];\n\n\t\t\tif ($form.length) {\n\t\t\t\tcache = 'undefined' !== typeof formObj ? formObj[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 * Get cookie\n * Note: only for internal use\n *\n * @since 2.2.20\n * @private\n *\n * @param {string} name Cookie name\n * @return {string}\n */\n\t\t__getCookie: function __getCookie(name) {\n\t\t\tvar value = '; ' + document.cookie,\n\t\t\t parts = value.split('; ' + name + '=');\n\n\t\t\tvar cookie = '';\n\n\t\t\tif (2 === parts.length) {\n\t\t\t\tcookie = parts.pop().split(';').shift();\n\t\t\t}\n\n\t\t\treturn cookie;\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.notice = __WEBPACK_IMPORTED_MODULE_0__notice__[\"a\" /* default */];\nGive.form = __WEBPACK_IMPORTED_MODULE_1__form__[\"a\" /* default */];\nGive.donor = __WEBPACK_IMPORTED_MODULE_2__donor__[\"a\" /* default */];\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Give);\n\n/***/ }),\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* globals Give, jQuery */\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\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\n/***/ }),\n/* 8 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* globals Give, jQuery */\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n\tinit: function init() {\n\t\tthis.fn.field.formatCreditCard(jQuery('form.give-form'));\n\t\tthis.fn.__initialize_cache();\n\n\t\t// Run code on after window load.\n\t\twindow.addEventListener('load', function () {\n\t\t\tGive.form.fn.__sendBackToForm();\n\t\t});\n\t},\n\n\tfn: {\n\n\t\t/**\n * Check if donation form exist on page or not\n *\n * @since 2.2.2\n *\n * @return {boolean}\n */\n\t\tisFormExist: function isFormExist() {\n\t\t\treturn !!document.getElementsByName('give-form-hash').length;\n\t\t},\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 * Get form's nonce information\n *\n * @since 2.3.1\n *\n * @param {object} $form\n *\n * @return {object}\n */\n\t\tgetNonceInfo: function getNonceInfo($form) {\n\t\t\tvar nonce = {},\n\t\t\t $nonceField = void 0;\n\n\t\t\t// Bailout\n\t\t\tif (!$form.length) {\n\t\t\t\treturn nonce;\n\t\t\t}\n\n\t\t\tnonce.el = $form.find('input[name=\"give-form-hash\"]');\n\n\t\t\tif (!nonce.el.length) {\n\t\t\t\treturn nonce;\n\t\t\t}\n\n\t\t\tnonce.value = $form.find('input[name=\"give-form-hash\"]').val();\n\t\t\tnonce.value = 'undefined' === typeof nonce.value || !nonce.value ? '' : nonce.value;\n\n\t\t\tnonce.createdInDonorSession = '1' === nonce.el.attr('data-donor-session');\n\n\t\t\treturn nonce;\n\t\t},\n\n\t\t/**\n * Reset form nonce.\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.fn.getGlobalVar('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 * Reset form all nonce.\n *\n * @since 2.2.0\n *\n * @param {object} $form Donation form object.\n *\n * @returns {object}\n */\n\t\tresetAllNonce: function resetAllNonce($form) {\n\t\t\t// Return false, if form is missing.\n\t\t\tif (!$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\treturn new Promise(function (resolve, reject) {\n\t\t\t\t//Post via AJAX to Give\n\t\t\t\tjQuery.post(Give.fn.getGlobalVar('ajaxurl'), {\n\t\t\t\t\taction: 'give_donation_form_reset_all_nonce',\n\t\t\t\t\tgive_form_id: Give.form.fn.getInfo('form-id', $form)\n\t\t\t\t}, function (response) {\n\t\t\t\t\t// Process only if get response successfully.\n\t\t\t\t\tif (!response.success) {\n\t\t\t\t\t\treturn reject(response);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar createUserNonceField = $form.find('input[name=\"give-form-user-register-hash\"]');\n\n\t\t\t\t\t// Update nonce field.\n\t\t\t\t\tGive.form.fn.setInfo('nonce', response.data.give_form_hash, $form, '');\n\n\t\t\t\t\t// Update create user nonce field.\n\t\t\t\t\tif (createUserNonceField.length) {\n\t\t\t\t\t\tcreateUserNonceField.val(response.data.give_form_user_register_hash);\n\t\t\t\t\t}\n\n\t\t\t\t\tGive.form.fn.disable($form, false);\n\n\t\t\t\t\t/**\n * Fire custom event handler when update all nonce of donation form\n *\n * @since 2.2.0\n * @access access\n */\n\t\t\t\t\tjQuery(document).trigger('give_reset_all_nonce', [response.data]);\n\n\t\t\t\t\treturn resolve(response);\n\t\t\t\t}).done(function () {\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 * 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/impress-org/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\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\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\n/***/ }),\n/* 9 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* globals Give, jQuery */\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n\tfn: {\n\t\t/**\n * Check if donor has session or not\n *\n * @since 2.3.1\n *\n * @param {object} $form\n * @return {boolean}\n */\n\t\thasSession: function hasSession($form) {\n\t\t\tif (!$form.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !!Give.fn.__getCookie(Give.fn.getGlobalVar('session_cookie_name'));\n\t\t},\n\n\t\t/**\n * Check if donor is logged with WP User\n *\n * @since 2.3.1\n *\n * @return {boolean}\n */\n\t\tisLoggedIn: function isLoggedIn() {\n\t\t\treturn jQuery('body').hasClass('logged-in');\n\t\t}\n\t}\n});\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\n(function (globalSope) {\n 'use strict';\n\n /**\n * Including this file adds the `addDynamicListener` to the ELement prototype.\n * \n * The dynamic listener gets an extra `selector` parameter that only calls the callback\n * if the target element matches the selector.\n * \n * The listener has to be added to the container/root element and the selector should match\n * the elements that should trigger the event.\n * \n * Browser support: IE9+\n */\n\n // Polyfil Element.matches\n // https://developer.mozilla.org/en/docs/Web/API/Element/matches#Polyfill\n\n if (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n\n /**\n * Returns a modified callback function that calls the\n * initial callback function only if the target element matches the given selector\n * \n * @param {string} selector \n * @param {function} callback \n */\n function getConditionalCallback(selector, callback) {\n return function (e) {\n if (!e.target) return;\n if (!e.target.matches(selector)) return;\n callback.apply(this, arguments);\n };\n }\n\n /**\n * \n * \n * @param {Element} rootElement The root element to add the linster too.\n * @param {string} eventType The event type to listen for.\n * @param {string} selector The selector that should match the dynamic elements.\n * @param {function} callback The function to call when an event occurs on the given selector.\n * @param {boolean|object} options Passed as the regular `options` parameter to the addEventListener function\n * Set to `true` to use capture.\n * Usually used as an object to add the listener as `passive`\n */\n globalSope.addDynamicEventListener = function (rootElement, eventType, selector, callback, options) {\n rootElement.addEventListener(eventType, getConditionalCallback(selector, callback), options);\n };\n})(window);\n\n/***/ }),\n/* 11 */,\n/* 12 */\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/* 13 */,\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(15);\nmodule.exports = __webpack_require__(16);\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 16 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"init\", function() { return init; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fn\", function() { return fn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"form\", function() { return form; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"notice\", function() { return notice; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cache\", function() { return cache; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"donor\", function() { return donor; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery_payment__ = __webpack_require__(17);\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__(2);\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__(18);\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__(4);\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__(5);\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__plugins_give_api_api__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__give_donations__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__give_donations___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6__give_donations__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__give_ajax__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__give_ajax___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7__give_ajax__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__give_misc__ = __webpack_require__(24);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__give_donor_wall__ = __webpack_require__(26);\n// Plugins\n\n\n\n\n\n// Give plugins.\n\n\n// Give API.\n\n\n// Give core.\n\n\n\n\n\nvar init = __WEBPACK_IMPORTED_MODULE_5__plugins_give_api_api__[\"a\" /* default */].init,\n fn = __WEBPACK_IMPORTED_MODULE_5__plugins_give_api_api__[\"a\" /* default */].fn,\n form = __WEBPACK_IMPORTED_MODULE_5__plugins_give_api_api__[\"a\" /* default */].form,\n notice = __WEBPACK_IMPORTED_MODULE_5__plugins_give_api_api__[\"a\" /* default */].notice,\n cache = __WEBPACK_IMPORTED_MODULE_5__plugins_give_api_api__[\"a\" /* default */].cache,\n donor = __WEBPACK_IMPORTED_MODULE_5__plugins_give_api_api__[\"a\" /* default */].donor;\n\n\n/***/ }),\n/* 17 */\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/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(0);\n__webpack_require__(19);\nvar _ = __webpack_require__(20);\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/* 19 */\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__(12) && __webpack_require__(12).jQuery) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0)], __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/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 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` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\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;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var 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 nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\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 their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\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 // The 2-argument case is omitted because we’re not using it.\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 var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\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 shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\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 = shallowProperty('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 var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\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 var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\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 keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\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 = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, 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 || typeof iteratee == 'number' && typeof obj[0] != 'object' && 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 != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\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 || typeof iteratee == 'number' && typeof obj[0] != 'object' && 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 != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\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 var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, 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, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\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 var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\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 (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\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 = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\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 || array.length < 1) return n == null ? 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 || array.length < 1) return n == null ? 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, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 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) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\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 = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\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 // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the 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 && !iteratee) {\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 = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, 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 var j;\n for (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 = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\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 // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\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. Passing by pairs is the reverse of _.pairs.\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 var createPredicateIndexFinder = function(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 var createIndexFinder = function(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 if (!step) {\n step = stop < start ? -1 : 1;\n }\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 // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\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 = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\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 by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\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] === placeholder ? 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 _.partial.placeholder = _;\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 = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\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 = restArguments(function(func, wait, args) {\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 timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\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\n var throttled = 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 throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\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, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\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 _.restArguments = restArguments;\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 var collectNonEnumProps = function(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 for (var index = 0; index < length; index++) {\n var 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 // The opposite of _.object.\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 // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\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 (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\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 // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\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 = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), 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, deepEq;\n 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 // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\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 case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(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, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], 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), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\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 !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(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, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\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 // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\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 // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\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 escapeRegExp = /\\\\|'|\\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(escapeRegExp, 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 offset.\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 var render;\n try {\n 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 chainResult = 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 chainResult(this, func.apply(_, args));\n };\n });\n return _;\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 chainResult(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 chainResult(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 String(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}());\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(21)(module)))\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\n/* globals jQuery, Give */\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.fn.getGlobalVar('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 ('undefined' !== typeof response.states_found && 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 ('undefined' !== typeof response.states_require && 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\n\t\t\t\t\t\tvar $city = $form.find('input[name=\"card_city\"]');\n\t\t\t\t\t\t// check if city fields is require or not\n\t\t\t\t\t\tif ('undefined' !== typeof response.city_require && true === response.city_require) {\n\t\t\t\t\t\t\t$city.closest('p').find('label .give-required-indicator').removeClass('give-hidden').removeClass('required');\n\t\t\t\t\t\t\t$city.attr('required', true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$city.closest('p').find('label .give-required-indicator').addClass('give-hidden').addClass('required');\n\t\t\t\t\t\t\t$city.removeAttr('required');\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 ('undefined' !== typeof response.show_field && 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/impress-org/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/impress-org/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).on('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/* 23 */\n/***/ (function(module, exports) {\n\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, GiveWP\n * @license: http://opensource.org/licenses/gpl-2.0.php GNU Public License\n */\n\n/* globals jQuery, Give */\njQuery(document).ready(function ($) {\n\t// Reset nonce only if form exists.\n\tif (Give.form.fn.isFormExist()) {\n\n\t\t//Hide loading elements\n\t\t$('.give-loading-text').hide();\n\n\t\t// Update and invalidate cached nonce.\n\t\t$('.give-form').each(function (index, $form) {\n\t\t\tvar nonceInfo = void 0,\n\t\t\t nonceTime = void 0,\n\t\t\t currentTime = void 0,\n\t\t\t timeDiff = void 0;\n\n\t\t\t$form = jQuery($form);\n\t\t\tnonceInfo = Give.form.fn.getNonceInfo($form);\n\n\t\t\tif (!nonceInfo.el.attr('data-donor-session')) {\n\t\t\t\t// Backward compatibility.\n\t\t\t\t// @see https://github.com/impress-org/give/issues/3820\n\t\t\t\tGive.form.fn.resetAllNonce($form);\n\t\t\t} else if ((nonceInfo.createdInDonorSession || Give.donor.fn.hasSession($form)) && !Give.donor.fn.isLoggedIn()) {\n\t\t\t\t// Reset nonce if nonce cached when donor was in session or logged in.\n\t\t\t\tGive.form.fn.resetAllNonce($form);\n\t\t\t}\n\n\t\t\tnonceTime = (parseInt(nonceInfo.el.data('time')) + parseInt(nonceInfo.el.data('nonce-life'))) * 1000, currentTime = Date.now();\n\n\t\t\t// We need time in ms.\n\t\t\ttimeDiff = nonceTime - currentTime;\n\n\t\t\ttimeDiff = 0 > timeDiff ? timeDiff : timeDiff + 100;\n\n\t\t\t// Update nonce in background.\n\t\t\twindow.setTimeout(function () {\n\t\t\t\tGive.form.fn.resetAllNonce($form);\n\t\t\t}, timeDiff);\n\t\t});\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.fn.getGlobalVar('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.fn.getGlobalVar('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.fn.getGlobalVar('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.fn.getGlobalVar('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\tGive.form.fn.resetAllNonce(this_form).then(function (response) {\n\t\t\t\t\t//reload the selected gateway so it contains their logged in information\n\t\t\t\t\tgive_load_gateway(this_form, this_form.find('.give-gateway-option-selected input').val());\n\t\t\t\t});\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.fn.getGlobalVar('ajax_vars').ajaxNonce\n\t\t};\n\n\t\t$this.text(Give.fn.getGlobalVar('loading'));\n\t\t$this.attr('disabled', 'disabled');\n\n\t\t$.post(Give.fn.getGlobalVar('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 = $(this);\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.fn.getGlobalVar('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.fn.getGlobalVar('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\t$this.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\t});\n\n\t/**\n * Render receipt by Ajax\n *\n * @since 2.2.0\n */\n\tvar receiptContainer = document.getElementById('give-receipt');\n\n\tif (receiptContainer) {\n\n\t\tvar data = {\n\t\t\taction: 'get_receipt',\n\t\t\tshortcode_atts: receiptContainer.getAttribute('data-shortcode')\n\t\t},\n\t\t donation_id = Give.fn.getParameterByName('donation_id');\n\n\t\tvar cookie_name = Give.fn.getGlobalVar('session_cookie_name');\n\n\t\t// Set cookie.\n\t\tdata[cookie_name] = Give.fn.__getCookie(Give.fn.getGlobalVar('session_cookie_name'));\n\n\t\t// Set donation id, if exists.\n\t\tif (null !== donation_id) {\n\t\t\tdata['donation_id'] = donation_id;\n\t\t}\n\n\t\t$.ajax({\n\t\t\turl: Give.fn.getGlobalVar('ajaxurl'),\n\t\t\tmethod: 'GET',\n\t\t\tdata: data,\n\t\t\tsuccess: function success(response) {\n\t\t\t\treceiptContainer.innerHTML = response;\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.fn.getGlobalVar('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\tnonce: Give.form.fn.getNonce(form_object)\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/* 24 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_float_labels_js__ = __webpack_require__(25);\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/* globals jQuery, Give*/\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 give-modal'\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')) {\n\t\t\treturn;\n\t\t}\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');\n\n\t\t\tif (form.length) {\n\t\t\t\tform[0].reset();\n\t\t\t\tGive.form.fn.resetAllNonce(form);\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.fn.getGlobal().magnific_options.main_class,\n\t\tcloseOnBgClick: Give.fn.getGlobal().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], .give-honeypot',\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.fn.getGlobal().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.fn.getGlobal().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.fn.getGlobalVar('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/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Float Labels\n * @version: 3.3.5\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\tvar self = this;\n\t\t\tself.initEvents_();\n\t\t\tself.loop_( function( el, i ) {\n\t\t\t\tvar style = self.config_[i].style;\n\t\t\t\tel.addEventListener( 'reset', self.events.reset );\n\t\t\t\tel.classList.add( self.prefixed_( 'form' ));\n\t\t\t\tif( style ) {\n\t\t\t\t\tel.classList.add( self.prefixed_( 'style-' + style ));\n\t\t\t\t}\n\t\t\t}, function( field ) {\n\t\t\t\tself.floatLabel_( field );\n\t\t\t});\n\t\t},\n\n\t\t/** @return void */\n\t\tinitEvents_: function() {\n\t\t\tvar self = this;\n\t\t\tself.events = {\n\t\t\t\tblur: self.onBlur_.bind( self ),\n\t\t\t\tchange: self.onInput_.bind( self ),\n\t\t\t\tfocus: self.onFocus_.bind( self ),\n\t\t\t\tinput: self.onInput_.bind( self ),\n\t\t\t\treset: self.onReset_.bind( self ),\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 self = this;\n\t\t\tvar labelEl = self.getLabel_( el );\n\t\t\tif( !labelEl )return;\n\t\t\tel.classList.add( self.prefixed_( el.tagName.toLowerCase() ));\n\t\t\tself.setLabel_( labelEl, el );\n\t\t\tself.setPlaceholder_( labelEl, el );\n\t\t\tself.wrapLabel_( labelEl, el );\n\t\t\tself.handleEvents_( el, 'add' );\n\t\t\tif( typeof self.config_[self.current_].customEvent === 'function' ) {\n\t\t\t\tself.config_[self.current_].customEvent.call( self, 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\tvar self = this;\n\t\t\tif( !self.isValidField_( el ))return;\n\t\t\tif( self.hasParent_( el )) {\n\t\t\t\tif( rebuild !== true )return;\n\t\t\t\tself.reset_( el );\n\t\t\t}\n\t\t\tself.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\t['blur','input','focus'].forEach( function( event ) {\n\t\t\t\tif( event === 'input' && ( el.type === 'file' || el.nodeName === 'SELECT' )) {\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\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\tvar self = this;\n\t\t\tfor( var i = 0; i < self.el_.length; ++i ) {\n\t\t\t\tif( typeof self.selectors_[i] === 'undefined' ) {\n\t\t\t\t\tvar config = self.extend_( {}, self.defaults_, self.options_, self.el_[i].getAttribute( 'data-options' ));\n\t\t\t\t\tvar exclude = ':not(' + config.exclude.split( /[\\s,]+/ ).join( '):not(' ) + ')';\n\t\t\t\t\tself.selectors_[i] = config.transform.replace( /,/g, exclude + ',' ) + exclude;\n\t\t\t\t\tself.config_[i] = config;\n\t\t\t\t}\n\t\t\t\tvar fields = self.el_[i].querySelectorAll( self.selectors_[i] );\n\t\t\t\tself.current_ = i;\n\t\t\t\tif( typeof elCallback === 'function' ) {\n\t\t\t\t\telCallback.call( self, self.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( self, 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 self = this;\n\t\t\tvar parent = el.parentNode;\n\t\t\tif( !self.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\tself.removeClasses_( childEl );\n\t\t\t\tfragment.appendChild( childEl );\n\t\t\t}\n\t\t\tparent.parentNode.replaceChild( fragment, parent );\n\t\t\tself.resetPlaceholder_( el );\n\t\t\tself.handleEvents_( el, 'remove' );\n\t\t},\n\n\t\t/** @return void */\n\t\tresetFields_: function() {\n\t\t\tvar self = this;\n\t\t\tvar fields = self.el_[self.current_].querySelectorAll( self.selectors_[self.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\tself.addRemove_( fields[i].tagName === 'SELECT' && fields[i].value !== '' )\n\t\t\t\t]( self.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\tvar self = this;\n\t\t\tlabelEl.classList.add( self.prefixed_( 'label' ));\n\t\t\tlabelEl.textContent = self.getLabelText_( labelEl, el );\n\t\t\tif( typeof self.config_[self.current_].customLabel === 'function' ) {\n\t\t\t\tlabelEl.textContent = self.config_[self.current_].customLabel.call( self, 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 self = this;\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( self.config_[self.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 = self.getLabelText_( labelEl, el );\n\t\t\t}\n\t\t\tif( typeof self.config_[self.current_].customPlaceholder === 'function' ) {\n\t\t\t\tplaceholderText = self.config_[self.current_].customPlaceholder.call( self, placeholderText, el, labelEl );\n\t\t\t}\n\t\t\tif( el.tagName === 'SELECT' ) {\n\t\t\t\tself.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\tel.insertBefore( new Option( placeholderText, '' ), childEl );\n\t\t\t\tif( el.options[el.selectedIndex].defaultSelected === false ) {\n\t\t\t\t\tel.selectedIndex = 0;\n\t\t\t\t}\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 self = this;\n\t\t\tvar wrapper = self.createEl_( 'div', {\n\t\t\t\tclass: self.prefixed_( 'wrap' ) + ' ' + self.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( self.prefixed_( 'is-active' ));\n\t\t\t}\n\t\t\tif( el.getAttribute( 'required' ) !== null || el.classList.contains( self.config_[self.current_].requiredClass )) {\n\t\t\t\twrapper.classList.add( self.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/* 26 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__plugins_dynamicListener_js__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__plugins_dynamicListener_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__plugins_dynamicListener_js__);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* globals jQuery, Give, give_global_vars */\n\n\n/**\n * This class handles donor wall shortcode related features\n *\n * @since 2.2.0\n *\n */\n\nvar GiveDonorWall = function () {\n\tfunction GiveDonorWall() {\n\t\t_classCallCheck(this, GiveDonorWall);\n\n\t\twindow.addEventListener('load', function () {\n\t\t\t/**\n * Add events\n */\n\t\t\twindow.addDynamicEventListener(document, 'click', '.give-donor__read-more', GiveDonorWall.readMoreBtnEvent);\n\t\t\twindow.addDynamicEventListener(document, 'click', '.give-donor__load_more', GiveDonorWall.loadMoreBtnEvent);\n\t\t}, false);\n\n\t\t// Run code on after window load.\n\t\twindow.addEventListener('load', function () {\n\t\t\tGiveDonorWall.loadGravatars();\n\t\t});\n\t}\n\n\t/**\n * Add click event to read more link\n *\n * @since 2.2.0\n *\n * @param {object} evt\n */\n\n\n\t_createClass(GiveDonorWall, null, [{\n\t\tkey: 'readMoreBtnEvent',\n\t\tvalue: function readMoreBtnEvent(evt) {\n\t\t\tevt.preventDefault();\n\n\t\t\tjQuery.magnificPopup.open({\n\t\t\t\titems: {\n\t\t\t\t\tsrc: evt.target.parentNode.parentNode.parentNode.getElementsByClassName('give-donor__comment')[0],\n\t\t\t\t\ttype: 'inline'\n\t\t\t\t},\n\t\t\t\tmainClass: 'give-modal give-donor-wall-modal',\n\t\t\t\tcloseOnBgClick: false\n\t\t\t});\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n * Add click event to load more link\n *\n * @since 2.2.0\n *\n * @param {object} evt\n */\n\n\t}, {\n\t\tkey: 'loadMoreBtnEvent',\n\t\tvalue: function loadMoreBtnEvent(evt) {\n\t\t\tevt.preventDefault();\n\n\t\t\tvar loaderButton = evt.target,\n\t\t\t parent = loaderButton.parentNode,\n\t\t\t shortcodeAttrHiddenField = parent.getElementsByClassName('give-donor-wall-shortcode-attrs')[0];\n\n\t\t\tjQuery.ajax({\n\t\t\t\turl: Give.fn.getGlobalVar('ajaxurl'),\n\t\t\t\tmethod: 'POST',\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'give_get_donor_comments',\n\t\t\t\t\tdata: shortcodeAttrHiddenField.getAttribute('data-shortcode')\n\t\t\t\t},\n\t\t\t\tbeforeSend: function beforeSend() {\n\t\t\t\t\tloaderButton.className += ' give-active';\n\t\t\t\t\tloaderButton.setAttribute('disabled', 'disabled');\n\t\t\t\t}\n\t\t\t}).done(function (res) {\n\t\t\t\tloaderButton.classList.remove('give-active');\n\t\t\t\tloaderButton.removeAttribute('disabled', 'disabled');\n\n\t\t\t\t// Add donor comment.\n\t\t\t\tif (res.html.length) {\n\t\t\t\t\tparent.getElementsByClassName('give-grid')[0].insertAdjacentHTML('beforeend', res.html);\n\t\t\t\t}\n\n\t\t\t\t// Update data-shortcode attribute.\n\t\t\t\tif (res.shortcode.length) {\n\t\t\t\t\tshortcodeAttrHiddenField.setAttribute('data-shortcode', res.shortcode);\n\t\t\t\t}\n\n\t\t\t\t// Remove load more button if not any donor comment exist.\n\t\t\t\tif (!res.remaining) {\n\t\t\t\t\tloaderButton.remove();\n\t\t\t\t}\n\n\t\t\t\tGiveDonorWall.loadGravatar(shortcodeAttrHiddenField);\n\t\t\t});\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n * Handle gravatars loading\n *\n * @since 2.3.0\n */\n\n\t}, {\n\t\tkey: 'loadGravatars',\n\t\tvalue: function loadGravatars() {\n\t\t\t/**\n * Loop through the number of donor list on the page.\n *\n * @since 2.3.0\n *\n */\n\t\t\tvar shortcodeAttrHiddenFields = document.querySelectorAll('.give-donor-wall-shortcode-attrs');\n\n\t\t\tshortcodeAttrHiddenFields.forEach(function (shortcodeAttrHiddenField, index) {\n\t\t\t\tGiveDonorWall.loadGravatar(shortcodeAttrHiddenField);\n\t\t\t});\n\t\t}\n\n\t\t/**\n * Handle gravatar loading\n *\n * @since 2.3.0\n */\n\n\t}, {\n\t\tkey: 'loadGravatar',\n\t\tvalue: function loadGravatar(shortcodeAttrHiddenField) {\n\t\t\tvar gravatar = __webpack_require__(27);\n\n\t\t\t/**\n * Loop through the number of donor list on the page.\n *\n * @since 2.3.0\n *\n */\n\t\t\tvar gridWraps = void 0,\n\t\t\t gravatarContainer = void 0,\n\t\t\t donorEmail = void 0,\n\t\t\t isShowGravatar = void 0,\n\t\t\t hasValidGravatar = void 0;\n\n\t\t\tisShowGravatar = '1' === Give.fn.getParameterByName('show_avatar', decodeURIComponent(shortcodeAttrHiddenField.getAttribute('data-shortcode')));\n\n\t\t\t// Bailout.\n\t\t\tif (!isShowGravatar) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tgridWraps = shortcodeAttrHiddenField.parentNode.querySelectorAll('.give-grid__item');\n\n\t\t\tgridWraps.forEach(function (gridWrap, index) {\n\t\t\t\tgravatarContainer = gridWrap.querySelector('.give-donor__image');\n\n\t\t\t\t// Bailout out if already tried to load gravatar.\n\t\t\t\tif (gravatarContainer.classList.contains('gravatar-loaded')) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tdonorEmail = gravatarContainer.getAttribute('data-donor_email');\n\t\t\t\thasValidGravatar = '1' === gravatarContainer.getAttribute('data-has-valid-gravatar');\n\n\t\t\t\tif (hasValidGravatar) {\n\t\t\t\t\tvar gravatarElement = document.createElement('IMG');\n\n\t\t\t\t\tgravatarContainer.innerHTML = '';\n\t\t\t\t\tgravatarElement.setAttribute('src', gravatar.url(donorEmail));\n\t\t\t\t\tgravatarElement.setAttribute('width', '60');\n\t\t\t\t\tgravatarElement.setAttribute('height', '60');\n\t\t\t\t\tgravatarContainer.appendChild(gravatarElement);\n\t\t\t\t}\n\n\t\t\t\tgravatarContainer.className += ' gravatar-loaded';\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn GiveDonorWall;\n}();\n\nvar giveDonorWall = new GiveDonorWall();\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(28);\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar md5 = __webpack_require__(29),\n querystring = __webpack_require__(30),\n MD5_REGEX = /^[0-9a-f]{32}$/;\n\nfunction params(options) {\n var params = {}, removing = {protocol:1, format:1};\n for (var key in options) {\n if (!removing[key]) params[key] = options[key];\n }\n return params;\n}\nfunction proto(options, protocol) {\n if (!options) return;\n if(typeof options.protocol === 'boolean') return options.protocol;\n return options.protocol === \"http\" ? false\n : options.protocol === \"https\" ? true\n : undefined;\n}\nfunction getHash(email){\n email = (typeof email === 'string') ? email.trim().toLowerCase() : 'unspecified';\n return email.match(MD5_REGEX) ? email : md5(email);\n}\n\nfunction getQueryString(options){\n var queryData = querystring.stringify(params(options));\n return (queryData && \"?\" + queryData) || \"\";\n}\n\nvar gravatar = module.exports = {\n\n url: function (email, options, protocol) {\n var baseURL = \"//www.gravatar.com/avatar/\";\n if (options && options.protocol) protocol = proto(options);\n if(typeof protocol !== 'undefined') {\n baseURL = protocol ? \"https://s.gravatar.com/avatar/\" : 'http://www.gravatar.com/avatar/';\n }\n var query = getQueryString(options);\n return baseURL + getHash(email) + query;\n },\n\n profile_url: function (email, options, https) {\n var format = options != undefined && options.format != undefined ? String(options.format) : 'json'\n if (options && options.protocol) https = proto(options);\n var baseURL = (https && \"https://secure.gravatar.com/\") || 'http://www.gravatar.com/';\n var query = getQueryString(options);\n return baseURL + getHash(email) + '.' + format + query;\n }\n};\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_RESULT__;/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/* global define */\n\n;(function ($) {\n 'use strict'\n\n /*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n function safeAdd (x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff)\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n return (msw << 16) | (lsw & 0xffff)\n }\n\n /*\n * Bitwise rotate a 32-bit number to the left.\n */\n function bitRotateLeft (num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt))\n }\n\n /*\n * These functions implement the four basic operations the algorithm uses.\n */\n function md5cmn (q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)\n }\n function md5ff (a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t)\n }\n function md5gg (a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t)\n }\n function md5hh (a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t)\n }\n function md5ii (a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t)\n }\n\n /*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n function binlMD5 (x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32)\n x[((len + 64) >>> 9 << 4) + 14] = len\n\n var i\n var olda\n var oldb\n var oldc\n var oldd\n var a = 1732584193\n var b = -271733879\n var c = -1732584194\n var d = 271733878\n\n for (i = 0; i < x.length; i += 16) {\n olda = a\n oldb = b\n oldc = c\n oldd = d\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936)\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063)\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)\n b = md5gg(b, c, d, a, x[i], 20, -373897302)\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558)\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)\n d = md5hh(d, a, b, c, x[i], 11, -358537222)\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844)\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n a = safeAdd(a, olda)\n b = safeAdd(b, oldb)\n c = safeAdd(c, oldc)\n d = safeAdd(d, oldd)\n }\n return [a, b, c, d]\n }\n\n /*\n * Convert an array of little-endian words to a string\n */\n function binl2rstr (input) {\n var i\n var output = ''\n var length32 = input.length * 32\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff)\n }\n return output\n }\n\n /*\n * Convert a raw string to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n function rstr2binl (input) {\n var i\n var output = []\n output[(input.length >> 2) - 1] = undefined\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0\n }\n var length8 = input.length * 8\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32)\n }\n return output\n }\n\n /*\n * Calculate the MD5 of a raw string\n */\n function rstrMD5 (s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))\n }\n\n /*\n * Calculate the HMAC-MD5, of a key and some data (raw strings)\n */\n function rstrHMACMD5 (key, data) {\n var i\n var bkey = rstr2binl(key)\n var ipad = []\n var opad = []\n var hash\n ipad[15] = opad[15] = undefined\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8)\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636\n opad[i] = bkey[i] ^ 0x5c5c5c5c\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))\n }\n\n /*\n * Convert a raw string to a hex string\n */\n function rstr2hex (input) {\n var hexTab = '0123456789abcdef'\n var output = ''\n var x\n var i\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i)\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)\n }\n return output\n }\n\n /*\n * Encode a string as utf-8\n */\n function str2rstrUTF8 (input) {\n return unescape(encodeURIComponent(input))\n }\n\n /*\n * Take string arguments and return either raw or hex encoded strings\n */\n function rawMD5 (s) {\n return rstrMD5(str2rstrUTF8(s))\n }\n function hexMD5 (s) {\n return rstr2hex(rawMD5(s))\n }\n function rawHMACMD5 (k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))\n }\n function hexHMACMD5 (k, d) {\n return rstr2hex(rawHMACMD5(k, d))\n }\n\n function md5 (string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string)\n }\n return rawMD5(string)\n }\n if (!raw) {\n return hexHMACMD5(key, string)\n }\n return rawHMACMD5(key, string)\n }\n\n if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return md5\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))\n } else if (typeof module === 'object' && module.exports) {\n module.exports = md5\n } else {\n $.md5 = md5\n }\n})(this)\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.decode = exports.parse = __webpack_require__(31);\nexports.encode = exports.stringify = __webpack_require__(32);\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\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 = 14);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a540077f58150dcced64","module.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 0 1","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 = 1\n// module chunks = 0 1","module.exports = global[\"accounting\"] = require(\"-!./accounting.js\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/accounting/accounting.js-exposed\n// module id = 2\n// module chunks = 0 1","/*!\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 = 3\n// module chunks = 0 1","/*! 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 = 4\n// module chunks = 0 1","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","/* global accounting, give_global_vars, jQuery */\nimport GiveNotice from './notice';\nimport GiveForm from './form';\nimport GiveDonor from './donor';\n\n/**\n * This API is under development.\n *\n * Currently used only for internal purpose.\n */\nlet Give = {\n\tinit: function() {\n\t\tlet subHelperObjs = [ 'form' ],\n\t\t\tcounter = 0;\n\t\tjQuery( document ).trigger( 'give:preInit' );\n\n\t\t// Initialize all init methods of 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\tlet format_args = {\n\t\t\t\tsymbol: '',\n\t\t\t\tdecimal: this.getGlobalVar( 'decimal_separator' ),\n\t\t\t\tthousand: this.getGlobalVar( 'thousands_separator' ),\n\t\t\t\tprecision: parseInt( this.getGlobalVar( 'number_decimals' ) ),\n\t\t\t\tcurrency: this.getGlobalVar( '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\tlet actual_price = parseFloat(price).toFixed(format_args.precision),\n\t\t\t\t\tafterPoint = args.precision ? '.0' : '',\n\t\t\t\t\tlastThree = '',\n\t\t\t\t\totherNumbers = '',\n\t\t\t\t\tresult = '',\n\t\t\t\t\tlastDotPosition = '';\n\n\t\t\t\tactual_price = accounting.unformat( actual_price, '.' ).toString();\n\t\t\t\tactual_price = actual_price.toString();\n\n\t\t\t\tif ( actual_price.indexOf( '.' ) > 0 ) {\n\t\t\t\t\tafterPoint = actual_price.substring( actual_price.indexOf( '.' ), actual_price.length );\n\t\t\t\t}\n\n\t\t\t\tactual_price = Math.floor( actual_price ).toString();\n\t\t\t\tlastThree = actual_price.substring( actual_price.length - 3 );\n\t\t\t\totherNumbers = actual_price.substring( 0, actual_price.length - 3 );\n\n\t\t\t\tif ( '' !== otherNumbers ) {\n\t\t\t\t\tlastThree = format_args.thousand + lastThree;\n\t\t\t\t}\n\n\t\t\t\tresult = otherNumbers.replace(/\\B(?=(\\d{2})+(?!\\d))/g, format_args.thousand) + lastThree + afterPoint;\n\t\t\t\tlastDotPosition = result.lastIndexOf('.');\n\t\t\t\tresult = result.slice(0, lastDotPosition) + ((result.slice(lastDotPosition) + '000000000000').substr(0, args.precision + 1));\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\tlet 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\tlet 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 Variable in global param.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetGlobalVar: function( str ) {\n\t\t\tconst giveGlobals = this.getGlobal();\n\n\t\t\treturn ( 'undefined' === typeof giveGlobals[ str ] ? '' : giveGlobals[ str ] );\n\t\t},\n\n\t\t/**\n\t\t * Get global param\n\t\t *\n\t\t * @since 2.2.4\n\t\t *\n\t\t * @return {object} WordPress localized global param.\n\t\t */\n\t\tgetGlobal: function() {\n\t\t\treturn ( 'undefined' === typeof give_global_vars ) ? give_vars : give_global_vars;\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\tlet cache,\n\t\t\t\tformObj = Give.cache[ 'form_' + Give.form.fn.getInfo( 'form-id', $form ) ];\n\n\t\t\tif ( $form.length ) {\n\t\t\t\tcache = 'undefined' !== typeof formObj ? formObj[ 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 * Get cookie\n\t\t * Note: only for internal use\n\t\t *\n\t\t * @since 2.2.20\n\t\t * @private\n\t\t *\n\t\t * @param {string} name Cookie name\n\t\t * @return {string}\n\t\t */\n\t\t__getCookie: function( name ) {\n\t\t\tconst value = '; ' + document.cookie,\n\t\t\t\tparts = value.split( '; ' + name + '=' );\n\n\t\t\tlet cookie = '';\n\n\t\t\tif ( 2 === parts.length ) {\n\t\t\t\tcookie = parts.pop().split(';').shift();\n\t\t\t}\n\n\t\t\treturn cookie;\n\t\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.notice = GiveNotice;\nGive.form = GiveForm;\nGive.donor = GiveDonor;\n\nexport default Give;\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/plugins/give-api/api.js","/* globals Give, jQuery */\nexport default {\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\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/plugins/give-api/notice.js","/* globals Give, jQuery */\nexport default {\n\tinit: function() {\n\t\tthis.fn.field.formatCreditCard( jQuery( 'form.give-form' ) );\n\t\tthis.fn.__initialize_cache();\n\n\t\t// Run code on after window load.\n\t\twindow.addEventListener('load', function () {\n\t\t\tGive.form.fn.__sendBackToForm();\n\t\t});\n\t},\n\n\tfn: {\n\n\t\t/**\n\t\t * Check if donation form exist on page or not\n\t\t *\n\t\t * @since 2.2.2\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFormExist: function(){\n\t\t\treturn !! document.getElementsByName('give-form-hash').length;\n\t\t},\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\t\t/**\n\t\t * Get form minimum amount\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetMinimumAmount: function( $form ) {\n\t\t\treturn $form.find( 'input[name=\"give-form-minimum\"]' ).val();\n\t\t},\n\n\t\t/**\n\t\t * Get form maximum amount\n\t\t *\n\t\t * @since 2.1\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetMaximumAmount: function( $form ) {\n\t\t\treturn $form.find( 'input[name=\"give-form-maximum\"]' ).val();\n\t\t},\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 * Get form's nonce information\n\t\t *\n\t\t * @since 2.3.1\n\t\t *\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tgetNonceInfo: function( $form ) {\n\t\t\tlet nonce = {},\n\t\t\t\t$nonceField;\n\n\t\t\t// Bailout\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn nonce;\n\t\t\t}\n\n\t\t\tnonce.el = $form.find( 'input[name=\"give-form-hash\"]' );\n\n\t\t\tif( ! nonce.el.length ) {\n\t\t\t\treturn nonce;\n\t\t\t}\n\n\t\t\tnonce.value = $form.find( 'input[name=\"give-form-hash\"]' ).val();\n\t\t\tnonce.value = 'undefined' === typeof nonce.value || ! nonce.value ? '' : nonce.value;\n\n\t\t\tnonce.createdInDonorSession = '1' === nonce.el.attr('data-donor-session');\n\n\t\t\treturn nonce;\n\t\t},\n\n\t\t/**\n\t\t * Reset form nonce.\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.fn.getGlobalVar('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 * Reset form all nonce.\n\t\t *\n\t\t * @since 2.2.0\n\t\t *\n\t\t * @param {object} $form Donation form object.\n\t\t *\n\t\t * @returns {object}\n\t\t */\n\t\tresetAllNonce: function( $form ) {\n\t\t\t// Return false, if form is missing.\n\t\t\tif ( ! $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\treturn new Promise( (resolve, reject ) => {\n\t\t\t\t//Post via AJAX to Give\n\t\t\t\tjQuery.post(\n\t\t\t\t\tGive.fn.getGlobalVar('ajaxurl'),\n\t\t\t\t\t{\n\t\t\t\t\t\taction: 'give_donation_form_reset_all_nonce',\n\t\t\t\t\t\tgive_form_id: Give.form.fn.getInfo( 'form-id', $form )\n\t\t\t\t\t},\n\t\t\t\t\tfunction( response ) {\n\t\t\t\t\t\t// Process only if get response successfully.\n\t\t\t\t\t\tif( ! response.success ) {\n\t\t\t\t\t\t\treturn reject(response);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst createUserNonceField = $form.find( 'input[name=\"give-form-user-register-hash\"]' );\n\n\t\t\t\t\t\t// Update nonce field.\n\t\t\t\t\t\tGive.form.fn.setInfo( 'nonce', response.data.give_form_hash, $form, '' );\n\n\t\t\t\t\t\t// Update create user nonce field.\n\t\t\t\t\t\tif( createUserNonceField.length ){\n\t\t\t\t\t\t\tcreateUserNonceField.val( response.data.give_form_user_register_hash );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tGive.form.fn.disable( $form, false );\n\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Fire custom event handler when update all nonce of donation form\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * @since 2.2.0\n\t\t\t\t\t\t * @access access\n\t\t\t\t\t\t */\n\t\t\t\t\t\tjQuery(document).trigger( 'give_reset_all_nonce', [response.data] );\n\n\t\t\t\t\t\treturn resolve(response);\n\t\t\t\t\t}\n\t\t\t\t).done(function(){\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\tis_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/impress-org/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\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\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\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/plugins/give-api/form.js","/* globals Give, jQuery */\nexport default {\n\tfn: {\n\t\t/**\n\t\t * Check if donor has session or not\n\t\t *\n\t\t * @since 2.3.1\n\t\t *\n\t\t * @param {object} $form\n\t\t * @return {boolean}\n\t\t */\n\t\thasSession: function($form ) {\n\t\t\tif( ! $form.length ){\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !! Give.fn.__getCookie( Give.fn.getGlobalVar('session_cookie_name') );\n\t\t},\n\n\t\t/**\n\t\t * Check if donor is logged with WP User\n\t\t *\n\t\t * @since 2.3.1\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisLoggedIn: function() {\n\t\t\treturn jQuery('body').hasClass('logged-in');\n\t\t}\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/plugins/give-api/donor.js","(function(globalSope) {\n 'use strict';\n\n /**\n * Including this file adds the `addDynamicListener` to the ELement prototype.\n * \n * The dynamic listener gets an extra `selector` parameter that only calls the callback\n * if the target element matches the selector.\n * \n * The listener has to be added to the container/root element and the selector should match\n * the elements that should trigger the event.\n * \n * Browser support: IE9+\n */\n\n // Polyfil Element.matches\n // https://developer.mozilla.org/en/docs/Web/API/Element/matches#Polyfill\n if (!Element.prototype.matches) {\n Element.prototype.matches = \n Element.prototype.matchesSelector || \n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector || \n Element.prototype.oMatchesSelector || \n Element.prototype.webkitMatchesSelector ||\n function(s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1; \n };\n }\n\n /**\n * Returns a modified callback function that calls the\n * initial callback function only if the target element matches the given selector\n * \n * @param {string} selector \n * @param {function} callback \n */\n function getConditionalCallback(selector, callback) {\n return function(e) {\n if(!e.target) return;\n if(!e.target.matches(selector)) return;\n callback.apply(this, arguments);\n };\n }\n\n /**\n * \n * \n * @param {Element} rootElement The root element to add the linster too.\n * @param {string} eventType The event type to listen for.\n * @param {string} selector The selector that should match the dynamic elements.\n * @param {function} callback The function to call when an event occurs on the given selector.\n * @param {boolean|object} options Passed as the regular `options` parameter to the addEventListener function\n * Set to `true` to use capture.\n * Usually used as an object to add the listener as `passive`\n */\n globalSope.addDynamicEventListener = function (rootElement, eventType, selector, callback, options) {\n rootElement.addEventListener(eventType, getConditionalCallback(selector, callback), options);\n };\n})(window);\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/plugins/dynamicListener.js","/* 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 = 12\n// module chunks = 0","// Plugins\nimport 'jquery.payment';\nimport 'accounting';\nimport 'uiblocker';\nimport 'magnific-popup';\n\n// Give plugins.\nimport '../plugins/give-hint.css';\n\n// Give API.\nimport GiveAPI from '../plugins/give-api/api';\n\n// Give core.\nimport './give-donations';\nimport './give-ajax';\nimport './give-misc';\nimport './give-donor-wall';\n\nexport const { init, fn, form, notice, cache, donor } = GiveAPI;\n\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 = 17\n// module chunks = 0","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 = 18\n// module chunks = 0","/*!\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 = 19\n// module chunks = 0","// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 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` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\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;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var 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 nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\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 their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\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 // The 2-argument case is omitted because we’re not using it.\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 var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\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 shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\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 = shallowProperty('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 var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\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 var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\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 keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\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 = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, 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 || typeof iteratee == 'number' && typeof obj[0] != 'object' && 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 != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\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 || typeof iteratee == 'number' && typeof obj[0] != 'object' && 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 != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\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 var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, 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, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\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 var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\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 (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\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 = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\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 || array.length < 1) return n == null ? 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 || array.length < 1) return n == null ? 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, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 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) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\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 = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\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 // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the 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 && !iteratee) {\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 = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, 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 var j;\n for (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 = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\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 // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\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. Passing by pairs is the reverse of _.pairs.\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 var createPredicateIndexFinder = function(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 var createIndexFinder = function(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 if (!step) {\n step = stop < start ? -1 : 1;\n }\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 // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\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 = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\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 by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\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] === placeholder ? 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 _.partial.placeholder = _;\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 = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\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 = restArguments(function(func, wait, args) {\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 timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\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\n var throttled = 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 throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\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, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\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 _.restArguments = restArguments;\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 var collectNonEnumProps = function(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 for (var index = 0; index < length; index++) {\n var 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 // The opposite of _.object.\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 // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\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 (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\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 // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\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 = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), 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, deepEq;\n 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 // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\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 case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(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, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], 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), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\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 !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(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, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\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 // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\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 // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\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 escapeRegExp = /\\\\|'|\\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(escapeRegExp, 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 offset.\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 var render;\n try {\n 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 chainResult = 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 chainResult(this, func.apply(_, args));\n };\n });\n return _;\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 chainResult(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 chainResult(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 String(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}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/underscore/underscore.js\n// module id = 20\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 21\n// module chunks = 0","/* globals jQuery, Give */\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.fn.getGlobalVar( '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 ( 'undefined' !== typeof response.states_found && 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 ( 'undefined' !== typeof ( response.states_require ) && 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\n\t\t\t\t\t\tvar $city = $form.find( 'input[name=\"card_city\"]' );\n\t\t\t\t\t\t// check if city fields is require or not\n\t\t\t\t\t\tif ( 'undefined' !== typeof ( response.city_require ) && true === response.city_require ) {\n\t\t\t\t\t\t\t$city.closest( 'p' ).find( 'label .give-required-indicator' ).removeClass( 'give-hidden' ).removeClass( 'required' );\n\t\t\t\t\t\t\t$city.attr( 'required', true );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$city.closest( 'p' ).find( 'label .give-required-indicator' ).addClass( 'give-hidden' ).addClass( 'required' );\n\t\t\t\t\t\t\t$city.removeAttr( 'required' );\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 ( 'undefined' !== typeof ( response.show_field ) && 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/impress-org/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/impress-org/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).on('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","/*!\n * Give AJAX JS\n *\n * @description: The Give AJAX scripts\n * @package: Give\n * @subpackage: Assets/JS\n * @copyright: Copyright (c) 2016, GiveWP\n * @license: http://opensource.org/licenses/gpl-2.0.php GNU Public License\n */\n\n/* globals jQuery, Give */\njQuery( document ).ready( function( $ ) {\n\t// Reset nonce only if form exists.\n\tif( Give.form.fn.isFormExist() ) {\n\n\t\t//Hide loading elements\n\t\t$( '.give-loading-text' ).hide();\n\n\t\t// Update and invalidate cached nonce.\n\t\t$('.give-form').each(function (index, $form) {\n\t\t\tlet nonceInfo, nonceTime, currentTime, timeDiff;\n\n\t\t\t$form = jQuery($form);\n\t\t\tnonceInfo = Give.form.fn.getNonceInfo( $form );\n\n\t\t\tif( ! nonceInfo.el.attr( 'data-donor-session' ) ){\n\t\t\t\t// Backward compatibility.\n\t\t\t\t// @see https://github.com/impress-org/give/issues/3820\n\t\t\t\tGive.form.fn.resetAllNonce($form);\n\n\t\t\t}else if(\n\t\t\t\t(\n\t\t\t\t\tnonceInfo.createdInDonorSession\n\t\t\t\t\t|| Give.donor.fn.hasSession( $form )\n\t\t\t\t)\n\t\t\t\t&& ! Give.donor.fn.isLoggedIn()\n\t\t\t) {\n\t\t\t\t// Reset nonce if nonce cached when donor was in session or logged in.\n\t\t\t\tGive.form.fn.resetAllNonce($form);\n\t\t\t}\n\n\t\t\tnonceTime = ( parseInt(nonceInfo.el.data('time')) + parseInt(nonceInfo.el.data('nonce-life') ) ) * 1000,\n\t\t\tcurrentTime = Date.now();\n\n\t\t\t// We need time in ms.\n\t\t\ttimeDiff = nonceTime - currentTime;\n\n\t\t\ttimeDiff = 0 > timeDiff ? timeDiff : (timeDiff + 100);\n\n\t\t\t// Update nonce in background.\n\t\t\twindow.setTimeout(function () {\n\t\t\t\tGive.form.fn.resetAllNonce($form);\n\t\t\t}, timeDiff);\n\t\t});\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.fn.getGlobalVar('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.fn.getGlobalVar('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.fn.getGlobalVar('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.fn.getGlobalVar('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\n\t\t\t\tGive.form.fn.resetAllNonce( this_form ).then(\n\t\t\t\t\tresponse => {\n\t\t\t\t\t\t//reload the selected gateway so it contains their logged in information\n\t\t\t\t\t\tgive_load_gateway( this_form, this_form.find( '.give-gateway-option-selected input' ).val() );\n\t\t\t\t\t}\n\t\t\t\t);\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.fn.getGlobalVar('ajax_vars').ajaxNonce\n\t\t};\n\n\t\t$this.text( Give.fn.getGlobalVar('loading') );\n\t\t$this.attr( 'disabled', 'disabled' );\n\n\t\t$.post( Give.fn.getGlobalVar('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 = $( this );\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.fn.getGlobalVar('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.fn.getGlobalVar('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\t$this.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\t/**\n\t * Render receipt by Ajax\n\t *\n\t * @since 2.2.0\n\t */\n\tconst receiptContainer = document.getElementById('give-receipt');\n\n\tif ( receiptContainer ) {\n\n\t\tlet data = {\n\t\t\t\taction: 'get_receipt',\n\t\t\t\tshortcode_atts: receiptContainer.getAttribute('data-shortcode')\n\t\t\t},\n\t\t\tdonation_id = Give.fn.getParameterByName('donation_id');\n\n\t\tconst cookie_name = Give.fn.getGlobalVar( 'session_cookie_name' );\n\n\t\t// Set cookie.\n\t\tdata[cookie_name] = Give.fn.__getCookie( Give.fn.getGlobalVar( 'session_cookie_name' ) );\n\n\t\t// Set donation id, if exists.\n\t\tif( null !== donation_id ) {\n\t\t\tdata['donation_id'] = donation_id;\n\t\t}\n\n\t\t$.ajax({\n\t\t\turl: Give.fn.getGlobalVar('ajaxurl'),\n\t\t\tmethod: 'GET',\n\t\t\tdata: data,\n\t\t\tsuccess: function (response) {\n\t\t\t\treceiptContainer.innerHTML = response;\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.fn.getGlobalVar('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\tnonce: Give.form.fn.getNonce( form_object )\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","/* globals jQuery, Give*/\n\nimport FloatLabels from 'float-labels.js';\n\njQuery(\n\tfunction ($) {\n\n\t\tvar doc = $( document );\n\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\n\t\t// Set custom validation message.\n\t\tgive_change_html5_form_field_validation_message();\n\n\t\t// Donation grid shortcode popup.\n\t\t$( '.js-give-grid-modal-launcher' ).magnificPopup(\n\t\t\t{\n\t\t\t\ttype: 'inline',\n\t\t\t\tfixedContentPos: true,\n\t\t\t\tfixedBgPos: true,\n\t\t\t\tcloseBtnInside: true,\n\t\t\t\tmidClick: true,\n\t\t\t\tremovalDelay: 300,\n\t\t\t\tmainClass: 'modal-fade-slide give-modal',\n\t\t\t}\n\t\t);\n\n\t\t// Disable button if it have give-disabled class init.\n\t\tdoc.on(\n\t\t\t'click touchend', '.give-disabled', function (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t);\n\n\t\tdoc.on(\n\t\t\t'give_gateway_loaded', function (ev, response, form_id) {\n\t\t\t\t// Trigger float-labels\n\t\t\t\tgive_fl_trigger();\n\t\t\t}\n\t\t);\n\n\t\tdoc.on(\n\t\t\t'give_checkout_billing_address_updated', function (ev, response, form_id) {\n\t\t\t\tif ( ! $( 'form#' + form_id ).hasClass( 'float-labels-enabled' )) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Trigger float-labels\n\t\t\t\tgive_fl_trigger();\n\t\t\t}\n\t\t);\n\n\t\t// Reveal Btn which displays the checkout content\n\t\tdoc.on(\n\t\t\t'click', '.give-btn-reveal', function (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar this_button = $( this );\n\t\t\t\tvar this_form = $( this ).parents( 'form' );\n\t\t\t\tvar payment_field_id = '#give-payment-mode-select',\n\t\t\t\t\t$payment_field = $( payment_field_id ),\n\t\t\t\t\tshow_field_ids = '';\n\t\t\t\tthis_button.hide();\n\n\t\t\t\t// Show payment field if active payment gateway count greater then one.\n\t\t\t\tif ($( 'li', $payment_field ).length > 1) {\n\t\t\t\t\tshow_field_ids = payment_field_id + ', ';\n\t\t\t\t}\n\n\t\t\t\tthis_form.find( show_field_ids + '#give_purchase_form_wrap' ).slideDown();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t);\n\n\t\t// Modal with Magnific\n\t\tdoc.on(\n\t\t\t'click', '.give-btn-modal', function (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar this_form_wrap = $( this ).parents( 'div.give-form-wrap' );\n\t\t\t\tvar this_form = this_form_wrap.find( 'form.give-form' );\n\t\t\t\tvar this_amount_field = this_form.find( '#give-amount' );\n\t\t\t\tvar this_amount = this_amount_field.val();\n\n\t\t\t\t// Check to ensure our amount is greater than 0\n\t\t\t\t// Does this number have a value\n\t\t\t\tif ( ! this_amount || this_amount <= 0) {\n\t\t\t\t\tthis_amount_field.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tgive_open_form_modal( this_form_wrap, this_form );\n\n\t\t\t}\n\t\t);\n\n\t\t// Auto hide frontend notices.\n\t\tvar give_notices = jQuery( '.give_notice[data-dismiss-type=\"auto\"]' );\n\t\tif (give_notices.length) {\n\t\t\tgive_notices.each(\n\t\t\t\tfunction (index, $notice) {\n\t\t\t\t\t$notice = $( $notice );\n\n\t\t\t\t\t// auto hide setting message in 5 seconds.\n\t\t\t\t\twindow.setTimeout(\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t$notice.slideUp();\n\t\t\t\t\t\t},\n\t\t\t\t\t\t$notice.data( 'dismiss-interval' )\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t// Button to close notices on front-end.\n\t\t$( 'body' ).on(\n\t\t\t'click', '.give-notice-close', function () {\n\t\t\t\t$( this ).hide();\n\t\t\t\tconst notice_container = $( this ).closest( '.give_notices' );\n\t\t\t\tnotice_container.slideUp();\n\t\t\t}\n\t\t);\n\n\t\tdoc.on( 'change', '#give_profile_billing_address_wrap #give_address_country', update_profile_state_field );\n\n\t\t// Reset Form Fields on clicking back button of browser.\n\t\t// @see https://developer.mozilla.org/en-US/Firefox/Releases/1.5/Using_Firefox_1.5_caching\n\t\t// @see https://webkit.org/blog/427/webkit-page-cache-i-the-basics/\n\t\twindow.addEventListener(\n\t\t\t'pageshow', function (event) {\n\t\t\t\tvar historyTraversal = event.persisted || (typeof 'undefined' !== window.performance && 2 === window.performance.navigation.type);\n\n\t\t\t\tif (historyTraversal) {\n\t\t\t\t\tlet form = $( 'body' ).find( 'form.give-form' );\n\n\t\t\t\t\tif (form.length) {\n\t\t\t\t\t\tform[0].reset();\n\t\t\t\t\t\tGive.form.fn.resetAllNonce( form );\n\t\t\t\t\t}\n\t\t\t\t}\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\t{\n\t\t\tmainClass: Give.fn.getGlobal().magnific_options.main_class,\n\t\t\tcloseOnBgClick: Give.fn.getGlobal().magnific_options.close_on_bg_click,\n\t\t\tfixedContentPos: true,\n\t\t\tfixedBgPos: true,\n\t\t\tremovalDelay: 250, // delay removal by X to allow out-animation\n\t\t\titems: {\n\t\t\t\tsrc: $form,\n\t\t\t\ttype: 'inline'\n\t\t\t},\n\t\t\tcallbacks: {\n\t\t\t\tbeforeOpen: function () {\n\n\t\t\t\t\tjQuery( 'body' ).addClass( 'give-modal-open' );\n\n\t\t\t\t\t// add title, content, goal and error to form if admin want to show button only\n\t\t\t\t\tif ($form_wrap.hasClass( 'give-display-button-only' ) && ! $form.data( 'content' )) {\n\n\t\t\t\t\t\tvar $form_content = jQuery( '.give-form-content-wrap', $form_wrap ),\n\t\t\t\t\t\t\t$form_title = jQuery( '.give-form-title', $form_wrap ),\n\t\t\t\t\t\t\t$form_goal = jQuery( '.give-goal-progress', $form_wrap ),\n\t\t\t\t\t\t\t$form_error = jQuery( '>.give_error', $form_wrap ),\n\t\t\t\t\t\t\t$form_errors = jQuery( '.give_errors', $form_wrap );\n\n\t\t\t\t\t\t// Add content container to form.\n\t\t\t\t\t\tif ($form_content.length && ! jQuery( '.give-form-content-wrap', $form ).length) {\n\t\t\t\t\t\t\tif ($form_content.hasClass( 'give_post_form-content' )) {\n\t\t\t\t\t\t\t\t$form.append( $form_content );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$form.prepend( $form_content );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add errors container to form.\n\t\t\t\t\t\tif ($form_errors.length && ! jQuery( '.give_errors', $form ).length) {\n\t\t\t\t\t\t\t$form_errors.each(\n\t\t\t\t\t\t\t\tfunction (index, $error) {\n\t\t\t\t\t\t\t\t\t$form.prepend( jQuery( $error ) );\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\n\t\t\t\t\t\t// Add error container to form.\n\t\t\t\t\t\tif ($form_error.length && ! jQuery( '>.give_error', $form ).length) {\n\t\t\t\t\t\t\t$form_error.each(\n\t\t\t\t\t\t\t\tfunction (index, $error) {\n\t\t\t\t\t\t\t\t\t$form.prepend( jQuery( $error ) );\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\n\t\t\t\t\t\t// Add goal container to form.\n\t\t\t\t\t\tif ($form_goal.length && ! jQuery( '.give-goal-progress', $form ).length) {\n\t\t\t\t\t\t\t$form.prepend( $form_goal );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add title container to form.\n\t\t\t\t\t\tif ($form_title.length && ! jQuery( '.give-form-title', $form ).length) {\n\t\t\t\t\t\t\t$form.prepend( $form_title );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$form.data( 'content', 'loaded' );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\topen: function () {\n\n\t\t\t\t\t// Will fire when this exact popup is opened\n\t\t\t\t\t// this - is Magnific Popup object\n\t\t\t\t\tvar $mfp_content = jQuery( '.mfp-content' );\n\t\t\t\t\tif ($mfp_content.outerWidth() >= 500) {\n\t\t\t\t\t\t$mfp_content.addClass( 'give-responsive-mfp-content' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Hide .give-hidden and .give-btn-modal if admin only want to show only button.\n\t\t\t\t\tif ($form_wrap.hasClass( 'give-display-button-only' )) {\n\t\t\t\t\t\tchildren = $form.children().not( '.give-btn-modal' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Hide all form elements besides the ones required for payment\n\t\t\t\t\t$form.children().not( children ).hide();\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\t// Remove popup class\n\t\t\t\t\t$form.removeClass( 'mfp-hide' );\n\n\t\t\t\t\tjQuery( 'body' ).removeClass( 'give-modal-open' );\n\n\t\t\t\t\t// Show all fields again\n\t\t\t\t\t$form.children().not( children ).show();\n\t\t\t\t}\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} else {\n\t\twindow.give_float_labels = new FloatLabels(\n\t\t\t'.float-labels-enabled', {\n\t\t\t\texclude: '#give-amount, .give-select-level, [multiple], .give-honeypot',\n\t\t\t\tprioritize: 'placeholder',\n\t\t\t\tprefix: 'give-fl-',\n\t\t\t\tstyle: 'give'\n\t\t\t}\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(\n\t\t$forms, function (index, $form) {\n\t\t\t// Get form input fields.\n\t\t\t$input_fields = jQuery( 'input', $form );\n\n\t\t\t// Bailout.\n\t\t\tif ( ! $input_fields.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tjQuery.each(\n\t\t\t\t$input_fields, function (index, item) {\n\t\t\t\t\titem = jQuery( item ).get( 0 );\n\n\t\t\t\t\t// Set custom message only if translation exit in give global object.\n\t\t\t\t\tif (Give.fn.getGlobal().form_translation.hasOwnProperty( item.name )) {\n\t\t\t\t\t\titem.oninvalid = function (e) {\n\t\t\t\t\t\t\te.target.setCustomValidity( '' );\n\t\t\t\t\t\t\tif ( ! e.target.validity.valid) {\n\t\t\t\t\t\t\t\te.target.setCustomValidity( Give.fn.getGlobal().form_translation[item.name] );\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\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\t{\n\t\t\t\ttype: 'POST',\n\t\t\t\tdata: postData,\n\t\t\t\turl: Give.fn.getGlobalVar( '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\t\t\t\t\t$form.find( 'input[name=\"give_address_state\"], select[name=\"give_address_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\t\t\t\t}\n\t\t\t}\n\t\t).fail(\n\t\t\tfunction (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\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.5\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\tvar self = this;\n\t\t\tself.initEvents_();\n\t\t\tself.loop_( function( el, i ) {\n\t\t\t\tvar style = self.config_[i].style;\n\t\t\t\tel.addEventListener( 'reset', self.events.reset );\n\t\t\t\tel.classList.add( self.prefixed_( 'form' ));\n\t\t\t\tif( style ) {\n\t\t\t\t\tel.classList.add( self.prefixed_( 'style-' + style ));\n\t\t\t\t}\n\t\t\t}, function( field ) {\n\t\t\t\tself.floatLabel_( field );\n\t\t\t});\n\t\t},\n\n\t\t/** @return void */\n\t\tinitEvents_: function() {\n\t\t\tvar self = this;\n\t\t\tself.events = {\n\t\t\t\tblur: self.onBlur_.bind( self ),\n\t\t\t\tchange: self.onInput_.bind( self ),\n\t\t\t\tfocus: self.onFocus_.bind( self ),\n\t\t\t\tinput: self.onInput_.bind( self ),\n\t\t\t\treset: self.onReset_.bind( self ),\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 self = this;\n\t\t\tvar labelEl = self.getLabel_( el );\n\t\t\tif( !labelEl )return;\n\t\t\tel.classList.add( self.prefixed_( el.tagName.toLowerCase() ));\n\t\t\tself.setLabel_( labelEl, el );\n\t\t\tself.setPlaceholder_( labelEl, el );\n\t\t\tself.wrapLabel_( labelEl, el );\n\t\t\tself.handleEvents_( el, 'add' );\n\t\t\tif( typeof self.config_[self.current_].customEvent === 'function' ) {\n\t\t\t\tself.config_[self.current_].customEvent.call( self, 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\tvar self = this;\n\t\t\tif( !self.isValidField_( el ))return;\n\t\t\tif( self.hasParent_( el )) {\n\t\t\t\tif( rebuild !== true )return;\n\t\t\t\tself.reset_( el );\n\t\t\t}\n\t\t\tself.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\t['blur','input','focus'].forEach( function( event ) {\n\t\t\t\tif( event === 'input' && ( el.type === 'file' || el.nodeName === 'SELECT' )) {\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\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\tvar self = this;\n\t\t\tfor( var i = 0; i < self.el_.length; ++i ) {\n\t\t\t\tif( typeof self.selectors_[i] === 'undefined' ) {\n\t\t\t\t\tvar config = self.extend_( {}, self.defaults_, self.options_, self.el_[i].getAttribute( 'data-options' ));\n\t\t\t\t\tvar exclude = ':not(' + config.exclude.split( /[\\s,]+/ ).join( '):not(' ) + ')';\n\t\t\t\t\tself.selectors_[i] = config.transform.replace( /,/g, exclude + ',' ) + exclude;\n\t\t\t\t\tself.config_[i] = config;\n\t\t\t\t}\n\t\t\t\tvar fields = self.el_[i].querySelectorAll( self.selectors_[i] );\n\t\t\t\tself.current_ = i;\n\t\t\t\tif( typeof elCallback === 'function' ) {\n\t\t\t\t\telCallback.call( self, self.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( self, 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 self = this;\n\t\t\tvar parent = el.parentNode;\n\t\t\tif( !self.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\tself.removeClasses_( childEl );\n\t\t\t\tfragment.appendChild( childEl );\n\t\t\t}\n\t\t\tparent.parentNode.replaceChild( fragment, parent );\n\t\t\tself.resetPlaceholder_( el );\n\t\t\tself.handleEvents_( el, 'remove' );\n\t\t},\n\n\t\t/** @return void */\n\t\tresetFields_: function() {\n\t\t\tvar self = this;\n\t\t\tvar fields = self.el_[self.current_].querySelectorAll( self.selectors_[self.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\tself.addRemove_( fields[i].tagName === 'SELECT' && fields[i].value !== '' )\n\t\t\t\t]( self.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\tvar self = this;\n\t\t\tlabelEl.classList.add( self.prefixed_( 'label' ));\n\t\t\tlabelEl.textContent = self.getLabelText_( labelEl, el );\n\t\t\tif( typeof self.config_[self.current_].customLabel === 'function' ) {\n\t\t\t\tlabelEl.textContent = self.config_[self.current_].customLabel.call( self, 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 self = this;\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( self.config_[self.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 = self.getLabelText_( labelEl, el );\n\t\t\t}\n\t\t\tif( typeof self.config_[self.current_].customPlaceholder === 'function' ) {\n\t\t\t\tplaceholderText = self.config_[self.current_].customPlaceholder.call( self, placeholderText, el, labelEl );\n\t\t\t}\n\t\t\tif( el.tagName === 'SELECT' ) {\n\t\t\t\tself.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\tel.insertBefore( new Option( placeholderText, '' ), childEl );\n\t\t\t\tif( el.options[el.selectedIndex].defaultSelected === false ) {\n\t\t\t\t\tel.selectedIndex = 0;\n\t\t\t\t}\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 self = this;\n\t\t\tvar wrapper = self.createEl_( 'div', {\n\t\t\t\tclass: self.prefixed_( 'wrap' ) + ' ' + self.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( self.prefixed_( 'is-active' ));\n\t\t\t}\n\t\t\tif( el.getAttribute( 'required' ) !== null || el.classList.contains( self.config_[self.current_].requiredClass )) {\n\t\t\t\twrapper.classList.add( self.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 = 25\n// module chunks = 0","/* globals jQuery, Give, give_global_vars */\nimport '../plugins/dynamicListener.js';\n\n/**\n * This class handles donor wall shortcode related features\n *\n * @since 2.2.0\n *\n */\nclass GiveDonorWall {\n\tconstructor() {\n\t\twindow.addEventListener(\n\t\t\t'load', function () {\n\t\t\t\t/**\n\t\t\t\t * Add events\n\t\t\t\t */\n\t\t\t\twindow.addDynamicEventListener(document, 'click', '.give-donor__read-more', GiveDonorWall.readMoreBtnEvent);\n\t\t\t\twindow.addDynamicEventListener(document, 'click', '.give-donor__load_more', GiveDonorWall.loadMoreBtnEvent);\n\n\t\t\t}, false\n\t\t);\n\n\t\t// Run code on after window load.\n\t\twindow.addEventListener('load', function () {\n\t\t\tGiveDonorWall.loadGravatars();\n\t\t});\n\t}\n\n\t/**\n\t * Add click event to read more link\n\t *\n\t * @since 2.2.0\n\t *\n\t * @param {object} evt\n\t */\n\tstatic readMoreBtnEvent(evt) {\n\t\tevt.preventDefault();\n\n\t\tjQuery.magnificPopup.open(\n\t\t\t{\n\t\t\t\titems: {\n\t\t\t\t\tsrc: evt.target.parentNode.parentNode.parentNode.getElementsByClassName('give-donor__comment')[0],\n\t\t\t\t\ttype: 'inline',\n\t\t\t\t},\n\t\t\t\tmainClass: 'give-modal give-donor-wall-modal',\n\t\t\t\tcloseOnBgClick: false,\n\t\t\t}\n\t\t);\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add click event to load more link\n\t *\n\t * @since 2.2.0\n\t *\n\t * @param {object} evt\n\t */\n\tstatic loadMoreBtnEvent(evt) {\n\t\tevt.preventDefault();\n\n\t\tlet loaderButton = evt.target,\n\t\t\tparent = loaderButton.parentNode,\n\t\t\tshortcodeAttrHiddenField = parent.getElementsByClassName('give-donor-wall-shortcode-attrs')[0];\n\n\t\tjQuery.ajax({\n\t\t\turl: Give.fn.getGlobalVar('ajaxurl'),\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'give_get_donor_comments',\n\t\t\t\tdata: shortcodeAttrHiddenField.getAttribute('data-shortcode')\n\t\t\t},\n\t\t\tbeforeSend() {\n\t\t\t\tloaderButton.className += ' give-active';\n\t\t\t\tloaderButton.setAttribute('disabled', 'disabled');\n\t\t\t}\n\t\t}).done(function (res) {\n\t\t\tloaderButton.classList.remove('give-active');\n\t\t\tloaderButton.removeAttribute('disabled', 'disabled');\n\n\t\t\t// Add donor comment.\n\t\t\tif (res.html.length) {\n\t\t\t\tparent\n\t\t\t\t\t.getElementsByClassName('give-grid')[0]\n\t\t\t\t\t.insertAdjacentHTML('beforeend', res.html);\n\t\t\t}\n\n\t\t\t// Update data-shortcode attribute.\n\t\t\tif (res.shortcode.length) {\n\t\t\t\tshortcodeAttrHiddenField.setAttribute('data-shortcode', res.shortcode);\n\t\t\t}\n\n\t\t\t// Remove load more button if not any donor comment exist.\n\t\t\tif (!res.remaining) {\n\t\t\t\tloaderButton.remove();\n\t\t\t}\n\n\t\t\tGiveDonorWall.loadGravatar(shortcodeAttrHiddenField);\n\t\t});\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handle gravatars loading\n\t *\n\t * @since 2.3.0\n\t */\n\tstatic loadGravatars() {\n\t\t/**\n\t\t * Loop through the number of donor list on the page.\n\t\t *\n\t\t * @since 2.3.0\n\t\t *\n\t\t */\n\t\tlet shortcodeAttrHiddenFields = document.querySelectorAll('.give-donor-wall-shortcode-attrs');\n\n\t\tshortcodeAttrHiddenFields.forEach(function (shortcodeAttrHiddenField, index) {\n\t\t\tGiveDonorWall.loadGravatar( shortcodeAttrHiddenField );\n\t\t});\n\t}\n\n\n\t/**\n\t * Handle gravatar loading\n\t *\n\t * @since 2.3.0\n\t */\n\tstatic loadGravatar( shortcodeAttrHiddenField ){\n\t\tconst gravatar = require('gravatar');\n\n\t\t/**\n\t\t * Loop through the number of donor list on the page.\n\t\t *\n\t\t * @since 2.3.0\n\t\t *\n\t\t */\n\t\tlet gridWraps,\n\t\t\tgravatarContainer,\n\t\t\tdonorEmail,\n\t\t\tisShowGravatar,\n\t\t\thasValidGravatar;\n\n\t\tisShowGravatar = '1' === Give.fn.getParameterByName('show_avatar', decodeURIComponent(shortcodeAttrHiddenField.getAttribute('data-shortcode') ) );\n\n\t\t// Bailout.\n\t\tif( ! isShowGravatar ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tgridWraps = shortcodeAttrHiddenField.parentNode.querySelectorAll('.give-grid__item');\n\n\t\tgridWraps.forEach(function (gridWrap, index) {\n\t\t\tgravatarContainer = gridWrap.querySelector('.give-donor__image');\n\n\t\t\t// Bailout out if already tried to load gravatar.\n\t\t\tif (gravatarContainer.classList.contains('gravatar-loaded')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdonorEmail = gravatarContainer.getAttribute('data-donor_email');\n\t\t\thasValidGravatar = '1' === gravatarContainer.getAttribute('data-has-valid-gravatar');\n\n\t\t\tif (hasValidGravatar) {\n\t\t\t\tlet gravatarElement = document.createElement('IMG');\n\n\t\t\t\tgravatarContainer.innerHTML = '';\n\t\t\t\tgravatarElement.setAttribute('src', gravatar.url(donorEmail));\n\t\t\t\tgravatarElement.setAttribute('width', '60');\n\t\t\t\tgravatarElement.setAttribute('height', '60');\n\t\t\t\tgravatarContainer.appendChild(gravatarElement);\n\t\t\t}\n\n\t\t\tgravatarContainer.className += ' gravatar-loaded';\n\t\t});\n\t}\n}\n\nlet giveDonorWall = new GiveDonorWall();\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give-donor-wall.js","module.exports = require('./lib/gravatar');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/gravatar/index.js\n// module id = 27\n// module chunks = 0","var md5 = require('blueimp-md5'),\n querystring = require('querystring'),\n MD5_REGEX = /^[0-9a-f]{32}$/;\n\nfunction params(options) {\n var params = {}, removing = {protocol:1, format:1};\n for (var key in options) {\n if (!removing[key]) params[key] = options[key];\n }\n return params;\n}\nfunction proto(options, protocol) {\n if (!options) return;\n if(typeof options.protocol === 'boolean') return options.protocol;\n return options.protocol === \"http\" ? false\n : options.protocol === \"https\" ? true\n : undefined;\n}\nfunction getHash(email){\n email = (typeof email === 'string') ? email.trim().toLowerCase() : 'unspecified';\n return email.match(MD5_REGEX) ? email : md5(email);\n}\n\nfunction getQueryString(options){\n var queryData = querystring.stringify(params(options));\n return (queryData && \"?\" + queryData) || \"\";\n}\n\nvar gravatar = module.exports = {\n\n url: function (email, options, protocol) {\n var baseURL = \"//www.gravatar.com/avatar/\";\n if (options && options.protocol) protocol = proto(options);\n if(typeof protocol !== 'undefined') {\n baseURL = protocol ? \"https://s.gravatar.com/avatar/\" : 'http://www.gravatar.com/avatar/';\n }\n var query = getQueryString(options);\n return baseURL + getHash(email) + query;\n },\n\n profile_url: function (email, options, https) {\n var format = options != undefined && options.format != undefined ? String(options.format) : 'json'\n if (options && options.protocol) https = proto(options);\n var baseURL = (https && \"https://secure.gravatar.com/\") || 'http://www.gravatar.com/';\n var query = getQueryString(options);\n return baseURL + getHash(email) + '.' + format + query;\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/gravatar/lib/gravatar.js\n// module id = 28\n// module chunks = 0","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/* global define */\n\n;(function ($) {\n 'use strict'\n\n /*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n function safeAdd (x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff)\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n return (msw << 16) | (lsw & 0xffff)\n }\n\n /*\n * Bitwise rotate a 32-bit number to the left.\n */\n function bitRotateLeft (num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt))\n }\n\n /*\n * These functions implement the four basic operations the algorithm uses.\n */\n function md5cmn (q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)\n }\n function md5ff (a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t)\n }\n function md5gg (a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t)\n }\n function md5hh (a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t)\n }\n function md5ii (a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t)\n }\n\n /*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n function binlMD5 (x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32)\n x[((len + 64) >>> 9 << 4) + 14] = len\n\n var i\n var olda\n var oldb\n var oldc\n var oldd\n var a = 1732584193\n var b = -271733879\n var c = -1732584194\n var d = 271733878\n\n for (i = 0; i < x.length; i += 16) {\n olda = a\n oldb = b\n oldc = c\n oldd = d\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936)\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063)\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)\n b = md5gg(b, c, d, a, x[i], 20, -373897302)\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558)\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)\n d = md5hh(d, a, b, c, x[i], 11, -358537222)\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844)\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n a = safeAdd(a, olda)\n b = safeAdd(b, oldb)\n c = safeAdd(c, oldc)\n d = safeAdd(d, oldd)\n }\n return [a, b, c, d]\n }\n\n /*\n * Convert an array of little-endian words to a string\n */\n function binl2rstr (input) {\n var i\n var output = ''\n var length32 = input.length * 32\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff)\n }\n return output\n }\n\n /*\n * Convert a raw string to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n function rstr2binl (input) {\n var i\n var output = []\n output[(input.length >> 2) - 1] = undefined\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0\n }\n var length8 = input.length * 8\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32)\n }\n return output\n }\n\n /*\n * Calculate the MD5 of a raw string\n */\n function rstrMD5 (s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8))\n }\n\n /*\n * Calculate the HMAC-MD5, of a key and some data (raw strings)\n */\n function rstrHMACMD5 (key, data) {\n var i\n var bkey = rstr2binl(key)\n var ipad = []\n var opad = []\n var hash\n ipad[15] = opad[15] = undefined\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8)\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636\n opad[i] = bkey[i] ^ 0x5c5c5c5c\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8)\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128))\n }\n\n /*\n * Convert a raw string to a hex string\n */\n function rstr2hex (input) {\n var hexTab = '0123456789abcdef'\n var output = ''\n var x\n var i\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i)\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f)\n }\n return output\n }\n\n /*\n * Encode a string as utf-8\n */\n function str2rstrUTF8 (input) {\n return unescape(encodeURIComponent(input))\n }\n\n /*\n * Take string arguments and return either raw or hex encoded strings\n */\n function rawMD5 (s) {\n return rstrMD5(str2rstrUTF8(s))\n }\n function hexMD5 (s) {\n return rstr2hex(rawMD5(s))\n }\n function rawHMACMD5 (k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d))\n }\n function hexHMACMD5 (k, d) {\n return rstr2hex(rawHMACMD5(k, d))\n }\n\n function md5 (string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string)\n }\n return rawMD5(string)\n }\n if (!raw) {\n return hexHMACMD5(key, string)\n }\n return rawHMACMD5(key, string)\n }\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return md5\n })\n } else if (typeof module === 'object' && module.exports) {\n module.exports = md5\n } else {\n $.md5 = md5\n }\n})(this)\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/blueimp-md5/js/md5.js\n// module id = 29\n// module chunks = 0","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/querystring-es3/index.js\n// module id = 30\n// module chunks = 0","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/querystring-es3/decode.js\n// module id = 31\n// module chunks = 0","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/querystring-es3/encode.js\n// module id = 32\n// module chunks = 0"],"sourceRoot":""}