{"version":3,"sources":["webpack:///js/give.js","webpack:///webpack/bootstrap a3ea59a85978d6d4023d","webpack:///external \"jQuery\"","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/magnific-popup/dist/jquery.magnific-popup.js","webpack:///./node_modules/accounting/accounting.js-exposed","webpack:///./node_modules/accounting/accounting.js","webpack:///./assets/src/js/plugins/give-hint.css.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./assets/src/js/frontend/give-donations.js","webpack:///./assets/src/js/frontend/give.js","webpack:///./node_modules/jquery.payment/lib/jquery.payment.js","webpack:///./node_modules/uiblocker/uiblocker.js","webpack:///./node_modules/uiblocker/lib/jquery.blockUI.js","webpack:///./node_modules/underscore/underscore.js","webpack:///./assets/src/js/frontend/give-ajax.js","webpack:///./assets/src/js/frontend/give-misc.js","webpack:///./node_modules/float-labels.js/src/float-labels.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","jQuery","g","this","Function","eval","e","window","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","factory","undefined","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","isArray","_getCloseBtn","type","currTemplate","closeBtn","closeMarkup","replace","tClose","_checkInstance","magnificPopup","instance","init","supportsTransitions","style","v","length","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","key","extend","defaults","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","value","split","EVENT_NS","replaceWith","is","scrollbarSize","scrollDiv","cssText","offsetWidth","removeChild","proto","registerModule","push","fn","jqEl","itemOpts","parseInt","arguments","Array","_hiddenClass","_inlinePlaceholder","_lastInlineElement","_putInlineElementsBack","after","hiddenClass","tNotFound","initInline","CLOSE_EVENT","getInline","inlineSt","inline","parent","parentNode","inlineElement","_ajaxCur","_removeAjaxCursor","_destroyAjaxRequest","req","abort","settings","cursor","tError","initAjax","ajax","getAjax","opts","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","obj","offsetHeight","_fixIframeBugs","isShowing","srcAction","patterns","youtube","id","vimeo","gmaps","initIframe","prevType","newType","getIframe","embedSrc","iframeSt","iframe","indexOf","substr","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","Math","min","preloadAfter","_preloadItem","replaceSrc","ratio","initRetina","devicePixelRatio","retina","isNaN","max-width","global","root","isString","charCodeAt","nativeIsArray","toString","isObject","defs","map","iterator","context","j","results","nativeMap","checkPrecision","val","base","round","abs","checkCurrencyFormat","format","lib","currency","match","pos","neg","zero","version","symbol","decimal","thousand","precision","grouping","number","unformat","parse","regex","RegExp","unformatted","parseFloat","toFixed","power","pow","formatNumber","usePrecision","negative","mod","formatMoney","formats","formatColumn","list","padAfterSymbol","maxLength","useFormat","fVal","join","accounting","giveHintCss","action","$this","label","$tooltip","outerHeight","outerWidth","ready","reset_qtip","tooltip","classes","icon_classes","label_length","grep","qtip_tooltips","__webpack_amd_options__","__webpack_exports__","__WEBPACK_IMPORTED_MODULE_0_accounting__","__WEBPACK_IMPORTED_MODULE_0_accounting___default","_typeof","Symbol","Give","subHelperObjs","trigger","__initialize_cache","formatCurrency","price","args","$form","format_args","give_global_vars","decimal_separator","thousands_separator","number_decimals","trim","form","getInfo","result","amount","actual_price","a","decimal_amount","decimal_index","Number","unFormatCurrency","getParameterByName","location","href","exec","decodeURIComponent","getGlobalVar","str","setCache","cache","getCache","$item","field","formatCreditCard","onload","__sendBackToForm","disable","is_disable","prop","formatAmount","gateway","hasAttribute","setInfo","getGateway","getVariablePrices","formLevels","variable_prices","price_id","getPriceID","is_amount","current_amount","variable_price","getMinimumAmount","getMaximumAmount","getAmount","getNonce","nonce","resetNonce","post","ajaxurl","give_form_id","response","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","$forms","card_number","card_cvc","card_expiry","payment","notice","renderNotice","notice_code","$container","$notice","getNotice","insertBefore","show","error_code","notice_msg","formatted_amount","update_billing_state_field","general_loading","postData","country","field_name","xhrFields","withCredentials","states_label","states_found","default_state","states_require","closest","show_field","doc","fail","console","log","toggleError","errored","toggleClass","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","load","give_form","cardType","validateCardNumber","validateCardCVC","validateCardExpiry","card_type","expiry","month","year","__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__","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","_results","formatCardCVC","formatCardExpiry","cardExpiryVal","prefix","Date","getFullYear","currentTime","setMonth","getMonth","cvc","groups","shift","mon","parts","sep","substring","_","UIBlocker","transitionDelay","blockWith","deferred","Deferred","rest","event","first","blockUI","message","always","unblockUI","then","resolve","reject","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","createReduce","dir","iteratee","memo","keys","currentKey","optimizeCb","isArrayLike","createPredicateIndexFinder","array","predicate","getLength","createIndexFinder","predicateFind","sortedIndex","max","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","ObjProto","has","previousUnderscore","ArrayProto","FuncProto","nativeKeys","nativeBind","nativeCreate","create","Ctor","_wrapped","VERSION","func","argCount","other","collection","accumulator","identity","matcher","Infinity","createAssigner","keysFunc","undefinedOnly","source","baseCreate","MAX_ARRAY_INDEX","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","findIndex","findKey","select","negate","every","some","any","includes","include","fromIndex","invoke","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","sortBy","criteria","sort","group","behavior","groupBy","indexBy","countBy","size","partition","pass","head","take","initial","tail","drop","compact","flatten","shallow","strict","startIndex","output","isArguments","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","high","mid","floor","range","start","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","bindAll","Error","memoize","hasher","address","wait","defer","throttle","previous","later","leading","now","remaining","trailing","debounce","immediate","timestamp","callNow","wrapper","compose","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extendOwn","assign","pick","oiteratee","omit","props","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","isEqual","isEmpty","isElement","Int8Array","isFinite","isNumber","isNull","isUndefined","noConflict","constant","propertyOf","matches","accum","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","string","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","oldSettings","variable","render","chain","_chain","mixin","valueOf","toJSON","give_load_gateway","form_object","loading_element","give_total","give_form_id_prefix","background","give_payment_mode","__WEBPACK_IMPORTED_MODULE_0__give_donations__","$nonceField","nonceTime","timeDiff","this_form","loading_animation","checkout_response","done","give_fl_trigger","parseJSON","fields","complete_purchase_val","purchase_loading","give_ajax","give_user_login","give_user_pass","email","ajaxNonce","JSON","give_purchase_form","checkValidity","serialize","submit","__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","querySelectorAll","config","selectors","destroy","loop","removeEventListener","removeClasses","floatLabel","customEvent","customLabel","customPlaceholder","inputRegex","requiredClass","transform","initEvents","classList","prefixed","onBlur","change","onInput","onFocus","onReset","addRemove","bool","build","labelEl","getLabel","setLabel","setPlaceholder","wrapLabel","handleEvents","current","createEl","tag","attributes","setAttribute","extenders","isValidField","hasParent","getAttribute","getLabelText","labelText","textContent","placeholderText","isMicrosoftSelectEl","nodeName","isMSBrowser","isInvalidInput","isInvalidSelect","elCallback","fieldCallback","resetFields","fragment","createDocumentFragment","firstElementChild","childEl","replaceChild","resetPlaceholder","originalPlaceholder","removeAttribute","setSelectPlaceholder","selected","selectedIndex","defaultSelected","Option","class"],"mappings":"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","file":"js/give.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 37);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = jQuery;\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/* 3 */\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/* 4 */,\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {module.exports = global[\"accounting\"] = __webpack_require__(6);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n/* 6 */\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/* 7 */\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/* 8 */,\n/* 9 */\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/* 10 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_accounting__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_accounting___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_accounting__);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nvar Give = {};\n\n/**\n * This API is under development.\n *\n * Currently used only for internal purpose.\n */\n/* harmony default export */ __webpack_exports__[\"a\"] = (Give = {\n\tinit: function init() {\n\t\tvar subHelperObjs = ['form'],\n\t\t counter = 0;\n\t\tjQuery(document).trigger('give:preInit');\n\n\t\tthis.fn.__initialize_cache();\n\n\t\t// Initialize all init methods od sub helper objects.\n\t\twhile (counter < subHelperObjs.length) {\n\t\t\tif (!!Give[subHelperObjs[counter]].init) {\n\t\t\t\tGive[subHelperObjs[counter]].init();\n\t\t\t}\n\t\t\tcounter++;\n\t\t}\n\n\t\tjQuery(document).trigger('give:postInit');\n\t},\n\n\tfn: {\n\t\t/**\n * Format Currency\n *\n * Formats the currency with accounting.js\n *\n * @param {string} price\n * @param {object} args\n * @param {object} $form\n * @returns {*|string}\n */\n\t\tformatCurrency: function formatCurrency(price, args, $form) {\n\t\t\t// Global currency setting.\n\t\t\tvar format_args = {\n\t\t\t\tsymbol: '',\n\t\t\t\tdecimal: give_global_vars.decimal_separator,\n\t\t\t\tthousand: give_global_vars.thousands_separator,\n\t\t\t\tprecision: parseInt(give_global_vars.number_decimals),\n\t\t\t\tcurrency: give_global_vars.currency\n\t\t\t};\n\n\t\t\tprice = price.toString().trim();\n\t\t\t$form = 'undefined' === typeof $form ? {} : $form;\n\n\t\t\t// Form specific currency setting.\n\t\t\tif ($form.length) {\n\t\t\t\t//Set the custom amount input value format properly\n\t\t\t\tformat_args = {\n\t\t\t\t\tsymbol: '',\n\t\t\t\t\tdecimal: Give.form.fn.getInfo('decimal_separator', $form),\n\t\t\t\t\tthousand: Give.form.fn.getInfo('thousands_separator', $form),\n\t\t\t\t\tprecision: Give.form.fn.getInfo('number_decimals', $form),\n\t\t\t\t\tcurrency: Give.form.fn.getInfo('currency_code', $form)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\targs = jQuery.extend(format_args, args);\n\n\t\t\t// Make sure precision is integer type\n\t\t\targs.precision = parseInt(args.precision);\n\n\t\t\tif ('INR' === args.currency) {\n\t\t\t\tvar actual_price = __WEBPACK_IMPORTED_MODULE_0_accounting___default.a.unformat(price, '.').toString();\n\n\t\t\t\tvar decimal_amount = '',\n\t\t\t\t result,\n\t\t\t\t amount,\n\t\t\t\t decimal_index = actual_price.indexOf('.');\n\n\t\t\t\tif (-1 !== decimal_index && args.precision) {\n\t\t\t\t\tdecimal_amount = Number(actual_price.substr(parseInt(decimal_index))).toFixed(args.precision).toString().substr(1);\n\t\t\t\t\tactual_price = actual_price.substr(0, parseInt(decimal_index));\n\n\t\t\t\t\tif (!decimal_amount.length) {\n\t\t\t\t\t\tdecimal_amount = '.0000000000'.substr(0, parseInt(decimal_index) + 1);\n\t\t\t\t\t} else if (args.precision + 1 > decimal_amount.length) {\n\t\t\t\t\t\tdecimal_amount = (decimal_amount + '000000000').substr(0, args.precision + 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdecimal_amount = '.000000000'.substr(0, args.precision + 1);\n\t\t\t\t}\n\n\t\t\t\t// Extract last 3 from amount\n\t\t\t\tresult = actual_price.substr(-3);\n\t\t\t\tamount = actual_price.substr(0, parseInt(actual_price.length) - 3);\n\n\t\t\t\t// Apply digits 2 by 2\n\t\t\t\twhile (amount.length > 0) {\n\t\t\t\t\tresult = amount.substr(-2) + args.thousand + result;\n\t\t\t\t\tamount = amount.substr(0, parseInt(amount.length) - 2);\n\t\t\t\t}\n\n\t\t\t\tif (decimal_amount.length) {\n\t\t\t\t\tresult = result + decimal_amount;\n\t\t\t\t}\n\n\t\t\t\tprice = result;\n\n\t\t\t\tif (undefined !== args.symbol && args.symbol.length) {\n\t\t\t\t\tif ('after' === args.position) {\n\t\t\t\t\t\tprice = price + args.symbol;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice = args.symbol + price;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//Properly position symbol after if selected\n\t\t\t\tif ('after' === args.position) {\n\t\t\t\t\targs.format = '%v%s';\n\t\t\t\t}\n\n\t\t\t\tprice = __WEBPACK_IMPORTED_MODULE_0_accounting___default.a.formatMoney(price, args);\n\t\t\t}\n\n\t\t\treturn price;\n\t\t},\n\n\t\t/**\n * Unformat Currency\n *\n * @param price\n * @param {string} decimal_separator\n * @returns {number}\n */\n\t\tunFormatCurrency: function unFormatCurrency(price, decimal_separator) {\n\t\t\tif ('string' === typeof price) {\n\t\t\t\tvar regex = ',' === decimal_separator.trim() ? /[^0-9\\,-]+/g : /[^0-9\\.-]+/g;\n\n\t\t\t\tprice = price.replace(regex, '');\n\n\t\t\t\tif (0 === price.indexOf(decimal_separator)) {\n\t\t\t\t\tprice = price.substr(1);\n\t\t\t\t} else if (price.length - 1 === price.indexOf(decimal_separator)) {\n\t\t\t\t\tprice = price.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Math.abs(parseFloat(__WEBPACK_IMPORTED_MODULE_0_accounting___default.a.unformat(price, decimal_separator)));\n\t\t},\n\n\t\t/**\n * Get Parameter by Name\n *\n * @see: http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n * @param name\n * @param url\n * @since 1.4.2\n * @returns {*}\n */\n\t\tgetParameterByName: function getParameterByName(name, url) {\n\t\t\tif (!url) {\n\t\t\t\turl = window.location.href;\n\t\t\t}\n\n\t\t\tname = name.replace(/[\\[\\]]/g, '\\\\$&');\n\n\t\t\tvar regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n\t\t\t results = regex.exec(url);\n\n\t\t\tif (!results) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!results[2]) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn decodeURIComponent(results[2].replace(/\\+/g, ' '));\n\t\t},\n\n\t\t/**\n * Get information from global var\n *\n * @since 1.8.17\n * @param {string} str\n *\n * @return {string}\n */\n\t\tgetGlobalVar: function getGlobalVar(str) {\n\t\t\tif ('undefined' === typeof give_global_vars[str]) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn give_global_vars[str];\n\t\t},\n\n\t\t/**\n * set cache\n *\n * @since 1.8.17\n *\n * @param {string} key\n * @param {string} value\n * @param {object} $form\n */\n\t\tsetCache: function setCache(key, value, $form) {\n\t\t\tif ($form.length) {\n\t\t\t\tGive.cache['form_' + Give.form.fn.getInfo('form-id', $form)][key] = value;\n\t\t\t} else {\n\t\t\t\tGive.cache[key] = value;\n\t\t\t}\n\t\t},\n\n\t\t/**\n * Get cache\n *\n * @since 1.8.17\n * @param key\n * @param $form\n * @return {string|*}\n */\n\t\tgetCache: function getCache(key, $form) {\n\t\t\tvar cache;\n\n\t\t\tif ($form.length) {\n\t\t\t\tcache = Give.cache['form_' + Give.form.fn.getInfo('form-id', $form)][key];\n\t\t\t} else {\n\t\t\t\tcache = Give.cache[key];\n\t\t\t}\n\n\t\t\tcache = 'undefined' === typeof cache ? '' : cache;\n\n\t\t\treturn cache;\n\t\t},\n\n\t\t/**\n * Initialize cache.\n *\n * @since 1.8.17\n * @private\n */\n\t\t__initialize_cache: function __initialize_cache() {\n\t\t\tjQuery.each(jQuery('.give-form'), function (index, $item) {\n\t\t\t\t$item = $item instanceof jQuery ? $item : jQuery($item);\n\n\t\t\t\tGive.cache['form_' + Give.form.fn.getInfo('form-id', $item)] = [];\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n * This object key will be use to cache predicted data or donor activity.\n *\n * @since 1.8.17\n */\n\tcache: {}\n});\n\nGive.form = {\n\tinit: function init() {\n\t\tthis.fn.field.formatCreditCard(jQuery('form.give-form'));\n\n\t\twindow.onload = function () {\n\t\t\tGive.form.fn.__sendBackToForm();\n\t\t};\n\t},\n\n\tfn: {\n\n\t\t/**\n * Disable donation form.\n *\n * @param {object} $form\n * @param {boolean} is_disable\n *\n * @return {*}\n */\n\t\tdisable: function disable($form, is_disable) {\n\t\t\tif (!$form.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$form.find('.give-submit').prop('disabled', is_disable);\n\t\t},\n\n\t\t/**\n * Get formatted amount\n *\n * @param {string/number} amount\n * @param {object} $form\n * @param {object} args\n */\n\t\tformatAmount: function formatAmount(amount, $form, args) {\n\t\t\t// Do not format amount if form did not exist.\n\t\t\tif (!$form.length) {\n\t\t\t\treturn amount;\n\t\t\t}\n\n\t\t\treturn Give.fn.formatCurrency(amount, args, $form);\n\t\t},\n\n\t\t/**\n * Get form information\n *\n * @since 1.8.17\n * @param {string} str\n * @param {object} $form\n *\n * @return {string}\n */\n\t\tgetInfo: function getInfo(str, $form) {\n\t\t\tvar data = '';\n\t\t\t$form = 'undefined' !== typeof $form ? $form : {};\n\n\t\t\t// Bailout.\n\t\t\tif (!str.length || !$form.length) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tswitch (str) {\n\t\t\t\tcase 'gateways':\n\t\t\t\t\tdata = [];\n\t\t\t\t\tjQuery.each($form.find('input[name=\"payment-mode\"]'), function (index, gateway) {\n\t\t\t\t\t\tgateway = !(gateway instanceof jQuery) ? jQuery(gateway) : gateway;\n\t\t\t\t\t\tdata.push(gateway.val().trim());\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-type':\n\t\t\t\t\tif ($form.hasClass('give-form-type-set')) {\n\t\t\t\t\t\tdata = 'set';\n\t\t\t\t\t} else if ($form.hasClass('give-form-type-multi')) {\n\t\t\t\t\t\tdata = 'multi';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-id':\n\t\t\t\t\tdata = $form.find('input[name=\"give-form-id\"]').val();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif ($form.get(0).hasAttribute('data-' + str)) {\n\t\t\t\t\t\tdata = $form.attr('data-' + str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = $form.attr(str);\n\t\t\t\t\t}\n\n\t\t\t\t\t'undefined' !== typeof data ? data.trim() : data;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\n\t\t/**\n * Set form information\n *\n * @since 1.8.17\n * @param {string} str\n * @param {string} val\n * @param {object} $form\n * @param {string} type\n *\n * @return {string|boolean}\n */\n\t\tsetInfo: function setInfo(type, val, $form, str) {\n\t\t\t// Bailout.\n\t\t\tif (!$form.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ttype = 'undefined' === typeof type ? 'data' : type;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'nonce':\n\t\t\t\t\t$form.find('input[name=\"give-form-hash\"]').val(val);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Bailout.\n\t\t\tif ('undefined' !== typeof str && !str.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'attr':\n\t\t\t\t\t$form.attr(str, val);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t$form.data(str, val);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n * Get formatted amount\n *\n * @since 1.8.17\n * @param {object} $form\n */\n\t\tgetGateway: function getGateway($form) {\n\t\t\tvar gateway = '';\n\n\t\t\tif (!$form.length) {\n\t\t\t\treturn gateway;\n\t\t\t}\n\n\t\t\tgateway = $form.find('input[name=\"payment-mode\"]:checked').val().trim();\n\n\t\t\treturn 'undefined' !== typeof gateway ? gateway : '';\n\t\t},\n\n\t\t/**\n * Get Price ID and levels for multi donation form\n *\n * @param {Object} $form Form jQuery object\n *\n * @returns {Object}\n */\n\t\tgetVariablePrices: function getVariablePrices($form) {\n\t\t\tvar variable_prices = [],\n\t\t\t formLevels;\n\n\t\t\t// check if correct form type is multi or not.\n\t\t\tif (!$form.length || !$form.hasClass('give-form-type-multi') || !(formLevels = $form.find('.give-donation-levels-wrap [data-price-id] '))) {\n\t\t\t\treturn variable_prices;\n\t\t\t}\n\n\t\t\tjQuery.each(formLevels, function (index, item) {\n\t\t\t\t// Get Jquery instance for item.\n\t\t\t\titem = !(item instanceof jQuery) ? jQuery(item) : item;\n\n\t\t\t\tvar decimal_separator = Give.form.fn.getInfo('decimal_separator', $form);\n\n\t\t\t\t// Add price id and amount to collector.\n\t\t\t\tvariable_prices.push({\n\t\t\t\t\tprice_id: item.data('price-id'),\n\t\t\t\t\tamount: Give.fn.unFormatCurrency(item.val(), decimal_separator)\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn variable_prices;\n\t\t},\n\n\t\t/**\n * Get form price ID\n *\n * @since 1.8.17\n * @param {object} $form\n * @param {boolean} is_amount\n *\n * @return {string}\n */\n\t\tgetPriceID: function getPriceID($form, is_amount) {\n\n\t\t\tvar variable_prices = this.getVariablePrices($form),\n\t\t\t current_amount = Give.fn.unFormatCurrency($form.find('input[name=\"give-amount\"]').val(), this.getInfo('decimal_separator', $form)),\n\n\n\t\t\t/**\n * Flag Multi-levels for min. donation conditional.\n *\n * Note: Value of this variable will be:\n * a. -1 if no any level found.\n * b. [0-*] Any number from zero if donation level found.\n * c custom if donation level not found and donation amount is greater than the custom minimum amount.\n *\n * @type {number/string} Donation level ID.\n */\n\t\t\tprice_id = !!Give.fn.getCache('amount_' + current_amount, $form) ? Give.fn.getCache('amount_' + current_amount, $form) : -1;\n\n\t\t\t// Flag to decide on which param we want to find price_id\n\t\t\tis_amount = 'undefined' === typeof is_amount ? true : is_amount;\n\n\t\t\t// Find price id with amount in variable prices.\n\t\t\tif (variable_prices.length) {\n\n\t\t\t\t// Get recent selected price id for same amount.\n\t\t\t\tif (-1 === price_id) {\n\t\t\t\t\tif (is_amount) {\n\t\t\t\t\t\t// Find amount in donation levels.\n\t\t\t\t\t\tjQuery.each(variable_prices, function (index, variable_price) {\n\t\t\t\t\t\t\tif (variable_price.amount === current_amount) {\n\t\t\t\t\t\t\t\tprice_id = variable_price.price_id;\n\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// Set level to custom.\n\t\t\t\t\t\tif (-1 === price_id && this.getMinimumAmount($form) <= current_amount && this.getMaximumAmount($form) >= current_amount && this.getMinimumAmount($form) <= current_amount) {\n\t\t\t\t\t\t\tprice_id = 'custom';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice_id = jQuery('input[name=\"give-price-id\"]', $form).val();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn price_id;\n\t\t},\n\n\t\t/**\n * Get form minimum amount\n *\n * @since 1.8.17\n * @param {object} $form\n *\n * @return {string}\n */\n\t\tgetMinimumAmount: function getMinimumAmount($form) {\n\t\t\treturn $form.find('input[name=\"give-form-minimum\"]').val();\n\t\t},\n\n\t\t/**\n * Get form maximum amount\n *\n * @since 2.1\n * @param {object} $form\n *\n * @return {string}\n */\n\t\tgetMaximumAmount: function getMaximumAmount($form) {\n\t\t\treturn $form.find('input[name=\"give-form-maximum\"]').val();\n\t\t},\n\n\t\t/**\n * Get form amount\n *\n * @since 1.8.17\n * @param $form\n * @return {*}\n */\n\t\tgetAmount: function getAmount($form) {\n\t\t\t// Bailout\n\t\t\tif (!$form.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar amount = $form.find('input[name=\"give-amount\"]').val();\n\n\t\t\tif ('undefined' === typeof amount || !amount) {\n\t\t\t\tamount = 0;\n\t\t\t}\n\n\t\t\treturn Give.fn.unFormatCurrency(amount, this.getInfo('decimal_separator', $form));\n\t\t},\n\n\t\t/**\n * Get form security nonce\n *\n * @since 1.8.17\n * @param {object} $form\n * @return {string}\n */\n\t\tgetNonce: function getNonce($form) {\n\t\t\t// Bailout\n\t\t\tif (!$form.length) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tvar nonce = $form.find('input[name=\"give-form-hash\"]').val();\n\n\t\t\tif ('undefined' === typeof nonce || !nonce) {\n\t\t\t\tnonce = '';\n\t\t\t}\n\n\t\t\treturn nonce;\n\t\t},\n\n\t\t/**\n * Reset form noce.\n *\n * @since 2.0\n *\n * @param {object} $form Donation form object.\n * @returns {boolean}\n */\n\t\tresetNonce: function resetNonce($form) {\n\t\t\t// Return false, if form is missing.\n\t\t\tif (!$form.length || !jQuery('input[name=\"give-form-hash\"]', $form).length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tGive.form.fn.disable($form, true);\n\n\t\t\t//Post via AJAX to Give\n\t\t\tjQuery.post(give_global_vars.ajaxurl, {\n\t\t\t\taction: 'give_donation_form_nonce',\n\t\t\t\tgive_form_id: Give.form.fn.getInfo('form-id', $form)\n\t\t\t}, function (response) {\n\t\t\t\t// Update nonce field.\n\t\t\t\tGive.form.fn.setInfo('nonce', response.data, $form, '');\n\n\t\t\t\tGive.form.fn.disable($form, false);\n\t\t\t});\n\t\t},\n\n\t\t/**\n * Auto select donation level\n *\n * @since 1.8.17\n * @param {object} $form\n * @param {string} price_id\n *\n * @return {boolean}\n */\n\t\tautoSelectDonationLevel: function autoSelectDonationLevel($form, price_id) {\n\n\t\t\tif (!$form.length || 'multi' !== this.getInfo('form-type', $form)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tprice_id = 'undefined' === typeof price_id ? this.getPriceID($form, false) : price_id;\n\n\t\t\tswitch (true) {\n\n\t\t\t\t// Auto select radio button.\n\t\t\t\tcase !!$form.find('.give-radio-input').length:\n\t\t\t\t\t$form.find('.give-radio-input').prop('checked', false);\n\t\t\t\t\t$form.find('.give-radio-input[data-price-id=\"' + price_id + '\"]').prop('checked', true).addClass('give-default-level');\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Set focus to price id button.\n\t\t\t\tcase !!$form.find('button.give-donation-level-btn').length:\n\t\t\t\t\t$form.find('button.give-donation-level-btn').blur();\n\t\t\t\t\t$form.find('button.give-donation-level-btn[data-price-id=\"' + price_id + '\"]').focus().addClass('give-default-level');\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Auto select option.\n\t\t\t\tcase !!$form.find('select.give-select-level').length:\n\t\t\t\t\t$form.find('select.give-select-level option').prop('selected', false);\n\t\t\t\t\t$form.find('select.give-select-level option[data-price-id=\"' + price_id + '\"]').prop('selected', true).addClass('give-default-level');\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n * Update level values\n *\n * Helper function: Sets the multi-select amount values\n *\n * @since 1.8.17\n * @param {object} $level\n * @returns {boolean}\n */\n\t\tautoSetMultiLevel: function autoSetMultiLevel($level) {\n\n\t\t\tvar $form = $level.parents('form'),\n\t\t\t level_amount = $level.val(),\n\t\t\t level_price_id = $level.data('price-id');\n\n\t\t\t// Check if price ID blank because of dropdown type\n\t\t\tif ('undefined' === typeof level_price_id) {\n\t\t\t\tlevel_price_id = $level.find('option:selected').data('price-id');\n\t\t\t}\n\n\t\t\t// Is this a custom amount selection?\n\t\t\tif ('custom' === level_price_id) {\n\t\t\t\t// It is, so focus on the custom amount input.\n\t\t\t\t$form.find('.give-amount-top').val('').focus();\n\t\t\t\treturn false; // Bounce out\n\t\t\t}\n\n\t\t\t// Update custom amount field\n\t\t\t$form.find('.give-amount-top').val(level_amount);\n\t\t\t$form.find('span.give-amount-top').text(level_amount);\n\n\t\t\tvar decimal_separator = Give.form.fn.getInfo('decimal_separator', $form);\n\n\t\t\t// Cache previous amount and set data amount.\n\t\t\tjQuery('.give-donation-amount .give-text-input', $form).attr('data-amount', Give.fn.unFormatCurrency($form.find('.give-final-total-amount').attr('data-total'), decimal_separator));\n\n\t\t\t// Manually trigger blur event with two params:\n\t\t\t// (a) form jquery object\n\t\t\t// (b) price id\n\t\t\t// (c) donation amount\n\t\t\t$form.find('.give-donation-amount .give-text-input').trigger('blur', [$form, level_amount, level_price_id]);\n\t\t},\n\n\t\t/**\n * Donor sent back to the form\n *\n * @since 1.8.17\n * @access private\n */\n\t\t__sendBackToForm: function __sendBackToForm() {\n\n\t\t\tvar form_id = Give.fn.getParameterByName('form-id'),\n\t\t\t payment_mode = Give.fn.getParameterByName('payment-mode');\n\n\t\t\t// Sanity check - only proceed if query strings in place.\n\t\t\tif (!form_id || !payment_mode) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar $form_wrapper = jQuery('body').find('#give-form-' + form_id + '-wrap'),\n\t\t\t $form = $form_wrapper.find('form.give-form'),\n\t\t\t display_modal = $form_wrapper.hasClass('give-display-modal'),\n\t\t\t display_button = $form_wrapper.hasClass('give-display-button'),\n\t\t\t display_reveal = $form_wrapper.hasClass('give-display-reveal');\n\n\t\t\t// Update payment mode radio so it's correctly checked.\n\t\t\t$form.find('#give-gateway-radio-list label').removeClass('give-gateway-option-selected');\n\t\t\t$form.find('input[name=payment-mode][value=' + payment_mode + ']').prop('checked', true).parent().addClass('give-gateway-option-selected');\n\n\t\t\t// Select the proper level for Multi-level forms.\n\t\t\t// It can either be a dropdown, buttons, or radio list. Default is buttons field type.\n\t\t\tvar level_id = Give.fn.getParameterByName('level-id'),\n\t\t\t level_field = $form.find('*[data-price-id=\"' + level_id + '\"]');\n\n\t\t\tif (level_field.length > 0) {\n\t\t\t\tthis.autoSetMultiLevel(level_field);\n\t\t\t}\n\n\t\t\tvar give_form_wrap = jQuery('.give-form-wrap'),\n\t\t\t is_form_grid = give_form_wrap.hasClass('give-form-grid-wrap');\n\n\t\t\tif (is_form_grid && 1 === jQuery('#give-modal-form-' + form_id).length) {\n\t\t\t\tjQuery.magnificPopup.open({\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: 'inline',\n\t\t\t\t\t\tsrc: '#give-modal-form-' + form_id\n\t\t\t\t\t},\n\t\t\t\t\tfixedContentPos: true,\n\t\t\t\t\tfixedBgPos: true,\n\t\t\t\t\tcloseBtnInside: true,\n\t\t\t\t\tmidClick: true,\n\t\t\t\t\tremovalDelay: 300,\n\t\t\t\t\tmainClass: 'modal-fade-slide'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This form is modal display so show the modal.\n\t\t\tif (display_modal || display_button) {\n\t\t\t\tgive_open_form_modal($form_wrapper, $form);\n\t\t\t} else if (display_reveal) {\n\t\t\t\t// This is a reveal form, show it.\n\t\t\t\t$form.find('.give-btn-reveal').hide();\n\t\t\t\t$form.find('#give-payment-mode-select, #give_purchase_form_wrap').slideDown();\n\t\t\t}\n\t\t},\n\n\t\t/**\n * Check if donation amount valid or not\n * @since 1.8.17\n *\n * @param {object} $form\n *\n * @return {boolean}\n */\n\t\tisValidDonationAmount: function isValidDonationAmount($form) {\n\n\t\t\t// Return true, if custom amount is not enabled.\n\t\t\tif ($form.find('input[name=\"give-form-minimum\"]').length <= 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar min_amount = this.getMinimumAmount($form),\n\t\t\t max_amount = this.getMaximumAmount($form),\n\t\t\t amount = this.getAmount($form),\n\t\t\t price_id = this.getPriceID($form, true);\n\n\t\t\t// Don't allow zero donation amounts.\n\t\t\t// https://github.com/WordImpress/Give/issues/3181\n\t\t\tif (0 === amount) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn -1 < amount && amount >= min_amount && amount <= max_amount || -1 !== price_id;\n\t\t},\n\n\t\tfield: {\n\n\t\t\t/**\n * Format CC Fields\n *\n * Set variables and format cc fields.\n *\n * @since 1.2\n *\n * @param {object} $forms\n */\n\t\t\tformatCreditCard: function formatCreditCard($forms) {\n\t\t\t\t//Loop through forms on page and set CC validation\n\t\t\t\t$forms.each(function (index, form) {\n\t\t\t\t\tform = jQuery(form);\n\t\t\t\t\tvar card_number = form.find('.card-number'),\n\t\t\t\t\t card_cvc = form.find('.card-cvc'),\n\t\t\t\t\t card_expiry = form.find('.card-expiry');\n\n\t\t\t\t\t//Only validate if there is a card field\n\t\t\t\t\tif (card_number.length) {\n\t\t\t\t\t\tcard_number.payment('formatCardNumber');\n\t\t\t\t\t\tcard_cvc.payment('formatCardCVC');\n\t\t\t\t\t\tcard_expiry.payment('formatCardExpiry');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n};\n\nGive.notice = {\n\tfn: {\n\t\t/**\n * Render notice\n * @since 1.8.17\n *\n * @param {string} notice_code\n * @param {object} $container\n *\n * @return {string}\n */\n\t\trenderNotice: function renderNotice(notice_code, $container) {\n\t\t\tvar notice_html = '',\n\t\t\t $notice = void 0;\n\t\t\t$container = 'undefined' !== typeof $container ? $container : {};\n\n\t\t\tswitch (notice_code) {\n\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t$notice = jQuery('
' + this.getNotice(notice_code, $container) + '
');\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t$notice = jQuery('
' + this.getNotice(notice_code, $container) + '
');\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Return html if container did not find.\n\t\t\tif (!$container.length) {\n\t\t\t\treturn notice_html;\n\t\t\t}\n\n\t\t\t$notice.insertBefore($container.find('.give-total-wrap')).show();\n\t\t},\n\n\t\t/**\n * Get error notice\n *\n * @since 1.8.17\n * @param {string} error_code\n * @param {object} $form\n *\n * @return {*}\n */\n\t\tgetNotice: function getNotice(error_code, $form) {\n\t\t\t// Bailout.\n\t\t\tif (!error_code.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar notice, notice_msg, formatted_amount;\n\t\t\tnotice = notice_msg = formatted_amount = '';\n\n\t\t\tif ($form.length) {\n\t\t\t\tswitch (error_code) {\n\t\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar(error_code);\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMinimumAmount($form);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar(error_code);\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMaximumAmount($form);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($form.length && '' !== notice_msg) {\n\t\t\t\tnotice = notice_msg + ' ' + Give.fn.formatCurrency(formatted_amount, {\n\t\t\t\t\tsymbol: Give.form.fn.getInfo('currency_symbol', $form),\n\t\t\t\t\tposition: Give.form.fn.getInfo('currency_position', $form)\n\t\t\t\t}, $form);\n\t\t\t}\n\n\t\t\treturn notice;\n\t\t}\n\t}\n};\n\nwindow.Give = Give;\n\njQuery(function ($) {\n\n\tvar $forms = jQuery('form.give-form'),\n\t doc = $(document);\n\n\t// Toggle validation classes\n\t$.fn.toggleError = function (errored) {\n\t\tthis.toggleClass('error', errored);\n\t\tthis.toggleClass('valid', !errored);\n\n\t\treturn this;\n\t};\n\n\t// Initialize Give object.\n\tGive.init();\n\n\t/**\n * Update state/province fields per country selection\n */\n\tfunction update_billing_state_field() {\n\t\tvar $this = $(this),\n\t\t $form = $this.parents('form');\n\t\tif ('card_state' !== $this.attr('id')) {\n\n\t\t\t//Disable the State field until updated\n\t\t\t$form.find('#card_state').empty().append('').prop('disabled', true);\n\n\t\t\t// If the country field has changed, we need to update the state/province field\n\t\t\tvar postData = {\n\t\t\t\taction: 'give_get_states',\n\t\t\t\tcountry: $this.val(),\n\t\t\t\tfield_name: 'card_state'\n\t\t\t};\n\n\t\t\t$.ajax({\n\t\t\t\ttype: 'POST',\n\t\t\t\tdata: postData,\n\t\t\t\turl: give_global_vars.ajaxurl,\n\t\t\t\txhrFields: {\n\t\t\t\t\twithCredentials: true\n\t\t\t\t},\n\t\t\t\tsuccess: function success(response) {\n\t\t\t\t\tvar html = '';\n\t\t\t\t\tvar states_label = response.states_label;\n\t\t\t\t\tif (_typeof(response.states_found) != undefined && true == response.states_found) {\n\t\t\t\t\t\thtml = response.data;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (false === $form.hasClass('float-labels-enabled')) {\n\t\t\t\t\t\tif (typeof response.states_require != 'undefined' && true == response.states_require) {\n\t\t\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label .give-required-indicator').removeClass('give-hidden');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label .give-required-indicator').addClass('give-hidden');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label').text(states_label);\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').closest('p').find('label .state-label-text').text(states_label);\n\t\t\t\t\t$form.find('input[name=\"card_state\"], select[name=\"card_state\"]').replaceWith(html);\n\n\t\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\t\tif (_typeof(response.show_field) != undefined && true == response.show_field) {\n\t\t\t\t\t\t$form.find('p#give-card-state-wrap').removeClass('give-hidden');\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-last');\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-wide');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find('p#give-card-state-wrap').addClass('give-hidden');\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-wide');\n\t\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-last');\n\t\t\t\t\t}\n\n\t\t\t\t\tdoc.trigger('give_checkout_billing_address_updated', [response, $form.attr('id')]);\n\t\t\t\t}\n\t\t\t}).fail(function (data) {\n\t\t\t\tif (window.console && window.console.log) {\n\t\t\t\t\tconsole.log(data);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Sync state field with country.\n\tdoc.on('change', '#give_cc_address input.card_state, #give_cc_address select', update_billing_state_field);\n\n\t// Trigger formatting function when gateway changes.\n\tdoc.on('give_gateway_loaded', function () {\n\t\tGive.form.fn.field.formatCreditCard($forms);\n\t});\n\n\t// Make sure a gateway is selected.\n\tdoc.on('submit', '#give_payment_mode', function () {\n\t\tvar gateway = Give.form.fn.getGateway($(this).closest('form'));\n\t\tif (!gateway.length) {\n\t\t\talert(Give.fn.getGlobalVar('no_gateway'));\n\t\t\treturn false;\n\t\t}\n\t});\n\n\t// Add a class to the currently selected gateway on click\n\tdoc.on('click', '#give-payment-mode-select input', function () {\n\t\tvar $form = $(this).parents('form'),\n\t\t $gateways_li = $form.find('#give-payment-mode-select li'),\n\t\t old_payment_gateway = $form.find('li.give-gateway-option-selected input[name=\"payment-mode\"]').val().trim(),\n\t\t new_payment_gateways;\n\n\t\t// Unselect all payment gateways.\n\t\t$gateways_li.removeClass('give-gateway-option-selected');\n\t\t$gateways_li.prop('checked', false);\n\n\t\t// Select payment gateway.\n\t\t$(this).prop('checked', true);\n\t\t$(this).parent().addClass('give-gateway-option-selected');\n\n\t\t// Get new payment gateway.\n\t\tnew_payment_gateways = Give.form.fn.getGateway($form);\n\n\t\t// Change form action.\n\t\t$form.attr('action', $form.attr('action').replace('payment-mode=' + old_payment_gateway, 'payment-mode=' + new_payment_gateways));\n\t});\n\n\t/**\n * Custom Donation Amount Focus In\n *\n * @description: If user focuses on field & changes value then updates price\n */\n\tdoc.on('focus', '.give-donation-amount .give-text-input', function (e) {\n\n\t\tvar parent_form = $(this).parents('form');\n\n\t\t// Remove any invalid class\n\t\t$(this).removeClass('invalid-amount');\n\n\t\t// Set data amount\n\t\tvar current_total = parent_form.find('.give-final-total-amount').attr('data-total');\n\t\tvar decimal_separator = Give.form.fn.getInfo('decimal_separator', parent_form);\n\t\t$(this).attr('data-amount', Give.fn.unFormatCurrency(current_total, decimal_separator));\n\n\t\t//This class is used for CSS purposes\n\t\t$(this).parent('.give-donation-amount').addClass('give-custom-amount-focus-in');\n\n\t\t//Set Multi-Level to Custom Amount Field\n\t\tparent_form.find('.give-default-level, .give-radio-input').removeClass('give-default-level');\n\t\tparent_form.find('.give-btn-level-custom').addClass('give-default-level');\n\t\tparent_form.find('.give-radio-input').prop('checked', false); // Radio\n\t\tparent_form.find('.give-radio-input.give-radio-level-custom').prop('checked', true); // Radio\n\t\tparent_form.find('.give-select-level').prop('selected', false); // Select\n\t\tparent_form.find('.give-select-level .give-donation-level-custom').prop('selected', true); // Select\n\t});\n\n\t/**\n * Custom Donation Focus Out\n *\n * Fires on focus end aka \"blur\"\n */\n\tdoc.on('blur', '.give-donation-amount .give-text-input', function (e, $parent_form, donation_amount, price_id) {\n\n\t\tvar parent_form = 'undefined' !== typeof $parent_form ? $parent_form : $(this).closest('form'),\n\t\t pre_focus_amount = $(this).attr('data-amount'),\n\t\t this_value = 'undefined' !== typeof donation_amount ? donation_amount : $(this).val(),\n\t\t decimal_separator = Give.form.fn.getInfo('decimal_separator', parent_form),\n\t\t value_min = Give.form.fn.getMinimumAmount(parent_form),\n\t\t value_max = Give.form.fn.getMaximumAmount(parent_form),\n\t\t value_now = this_value === 0 ? value_min : Give.fn.unFormatCurrency(this_value, decimal_separator),\n\t\t formatted_total = Give.form.fn.formatAmount(value_now, parent_form, {});\n\n\t\tprice_id = 'undefined' === typeof price_id ? Give.form.fn.getPriceID(parent_form, true) : price_id;\n\n\t\t// https://github.com/WordImpress/Give/issues/3299\n\t\t// If we change from custom amount to donation level then\n\t\t// this event fire twice. First on amount field blur and second time on level button/radio/select click which cause of minimum donation notice.\n\t\t// This condition will prevent minimum donation amount notice show by set default level.\n\t\tif ('' === value_now || 0 === value_now) {\n\t\t\tvar $default_level = $('.give-donation-levels-wrap [data-default=\"1\"]', $parent_form);\n\n\t\t\tif ($default_level.length) {\n\t\t\t\tprice_id = $default_level.data('price-id');\n\t\t\t\tthis_value = value_now = Give.fn.unFormatCurrency($default_level.val(), decimal_separator);\n\t\t\t\tformatted_total = Give.form.fn.formatAmount(value_now, parent_form, {});\n\t\t\t}\n\t\t}\n\n\t\t// Cache donor selected price id for a amount.\n\t\tGive.fn.setCache('amount_' + value_now, price_id, parent_form);\n\t\t$(this).val(formatted_total);\n\n\t\t// Does this number have an accepted min/max value?\n\t\tif (!Give.form.fn.isValidDonationAmount(parent_form)) {\n\n\t\t\t// It doesn't... add invalid class.\n\t\t\t$(this).addClass('give-invalid-amount');\n\n\t\t\t// Disable submit\n\t\t\tGive.form.fn.disable(parent_form, true);\n\t\t\tvar invalid_minimum_notice = parent_form.find('.give-invalid-minimum'),\n\t\t\t invalid_maximum_notice = parent_form.find('.give-invalid-maximum');\n\n\t\t\t// If no error present, create it, insert, slide down (show).\n\t\t\tif (0 === invalid_minimum_notice.length && value_now < value_min) {\n\t\t\t\tGive.notice.fn.renderNotice('bad_minimum', parent_form);\n\t\t\t} else if (value_now >= value_min) {\n\t\t\t\tinvalid_minimum_notice.slideUp(300, function () {\n\t\t\t\t\t$(this).remove();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// For maximum custom amount error.\n\t\t\tif (0 === invalid_maximum_notice.length && value_now > value_max) {\n\t\t\t\tGive.notice.fn.renderNotice('bad_maximum', parent_form);\n\t\t\t} else if (value_now <= value_max) {\n\t\t\t\tinvalid_maximum_notice.slideUp(300, function () {\n\t\t\t\t\t$(this).remove();\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Remove error message class from price field.\n\t\t\t$(this).removeClass('give-invalid-amount');\n\n\t\t\t// Minimum amount met - slide up error & remove it from DOM.\n\t\t\tparent_form.find('.give-invalid-minimum, .give-invalid-maximum').slideUp(300, function () {\n\t\t\t\t$(this).remove();\n\t\t\t});\n\n\t\t\t// Re-enable submit.\n\t\t\tGive.form.fn.disable(parent_form, false);\n\t\t}\n\n\t\t// If values don't match up then proceed with updating donation total value\n\t\tif (pre_focus_amount !== value_now) {\n\n\t\t\t// Update donation total (include currency symbol)\n\t\t\tparent_form.find('.give-final-total-amount').attr('data-total', value_now).text(Give.fn.formatCurrency(value_now, {\n\t\t\t\tsymbol: Give.form.fn.getInfo('currency_symbol', parent_form),\n\t\t\t\tposition: Give.form.fn.getInfo('currency_position', parent_form)\n\t\t\t}, parent_form));\n\t\t}\n\n\t\t// Set price id for current amount.\n\t\tif (-1 !== price_id) {\n\n\t\t\t// Auto set give price id.\n\t\t\t$('input[name=\"give-price-id\"]', parent_form).val(price_id);\n\n\t\t\t// Update hidden amount field\n\t\t\tparent_form.find('.give-amount-hidden').val(Give.form.fn.formatAmount(value_now, parent_form, {}));\n\n\t\t\t// Remove old selected class & add class for CSS purposes\n\t\t\tparent_form.find('.give-default-level').removeClass('give-default-level');\n\n\t\t\t// Auto select variable price items ( Radio/Button/Select ).\n\t\t\tGive.form.fn.autoSelectDonationLevel(parent_form, price_id);\n\t\t}\n\n\t\t// This class is used for CSS purposes\n\t\t$(this).parent('.give-donation-amount').removeClass('give-custom-amount-focus-in');\n\n\t\t// trigger an event for hooks\n\t\tjQuery(document).trigger('give_donation_value_updated', [parent_form, value_now, price_id]);\n\t});\n\n\t// Multi-level Buttons: Update Amount Field based on Multi-level Donation Select\n\tdoc.on('click touchend', '.give-donation-level-btn', function (e) {\n\t\te.preventDefault(); //don't let the form submit\n\t\tGive.form.fn.autoSetMultiLevel($(this));\n\t});\n\n\t// Multi-level Radios: Update Amount Field based on Multi-level Donation Select\n\tdoc.on('click touchend', '.give-radio-input-level', function (e) {\n\t\tGive.form.fn.autoSetMultiLevel($(this));\n\t});\n\n\t// Multi-level Checkboxes: Update Amount Field based on Multi-level Donation Select\n\tdoc.on('change', '.give-select-level', function (e) {\n\t\tGive.form.fn.autoSetMultiLevel($(this));\n\t});\n\n\t/**\n * Show/Hide terms and conditions.\n */\n\tdoc.on('click', '.give_terms_links', function (e) {\n\t\te.preventDefault();\n\t\tvar $fieldset_wrapper = $(this).closest('fieldset');\n\t\t$('[class^=give_terms-]', $fieldset_wrapper).slideToggle();\n\t\t$('a.give_terms_links', $fieldset_wrapper).toggle();\n\t\treturn false;\n\t});\n\n\t/**\n * Prevent level jump which happens due to same id.\n * @see https://github.com/WordImpress/Give/issues/2292\n */\n\t$('label[for^=\"give-radio-level\"]').on('click', function (e) {\n\t\tvar $form = $(this).closest('form'),\n\t\t $inputField = $form.find('#' + $(this).attr('for'));\n\n\t\tif ($inputField.length) {\n\t\t\t$inputField.trigger('click');\n\t\t\te.preventDefault();\n\t\t}\n\t});\n});\n\njQuery(window).load(function () {\n\n\t/**\n * Validate cc fields on change\n */\n\tjQuery('body').on('keyup change focusout', '.give-form .card-number, .give-form .card-cvc, .give-form .card-expiry', function (e) {\n\t\tvar el = jQuery(this),\n\t\t give_form = el.parents('form.give-form'),\n\t\t id = el.attr('id'),\n\t\t card_number = give_form.find('.card-number'),\n\t\t card_cvc = give_form.find('.card-cvc'),\n\t\t card_expiry = give_form.find('.card-expiry'),\n\t\t type = jQuery.payment.cardType(card_number.val()),\n\t\t error = false;\n\n\t\tswitch (e.type) {\n\t\t\tcase 'focusout':\n\t\t\t\tif (id.indexOf('card_number') > -1) {\n\t\t\t\t\t// Set card number error.\n\t\t\t\t\terror = !jQuery.payment.validateCardNumber(card_number.val());\n\t\t\t\t\tcard_number.toggleError(error);\n\t\t\t\t} else if (id.indexOf('card_cvc') > -1) {\n\t\t\t\t\t// Set card cvc error.\n\t\t\t\t\terror = !jQuery.payment.validateCardCVC(card_cvc.val(), type);\n\t\t\t\t\tcard_cvc.toggleError(error);\n\t\t\t\t} else if (id.indexOf('card_expiry') > -1) {\n\t\t\t\t\t// Set card expiry error.\n\t\t\t\t\terror = !jQuery.payment.validateCardExpiry(card_expiry.payment('cardExpiryVal'));\n\t\t\t\t\tcard_expiry.toggleError(error);\n\t\t\t\t}\n\n\t\t\t\t// Disable submit button\n\t\t\t\tGive.form.fn.disable(el.parents('form'), error);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Remove error class.\n\t\t\t\tif (el.hasClass('error')) {\n\t\t\t\t\tel.removeClass('error');\n\t\t\t\t}\n\n\t\t\t\tif (id.indexOf('card_number') > -1) {\n\t\t\t\t\t// Add card related classes.\n\t\t\t\t\tvar card_type = give_form.find('.card-type');\n\n\t\t\t\t\tif (type === null) {\n\t\t\t\t\t\tcard_type.removeClass().addClass('off card-type');\n\t\t\t\t\t\tel.removeClass('valid').addClass('error');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcard_type.removeClass().addClass('card-type ' + type);\n\t\t\t\t\t}\n\t\t\t\t} else if (id.indexOf('card_expiry') > -1) {\n\t\t\t\t\t// set expiry date params.\n\t\t\t\t\tvar expiry = card_expiry.payment('cardExpiryVal');\n\n\t\t\t\t\tgive_form.find('.card-expiry-month').val(expiry.month);\n\t\t\t\t\tgive_form.find('.card-expiry-year').val(expiry.year);\n\t\t\t\t}\n\t\t}\n\t});\n});\n\n/***/ }),\n/* 11 */,\n/* 12 */,\n/* 13 */,\n/* 14 */,\n/* 15 */,\n/* 16 */,\n/* 17 */,\n/* 18 */,\n/* 19 */,\n/* 20 */,\n/* 21 */,\n/* 22 */,\n/* 23 */,\n/* 24 */,\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */,\n/* 33 */,\n/* 34 */,\n/* 35 */,\n/* 36 */,\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(38);\nmodule.exports = __webpack_require__(46);\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery_payment__ = __webpack_require__(39);\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__(5);\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__(40);\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__(3);\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__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__plugins_give_hint_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__plugins_give_hint_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__give_ajax__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__give_donations__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__give_misc__ = __webpack_require__(44);\n// Plugins\n\n\n\n\n\n// Give plugins.\n\n\n// Give core.\n\n\n\n\n/***/ }),\n/* 39 */\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/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(0);\n__webpack_require__(41);\nvar _ = __webpack_require__(42);\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/* 41 */\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__(9) && __webpack_require__(9).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/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (true) {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n return _;\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n }\n}.call(this));\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__give_donations__ = __webpack_require__(10);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * Give AJAX JS\n *\n * @description: The Give AJAX scripts\n * @package: Give\n * @subpackage: Assets/JS\n * @copyright: Copyright (c) 2016, WordImpress\n * @license: http://opensource.org/licenses/gpl-2.0.php GNU Public License\n */\n\n\n\n/* global jQuery, Give */\n\njQuery(document).ready(function ($) {\n\n\t//Hide loading elements\n\t$('.give-loading-text').hide();\n\n\t// Update and invalidate cached nonce.\n\t$('.give-form').each(function (index, $form) {\n\t\t$form = jQuery($form);\n\n\t\tvar $nonceField = jQuery('input[name=\"give-form-hash\"]', $form),\n\t\t nonceTime = (parseInt($nonceField.data('time')) + parseInt($nonceField.data('nonce-life'))) * 1000,\n\t\t currentTime = Date.now();\n\n\t\t// We need time in ms.\n\t\tvar timeDiff = nonceTime - currentTime;\n\n\t\ttimeDiff = 0 > timeDiff ? timeDiff : timeDiff + 100;\n\n\t\t// Update nonce in background.\n\t\twindow.setTimeout(function () {\n\t\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.resetNonce($form);\n\t\t}, timeDiff);\n\t});\n\n\t// Show the login form in the checkout when the user clicks the \"Login\" link\n\t$(document).on('click', '.give-checkout-login', function (e) {\n\t\tvar $this = $(this);\n\t\tvar this_form = $(this).parents('form');\n\t\tvar loading_animation = $(this_form).find('[id^=\"give-checkout-login-register\"] .give-loading-text');\n\t\tvar data = {\n\t\t\taction: $this.data('action'),\n\t\t\tform_id: $(this_form).find('[name=\"give-form-id\"]').val()\n\t\t};\n\n\t\t// Show the ajax loader\n\t\tloading_animation.show();\n\n\t\t$.post(give_global_vars.ajaxurl, data, function (checkout_response) {\n\n\t\t\t//Clear form HTML and add AJAX response containing fields\n\t\t\t$(this_form).find('[id^=give-checkout-login-register]').html(checkout_response);\n\t\t\t$(this_form).find('.give-submit-button-wrap').hide();\n\t\t}).done(function () {\n\t\t\t// Hide the ajax loader\n\t\t\tloading_animation.hide();\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t});\n\t\treturn false;\n\t});\n\n\t// Register/Login Cancel\n\t$(document).on('click', '.give-checkout-register-cancel', function (e) {\n\t\te.preventDefault();\n\t\t// User cancelled login.\n\t\tvar $this = $(this);\n\t\tvar this_form = $(this).parents('form');\n\t\tvar data = {\n\t\t\taction: $this.data('action'),\n\t\t\tform_id: $(this_form).find('[name=\"give-form-id\"]').val()\n\t\t};\n\t\t// AJAX get the payment fields.\n\t\t$.post(give_global_vars.ajaxurl, data, function (checkout_response) {\n\t\t\t//Show fields\n\t\t\t$(this_form).find('[id^=give-checkout-login-register]').html($.parseJSON(checkout_response.fields));\n\t\t\t$(this_form).find('.give-submit-button-wrap').show();\n\t\t}).done(function () {\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t});\n\t});\n\n\t// Process the login form via ajax when the user clicks \"login\"\n\t$(document).on('click', '[id^=give-login-fields] input[type=submit]', function (e) {\n\n\t\te.preventDefault();\n\n\t\tvar complete_purchase_val = $(this).val();\n\t\tvar this_form = $(this).parents('form');\n\n\t\t$(this).val(give_global_vars.purchase_loading);\n\n\t\tthis_form.find('[id^=give-login-fields] .give-loading-animation').fadeIn();\n\n\t\tvar data = {\n\t\t\taction: 'give_process_donation_login',\n\t\t\tgive_ajax: 1,\n\t\t\tgive_user_login: this_form.find('[name=give_user_login]').val(),\n\t\t\tgive_user_pass: this_form.find('[name=give_user_pass]').val(),\n\t\t\tgive_form_id: this_form.find('[name=give-form-id]').val()\n\t\t};\n\n\t\t$.post(give_global_vars.ajaxurl, data, function (response) {\n\t\t\t//user is logged in\n\t\t\tif ($.trim(_typeof(response.success)) != undefined && response.success == true && _typeof(response.data) != undefined) {\n\n\t\t\t\t//remove errors\n\t\t\t\tthis_form.find('.give_errors').remove();\n\n\t\t\t\t// Login successfully message.\n\t\t\t\tthis_form.find('#give-payment-mode-select').after(response.data);\n\t\t\t\tthis_form.find('.give_notices.give_errors').delay(5000).slideUp();\n\n\t\t\t\t// Create and update nonce.\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.resetNonce(this_form);\n\n\t\t\t\t//reload the selected gateway so it contains their logged in information\n\t\t\t\tgive_load_gateway(this_form, this_form.find('.give-gateway-option-selected input').val());\n\t\t\t} else {\n\t\t\t\t//Login failed, show errors\n\t\t\t\tthis_form.find('[id^=give-login-fields] input[type=submit]').val(complete_purchase_val);\n\t\t\t\tthis_form.find('.give-loading-animation').fadeOut();\n\t\t\t\tthis_form.find('.give_errors').remove();\n\t\t\t\tthis_form.find('[id^=give-user-login-submit]').before(response.data);\n\t\t\t}\n\t\t});\n\t});\n\n\t//Switch the gateway on gateway selection field change\n\t$('select#give-gateway, input.give-gateway').on('change', function (e) {\n\t\te.preventDefault();\n\n\t\t//Which payment gateway to load?\n\t\tvar payment_mode = $(this).val();\n\n\t\t//Problema? Bounce\n\t\tif (payment_mode == '0') {\n\t\t\tconsole.log('There was a problem loading the selected gateway');\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_load_gateway($(this).parents('form'), payment_mode);\n\n\t\treturn false;\n\t});\n\n\t/**\n * Donation history non login user want to see email list after making a donation\n *\n * @since 1.8.17\n */\n\t$('body').on('click', '#give-confirm-email-btn', function (e) {\n\n\t\tvar $this = $(this);\n\t\tvar data = {\n\t\t\taction: 'give_confirm_email_for_donations_access',\n\t\t\temail: $this.data('email'),\n\t\t\tnonce: give_global_vars.ajaxNonce\n\t\t};\n\n\t\t$this.text(give_global_vars.loading);\n\t\t$this.attr('disabled', 'disabled');\n\n\t\t$.post(give_global_vars.ajaxurl, data, function (response) {\n\t\t\tresponse = JSON.parse(response);\n\t\t\tif ('error' === response.status) {\n\t\t\t\t$this.closest('#give_user_history tfoot').hide();\n\t\t\t\t$this.closest('.give_user_history_main').find('.give_user_history_notice').html(response.message);\n\t\t\t} else if ('success' === response.status) {\n\t\t\t\t$this.closest('.give_user_history_main').find('.give_user_history_notice').html(response.message);\n\t\t\t\t$this.hide();\n\t\t\t\t$this.closest('.give-security-button-wrap').find('span').show();\n\t\t\t}\n\t\t});\n\n\t\treturn false;\n\t});\n\n\t/**\n * Donation Form AJAX Submission\n *\n * @description: Process the donation submit\n */\n\t$('body').on('click touchend', 'form.give-form input[name=\"give-purchase\"].give-submit', function (e) {\n\n\t\t//this form object\n\t\tvar this_form = $(this).parents('form.give-form');\n\n\t\t//loading animation\n\t\tvar loading_animation = this_form.find('input[type=\"submit\"].give-submit + .give-loading-animation');\n\t\tloading_animation.fadeIn();\n\n\t\t//this form selector\n\t\tvar give_purchase_form = this_form.get(0);\n\n\t\t//HTML5 required check validity\n\t\tif (typeof give_purchase_form.checkValidity === 'function' && give_purchase_form.checkValidity() === false) {\n\n\t\t\t//Don't leave any hanging loading animations\n\t\t\tloading_animation.fadeOut();\n\n\t\t\t//Check for Safari (doesn't support HTML5 required)\n\t\t\tif ((navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1) === false) {\n\t\t\t\t//Not safari: Support HTML5 \"required\" so skip the rest of this function\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t//prevent form from submitting normally\n\t\te.preventDefault();\n\n\t\t//Submit btn text\n\t\tvar complete_purchase_val = $(this).val();\n\n\t\t//Update submit button text\n\t\t$(this).val(give_global_vars.purchase_loading);\n\n\t\t// Disable the form donation button.\n\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.disable(this_form, true);\n\n\t\t//Submit form via AJAX\n\t\t$.post(give_global_vars.ajaxurl, this_form.serialize() + '&action=give_process_donation&give_ajax=true', function (data) {\n\n\t\t\tif ($.trim(data) == 'success') {\n\t\t\t\t//Remove any errors\n\t\t\t\tthis_form.find('.give_errors').remove();\n\t\t\t\t//Submit form for normal processing\n\t\t\t\t$(give_purchase_form).submit();\n\n\t\t\t\tthis_form.trigger('give_form_validation_passed');\n\t\t\t} else {\n\t\t\t\t//There was an error / remove old errors and prepend new ones\n\t\t\t\tthis_form.find('input[type=\"submit\"].give-submit').val(complete_purchase_val);\n\t\t\t\tloading_animation.fadeOut();\n\t\t\t\tthis_form.find('.give_errors').remove();\n\t\t\t\tthis_form.find('#give_purchase_submit input[type=\"submit\"].give-submit').before(data);\n\n\t\t\t\t// Enable the form donation button.\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0__give_donations__[\"a\" /* default */].form.fn.disable(this_form, false);\n\t\t\t}\n\t\t});\n\t});\n});\n\n/**\n * Load the Payment Gateways\n *\n * @description: AJAX load appropriate gateway fields\n * @param form_object Obj The specific form to load a gateway for\n * @param payment_mode\n */\nfunction give_load_gateway(form_object, payment_mode) {\n\n\tvar loading_element = jQuery(form_object).find('#give-payment-mode-select .give-loading-text');\n\tvar give_total = jQuery(form_object).find('#give-amount').val();\n\tvar give_form_id = jQuery(form_object).find('input[name=\"give-form-id\"]').val();\n\tvar give_form_id_prefix = jQuery(form_object).find('input[name=\"give-form-id-prefix\"]').val();\n\n\t// Show the ajax loader\n\tloading_element.fadeIn();\n\n\tvar form_data = jQuery(form_object).data();\n\n\tif (form_data['blockUI.isBlocked'] != 1) {\n\t\tjQuery(form_object).find('#give_purchase_form_wrap').block({\n\t\t\tmessage: null,\n\t\t\toverlayCSS: {\n\t\t\t\tbackground: '#fff',\n\t\t\t\topacity: 0.6\n\t\t\t}\n\t\t});\n\t}\n\n\t//Post via AJAX to Give\n\tjQuery.post(give_global_vars.ajaxurl + '?payment-mode=' + payment_mode, {\n\t\taction: 'give_load_gateway',\n\t\tgive_total: give_total,\n\t\tgive_form_id: give_form_id,\n\t\tgive_form_id_prefix: give_form_id_prefix,\n\t\tgive_payment_mode: payment_mode\n\t}, function (response) {\n\t\t//Success: let's output the gateway fields in the appropriate form space\n\t\tjQuery(form_object).unblock();\n\t\tjQuery(form_object).find('#give_purchase_form_wrap').html(response);\n\t\tjQuery('.give-no-js').hide();\n\t\tjQuery(form_object).find('#give-payment-mode-select .give-loading-text').fadeOut();\n\n\t\t// trigger an event on success for hooks\n\t\tjQuery(document).trigger('give_gateway_loaded', [response, jQuery(form_object).attr('id')]);\n\t});\n}\n\n/***/ }),\n/* 44 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_float_labels_js__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_float_labels_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_float_labels_js__);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\njQuery(function ($) {\n\n\tvar doc = $(document);\n\n\t// Trigger float-labels\n\tgive_fl_trigger();\n\n\t// Set custom validation message.\n\tgive_change_html5_form_field_validation_message();\n\n\t// Donation grid shortcode popup.\n\t$('.js-give-grid-modal-launcher').magnificPopup({\n\t\ttype: 'inline',\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tcloseBtnInside: true,\n\t\tmidClick: true,\n\t\tremovalDelay: 300,\n\t\tmainClass: 'modal-fade-slide'\n\t});\n\n\t// Disable button if it have give-disabled class init.\n\tdoc.on('click touchend', '.give-disabled', function (e) {\n\t\te.preventDefault();\n\t\treturn false;\n\t});\n\n\tdoc.on('give_gateway_loaded', function (ev, response, form_id) {\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t});\n\n\tdoc.on('give_checkout_billing_address_updated', function (ev, response, form_id) {\n\t\tif (!$('form#' + form_id).hasClass('float-labels-enabled')) return;\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t});\n\n\t// Reveal Btn which displays the checkout content\n\tdoc.on('click', '.give-btn-reveal', function (e) {\n\t\te.preventDefault();\n\t\tvar this_button = $(this);\n\t\tvar this_form = $(this).parents('form');\n\t\tvar payment_field_id = '#give-payment-mode-select',\n\t\t $payment_field = $(payment_field_id),\n\t\t show_field_ids = '';\n\t\tthis_button.hide();\n\n\t\t// Show payment field if active payment gateway count greater then one.\n\t\tif ($('li', $payment_field).length > 1) {\n\t\t\tshow_field_ids = payment_field_id + ', ';\n\t\t}\n\n\t\tthis_form.find(show_field_ids + '#give_purchase_form_wrap').slideDown();\n\t\treturn false;\n\t});\n\n\t// Modal with Magnific\n\tdoc.on('click', '.give-btn-modal', function (e) {\n\t\te.preventDefault();\n\t\tvar this_form_wrap = $(this).parents('div.give-form-wrap');\n\t\tvar this_form = this_form_wrap.find('form.give-form');\n\t\tvar this_amount_field = this_form.find('#give-amount');\n\t\tvar this_amount = this_amount_field.val();\n\n\t\t//Check to ensure our amount is greater than 0\n\t\t//Does this number have a value\n\t\tif (!this_amount || this_amount <= 0) {\n\t\t\tthis_amount_field.focus();\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_open_form_modal(this_form_wrap, this_form);\n\t});\n\n\t// Auto hide frontend notices.\n\tvar give_notices = jQuery('.give_notice[data-dismiss-type=\"auto\"]');\n\tif (give_notices.length) {\n\t\tgive_notices.each(function (index, $notice) {\n\t\t\t$notice = $($notice);\n\n\t\t\t// auto hide setting message in 5 seconds.\n\t\t\twindow.setTimeout(function () {\n\t\t\t\t$notice.slideUp();\n\t\t\t}, $notice.data('dismiss-interval'));\n\t\t});\n\t}\n\n\t// Button to close notices on front-end.\n\t$('body').on('click', '.give-notice-close', function () {\n\t\t$(this).hide();\n\t\tvar notice_container = $(this).closest('.give_notices');\n\t\tnotice_container.slideUp();\n\t});\n\n\tdoc.on('change', '#give_profile_billing_address_wrap #give_address_country', update_profile_state_field);\n\n\t// Reset Form Fields on clicking back button of browser.\n\t// @see https://developer.mozilla.org/en-US/Firefox/Releases/1.5/Using_Firefox_1.5_caching\n\t// @see https://webkit.org/blog/427/webkit-page-cache-i-the-basics/\n\twindow.addEventListener('pageshow', function (event) {\n\t\tvar historyTraversal = event.persisted || _typeof('undefined') !== window.performance && 2 === window.performance.navigation.type;\n\n\t\tif (historyTraversal) {\n\t\t\tvar form = $('body').find('form.give-form')[0];\n\n\t\t\tif (undefined !== form) {\n\t\t\t\tform.reset();\n\t\t\t}\n\t\t}\n\t});\n});\n\n/**\n * Open form modal\n *\n * @param {object} $form_wrap\n * @param {object} $form\n */\nwindow.give_open_form_modal = function ($form_wrap, $form) {\n\t// Hide form children.\n\tvar children = '#give_purchase_form_wrap, #give-payment-mode-select, .mfp-close, .give-hidden';\n\n\t//Alls well, open popup!\n\tjQuery.magnificPopup.open({\n\t\tmainClass: give_global_vars.magnific_options.main_class,\n\t\tcloseOnBgClick: give_global_vars.magnific_options.close_on_bg_click,\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tremovalDelay: 250, //delay removal by X to allow out-animation\n\t\titems: {\n\t\t\tsrc: $form,\n\t\t\ttype: 'inline'\n\t\t},\n\t\tcallbacks: {\n\t\t\tbeforeOpen: function beforeOpen() {\n\n\t\t\t\tjQuery('body').addClass('give-modal-open');\n\n\t\t\t\t// add title, content, goal and error to form if admin want to show button only\n\t\t\t\tif ($form_wrap.hasClass('give-display-button-only') && !$form.data('content')) {\n\n\t\t\t\t\tvar $form_content = jQuery('.give-form-content-wrap', $form_wrap),\n\t\t\t\t\t $form_title = jQuery('.give-form-title', $form_wrap),\n\t\t\t\t\t $form_goal = jQuery('.give-goal-progress', $form_wrap),\n\t\t\t\t\t $form_error = jQuery('>.give_error', $form_wrap),\n\t\t\t\t\t $form_errors = jQuery('.give_errors', $form_wrap);\n\n\t\t\t\t\t// Add content container to form.\n\t\t\t\t\tif ($form_content.length && !jQuery('.give-form-content-wrap', $form).length) {\n\t\t\t\t\t\tif ($form_content.hasClass('give_post_form-content')) {\n\t\t\t\t\t\t\t$form.append($form_content);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.prepend($form_content);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add errors container to form.\n\t\t\t\t\tif ($form_errors.length && !jQuery('.give_errors', $form).length) {\n\t\t\t\t\t\t$form_errors.each(function (index, $error) {\n\t\t\t\t\t\t\t$form.prepend(jQuery($error));\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add error container to form.\n\t\t\t\t\tif ($form_error.length && !jQuery('>.give_error', $form).length) {\n\t\t\t\t\t\t$form_error.each(function (index, $error) {\n\t\t\t\t\t\t\t$form.prepend(jQuery($error));\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add goal container to form.\n\t\t\t\t\tif ($form_goal.length && !jQuery('.give-goal-progress', $form).length) {\n\t\t\t\t\t\t$form.prepend($form_goal);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add title container to form.\n\t\t\t\t\tif ($form_title.length && !jQuery('.give-form-title', $form).length) {\n\t\t\t\t\t\t$form.prepend($form_title);\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.data('content', 'loaded');\n\t\t\t\t}\n\t\t\t},\n\t\t\topen: function open() {\n\n\t\t\t\t// Will fire when this exact popup is opened\n\t\t\t\t// this - is Magnific Popup object\n\t\t\t\tvar $mfp_content = jQuery('.mfp-content');\n\t\t\t\tif ($mfp_content.outerWidth() >= 500) {\n\t\t\t\t\t$mfp_content.addClass('give-responsive-mfp-content');\n\t\t\t\t}\n\n\t\t\t\t// Hide .give-hidden and .give-btn-modal if admin only want to show only button.\n\t\t\t\tif ($form_wrap.hasClass('give-display-button-only')) {\n\t\t\t\t\tchildren = $form.children().not('.give-btn-modal');\n\t\t\t\t}\n\n\t\t\t\t//Hide all form elements besides the ones required for payment\n\t\t\t\t$form.children().not(children).hide();\n\t\t\t},\n\t\t\tclose: function close() {\n\t\t\t\t//Remove popup class\n\t\t\t\t$form.removeClass('mfp-hide');\n\n\t\t\t\tjQuery('body').removeClass('give-modal-open');\n\n\t\t\t\t//Show all fields again\n\t\t\t\t$form.children().not(children).show();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/**\n * Floating Labels Custom Events\n */\nwindow.give_fl_trigger = function () {\n\twindow.give_float_labels = 'undefined' === typeof window.give_float_labels ? {} : window.give_float_labels;\n\n\tif (window.give_float_labels instanceof __WEBPACK_IMPORTED_MODULE_0_float_labels_js___default.a) {\n\t\twindow.give_float_labels.rebuild();\n\t} else {\n\t\twindow.give_float_labels = new __WEBPACK_IMPORTED_MODULE_0_float_labels_js___default.a('.float-labels-enabled', {\n\t\t\texclude: '#give-amount, .give-select-level, [multiple]',\n\t\t\tprioritize: 'placeholder',\n\t\t\tprefix: 'give-fl-',\n\t\t\tstyle: 'give'\n\t\t});\n\t}\n};\n\n/**\n * Change localize html5 form validation message\n */\nwindow.give_change_html5_form_field_validation_message = function () {\n\tvar $forms = jQuery('.give-form'),\n\t $input_fields;\n\n\t// Bailout if no any donation from exist.\n\tif (!$forms.length) {\n\t\treturn;\n\t}\n\n\tjQuery.each($forms, function (index, $form) {\n\t\t// Get form input fields.\n\t\t$input_fields = jQuery('input', $form);\n\n\t\t// Bailout.\n\t\tif (!$input_fields.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tjQuery.each($input_fields, function (index, item) {\n\t\t\titem = jQuery(item).get(0);\n\n\t\t\t// Set custom message only if translation exit in give global object.\n\t\t\tif (give_global_vars.form_translation.hasOwnProperty(item.name)) {\n\t\t\t\titem.oninvalid = function (e) {\n\t\t\t\t\te.target.setCustomValidity('');\n\t\t\t\t\tif (!e.target.validity.valid) {\n\t\t\t\t\t\te.target.setCustomValidity(give_global_vars.form_translation[item.name]);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\t});\n};\n\n/**\n * Update state/province fields per country selection\n *\n * @since 1.8.14\n */\nwindow.update_profile_state_field = function () {\n\tvar $this = jQuery(this),\n\t $form = $this.parents('form');\n\tif ('give_address_country' === $this.attr('id')) {\n\n\t\t//Disable the State field until updated\n\t\t$form.find('#give_address_state').empty().append('').prop('disabled', true);\n\n\t\t// If the country field has changed, we need to update the state/province field\n\t\tvar postData = {\n\t\t\taction: 'give_get_states',\n\t\t\tcountry: $this.val(),\n\t\t\tfield_name: 'give_address_state'\n\t\t};\n\n\t\tjQuery.ajax({\n\t\t\ttype: 'POST',\n\t\t\tdata: postData,\n\t\t\turl: give_global_vars.ajaxurl,\n\t\t\txhrFields: {\n\t\t\t\twithCredentials: true\n\t\t\t},\n\t\t\tsuccess: function success(response) {\n\t\t\t\tvar html = '';\n\t\t\t\tvar states_label = response.states_label;\n\t\t\t\tif (_typeof(response.states_found) != undefined && true == response.states_found) {\n\t\t\t\t\thtml = response.data;\n\t\t\t\t} else {\n\t\t\t\t\thtml = '';\n\t\t\t\t}\n\t\t\t\t$form.find('input[name=\"give_address_state\"], select[name=\"give_address_state\"]').replaceWith(html);\n\n\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\tif (_typeof(response.show_field) != undefined && true == response.show_field) {\n\t\t\t\t\t$form.find('p#give-card-state-wrap').removeClass('give-hidden');\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-last');\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-wide');\n\t\t\t\t} else {\n\t\t\t\t\t$form.find('p#give-card-state-wrap').addClass('give-hidden');\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').addClass('form-row-wide');\n\t\t\t\t\t$form.find('p#give-card-zip-wrap').removeClass('form-row-last');\n\t\t\t\t}\n\t\t\t}\n\t\t}).fail(function (data) {\n\t\t\tif (window.console && window.console.log) {\n\t\t\t\tconsole.log(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn false;\n};\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * Float Labels\n * @version: 3.3.4\n * @author: Paul Ryley (http://geminilabs.io)\n * @url: https://geminilabs.github.io/float-labels.js\n * @license: MIT\n */\n\n/** global: define, navigator, NodeList, Option */\n\n;(function( window, document, undefined )\n{\n\t\"use strict\";\n\n\tvar Plugin = function( el, options )\n\t{\n\t\tthis.el = this.isString( el ) ? document.querySelectorAll( el ) : [el];\n\t\tthis.config = [];\n\t\tthis.options = options;\n\t\tthis.selectors = [];\n\t\tthis.init();\n\t\tthis.destroy = function() {\n\t\t\tthis.loop( function( el ) {\n\t\t\t\tel.removeEventListener( 'reset', this.events.reset );\n\t\t\t\tthis.removeClasses( el );\n\t\t\t}, function( field ) {\n\t\t\t\tthis.reset( field );\n\t\t\t});\n\t\t};\n\t\tthis.rebuild = function() {\n\t\t\tthis.loop( null, function( field ) {\n\t\t\t\tthis.floatLabel( field, true );\n\t\t\t});\n\t\t};\n\t};\n\n\tPlugin.prototype = {\n\n\t\tdefaults: {\n\t\t\tcustomEvent: null,\n\t\t\tcustomLabel: null,\n\t\t\tcustomPlaceholder: null,\n\t\t\texclude: '.no-label',\n\t\t\tinputRegex: /email|number|password|search|tel|text|url/,\n\t\t\tprefix: 'fl-',\n\t\t\tprioritize: 'label', // label|placeholder\n\t\t\trequiredClass: 'required',\n\t\t\tstyle: 0, // 0|1|2\n\t\t\ttransform: 'input,select,textarea'\n\t\t},\n\n\t\t/** @return void */\n\t\tinit: function() {\n\t\t\tthis.initEvents();\n\t\t\tthis.loop( function( el, i ) {\n\t\t\t\tvar style = this.config[i].style;\n\t\t\t\tel.addEventListener( 'reset', this.events.reset );\n\t\t\t\tel.classList.add( this.prefixed( 'form' ));\n\t\t\t\tif( style ) {\n\t\t\t\t\tel.classList.add( this.prefixed( 'style-' + style ));\n\t\t\t\t}\n\t\t\t}, function( field ) {\n\t\t\t\tthis.floatLabel( field );\n\t\t\t});\n\t\t},\n\n\t\t/** @return void */\n\t\tinitEvents: function() {\n\t\t\tthis.events = {\n\t\t\t\tblur: this.onBlur.bind( this ),\n\t\t\t\tchange: this.onInput.bind( this ),\n\t\t\t\tfocus: this.onFocus.bind( this ),\n\t\t\t\tinput: this.onInput.bind( this ),\n\t\t\t\treset: this.onReset.bind( this ),\n\t\t\t};\n\t\t},\n\n\t\t/** @return string */\n\t\taddRemove: function( bool ) {\n\t\t\treturn bool ? 'add' : 'remove';\n\t\t},\n\n\t\t/** @return null|void */\n\t\tbuild: function( el ) {\n\t\t\tvar labelEl = this.getLabel( el );\n\t\t\tif( !labelEl )return;\n\t\t\tel.classList.add( this.prefixed( el.tagName.toLowerCase() ));\n\t\t\tthis.setLabel( labelEl, el );\n\t\t\tthis.setPlaceholder( labelEl, el );\n\t\t\tthis.wrapLabel( labelEl, el );\n\t\t\tthis.handleEvents( el, 'add' );\n\t\t\tif( typeof this.config[this.current].customEvent === 'function' ) {\n\t\t\t\tthis.config[this.current].customEvent.call( this, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return Element */\n\t\tcreateEl: function( tag, attributes ) {\n\t\t\tvar el = ( typeof tag === 'string' ) ? document.createElement( tag ) : tag;\n\t\t\tattributes = attributes || {};\n\t\t\tfor( var key in attributes ) {\n\t\t\t\tif( !attributes.hasOwnProperty( key ))continue;\n\t\t\t\tel.setAttribute( key, attributes[key] );\n\t\t\t}\n\t\t\treturn el;\n\t\t},\n\n\t\t/** @return object */\n\t\textend: function() {\n\t\t\tvar args = [].slice.call( arguments );\n\t\t\tvar result = args[0];\n\t\t\tvar extenders = args.slice(1);\n\t\t\tObject.keys( extenders ).forEach( function( i ) {\n\t\t\t\tfor( var key in extenders[i] ) {\n\t\t\t\t\tif( !extenders[i].hasOwnProperty( key ))continue;\n\t\t\t\t\tresult[key] = extenders[i][key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\n\t\t/** @return null|void */\n\t\tfloatLabel: function( el, rebuild ) {\n\t\t\tif( !this.isValidField( el ))return;\n\t\t\tif( this.hasParent( el )) {\n\t\t\t\tif( rebuild !== true )return;\n\t\t\t\tthis.reset( el );\n\t\t\t}\n\t\t\tthis.build( el );\n\t\t},\n\n\t\t/** @return string|false */\n\t\tgetLabel: function( el ) {\n\t\t\tvar label = 'label[for=\"' + el.getAttribute( 'id' ) + '\"]';\n\t\t\tvar labelEl = this.el[this.current].querySelectorAll( label );\n\t\t\t// check for multiple labels with identical 'for' attributes\n\t\t\tif( labelEl.length > 1 ) {\n\t\t\t\tlabelEl = el.parentNode.querySelectorAll( label );\n\t\t\t}\n\t\t\tif( labelEl.length === 1 ) {\n\t\t\t\treturn labelEl[0];\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/** @return string */\n\t\tgetLabelText: function( labelEl, el ) {\n\t\t\tvar labelText = labelEl.textContent.replace( /[*:]/g, '' ).trim();\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( !labelText || ( labelText && placeholderText && this.config[this.current].prioritize === 'placeholder' )) {\n\t\t\t\tlabelText = placeholderText;\n\t\t\t}\n\t\t\treturn labelText;\n\t\t},\n\n\t\t/** @return void */\n\t\thandleEvents: function( el, action ) {\n\t\t\tvar events = this.events;\n\t\t\tvar isMicrosoftSelectEl = el.nodeName === 'SELECT' && this.isMSBrowser();\n\t\t\t['blur','input','focus'].forEach( function( event ) {\n\t\t\t\tif( event === 'input' && ( el.type === 'file' || isMicrosoftSelectEl )) {\n\t\t\t\t\tevent = 'change';\n\t\t\t\t}\n\t\t\t\tel[ action + 'EventListener']( event, events[event] );\n\t\t\t});\n\t\t},\n\n\t\t/** @return bool */\n\t\thasParent: function( el ) {\n\t\t\treturn el.parentNode.classList.contains( this.prefixed( 'wrap' ));\n\t\t},\n\n\t\t/** @return bool */\n\t\tisMSBrowser: function() {\n\t\t\treturn !!navigator.userAgent.match(/Edge|MSIE|Trident/g);\n\t\t},\n\n\t\t/** @return bool */\n\t\tisString: function( str ) {\n\t\t\treturn Object.prototype.toString.call( str ) === \"[object String]\";\n\t\t},\n\n\t\t/** @return bool */\n\t\tisValidField: function( el ) {\n\t\t\tvar isInvalidInput = el.tagName === 'INPUT' && !this.config[this.current].inputRegex.test( el.getAttribute( 'type' ));\n\t\t\tvar isInvalidSelect = el.tagName === 'SELECT' && el.getAttribute( 'multiple' ) !== null;\n\t\t\treturn el.getAttribute( 'id' ) && !isInvalidInput && !isInvalidSelect;\n\t\t},\n\n\t\t/** @return void */\n\t\tloop: function( elCallback, fieldCallback ) {\n\t\t\tfor( var i = 0; i < this.el.length; ++i ) {\n\t\t\t\tif( typeof this.selectors[i] === 'undefined' ) {\n\t\t\t\t\tvar config = this.extend( {}, this.defaults, this.options, this.el[i].getAttribute( 'data-options' ));\n\t\t\t\t\tvar exclude = ':not(' + config.exclude.split( /[\\s,]+/ ).join( '):not(' ) + ')';\n\t\t\t\t\tthis.selectors[i] = config.transform.replace( /,/g, exclude + ',' ) + exclude;\n\t\t\t\t\tthis.config[i] = config;\n\t\t\t\t}\n\t\t\t\tvar fields = this.el[i].querySelectorAll( this.selectors[i] );\n\t\t\t\tthis.current = i;\n\t\t\t\tif( typeof elCallback === 'function' ) {\n\t\t\t\t\telCallback.call( this, this.el[i], i );\n\t\t\t\t}\n\t\t\t\tfor( var x = 0; x < fields.length; ++x ) {\n\t\t\t\t\tif( typeof fieldCallback === 'function' ) {\n\t\t\t\t\t\tfieldCallback.call( this, fields[x], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tonBlur: function( ev ) {\n\t\t\tev.target.parentNode.classList.remove( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonInput: function( ev ) {\n\t\t\tev.target.parentNode.classList[\n\t\t\t\tthis.addRemove( ev.target.value.length )\n\t\t\t]( this.prefixed( 'is-active' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonFocus: function( ev ) {\n\t\t\tev.target.parentNode.classList.add( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonReset: function() {\n\t\t\tsetTimeout( this.resetFields.bind( this ));\n\t\t},\n\n\t\t/** @return string */\n\t\tprefixed: function( value ) {\n\t\t\treturn this.config[this.current].prefix + value;\n\t\t},\n\n\t\t/** @return void */\n\t\tremoveClasses: function( el ) {\n\t\t\tvar prefix = this.config[this.current].prefix;\n\t\t\tvar classes = el.className.split( ' ' ).filter( function( c ) {\n\t\t\t\treturn c.lastIndexOf( prefix, 0 ) !== 0;\n\t\t\t});\n\t\t\tel.className = classes.join( ' ' ).trim();\n\t\t},\n\n\t\t/** @return null|void */\n\t\treset: function( el ) {\n\t\t\tvar parent = el.parentNode;\n\t\t\tif( !this.hasParent( el ))return;\n\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\twhile( parent.firstElementChild ) {\n\t\t\t\tvar childEl = parent.firstElementChild;\n\t\t\t\tthis.removeClasses( childEl );\n\t\t\t\tfragment.appendChild( childEl );\n\t\t\t}\n\t\t\tparent.parentNode.replaceChild( fragment, parent );\n\t\t\tthis.resetPlaceholder( el );\n\t\t\tthis.handleEvents( el, 'remove' );\n\t\t},\n\n\t\t/** @return void */\n\t\tresetFields: function() {\n\t\t\tvar fields = this.el[this.current].querySelectorAll( this.selectors[this.current] );\n\t\t\tfor( var i = 0; i < fields.length; ++i ) {\n\t\t\t\tfields[i].parentNode.classList[\n\t\t\t\t\tthis.addRemove( fields[i].tagName === 'SELECT' && fields[i].value !== '' )\n\t\t\t\t]( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tresetPlaceholder: function( el ) {\n\t\t\tvar dataPlaceholder = 'data-placeholder';\n\t\t\tvar originalPlaceholder = el.getAttribute( dataPlaceholder );\n\t\t\tif( originalPlaceholder !== null ) {\n\t\t\t\tel.removeAttribute( dataPlaceholder );\n\t\t\t\tel.setAttribute( 'placeholder', originalPlaceholder );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetLabel: function( labelEl, el ) {\n\t\t\tlabelEl.classList.add( this.prefixed( 'label' ));\n\t\t\tlabelEl.textContent = this.getLabelText( labelEl, el );\n\t\t\tif( typeof this.config[this.current].customLabel === 'function' ) {\n\t\t\t\tlabelEl.textContent = this.config[this.current].customLabel.call( this, labelEl, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetPlaceholder: function( labelEl, el ) {\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( this.config[this.current].prioritize === 'label' || !placeholderText ) {\n\t\t\t\tif( placeholderText ) {\n\t\t\t\t\tel.setAttribute( 'data-placeholder', placeholderText );\n\t\t\t\t}\n\t\t\t\tplaceholderText = this.getLabelText( labelEl, el );\n\t\t\t}\n\t\t\tif( typeof this.config[this.current].customPlaceholder === 'function' ) {\n\t\t\t\tplaceholderText = this.config[this.current].customPlaceholder.call( this, placeholderText, el, labelEl );\n\t\t\t}\n\t\t\tif( el.tagName === 'SELECT' ) {\n\t\t\t\tthis.setSelectPlaceholder( el, placeholderText );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tel.setAttribute( 'placeholder', placeholderText );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetSelectPlaceholder: function( el, placeholderText ) {\n\t\t\tvar childEl = el.firstElementChild;\n\t\t\tif( childEl.hasAttribute( 'value' ) && childEl.value ) {\n\t\t\t\tvar selected = el.options[el.selectedIndex].defaultSelected !== true ? true : false;\n\t\t\t\tel.insertBefore( new Option( placeholderText, '', selected, selected ), childEl );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchildEl.setAttribute( 'value', '' );\n\t\t\t}\n\t\t\tif( childEl.textContent === '' ) {\n\t\t\t\tchildEl.textContent = placeholderText;\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\twrapLabel: function( labelEl, el ) {\n\t\t\tvar wrapper = this.createEl( 'div', {\n\t\t\t\tclass: this.prefixed( 'wrap' ) + ' ' + this.prefixed( 'wrap-' + el.tagName.toLowerCase() ),\n\t\t\t});\n\t\t\tif( el.value !== undefined && el.value.length ) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t\tif( el.getAttribute( 'required' ) !== null || el.classList.contains( this.config[this.current].requiredClass )) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-required' ));\n\t\t\t}\n\t\t\tel.parentNode.insertBefore( wrapper, el );\n\t\t\twrapper.appendChild( labelEl );\n\t\t\twrapper.appendChild( el );\n\t\t},\n\t};\n\n\tif( true ) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { return Plugin; }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t}\n\telse if( typeof module === \"object\" && module.exports ) {\n\t\tmodule.exports = Plugin;\n\t}\n\telse {\n\t\twindow.FloatLabels = Plugin;\n\t}\n\n})( window, document );\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\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 = 37);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a3ea59a85978d6d4023d","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0\n// module chunks = 1 2 3","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 2","/*! 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 = 3\n// module chunks = 1 2 3","module.exports = global[\"accounting\"] = require(\"-!./accounting.js\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/accounting/accounting.js-exposed\n// module id = 5\n// module chunks = 1 2","/*!\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 = 6\n// module chunks = 1 2","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","/* 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 = 9\n// module chunks = 2","import accounting from 'accounting';\n\nlet Give = {};\n\n/**\n * This API is under development.\n *\n * Currently used only for internal purpose.\n */\nexport default Give = {\n\tinit: function() {\n\t\tvar subHelperObjs = [ 'form' ],\n\t\t\tcounter = 0;\n\t\tjQuery( document ).trigger( 'give:preInit' );\n\n\t\tthis.fn.__initialize_cache();\n\n\t\t// Initialize all init methods od sub helper objects.\n\t\twhile ( counter < subHelperObjs.length ) {\n\t\t\tif ( ! ! Give[ subHelperObjs[ counter ] ].init ) {\n\t\t\t\tGive[ subHelperObjs[ counter ] ].init();\n\t\t\t}\n\t\t\tcounter ++;\n\t\t}\n\n\t\tjQuery( document ).trigger( 'give:postInit' );\n\t},\n\n\tfn: {\n\t\t/**\n\t\t * Format Currency\n\t\t *\n\t\t * Formats the currency with accounting.js\n\t\t *\n\t\t * @param {string} price\n\t\t * @param {object} args\n\t\t * @param {object} $form\n\t\t * @returns {*|string}\n\t\t */\n\t\tformatCurrency: function( price, args, $form ) {\n\t\t\t// Global currency setting.\n\t\t\tvar format_args = {\n\t\t\t\tsymbol: '',\n\t\t\t\tdecimal: give_global_vars.decimal_separator,\n\t\t\t\tthousand: give_global_vars.thousands_separator,\n\t\t\t\tprecision: parseInt( give_global_vars.number_decimals ),\n\t\t\t\tcurrency: give_global_vars.currency\n\t\t\t};\n\n\t\t\tprice = price.toString().trim();\n\t\t\t$form = 'undefined' === typeof $form ? {} : $form;\n\n\t\t\t// Form specific currency setting.\n\t\t\tif ( $form.length ) {\n\t\t\t\t//Set the custom amount input value format properly\n\t\t\t\tformat_args = {\n\t\t\t\t\tsymbol: '',\n\t\t\t\t\tdecimal: Give.form.fn.getInfo( 'decimal_separator', $form ),\n\t\t\t\t\tthousand: Give.form.fn.getInfo( 'thousands_separator', $form ),\n\t\t\t\t\tprecision: Give.form.fn.getInfo( 'number_decimals', $form ),\n\t\t\t\t\tcurrency: Give.form.fn.getInfo( 'currency_code', $form ),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\targs = jQuery.extend( format_args, args );\n\n\t\t\t// Make sure precision is integer type\n\t\t\targs.precision = parseInt( args.precision );\n\n\t\t\tif ( 'INR' === args.currency ) {\n\t\t\t\tvar actual_price = accounting.unformat( price, '.' ).toString();\n\n\t\t\t\tvar decimal_amount = '',\n\t\t\t\t\tresult,\n\t\t\t\t\tamount,\n\t\t\t\t\tdecimal_index = actual_price.indexOf( '.' );\n\n\t\t\t\tif ( (- 1 !== decimal_index) && args.precision ) {\n\t\t\t\t\tdecimal_amount = Number( actual_price.substr( parseInt( decimal_index ) ) )\n\t\t\t\t\t\t.toFixed( args.precision )\n\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t.substr( 1 );\n\t\t\t\t\tactual_price = actual_price.substr( 0, parseInt( decimal_index ) );\n\n\t\t\t\t\tif ( ! decimal_amount.length ) {\n\t\t\t\t\t\tdecimal_amount = '.0000000000'.substr( 0, (parseInt( decimal_index ) + 1) );\n\t\t\t\t\t} else if ( (args.precision + 1) > decimal_amount.length ) {\n\t\t\t\t\t\tdecimal_amount = (decimal_amount + '000000000').substr( 0, args.precision + 1 );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdecimal_amount = '.000000000'.substr( 0, args.precision + 1 );\n\t\t\t\t}\n\n\t\t\t\t// Extract last 3 from amount\n\t\t\t\tresult = actual_price.substr( - 3 );\n\t\t\t\tamount = actual_price.substr( 0, parseInt( actual_price.length ) - 3 );\n\n\t\t\t\t// Apply digits 2 by 2\n\t\t\t\twhile ( amount.length > 0 ) {\n\t\t\t\t\tresult = amount.substr( - 2 ) + args.thousand + result;\n\t\t\t\t\tamount = amount.substr( 0, parseInt( amount.length ) - 2 );\n\t\t\t\t}\n\n\t\t\t\tif ( decimal_amount.length ) {\n\t\t\t\t\tresult = result + decimal_amount;\n\t\t\t\t}\n\n\t\t\t\tprice = result;\n\n\t\t\t\tif ( undefined !== args.symbol && args.symbol.length ) {\n\t\t\t\t\tif ( 'after' === args.position ) {\n\t\t\t\t\t\tprice = price + args.symbol;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice = args.symbol + price;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t//Properly position symbol after if selected\n\t\t\t\tif ( 'after' === args.position ) {\n\t\t\t\t\targs.format = '%v%s';\n\t\t\t\t}\n\n\t\t\t\tprice = accounting.formatMoney( price, args );\n\t\t\t}\n\n\t\t\treturn price;\n\n\t\t},\n\n\t\t/**\n\t\t * Unformat Currency\n\t\t *\n\t\t * @param price\n\t\t * @param {string} decimal_separator\n\t\t * @returns {number}\n\t\t */\n\t\tunFormatCurrency: function( price, decimal_separator ) {\n\t\t\tif ( 'string' === typeof price ) {\n\t\t\t\tvar regex = ',' === decimal_separator.trim() ? /[^0-9\\,-]+/g : /[^0-9\\.-]+/g;\n\n\t\t\t\tprice = price.replace( regex, '' );\n\n\t\t\t\tif ( 0 === price.indexOf( decimal_separator ) ) {\n\t\t\t\t\tprice = price.substr( 1 );\n\t\t\t\t} else if ( (price.length - 1) === price.indexOf( decimal_separator ) ) {\n\t\t\t\t\tprice = price.slice( 0, - 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Math.abs( parseFloat( accounting.unformat( price, decimal_separator ) ) );\n\t\t},\n\n\t\t/**\n\t\t * Get Parameter by Name\n\t\t *\n\t\t * @see: http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n\t\t * @param name\n\t\t * @param url\n\t\t * @since 1.4.2\n\t\t * @returns {*}\n\t\t */\n\t\tgetParameterByName: function( name, url ) {\n\t\t\tif ( ! url ) {\n\t\t\t\turl = window.location.href;\n\t\t\t}\n\n\t\t\tname = name.replace( /[\\[\\]]/g, '\\\\$&' );\n\n\t\t\tvar regex = new RegExp( '[?&]' + name + '(=([^&#]*)|&|#|$)' ),\n\t\t\t\tresults = regex.exec( url );\n\n\t\t\tif ( ! results ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( ! results[ 2 ] ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn decodeURIComponent( results[ 2 ].replace( /\\+/g, ' ' ) );\n\t\t},\n\n\t\t/**\n\t\t * Get information from global var\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} str\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetGlobalVar: function( str ) {\n\t\t\tif ( 'undefined' === typeof give_global_vars[ str ] ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn give_global_vars[ str ];\n\t\t},\n\n\t\t/**\n\t\t * set cache\n\t\t *\n\t\t * @since 1.8.17\n\t\t *\n\t\t * @param {string} key\n\t\t * @param {string} value\n\t\t * @param {object} $form\n\t\t */\n\t\tsetCache: function( key, value, $form ) {\n\t\t\tif ( $form.length ) {\n\t\t\t\tGive.cache[ 'form_' + Give.form.fn.getInfo( 'form-id', $form ) ][ key ] = value;\n\t\t\t} else {\n\t\t\t\tGive.cache[ key ] = value;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get cache\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param key\n\t\t * @param $form\n\t\t * @return {string|*}\n\t\t */\n\t\tgetCache: function( key, $form ) {\n\t\t\tvar cache;\n\n\t\t\tif ( $form.length ) {\n\t\t\t\tcache = Give.cache[ 'form_' + Give.form.fn.getInfo( 'form-id', $form ) ][ key ];\n\t\t\t} else {\n\t\t\t\tcache = Give.cache[ key ];\n\t\t\t}\n\n\t\t\tcache = 'undefined' === typeof cache ? '' : cache;\n\n\t\t\treturn cache;\n\t\t},\n\n\t\t/**\n\t\t * Initialize cache.\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @private\n\t\t */\n\t\t__initialize_cache: function() {\n\t\t\tjQuery.each( jQuery( '.give-form' ), function( index, $item ) {\n\t\t\t\t$item = $item instanceof jQuery ? $item : jQuery( $item );\n\n\t\t\t\tGive.cache[ 'form_' + Give.form.fn.getInfo( 'form-id', $item ) ] = [];\n\t\t\t} );\n\t\t}\n\t}\n\t,\n\n\t/**\n\t * This object key will be use to cache predicted data or donor activity.\n\t *\n\t * @since 1.8.17\n\t */\n\tcache: {}\n};\n\nGive.form = {\n\tinit: function() {\n\t\tthis.fn.field.formatCreditCard( jQuery( 'form.give-form' ) );\n\n\t\twindow.onload = function() {\n\t\t\tGive.form.fn.__sendBackToForm();\n\t\t};\n\t},\n\n\tfn: {\n\n\t\t/**\n\t\t * Disable donation form.\n\t\t *\n\t\t * @param {object} $form\n\t\t * @param {boolean} is_disable\n\t\t *\n\t\t * @return {*}\n\t\t */\n\t\tdisable: function( $form, is_disable ) {\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t$form.find( '.give-submit' ).prop( 'disabled', is_disable );\n\t\t},\n\n\t\t/**\n\t\t * Get formatted amount\n\t\t *\n\t\t * @param {string/number} amount\n\t\t * @param {object} $form\n\t\t * @param {object} args\n\t\t */\n\t\tformatAmount: function( amount, $form, args ) {\n\t\t\t// Do not format amount if form did not exist.\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn amount;\n\t\t\t}\n\n\t\t\treturn Give.fn.formatCurrency( amount, args, $form );\n\t\t},\n\n\t\t/**\n\t\t * Get form information\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} str\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetInfo: function( str, $form ) {\n\t\t\tvar data = '';\n\t\t\t$form = 'undefined' !== typeof $form ? $form : {};\n\n\t\t\t// Bailout.\n\t\t\tif ( ! str.length || ! $form.length ) {\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tswitch ( str ) {\n\t\t\t\tcase 'gateways':\n\t\t\t\t\tdata = [];\n\t\t\t\t\tjQuery.each( $form.find( 'input[name=\"payment-mode\"]' ), function( index, gateway ) {\n\t\t\t\t\t\tgateway = ! (gateway instanceof jQuery) ? jQuery( gateway ) : gateway;\n\t\t\t\t\t\tdata.push( gateway.val().trim() );\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-type':\n\t\t\t\t\tif ( $form.hasClass( 'give-form-type-set' ) ) {\n\t\t\t\t\t\tdata = 'set';\n\t\t\t\t\t} else if ( $form.hasClass( 'give-form-type-multi' ) ) {\n\t\t\t\t\t\tdata = 'multi';\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'form-id':\n\t\t\t\t\tdata = $form.find( 'input[name=\"give-form-id\"]' ).val();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif ( $form.get( 0 ).hasAttribute( 'data-' + str ) ) {\n\t\t\t\t\t\tdata = $form.attr( 'data-' + str );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = $form.attr( str );\n\t\t\t\t\t}\n\n\t\t\t\t\t'undefined' !== typeof data ? data.trim() : data;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\n\t\t/**\n\t\t * Set form information\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} str\n\t\t * @param {string} val\n\t\t * @param {object} $form\n\t\t * @param {string} type\n\t\t *\n\t\t * @return {string|boolean}\n\t\t */\n\t\tsetInfo: function( type, val, $form, str ) {\n\t\t\t// Bailout.\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ttype = 'undefined' === typeof type ? 'data' : type;\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase 'nonce':\n\t\t\t\t\t$form.find( 'input[name=\"give-form-hash\"]' ).val( val );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Bailout.\n\t\t\tif ( 'undefined' !== typeof str && ! str.length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tswitch ( type ) {\n\t\t\t\tcase 'attr':\n\t\t\t\t\t$form.attr( str, val );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t$form.data( str, val );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Get formatted amount\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t */\n\t\tgetGateway: function( $form ) {\n\t\t\tvar gateway = '';\n\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn gateway;\n\t\t\t}\n\n\t\t\tgateway = $form.find( 'input[name=\"payment-mode\"]:checked' ).val().trim();\n\n\t\t\treturn 'undefined' !== typeof gateway ? gateway : '';\n\t\t},\n\n\t\t/**\n\t\t * Get Price ID and levels for multi donation form\n\t\t *\n\t\t * @param {Object} $form Form jQuery object\n\t\t *\n\t\t * @returns {Object}\n\t\t */\n\t\tgetVariablePrices: function( $form ) {\n\t\t\tvar variable_prices = [], formLevels;\n\n\t\t\t// check if correct form type is multi or not.\n\t\t\tif (\n\t\t\t\t! $form.length ||\n\t\t\t\t! $form.hasClass( 'give-form-type-multi' ) ||\n\t\t\t\t! (formLevels = $form.find( '.give-donation-levels-wrap [data-price-id] ' ))\n\t\t\t) {\n\t\t\t\treturn variable_prices;\n\t\t\t}\n\n\t\t\tjQuery.each( formLevels, function( index, item ) {\n\t\t\t\t// Get Jquery instance for item.\n\t\t\t\titem = ! (item instanceof jQuery) ? jQuery( item ) : item;\n\n\t\t\t\tvar decimal_separator = Give.form.fn.getInfo( 'decimal_separator', $form );\n\n\t\t\t\t// Add price id and amount to collector.\n\t\t\t\tvariable_prices.push( {\n\t\t\t\t\tprice_id: item.data( 'price-id' ),\n\t\t\t\t\tamount: Give.fn.unFormatCurrency( item.val(), decimal_separator )\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\treturn variable_prices;\n\t\t},\n\n\t\t/**\n\t\t * Get form price ID\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t * @param {boolean} is_amount\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tgetPriceID: function( $form, is_amount ) {\n\n\t\t\tvar variable_prices = this.getVariablePrices( $form ),\n\t\t\t\tcurrent_amount = Give.fn.unFormatCurrency(\n\t\t\t\t\t$form.find( 'input[name=\"give-amount\"]' ).val(),\n\t\t\t\t\tthis.getInfo( 'decimal_separator', $form )\n\t\t\t\t),\n\n\t\t\t\t/**\n\t\t\t\t * Flag Multi-levels for min. donation conditional.\n\t\t\t\t *\n\t\t\t\t * Note: Value of this variable will be:\n\t\t\t\t * a. -1 if no any level found.\n\t\t\t\t * b. [0-*] Any number from zero if donation level found.\n\t\t\t\t * c custom if donation level not found and donation amount is greater than the custom minimum amount.\n\t\t\t\t *\n\t\t\t\t * @type {number/string} Donation level ID.\n\t\t\t\t */\n\t\t\t\tprice_id = ! ! Give.fn.getCache( 'amount_' + current_amount, $form ) ? Give.fn.getCache( 'amount_' + current_amount, $form ) : - 1;\n\n\t\t\t// Flag to decide on which param we want to find price_id\n\t\t\tis_amount = 'undefined' === typeof is_amount ? true : is_amount;\n\n\t\t\t// Find price id with amount in variable prices.\n\t\t\tif ( variable_prices.length ) {\n\n\t\t\t\t// Get recent selected price id for same amount.\n\t\t\t\tif ( - 1 === price_id ) {\n\t\t\t\t\tif ( is_amount ) {\n\t\t\t\t\t\t// Find amount in donation levels.\n\t\t\t\t\t\tjQuery.each( variable_prices, function( index, variable_price ) {\n\t\t\t\t\t\t\tif ( variable_price.amount === current_amount ) {\n\t\t\t\t\t\t\t\tprice_id = variable_price.price_id;\n\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// Set level to custom.\n\t\t\t\t\t\tif ( - 1 === price_id && (this.getMinimumAmount( $form ) <= current_amount && (this.getMaximumAmount( $form ) >= current_amount) && this.getMinimumAmount( $form ) <= current_amount) ) {\n\t\t\t\t\t\t\tprice_id = 'custom';\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprice_id = jQuery( 'input[name=\"give-price-id\"]', $form ).val();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn price_id;\n\t\t},\n\n /**\n * Get form minimum amount\n *\n * @since 1.8.17\n * @param {object} $form\n *\n * @return {string}\n */\n getMinimumAmount: function ($form) {\n return $form.find('input[name=\"give-form-minimum\"]').val();\n },\n\n /**\n * Get form maximum amount\n *\n * @since 2.1\n * @param {object} $form\n *\n * @return {string}\n */\n getMaximumAmount: function ($form) {\n return $form.find('input[name=\"give-form-maximum\"]').val();\n },\n\n\t\t/**\n\t\t * Get form amount\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param $form\n\t\t * @return {*}\n\t\t */\n\t\tgetAmount: function( $form ) {\n\t\t\t// Bailout\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar amount = $form.find( 'input[name=\"give-amount\"]' ).val();\n\n\t\t\tif ( 'undefined' === typeof amount || ! amount ) {\n\t\t\t\tamount = 0;\n\t\t\t}\n\n\t\t\treturn Give.fn.unFormatCurrency( amount, this.getInfo( 'decimal_separator', $form ) );\n\t\t},\n\n\t\t/**\n\t\t * Get form security nonce\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t * @return {string}\n\t\t */\n\t\tgetNonce: function( $form ) {\n\t\t\t// Bailout\n\t\t\tif ( ! $form.length ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tlet nonce = $form.find( 'input[name=\"give-form-hash\"]' ).val();\n\n\t\t\tif ( 'undefined' === typeof nonce || ! nonce ) {\n\t\t\t\tnonce = '';\n\t\t\t}\n\n\t\t\treturn nonce;\n\t\t},\n\n\t\t/**\n\t\t * Reset form noce.\n\t\t *\n\t\t * @since 2.0\n\t\t *\n\t\t * @param {object} $form Donation form object.\n\t\t * @returns {boolean}\n\t\t */\n\t\tresetNonce: function( $form ) {\n\t\t\t// Return false, if form is missing.\n\t\t\tif ( ! $form.length || ! jQuery( 'input[name=\"give-form-hash\"]', $form ).length ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tGive.form.fn.disable( $form, true );\n\n\t\t\t//Post via AJAX to Give\n\t\t\tjQuery.post( give_global_vars.ajaxurl, {\n\t\t\t\t\taction: 'give_donation_form_nonce',\n\t\t\t\t\tgive_form_id: Give.form.fn.getInfo( 'form-id', $form )\n\t\t\t\t},\n\t\t\t\tfunction( response ) {\n\t\t\t\t\t// Update nonce field.\n\t\t\t\t\tGive.form.fn.setInfo( 'nonce', response.data, $form, '' );\n\n\t\t\t\t\tGive.form.fn.disable( $form, false );\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Auto select donation level\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $form\n\t\t * @param {string} price_id\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tautoSelectDonationLevel: function( $form, price_id ) {\n\n\t\t\tif ( ! $form.length || 'multi' !== this.getInfo( 'form-type', $form ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tprice_id = ('undefined' === typeof price_id) ? this.getPriceID( $form, false ) : price_id;\n\n\t\t\tswitch ( true ) {\n\n\t\t\t\t// Auto select radio button.\n\t\t\t\tcase (! ! $form.find( '.give-radio-input' ).length) :\n\t\t\t\t\t$form.find( '.give-radio-input' )\n\t\t\t\t\t\t.prop( 'checked', false );\n\t\t\t\t\t$form.find( '.give-radio-input[data-price-id=\"' + price_id + '\"]' )\n\t\t\t\t\t\t.prop( 'checked', true )\n\t\t\t\t\t\t.addClass( 'give-default-level' );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Set focus to price id button.\n\t\t\t\tcase (! ! $form.find( 'button.give-donation-level-btn' ).length) :\n\t\t\t\t\t$form.find( 'button.give-donation-level-btn' )\n\t\t\t\t\t\t.blur();\n\t\t\t\t\t$form.find( 'button.give-donation-level-btn[data-price-id=\"' + price_id + '\"]' )\n\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t.addClass( 'give-default-level' );\n\t\t\t\t\tbreak;\n\n\t\t\t\t// Auto select option.\n\t\t\t\tcase (! ! $form.find( 'select.give-select-level' ).length) :\n\t\t\t\t\t$form.find( 'select.give-select-level option' )\n\t\t\t\t\t\t.prop( 'selected', false );\n\t\t\t\t\t$form.find( 'select.give-select-level option[data-price-id=\"' + price_id + '\"]' )\n\t\t\t\t\t\t.prop( 'selected', true )\n\t\t\t\t\t\t.addClass( 'give-default-level' );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update level values\n\t\t *\n\t\t * Helper function: Sets the multi-select amount values\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {object} $level\n\t\t * @returns {boolean}\n\t\t */\n\t\tautoSetMultiLevel: function( $level ) {\n\n\t\t\tvar $form = $level.parents( 'form' ),\n\t\t\t\tlevel_amount = $level.val(),\n\t\t\t\tlevel_price_id = $level.data( 'price-id' );\n\n\t\t\t// Check if price ID blank because of dropdown type\n\t\t\tif ( 'undefined' === typeof level_price_id ) {\n\t\t\t\tlevel_price_id = $level.find( 'option:selected' ).data( 'price-id' );\n\t\t\t}\n\n\t\t\t// Is this a custom amount selection?\n\t\t\tif ( 'custom' === level_price_id ) {\n\t\t\t\t// It is, so focus on the custom amount input.\n\t\t\t\t$form.find( '.give-amount-top' ).val( '' ).focus();\n\t\t\t\treturn false; // Bounce out\n\t\t\t}\n\n\t\t\t// Update custom amount field\n\t\t\t$form.find( '.give-amount-top' ).val( level_amount );\n\t\t\t$form.find( 'span.give-amount-top' ).text( level_amount );\n\n\t\t\tvar decimal_separator = Give.form.fn.getInfo( 'decimal_separator', $form );\n\n\t\t\t// Cache previous amount and set data amount.\n\t\t\tjQuery( '.give-donation-amount .give-text-input', $form )\n\t\t\t\t.attr(\n\t\t\t\t\t'data-amount',\n\t\t\t\t\tGive.fn.unFormatCurrency(\n\t\t\t\t\t\t$form.find( '.give-final-total-amount' ).attr( 'data-total' ),\n\t\t\t\t\t\tdecimal_separator\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t// Manually trigger blur event with two params:\n\t\t\t// (a) form jquery object\n\t\t\t// (b) price id\n\t\t\t// (c) donation amount\n\t\t\t$form.find( '.give-donation-amount .give-text-input' )\n\t\t\t\t.trigger( 'blur', [ $form, level_amount, level_price_id ] );\n\t\t},\n\n\t\t/**\n\t\t * Donor sent back to the form\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @access private\n\t\t */\n\t\t__sendBackToForm: function() {\n\n\t\t\tlet form_id = Give.fn.getParameterByName( 'form-id' ),\n\t\t\t\tpayment_mode = Give.fn.getParameterByName( 'payment-mode' );\n\n\t\t\t// Sanity check - only proceed if query strings in place.\n\t\t\tif ( ! form_id || ! payment_mode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet $form_wrapper = jQuery( 'body' ).find( '#give-form-' + form_id + '-wrap' ),\n\t\t\t\t$form = $form_wrapper.find( 'form.give-form' ),\n\t\t\t\tdisplay_modal = $form_wrapper.hasClass( 'give-display-modal' ),\n\t\t\t\tdisplay_button = $form_wrapper.hasClass( 'give-display-button' ),\n\t\t\t\tdisplay_reveal = $form_wrapper.hasClass( 'give-display-reveal' );\n\n\t\t\t// Update payment mode radio so it's correctly checked.\n\t\t\t$form.find( '#give-gateway-radio-list label' )\n\t\t\t\t.removeClass( 'give-gateway-option-selected' );\n\t\t\t$form.find( 'input[name=payment-mode][value=' + payment_mode + ']' )\n\t\t\t\t.prop( 'checked', true )\n\t\t\t\t.parent()\n\t\t\t\t.addClass( 'give-gateway-option-selected' );\n\n\t\t\t// Select the proper level for Multi-level forms.\n\t\t\t// It can either be a dropdown, buttons, or radio list. Default is buttons field type.\n\t\t\tlet level_id = Give.fn.getParameterByName( 'level-id' ),\n\t\t\t\tlevel_field = $form.find( '*[data-price-id=\"' + level_id + '\"]' );\n\n\t\t\tif ( level_field.length > 0 ) {\n\t\t\t\tthis.autoSetMultiLevel( level_field );\n\t\t\t}\n\n\t\t\tlet give_form_wrap = jQuery( '.give-form-wrap' ),\n\t\t\t is_form_grid = give_form_wrap.hasClass( 'give-form-grid-wrap' );\n\n\t\t\tif ( is_form_grid && 1 === jQuery( '#give-modal-form-' + form_id ).length ) {\n\t\t\t\tjQuery.magnificPopup.open( {\n\t\t\t\t\titems: {\n\t\t\t\t\t\ttype: 'inline',\n\t\t\t\t\t\tsrc: '#give-modal-form-' + form_id,\n\t\t\t\t\t},\n\t\t\t\t\tfixedContentPos: true,\n\t\t\t\t\tfixedBgPos: true,\n\t\t\t\t\tcloseBtnInside: true,\n\t\t\t\t\tmidClick: true,\n\t\t\t\t\tremovalDelay: 300,\n\t\t\t\t\tmainClass: 'modal-fade-slide',\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This form is modal display so show the modal.\n\t\t\tif ( display_modal || display_button ) {\n\t\t\t\tgive_open_form_modal( $form_wrapper, $form );\n\t\t\t} else if ( display_reveal ) {\n\t\t\t\t// This is a reveal form, show it.\n\t\t\t\t$form.find( '.give-btn-reveal' ).hide();\n\t\t\t\t$form.find( '#give-payment-mode-select, #give_purchase_form_wrap' ).slideDown();\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Check if donation amount valid or not\n\t\t * @since 1.8.17\n\t\t *\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisValidDonationAmount: function( $form ) {\n\n\t\t\t// Return true, if custom amount is not enabled.\n\t\t\tif ( $form.find( 'input[name=\"give-form-minimum\"]' ).length <= 0 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet min_amount = this.getMinimumAmount( $form ),\n\t\t\t\tmax_amount = this.getMaximumAmount( $form ),\n\t\t\t\tamount = this.getAmount( $form ),\n\t\t\t\tprice_id = this.getPriceID( $form, true );\n\n\t\t\t// Don't allow zero donation amounts.\n\t\t\t// https://github.com/WordImpress/Give/issues/3181\n\t\t\tif( 0 === amount ) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t((- 1 < amount) && amount >= min_amount && amount <= max_amount)\n\t\t\t\t|| (- 1 !== price_id)\n\t\t\t);\n\t\t},\n\n\t\tfield: {\n\n\t\t\t/**\n\t\t\t * Format CC Fields\n\t\t\t *\n\t\t\t * Set variables and format cc fields.\n\t\t\t *\n\t\t\t * @since 1.2\n\t\t\t *\n\t\t\t * @param {object} $forms\n\t\t\t */\n\t\t\tformatCreditCard: function( $forms ) {\n\t\t\t\t//Loop through forms on page and set CC validation\n\t\t\t\t$forms.each( function( index, form ) {\n\t\t\t\t\tform = jQuery( form );\n\t\t\t\t\tvar card_number = form.find( '.card-number' ),\n\t\t\t\t\t\tcard_cvc = form.find( '.card-cvc' ),\n\t\t\t\t\t\tcard_expiry = form.find( '.card-expiry' );\n\n\t\t\t\t\t//Only validate if there is a card field\n\t\t\t\t\tif ( card_number.length ) {\n\t\t\t\t\t\tcard_number.payment( 'formatCardNumber' );\n\t\t\t\t\t\tcard_cvc.payment( 'formatCardCVC' );\n\t\t\t\t\t\tcard_expiry.payment( 'formatCardExpiry' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n};\n\nGive.notice = {\n\tfn: {\n\t\t/**\n\t\t * Render notice\n\t\t * @since 1.8.17\n\t\t *\n\t\t * @param {string} notice_code\n\t\t * @param {object} $container\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderNotice: function( notice_code, $container ) {\n\t\t\tlet notice_html = '',\n\t\t\t\t$notice;\n\t\t\t$container = 'undefined' !== typeof $container ? $container : {};\n\n\t\t\tswitch ( notice_code ) {\n\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t$notice = jQuery(\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\tthis.getNotice( notice_code, $container ) +\n\t\t\t\t\t\t'
'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t$notice = jQuery(\n\t\t\t\t\t\t'
' +\n\t\t\t\t\t\tthis.getNotice( notice_code, $container ) +\n\t\t\t\t\t\t'
'\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Return html if container did not find.\n\t\t\tif ( ! $container.length ) {\n\t\t\t\treturn notice_html;\n\t\t\t}\n\n\t\t\t$notice.insertBefore( $container.find( '.give-total-wrap' ) ).show();\n\t\t},\n\n\t\t/**\n\t\t * Get error notice\n\t\t *\n\t\t * @since 1.8.17\n\t\t * @param {string} error_code\n\t\t * @param {object} $form\n\t\t *\n\t\t * @return {*}\n\t\t */\n\t\tgetNotice: function( error_code, $form ) {\n\t\t\t// Bailout.\n\t\t\tif ( ! error_code.length ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar notice, notice_msg, formatted_amount;\n\t\t\tnotice = notice_msg = formatted_amount = '';\n\n\t\t\tif ( $form.length ) {\n\t\t\t\tswitch ( error_code ) {\n\t\t\t\t\tcase 'bad_minimum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar( error_code );\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMinimumAmount( $form );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bad_maximum':\n\t\t\t\t\t\tnotice_msg = Give.fn.getGlobalVar( error_code );\n\t\t\t\t\t\tformatted_amount = Give.form.fn.getMaximumAmount( $form );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( $form.length && '' !== notice_msg ) {\n\t\t\t\tnotice = notice_msg + ' ' + Give.fn.formatCurrency(\n\t\t\t\t\tformatted_amount,\n\t\t\t\t\t{\n\t\t\t\t\t\tsymbol: Give.form.fn.getInfo( 'currency_symbol', $form ),\n\t\t\t\t\t\tposition: Give.form.fn.getInfo( 'currency_position', $form )\n\t\t\t\t\t},\n\t\t\t\t\t$form\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn notice;\n\t\t}\n\t}\n};\n\nwindow.Give = Give;\n\njQuery( function( $ ) {\n\n\tvar $forms = jQuery( 'form.give-form' ),\n\t\tdoc = $( document );\n\n\t// Toggle validation classes\n\t$.fn.toggleError = function( errored ) {\n\t\tthis.toggleClass( 'error', errored );\n\t\tthis.toggleClass( 'valid', ! errored );\n\n\t\treturn this;\n\t};\n\n\t// Initialize Give object.\n\tGive.init();\n\n\t/**\n\t * Update state/province fields per country selection\n\t */\n\tfunction update_billing_state_field() {\n\t\tvar $this = $( this ),\n\t\t\t$form = $this.parents( 'form' );\n\t\tif ( 'card_state' !== $this.attr( 'id' ) ) {\n\n\t\t\t//Disable the State field until updated\n\t\t\t$form.find( '#card_state' ).empty().append( '' ).prop( 'disabled', true );\n\n\t\t\t// If the country field has changed, we need to update the state/province field\n\t\t\tvar postData = {\n\t\t\t\taction: 'give_get_states',\n\t\t\t\tcountry: $this.val(),\n\t\t\t\tfield_name: 'card_state'\n\t\t\t};\n\n\t\t\t$.ajax( {\n\t\t\t\ttype: 'POST',\n\t\t\t\tdata: postData,\n\t\t\t\turl: give_global_vars.ajaxurl,\n\t\t\t\txhrFields: {\n\t\t\t\t\twithCredentials: true\n\t\t\t\t},\n\t\t\t\tsuccess: function( response ) {\n\t\t\t\t\tvar html = '';\n\t\t\t\t\tvar states_label = response.states_label;\n\t\t\t\t\tif ( typeof (response.states_found) != undefined && true == response.states_found ) {\n\t\t\t\t\t\thtml = response.data;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml = ``;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( false === $form.hasClass( 'float-labels-enabled' ) ) {\n\t\t\t\t\t\tif ( typeof (response.states_require) != 'undefined' && true == response.states_require ) {\n\t\t\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label .give-required-indicator' ).removeClass( 'give-hidden' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label .give-required-indicator' ).addClass( 'give-hidden' );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label' ).text( states_label );\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).closest( 'p' ).find( 'label .state-label-text' ).text( states_label );\n\t\t\t\t\t$form.find( 'input[name=\"card_state\"], select[name=\"card_state\"]' ).replaceWith( html );\n\n\t\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\t\tif ( typeof (response.show_field) != undefined && true == response.show_field ) {\n\t\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).removeClass( 'give-hidden' );\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-last' );\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-wide' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).addClass( 'give-hidden' );\n\n\t\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-wide' );\n\t\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-last' );\n\t\t\t\t\t}\n\n\t\t\t\t\tdoc.trigger( 'give_checkout_billing_address_updated', [ response, $form.attr( 'id' ) ] );\n\t\t\t\t}\n\t\t\t} ).fail( function( data ) {\n\t\t\t\tif ( window.console && window.console.log ) {\n\t\t\t\t\tconsole.log( data );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Sync state field with country.\n\tdoc.on(\n\t\t'change',\n\t\t'#give_cc_address input.card_state, #give_cc_address select',\n\t\tupdate_billing_state_field\n\t);\n\n\t// Trigger formatting function when gateway changes.\n\tdoc.on(\n\t\t'give_gateway_loaded',\n\t\tfunction() {\n\t\t\tGive.form.fn.field.formatCreditCard( $forms );\n\t\t}\n\t);\n\n\t// Make sure a gateway is selected.\n\tdoc.on(\n\t\t'submit',\n\t\t'#give_payment_mode',\n\t\tfunction() {\n\t\t\tvar gateway = Give.form.fn.getGateway( $( this ).closest( 'form' ) );\n\t\t\tif ( ! gateway.length ) {\n\t\t\t\talert( Give.fn.getGlobalVar( 'no_gateway' ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t);\n\n\t// Add a class to the currently selected gateway on click\n\tdoc.on(\n\t\t'click',\n\t\t'#give-payment-mode-select input',\n\t\tfunction() {\n\t\t\tvar $form = $( this ).parents( 'form' ),\n\t\t\t\t$gateways_li = $form.find( '#give-payment-mode-select li' ),\n\t\t\t\told_payment_gateway = $form.find( 'li.give-gateway-option-selected input[name=\"payment-mode\"]' ).val().trim(),\n\t\t\t\tnew_payment_gateways;\n\n\t\t\t// Unselect all payment gateways.\n\t\t\t$gateways_li.removeClass( 'give-gateway-option-selected' );\n\t\t\t$gateways_li.prop( 'checked', false );\n\n\t\t\t// Select payment gateway.\n\t\t\t$( this ).prop( 'checked', true );\n\t\t\t$( this ).parent().addClass( 'give-gateway-option-selected' );\n\n\t\t\t// Get new payment gateway.\n\t\t\tnew_payment_gateways = Give.form.fn.getGateway( $form );\n\n\t\t\t// Change form action.\n\t\t\t$form.attr( 'action', $form.attr( 'action' ).replace(\n\t\t\t\t'payment-mode=' + old_payment_gateway,\n\t\t\t\t'payment-mode=' + new_payment_gateways )\n\t\t\t);\n\t\t}\n\t);\n\n\t/**\n\t * Custom Donation Amount Focus In\n\t *\n\t * @description: If user focuses on field & changes value then updates price\n\t */\n\tdoc.on( 'focus', '.give-donation-amount .give-text-input', function( e ) {\n\n\t\tvar parent_form = $( this ).parents( 'form' );\n\n\t\t// Remove any invalid class\n\t\t$( this ).removeClass( 'invalid-amount' );\n\n\t\t// Set data amount\n\t\tvar current_total = parent_form.find( '.give-final-total-amount' ).attr( 'data-total' );\n\t\tvar decimal_separator = Give.form.fn.getInfo( 'decimal_separator', parent_form );\n\t\t$( this ).attr( 'data-amount', Give.fn.unFormatCurrency( current_total, decimal_separator ) );\n\n\t\t//This class is used for CSS purposes\n\t\t$( this ).parent( '.give-donation-amount' ).addClass( 'give-custom-amount-focus-in' );\n\n\t\t//Set Multi-Level to Custom Amount Field\n\t\tparent_form.find( '.give-default-level, .give-radio-input' ).removeClass( 'give-default-level' );\n\t\tparent_form.find( '.give-btn-level-custom' ).addClass( 'give-default-level' );\n\t\tparent_form.find( '.give-radio-input' ).prop( 'checked', false ); // Radio\n\t\tparent_form.find( '.give-radio-input.give-radio-level-custom' ).prop( 'checked', true ); // Radio\n\t\tparent_form.find( '.give-select-level' ).prop( 'selected', false ); // Select\n\t\tparent_form.find( '.give-select-level .give-donation-level-custom' ).prop( 'selected', true ); // Select\n\n\t} );\n\n\t/**\n\t * Custom Donation Focus Out\n\t *\n\t * Fires on focus end aka \"blur\"\n\t */\n\tdoc.on( 'blur', '.give-donation-amount .give-text-input', function( e, $parent_form, donation_amount, price_id ) {\n\n\t\tlet parent_form = ('undefined' !== typeof $parent_form) ? $parent_form : $( this ).closest( 'form' ),\n\t\t\tpre_focus_amount = $( this ).attr( 'data-amount' ),\n\t\t\tthis_value = ('undefined' !== typeof donation_amount) ? donation_amount : $( this ).val(),\n\t\t\tdecimal_separator = Give.form.fn.getInfo( 'decimal_separator', parent_form ),\n\t\t\tvalue_min = Give.form.fn.getMinimumAmount( parent_form ),\n\t\t\tvalue_max = Give.form.fn.getMaximumAmount( parent_form ),\n\t\t\tvalue_now = (this_value === 0) ? value_min : Give.fn.unFormatCurrency( this_value, decimal_separator ),\n\t\t\tformatted_total = Give.form.fn.formatAmount( value_now, parent_form, {} );\n\n\t\tprice_id = 'undefined' === typeof price_id ? Give.form.fn.getPriceID( parent_form, true ) : price_id;\n\n\t\t// https://github.com/WordImpress/Give/issues/3299\n\t\t// If we change from custom amount to donation level then\n\t\t// this event fire twice. First on amount field blur and second time on level button/radio/select click which cause of minimum donation notice.\n\t\t// This condition will prevent minimum donation amount notice show by set default level.\n\t\tif( '' === value_now || 0 === value_now ) {\n\t\t\tlet $default_level = $( '.give-donation-levels-wrap [data-default=\"1\"]', $parent_form );\n\n\t\t\tif( $default_level.length ) {\n\t\t\t\tprice_id = $default_level.data('price-id');\n\t\t\t\tthis_value = value_now = Give.fn.unFormatCurrency( $default_level.val(), decimal_separator );\n\t\t\t\tformatted_total = Give.form.fn.formatAmount( value_now, parent_form, {} );\n\t\t\t}\n\t\t}\n\n\t\t// Cache donor selected price id for a amount.\n\t\tGive.fn.setCache( 'amount_' + value_now, price_id, parent_form );\n\t\t$( this ).val( formatted_total );\n\n\t\t// Does this number have an accepted min/max value?\n\t\tif ( ! Give.form.fn.isValidDonationAmount( parent_form ) ) {\n\n\t\t\t// It doesn't... add invalid class.\n\t\t\t$( this ).addClass( 'give-invalid-amount' );\n\n\t\t\t// Disable submit\n\t\t\tGive.form.fn.disable( parent_form, true );\n\t\t\tlet invalid_minimum_notice = parent_form.find( '.give-invalid-minimum' ),\n\t\t\t\tinvalid_maximum_notice = parent_form.find( '.give-invalid-maximum' );\n\n\t\t\t// If no error present, create it, insert, slide down (show).\n\t\t\tif ( 0 === invalid_minimum_notice.length && value_now < value_min ) {\n\t\t\t\tGive.notice.fn.renderNotice( 'bad_minimum', parent_form );\n\t\t\t} else if( value_now >= value_min ) {\n\t\t\t\tinvalid_minimum_notice.slideUp( 300, function() { $( this ).remove(); } );\n\t\t\t}\n\n\t\t\t// For maximum custom amount error.\n\t\t\tif ( 0 === invalid_maximum_notice.length && value_now > value_max ) {\n\t\t\t\tGive.notice.fn.renderNotice( 'bad_maximum', parent_form );\n\t\t\t} else if (value_now <= value_max ){\n\t\t\t\tinvalid_maximum_notice.slideUp( 300, function() { $( this ).remove(); } );\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Remove error message class from price field.\n\t\t\t$( this ).removeClass( 'give-invalid-amount' );\n\n\t\t\t// Minimum amount met - slide up error & remove it from DOM.\n\t\t\tparent_form.find( '.give-invalid-minimum, .give-invalid-maximum' ).slideUp( 300, function() {\n\t\t\t\t$( this ).remove();\n\t\t\t} );\n\n\t\t\t// Re-enable submit.\n\t\t\tGive.form.fn.disable( parent_form, false );\n\t\t}\n\n\t\t// If values don't match up then proceed with updating donation total value\n\t\tif ( pre_focus_amount !== value_now ) {\n\n\t\t\t// Update donation total (include currency symbol)\n\t\t\tparent_form.find( '.give-final-total-amount' )\n\t\t\t\t.attr( 'data-total', value_now )\n\t\t\t\t.text( Give.fn.formatCurrency(\n\t\t\t\t\tvalue_now,\n\t\t\t\t\t{\n\t\t\t\t\t\tsymbol: Give.form.fn.getInfo( 'currency_symbol', parent_form ),\n\t\t\t\t\t\tposition: Give.form.fn.getInfo( 'currency_position', parent_form )\n\t\t\t\t\t},\n\t\t\t\t\tparent_form )\n\t\t\t\t);\n\n\t\t}\n\n\t\t// Set price id for current amount.\n\t\tif ( - 1 !== price_id ) {\n\n\t\t\t// Auto set give price id.\n\t\t\t$( 'input[name=\"give-price-id\"]', parent_form ).val( price_id );\n\n\t\t\t// Update hidden amount field\n\t\t\tparent_form.find( '.give-amount-hidden' ).val( Give.form.fn.formatAmount( value_now, parent_form, {} ) );\n\n\t\t\t// Remove old selected class & add class for CSS purposes\n\t\t\tparent_form.find( '.give-default-level' ).removeClass( 'give-default-level' );\n\n\t\t\t// Auto select variable price items ( Radio/Button/Select ).\n\t\t\tGive.form.fn.autoSelectDonationLevel( parent_form, price_id );\n\t\t}\n\n\t\t// This class is used for CSS purposes\n\t\t$( this ).parent( '.give-donation-amount' )\n\t\t\t.removeClass( 'give-custom-amount-focus-in' );\n\n\t\t// trigger an event for hooks\n\t\tjQuery( document ).trigger( 'give_donation_value_updated', [ parent_form, value_now, price_id ] );\n\n\t} );\n\n\t// Multi-level Buttons: Update Amount Field based on Multi-level Donation Select\n\tdoc.on( 'click touchend', '.give-donation-level-btn', function( e ) {\n\t\te.preventDefault(); //don't let the form submit\n\t\tGive.form.fn.autoSetMultiLevel( $( this ) );\n\t} );\n\n\t// Multi-level Radios: Update Amount Field based on Multi-level Donation Select\n\tdoc.on( 'click touchend', '.give-radio-input-level', function( e ) {\n\t\tGive.form.fn.autoSetMultiLevel( $( this ) );\n\t} );\n\n\t// Multi-level Checkboxes: Update Amount Field based on Multi-level Donation Select\n\tdoc.on( 'change', '.give-select-level', function( e ) {\n\t\tGive.form.fn.autoSetMultiLevel( $( this ) );\n\t} );\n\n\t/**\n\t * Show/Hide terms and conditions.\n\t */\n\tdoc.on( 'click', '.give_terms_links', function( e ) {\n\t\te.preventDefault();\n\t\tvar $fieldset_wrapper = $( this ).closest( 'fieldset' );\n\t\t$( '[class^=give_terms-]', $fieldset_wrapper ).slideToggle();\n\t\t$( 'a.give_terms_links', $fieldset_wrapper ).toggle();\n\t\treturn false;\n\t} );\n\n\t/**\n\t * Prevent level jump which happens due to same id.\n\t * @see https://github.com/WordImpress/Give/issues/2292\n\t */\n\t$( 'label[for^=\"give-radio-level\"]' ).on( 'click', function( e ) {\n\t\tvar $form = $( this ).closest( 'form' ),\n\t\t\t$inputField = $form.find( '#' + $( this ).attr( 'for' ) );\n\n\t\tif ( $inputField.length ) {\n\t\t\t$inputField.trigger( 'click' );\n\t\t\te.preventDefault();\n\t\t}\n\t} );\n} );\n\njQuery( window ).load( function() {\n\n\t/**\n\t * Validate cc fields on change\n\t */\n\tjQuery( 'body' ).on( 'keyup change focusout', '.give-form .card-number, .give-form .card-cvc, .give-form .card-expiry', function( e ) {\n\t\tvar el = jQuery( this ),\n\t\t\tgive_form = el.parents( 'form.give-form' ),\n\t\t\tid = el.attr( 'id' ),\n\t\t\tcard_number = give_form.find( '.card-number' ),\n\t\t\tcard_cvc = give_form.find( '.card-cvc' ),\n\t\t\tcard_expiry = give_form.find( '.card-expiry' ),\n\t\t\ttype = jQuery.payment.cardType( card_number.val() ),\n\t\t\terror = false;\n\n\t\tswitch ( e.type ) {\n\t\t\tcase 'focusout':\n\t\t\t\tif ( id.indexOf( 'card_number' ) > - 1 ) {\n\t\t\t\t\t// Set card number error.\n\t\t\t\t\terror = ! jQuery.payment.validateCardNumber( card_number.val() );\n\t\t\t\t\tcard_number.toggleError( error );\n\n\t\t\t\t} else if ( id.indexOf( 'card_cvc' ) > - 1 ) {\n\t\t\t\t\t// Set card cvc error.\n\t\t\t\t\terror = ! jQuery.payment.validateCardCVC( card_cvc.val(), type );\n\t\t\t\t\tcard_cvc.toggleError( error );\n\n\t\t\t\t} else if ( id.indexOf( 'card_expiry' ) > - 1 ) {\n\t\t\t\t\t// Set card expiry error.\n\t\t\t\t\terror = ! jQuery.payment.validateCardExpiry( card_expiry.payment( 'cardExpiryVal' ) );\n\t\t\t\t\tcard_expiry.toggleError( error );\n\t\t\t\t}\n\n\t\t\t\t// Disable submit button\n\t\t\t\tGive.form.fn.disable( el.parents( 'form' ), error );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Remove error class.\n\t\t\t\tif ( el.hasClass( 'error' ) ) {\n\t\t\t\t\tel.removeClass( 'error' );\n\t\t\t\t}\n\n\t\t\t\tif ( id.indexOf( 'card_number' ) > - 1 ) {\n\t\t\t\t\t// Add card related classes.\n\t\t\t\t\tvar card_type = give_form.find( '.card-type' );\n\n\t\t\t\t\tif ( type === null ) {\n\t\t\t\t\t\tcard_type.removeClass().addClass( 'off card-type' );\n\t\t\t\t\t\tel.removeClass( 'valid' ).addClass( 'error' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcard_type.removeClass().addClass( 'card-type ' + type );\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( id.indexOf( 'card_expiry' ) > - 1 ) {\n\t\t\t\t\t// set expiry date params.\n\t\t\t\t\tvar expiry = card_expiry.payment( 'cardExpiryVal' );\n\n\t\t\t\t\tgive_form.find( '.card-expiry-month' ).val( expiry.month );\n\t\t\t\t\tgive_form.find( '.card-expiry-year' ).val( expiry.year );\n\t\t\t\t}\n\t\t}\n\t} );\n} );\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give-donations.js","// Plugins\nimport 'jquery.payment';\nimport 'accounting';\nimport 'uiblocker';\nimport 'magnific-popup';\n\n// Give plugins.\nimport '../plugins/give-hint.css';\n\n// Give core.\nimport './give-ajax';\nimport './give-donations';\nimport './give-misc';\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give.js","// Generated by CoffeeScript 1.7.1\n(function() {\n var $, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, reFormatCVC, reFormatCardNumber, reFormatExpiry, reFormatNumeric, replaceFullWidthChars, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, safeVal, setCardType,\n __slice = [].slice,\n __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n $ = window.jQuery || window.Zepto || window.$;\n\n $.payment = {};\n\n $.payment.fn = {};\n\n $.fn.payment = function() {\n var args, method;\n method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n return $.payment.fn[method].apply(this, args);\n };\n\n defaultFormat = /(\\d{1,4})/g;\n\n $.payment.cards = cards = [\n {\n type: 'maestro',\n patterns: [5018, 502, 503, 506, 56, 58, 639, 6220, 67],\n format: defaultFormat,\n length: [12, 13, 14, 15, 16, 17, 18, 19],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'forbrugsforeningen',\n patterns: [600],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'dankort',\n patterns: [5019],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'visa',\n patterns: [4],\n format: defaultFormat,\n length: [13, 16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'mastercard',\n patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'amex',\n patterns: [34, 37],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,\n length: [15],\n cvcLength: [3, 4],\n luhn: true\n }, {\n type: 'dinersclub',\n patterns: [30, 36, 38, 39],\n format: /(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,\n length: [14],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'discover',\n patterns: [60, 64, 65, 622],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }, {\n type: 'unionpay',\n patterns: [62, 88],\n format: defaultFormat,\n length: [16, 17, 18, 19],\n cvcLength: [3],\n luhn: false\n }, {\n type: 'jcb',\n patterns: [35],\n format: defaultFormat,\n length: [16],\n cvcLength: [3],\n luhn: true\n }\n ];\n\n cardFromNumber = function(num) {\n var card, p, pattern, _i, _j, _len, _len1, _ref;\n num = (num + '').replace(/\\D/g, '');\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n _ref = card.patterns;\n for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n pattern = _ref[_j];\n p = pattern + '';\n if (num.substr(0, p.length) === p) {\n return card;\n }\n }\n }\n };\n\n cardFromType = function(type) {\n var card, _i, _len;\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n if (card.type === type) {\n return card;\n }\n }\n };\n\n luhnCheck = function(num) {\n var digit, digits, odd, sum, _i, _len;\n odd = true;\n sum = 0;\n digits = (num + '').split('').reverse();\n for (_i = 0, _len = digits.length; _i < _len; _i++) {\n digit = digits[_i];\n digit = parseInt(digit, 10);\n if ((odd = !odd)) {\n digit *= 2;\n }\n if (digit > 9) {\n digit -= 9;\n }\n sum += digit;\n }\n return sum % 10 === 0;\n };\n\n hasTextSelected = function($target) {\n var _ref;\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== $target.prop('selectionEnd')) {\n return true;\n }\n if ((typeof document !== \"undefined\" && document !== null ? (_ref = document.selection) != null ? _ref.createRange : void 0 : void 0) != null) {\n if (document.selection.createRange().text) {\n return true;\n }\n }\n return false;\n };\n\n safeVal = function(value, $target) {\n var currPair, cursor, digit, error, last, prevPair;\n try {\n cursor = $target.prop('selectionStart');\n } catch (_error) {\n error = _error;\n cursor = null;\n }\n last = $target.val();\n $target.val(value);\n if (cursor !== null && $target.is(\":focus\")) {\n if (cursor === last.length) {\n cursor = value.length;\n }\n if (last !== value) {\n prevPair = last.slice(cursor - 1, +cursor + 1 || 9e9);\n currPair = value.slice(cursor - 1, +cursor + 1 || 9e9);\n digit = value[cursor];\n if (/\\d/.test(digit) && prevPair === (\"\" + digit + \" \") && currPair === (\" \" + digit)) {\n cursor = cursor + 1;\n }\n }\n $target.prop('selectionStart', cursor);\n return $target.prop('selectionEnd', cursor);\n }\n };\n\n replaceFullWidthChars = function(str) {\n var chars, chr, fullWidth, halfWidth, idx, value, _i, _len;\n if (str == null) {\n str = '';\n }\n fullWidth = '\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19';\n halfWidth = '0123456789';\n value = '';\n chars = str.split('');\n for (_i = 0, _len = chars.length; _i < _len; _i++) {\n chr = chars[_i];\n idx = fullWidth.indexOf(chr);\n if (idx > -1) {\n chr = halfWidth[idx];\n }\n value += chr;\n }\n return value;\n };\n\n reFormatNumeric = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = value.replace(/\\D/g, '');\n return safeVal(value, $target);\n });\n };\n\n reFormatCardNumber = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = $.payment.formatCardNumber(value);\n return safeVal(value, $target);\n });\n };\n\n formatCardNumber = function(e) {\n var $target, card, digit, length, re, upperLength, value;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n value = $target.val();\n card = cardFromNumber(value + digit);\n length = (value.replace(/\\D/g, '') + digit).length;\n upperLength = 16;\n if (card) {\n upperLength = card.length[card.length.length - 1];\n }\n if (length >= upperLength) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (card && card.type === 'amex') {\n re = /^(\\d{4}|\\d{4}\\s\\d{6})$/;\n } else {\n re = /(?:^|\\s)(\\d{4})$/;\n }\n if (re.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value + ' ' + digit);\n });\n } else if (re.test(value + digit)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value + digit + ' ');\n });\n }\n };\n\n formatBackCardNumber = function(e) {\n var $target, value;\n $target = $(e.currentTarget);\n value = $target.val();\n if (e.which !== 8) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (/\\d\\s$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d\\s$/, ''));\n });\n } else if (/\\s\\d?$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d$/, ''));\n });\n }\n };\n\n reFormatExpiry = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = $.payment.formatExpiry(value);\n return safeVal(value, $target);\n });\n };\n\n formatExpiry = function(e) {\n var $target, digit, val;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val() + digit;\n if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(\"0\" + val + \" / \");\n });\n } else if (/^\\d\\d$/.test(val)) {\n e.preventDefault();\n return setTimeout(function() {\n var m1, m2;\n m1 = parseInt(val[0], 10);\n m2 = parseInt(val[1], 10);\n if (m2 > 2 && m1 !== 0) {\n return $target.val(\"0\" + m1 + \" / \" + m2);\n } else {\n return $target.val(\"\" + val + \" / \");\n }\n });\n }\n };\n\n formatForwardExpiry = function(e) {\n var $target, digit, val;\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val();\n if (/^\\d\\d$/.test(val)) {\n return $target.val(\"\" + val + \" / \");\n }\n };\n\n formatForwardSlashAndSpace = function(e) {\n var $target, val, which;\n which = String.fromCharCode(e.which);\n if (!(which === '/' || which === ' ')) {\n return;\n }\n $target = $(e.currentTarget);\n val = $target.val();\n if (/^\\d$/.test(val) && val !== '0') {\n return $target.val(\"0\" + val + \" / \");\n }\n };\n\n formatBackExpiry = function(e) {\n var $target, value;\n $target = $(e.currentTarget);\n value = $target.val();\n if (e.which !== 8) {\n return;\n }\n if (($target.prop('selectionStart') != null) && $target.prop('selectionStart') !== value.length) {\n return;\n }\n if (/\\d\\s\\/\\s$/.test(value)) {\n e.preventDefault();\n return setTimeout(function() {\n return $target.val(value.replace(/\\d\\s\\/\\s$/, ''));\n });\n }\n };\n\n reFormatCVC = function(e) {\n var $target;\n $target = $(e.currentTarget);\n return setTimeout(function() {\n var value;\n value = $target.val();\n value = replaceFullWidthChars(value);\n value = value.replace(/\\D/g, '').slice(0, 4);\n return safeVal(value, $target);\n });\n };\n\n restrictNumeric = function(e) {\n var input;\n if (e.metaKey || e.ctrlKey) {\n return true;\n }\n if (e.which === 32) {\n return false;\n }\n if (e.which === 0) {\n return true;\n }\n if (e.which < 33) {\n return true;\n }\n input = String.fromCharCode(e.which);\n return !!/[\\d\\s]/.test(input);\n };\n\n restrictCardNumber = function(e) {\n var $target, card, digit, value;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n value = ($target.val() + digit).replace(/\\D/g, '');\n card = cardFromNumber(value);\n if (card) {\n return value.length <= card.length[card.length.length - 1];\n } else {\n return value.length <= 16;\n }\n };\n\n restrictExpiry = function(e) {\n var $target, digit, value;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n value = $target.val() + digit;\n value = value.replace(/\\D/g, '');\n if (value.length > 6) {\n return false;\n }\n };\n\n restrictCVC = function(e) {\n var $target, digit, val;\n $target = $(e.currentTarget);\n digit = String.fromCharCode(e.which);\n if (!/^\\d+$/.test(digit)) {\n return;\n }\n if (hasTextSelected($target)) {\n return;\n }\n val = $target.val() + digit;\n return val.length <= 4;\n };\n\n setCardType = function(e) {\n var $target, allTypes, card, cardType, val;\n $target = $(e.currentTarget);\n val = $target.val();\n cardType = $.payment.cardType(val) || 'unknown';\n if (!$target.hasClass(cardType)) {\n allTypes = (function() {\n var _i, _len, _results;\n _results = [];\n for (_i = 0, _len = cards.length; _i < _len; _i++) {\n card = cards[_i];\n _results.push(card.type);\n }\n return _results;\n })();\n $target.removeClass('unknown');\n $target.removeClass(allTypes.join(' '));\n $target.addClass(cardType);\n $target.toggleClass('identified', cardType !== 'unknown');\n return $target.trigger('payment.cardType', cardType);\n }\n };\n\n $.payment.fn.formatCardCVC = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictCVC);\n this.on('paste', reFormatCVC);\n this.on('change', reFormatCVC);\n this.on('input', reFormatCVC);\n return this;\n };\n\n $.payment.fn.formatCardExpiry = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictExpiry);\n this.on('keypress', formatExpiry);\n this.on('keypress', formatForwardSlashAndSpace);\n this.on('keypress', formatForwardExpiry);\n this.on('keydown', formatBackExpiry);\n this.on('change', reFormatExpiry);\n this.on('input', reFormatExpiry);\n return this;\n };\n\n $.payment.fn.formatCardNumber = function() {\n this.on('keypress', restrictNumeric);\n this.on('keypress', restrictCardNumber);\n this.on('keypress', formatCardNumber);\n this.on('keydown', formatBackCardNumber);\n this.on('keyup', setCardType);\n this.on('paste', reFormatCardNumber);\n this.on('change', reFormatCardNumber);\n this.on('input', reFormatCardNumber);\n this.on('input', setCardType);\n return this;\n };\n\n $.payment.fn.restrictNumeric = function() {\n this.on('keypress', restrictNumeric);\n this.on('paste', reFormatNumeric);\n this.on('change', reFormatNumeric);\n this.on('input', reFormatNumeric);\n return this;\n };\n\n $.payment.fn.cardExpiryVal = function() {\n return $.payment.cardExpiryVal($(this).val());\n };\n\n $.payment.cardExpiryVal = function(value) {\n var month, prefix, year, _ref;\n _ref = value.split(/[\\s\\/]+/, 2), month = _ref[0], year = _ref[1];\n if ((year != null ? year.length : void 0) === 2 && /^\\d+$/.test(year)) {\n prefix = (new Date).getFullYear();\n prefix = prefix.toString().slice(0, 2);\n year = prefix + year;\n }\n month = parseInt(month, 10);\n year = parseInt(year, 10);\n return {\n month: month,\n year: year\n };\n };\n\n $.payment.validateCardNumber = function(num) {\n var card, _ref;\n num = (num + '').replace(/\\s+|-/g, '');\n if (!/^\\d+$/.test(num)) {\n return false;\n }\n card = cardFromNumber(num);\n if (!card) {\n return false;\n }\n return (_ref = num.length, __indexOf.call(card.length, _ref) >= 0) && (card.luhn === false || luhnCheck(num));\n };\n\n $.payment.validateCardExpiry = function(month, year) {\n var currentTime, expiry, _ref;\n if (typeof month === 'object' && 'month' in month) {\n _ref = month, month = _ref.month, year = _ref.year;\n }\n if (!(month && year)) {\n return false;\n }\n month = $.trim(month);\n year = $.trim(year);\n if (!/^\\d+$/.test(month)) {\n return false;\n }\n if (!/^\\d+$/.test(year)) {\n return false;\n }\n if (!((1 <= month && month <= 12))) {\n return false;\n }\n if (year.length === 2) {\n if (year < 70) {\n year = \"20\" + year;\n } else {\n year = \"19\" + year;\n }\n }\n if (year.length !== 4) {\n return false;\n }\n expiry = new Date(year, month);\n currentTime = new Date;\n expiry.setMonth(expiry.getMonth() - 1);\n expiry.setMonth(expiry.getMonth() + 1, 1);\n return expiry > currentTime;\n };\n\n $.payment.validateCardCVC = function(cvc, type) {\n var card, _ref;\n cvc = $.trim(cvc);\n if (!/^\\d+$/.test(cvc)) {\n return false;\n }\n card = cardFromType(type);\n if (card != null) {\n return _ref = cvc.length, __indexOf.call(card.cvcLength, _ref) >= 0;\n } else {\n return cvc.length >= 3 && cvc.length <= 4;\n }\n };\n\n $.payment.cardType = function(num) {\n var _ref;\n if (!num) {\n return null;\n }\n return ((_ref = cardFromNumber(num)) != null ? _ref.type : void 0) || null;\n };\n\n $.payment.formatCardNumber = function(num) {\n var card, groups, upperLength, _ref;\n num = num.replace(/\\D/g, '');\n card = cardFromNumber(num);\n if (!card) {\n return num;\n }\n upperLength = card.length[card.length.length - 1];\n num = num.slice(0, upperLength);\n if (card.format.global) {\n return (_ref = num.match(card.format)) != null ? _ref.join(' ') : void 0;\n } else {\n groups = card.format.exec(num);\n if (groups == null) {\n return;\n }\n groups.shift();\n groups = $.grep(groups, function(n) {\n return n;\n });\n return groups.join(' ');\n }\n };\n\n $.payment.formatExpiry = function(expiry) {\n var mon, parts, sep, year;\n parts = expiry.match(/^\\D*(\\d{1,2})(\\D+)?(\\d{1,4})?/);\n if (!parts) {\n return '';\n }\n mon = parts[1] || '';\n sep = parts[2] || '';\n year = parts[3] || '';\n if (year.length > 0) {\n sep = ' / ';\n } else if (sep === ' /') {\n mon = mon.substring(0, 1);\n sep = '';\n } else if (mon.length === 2 || sep.length > 0) {\n sep = ' / ';\n } else if (mon.length === 1 && (mon !== '0' && mon !== '1')) {\n mon = \"0\" + mon;\n sep = ' / ';\n }\n return mon + sep + year;\n };\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/jquery.payment/lib/jquery.payment.js\n// module id = 39\n// module chunks = 2","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 = 40\n// module chunks = 2","/*!\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 = 41\n// module chunks = 2","// Underscore.js 1.8.3\n// http://underscorejs.org\n// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.8.3';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value)) return _.matcher(value);\n return _.property(value);\n };\n _.iteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var property = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = property('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n function createReduce(dir) {\n // Optimized iterator function as using arguments.length\n // in the main function will deoptimize the, see #1991.\n function iterator(obj, iteratee, memo, keys, index, length) {\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n }\n\n return function(obj, iteratee, memo, context) {\n iteratee = optimizeCb(iteratee, context, 4);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n // Determine the initial value if none is provided.\n if (arguments.length < 3) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n return iterator(obj, iteratee, memo, keys, index, length);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var key;\n if (isArrayLike(obj)) {\n key = _.findIndex(obj, predicate, context);\n } else {\n key = _.findKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n var func = isFunc ? method : value[method];\n return func == null ? func : func.apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index, list) {\n computed = iteratee(value, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = value;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection, using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var set = isArrayLike(obj) ? obj : _.values(obj);\n var length = set.length;\n var shuffled = Array(length);\n for (var index = 0, rand; index < length; index++) {\n rand = _.random(0, index);\n if (rand !== index) shuffled[index] = shuffled[rand];\n shuffled[rand] = set[index];\n }\n return shuffled;\n };\n\n // Sample **n** random values from a collection.\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iteratee(value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, iteratee, context) {\n var result = {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (_.has(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var pass = [], fail = [];\n _.each(obj, function(value, key, obj) {\n (predicate(value, key, obj) ? pass : fail).push(value);\n });\n return [pass, fail];\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, startIndex) {\n var output = [], idx = 0;\n for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n //flatten current level of array or arguments object\n if (!shallow) value = flatten(value, shallow, strict);\n var j = 0, len = value.length;\n output.length += len;\n while (j < len) {\n output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(flatten(arguments, true, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n for (var j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = flatten(arguments, true, true, 1);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n return _.unzip(arguments);\n };\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a predicate test\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n step = step || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var args = slice.call(arguments, 2);\n var bound = function() {\n return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n };\n return bound;\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder, allowing any combination of arguments to be pre-filled.\n _.partial = function(func) {\n var boundArgs = slice.call(arguments, 1);\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n };\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = function(obj) {\n var i, length = arguments.length, key;\n if (length <= 1) throw new Error('bindAll must be passed function names');\n for (i = 1; i < length; i++) {\n key = arguments[i];\n obj[key] = _.bind(obj[key], obj);\n }\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){\n return func.apply(null, args);\n }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n if (!options) options = {};\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n return function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n\n var later = function() {\n var last = _.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n }\n }\n };\n\n return function() {\n context = this;\n args = arguments;\n timestamp = _.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n function collectNonEnumProps(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object\n // In contrast to _.map it returns an object\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {},\n currentKey;\n for (var index = 0; index < length; index++) {\n currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(object, oiteratee, context) {\n var result = {}, obj = object, iteratee, keys;\n if (obj == null) return result;\n if (_.isFunction(oiteratee)) {\n keys = _.allKeys(obj);\n iteratee = optimizeCb(oiteratee, context);\n } else {\n keys = flatten(arguments, false, false, 1);\n iteratee = function(value, key, obj) { return key in obj; };\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj, iteratee, context) {\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n } else {\n var keys = _.map(flatten(arguments, false, false, 1), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n };\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return _.has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), and in Safari 8 (#1929).\n if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj !== +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n _.property = property;\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n return obj == null ? function(){} : function(key) {\n return obj[key];\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property, fallback) {\n var value = object == null ? void 0 : object[property];\n if (value === void 0) {\n value = fallback;\n }\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escaper, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offest.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n try {\n var render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result(this, func.apply(_, args));\n };\n });\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return result(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return '' + this._wrapped;\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define === 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}.call(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/underscore/underscore.js\n// module id = 42\n// module chunks = 2","/*!\n * Give AJAX JS\n *\n * @description: The Give AJAX scripts\n * @package: Give\n * @subpackage: Assets/JS\n * @copyright: Copyright (c) 2016, WordImpress\n * @license: http://opensource.org/licenses/gpl-2.0.php GNU Public License\n */\n\nimport Give from './give-donations';\n\n/* global jQuery, Give */\n\njQuery( document ).ready( function( $ ) {\n\n\t//Hide loading elements\n\t$( '.give-loading-text' ).hide();\n\n\t// Update and invalidate cached nonce.\n\t$('.give-form').each(function (index, $form) {\n\t\t$form = jQuery($form);\n\n\t\tconst $nonceField = jQuery('input[name=\"give-form-hash\"]', $form),\n\t\t\tnonceTime = ( parseInt($nonceField.data('time')) + parseInt($nonceField.data('nonce-life') ) ) * 1000,\n\t\t\tcurrentTime = Date.now();\n\n\t\t// We need time in ms.\n\t\tlet timeDiff = nonceTime - currentTime;\n\n\t\ttimeDiff = 0 > timeDiff ? timeDiff : (timeDiff + 100);\n\t\t\n\t\t// Update nonce in background.\n\t\twindow.setTimeout(function () {\n\t\t\tGive.form.fn.resetNonce($form);\n\t\t}, timeDiff);\n\t});\n\n\t// Show the login form in the checkout when the user clicks the \"Login\" link\n\t$( document ).on( 'click', '.give-checkout-login', function( e ) {\n\t\tvar $this = $( this );\n\t\tvar this_form = $( this ).parents( 'form' );\n\t\tvar loading_animation = $( this_form ).find( '[id^=\"give-checkout-login-register\"] .give-loading-text' );\n\t\tvar data = {\n\t\t\taction: $this.data( 'action' ),\n\t\t\tform_id: $( this_form ).find( '[name=\"give-form-id\"]' ).val()\n\t\t};\n\n\t\t// Show the ajax loader\n\t\tloading_animation.show();\n\n\t\t$.post( give_global_vars.ajaxurl, data, function( checkout_response ) {\n\n\t\t\t//Clear form HTML and add AJAX response containing fields\n\t\t\t$( this_form ).find( '[id^=give-checkout-login-register]' ).html( checkout_response );\n\t\t\t$( this_form ).find( '.give-submit-button-wrap' ).hide();\n\n\t\t} ).done( function() {\n\t\t\t// Hide the ajax loader\n\t\t\tloading_animation.hide();\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t} );\n\t\treturn false;\n\t} );\n\n\t// Register/Login Cancel\n\t$( document ).on( 'click', '.give-checkout-register-cancel', function( e ) {\n\t\te.preventDefault();\n\t\t// User cancelled login.\n\t\tvar $this = $( this );\n\t\tvar this_form = $( this ).parents( 'form' );\n\t\tvar data = {\n\t\t\taction: $this.data( 'action' ),\n\t\t\tform_id: $( this_form ).find( '[name=\"give-form-id\"]' ).val()\n\t\t};\n\t\t// AJAX get the payment fields.\n\t\t$.post( give_global_vars.ajaxurl, data, function( checkout_response ) {\n\t\t\t//Show fields\n\t\t\t$( this_form ).find( '[id^=give-checkout-login-register]' ).html( $.parseJSON( checkout_response.fields ) );\n\t\t\t$( this_form ).find( '.give-submit-button-wrap' ).show();\n\t\t} ).done( function() {\n\t\t\t// Trigger float-labels\n\t\t\tgive_fl_trigger();\n\t\t} );\n\t} );\n\n\t// Process the login form via ajax when the user clicks \"login\"\n\t$( document ).on( 'click', '[id^=give-login-fields] input[type=submit]', function( e ) {\n\n\t\te.preventDefault();\n\n\t\tvar complete_purchase_val = $( this ).val();\n\t\tvar this_form = $( this ).parents( 'form' );\n\n\t\t$( this ).val( give_global_vars.purchase_loading );\n\n\t\tthis_form.find( '[id^=give-login-fields] .give-loading-animation' ).fadeIn();\n\n\t\tvar data = {\n\t\t\taction: 'give_process_donation_login',\n\t\t\tgive_ajax: 1,\n\t\t\tgive_user_login: this_form.find( '[name=give_user_login]' ).val(),\n\t\t\tgive_user_pass: this_form.find( '[name=give_user_pass]' ).val(),\n\t\t\tgive_form_id: this_form.find( '[name=give-form-id]' ).val()\n\t\t};\n\n\t\t$.post( give_global_vars.ajaxurl, data, function( response ) {\n\t\t\t//user is logged in\n\t\t\tif ( $.trim( typeof (response.success) ) != undefined && response.success == true && typeof (response.data) != undefined ) {\n\n\t\t\t\t//remove errors\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\n\t\t\t\t// Login successfully message.\n\t\t\t\tthis_form.find( '#give-payment-mode-select' ).after( response.data );\n\t\t\t\tthis_form.find( '.give_notices.give_errors' ).delay( 5000 ).slideUp();\n\n\t\t\t\t// Create and update nonce.\n\t\t\t\tGive.form.fn.resetNonce( this_form );\n\n\t\t\t\t//reload the selected gateway so it contains their logged in information\n\t\t\t\tgive_load_gateway( this_form, this_form.find( '.give-gateway-option-selected input' ).val() );\n\t\t\t} else {\n\t\t\t\t//Login failed, show errors\n\t\t\t\tthis_form.find( '[id^=give-login-fields] input[type=submit]' ).val( complete_purchase_val );\n\t\t\t\tthis_form.find( '.give-loading-animation' ).fadeOut();\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\t\t\t\tthis_form.find( '[id^=give-user-login-submit]' ).before( response.data );\n\t\t\t}\n\t\t} );\n\n\t} );\n\n\t//Switch the gateway on gateway selection field change\n\t$( 'select#give-gateway, input.give-gateway' ).on( 'change', function( e ) {\n\t\te.preventDefault();\n\n\t\t//Which payment gateway to load?\n\t\tvar payment_mode = $( this ).val();\n\n\t\t//Problema? Bounce\n\t\tif ( payment_mode == '0' ) {\n\t\t\tconsole.log( 'There was a problem loading the selected gateway' );\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_load_gateway( $( this ).parents( 'form' ), payment_mode );\n\n\t\treturn false;\n\n\t} );\n\n\t/**\n\t * Donation history non login user want to see email list after making a donation\n\t *\n\t * @since 1.8.17\n\t */\n\t$( 'body' ).on( 'click', '#give-confirm-email-btn', function( e ) {\n\n\t\tvar $this = $( this );\n\t\tvar data = {\n\t\t\taction: 'give_confirm_email_for_donations_access',\n\t\t\temail: $this.data( 'email' ),\n\t\t\tnonce: give_global_vars.ajaxNonce\n\t\t};\n\n\t\t$this.text( give_global_vars.loading );\n\t\t$this.attr( 'disabled', 'disabled' );\n\n\t\t$.post( give_global_vars.ajaxurl, data, function( response ) {\n\t\t\tresponse = JSON.parse( response );\n\t\t\tif ( 'error' === response.status ) {\n\t\t\t\t$this.closest( '#give_user_history tfoot' ).hide();\n\t\t\t\t$this.closest( '.give_user_history_main' ).find( '.give_user_history_notice' ).html( response.message );\n\t\t\t} else if ( 'success' === response.status ) {\n\t\t\t\t$this.closest( '.give_user_history_main' ).find( '.give_user_history_notice' ).html( response.message );\n\t\t\t\t$this.hide();\n\t\t\t\t$this.closest( '.give-security-button-wrap' ).find( 'span' ).show();\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t} );\n\n\t/**\n\t * Donation Form AJAX Submission\n\t *\n\t * @description: Process the donation submit\n\t */\n\t$( 'body' ).on( 'click touchend', 'form.give-form input[name=\"give-purchase\"].give-submit', function( e ) {\n\n\t\t//this form object\n\t\tvar this_form = $( this ).parents( 'form.give-form' );\n\n\t\t//loading animation\n\t\tvar loading_animation = this_form.find( 'input[type=\"submit\"].give-submit + .give-loading-animation' );\n\t\tloading_animation.fadeIn();\n\n\t\t//this form selector\n\t\tvar give_purchase_form = this_form.get( 0 );\n\n\t\t//HTML5 required check validity\n\t\tif ( typeof give_purchase_form.checkValidity === 'function' && give_purchase_form.checkValidity() === false ) {\n\n\t\t\t//Don't leave any hanging loading animations\n\t\t\tloading_animation.fadeOut();\n\n\t\t\t//Check for Safari (doesn't support HTML5 required)\n\t\t\tif ( (navigator.userAgent.indexOf( 'Safari' ) != - 1 && navigator.userAgent.indexOf( 'Chrome' ) == - 1) === false ) {\n\t\t\t\t//Not safari: Support HTML5 \"required\" so skip the rest of this function\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t}\n\n\t\t//prevent form from submitting normally\n\t\te.preventDefault();\n\n\t\t//Submit btn text\n\t\tvar complete_purchase_val = $( this ).val();\n\n\t\t//Update submit button text\n\t\t$( this ).val( give_global_vars.purchase_loading );\n\n\t\t// Disable the form donation button.\n\t\tGive.form.fn.disable( this_form, true );\n\n\t\t//Submit form via AJAX\n\t\t$.post( give_global_vars.ajaxurl, this_form.serialize() + '&action=give_process_donation&give_ajax=true', function( data ) {\n\n\t\t\tif ( $.trim( data ) == 'success' ) {\n\t\t\t\t//Remove any errors\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\t\t\t\t//Submit form for normal processing\n\t\t\t\t$( give_purchase_form ).submit();\n\n\t\t\t\tthis_form.trigger( 'give_form_validation_passed' );\n\t\t\t} else {\n\t\t\t\t//There was an error / remove old errors and prepend new ones\n\t\t\t\tthis_form.find( 'input[type=\"submit\"].give-submit' ).val( complete_purchase_val );\n\t\t\t\tloading_animation.fadeOut();\n\t\t\t\tthis_form.find( '.give_errors' ).remove();\n\t\t\t\tthis_form.find( '#give_purchase_submit input[type=\"submit\"].give-submit' ).before( data );\n\n\t\t\t\t// Enable the form donation button.\n\t\t\t\tGive.form.fn.disable( this_form, false );\n\t\t\t}\n\t\t} );\n\n\t} );\n\n} );\n\n/**\n * Load the Payment Gateways\n *\n * @description: AJAX load appropriate gateway fields\n * @param form_object Obj The specific form to load a gateway for\n * @param payment_mode\n */\nfunction give_load_gateway( form_object, payment_mode ) {\n\n\tvar loading_element = jQuery( form_object ).find( '#give-payment-mode-select .give-loading-text' );\n\tvar give_total = jQuery( form_object ).find( '#give-amount' ).val();\n\tvar give_form_id = jQuery( form_object ).find( 'input[name=\"give-form-id\"]' ).val();\n\tvar give_form_id_prefix = jQuery( form_object ).find( 'input[name=\"give-form-id-prefix\"]' ).val();\n\n\t// Show the ajax loader\n\tloading_element.fadeIn();\n\n\tvar form_data = jQuery( form_object ).data();\n\n\tif ( form_data[ 'blockUI.isBlocked' ] != 1 ) {\n\t\tjQuery( form_object ).find( '#give_purchase_form_wrap' ).block( {\n\t\t\tmessage: null,\n\t\t\toverlayCSS: {\n\t\t\t\tbackground: '#fff',\n\t\t\t\topacity: 0.6\n\t\t\t}\n\t\t} );\n\t}\n\n\t//Post via AJAX to Give\n\tjQuery.post( give_global_vars.ajaxurl + '?payment-mode=' + payment_mode, {\n\t\t\taction: 'give_load_gateway',\n\t\t\tgive_total: give_total,\n\t\t\tgive_form_id: give_form_id,\n\t\t\tgive_form_id_prefix: give_form_id_prefix,\n\t\t\tgive_payment_mode: payment_mode\n\t\t},\n\t\tfunction( response ) {\n\t\t\t//Success: let's output the gateway fields in the appropriate form space\n\t\t\tjQuery( form_object ).unblock();\n\t\t\tjQuery( form_object ).find( '#give_purchase_form_wrap' ).html( response );\n\t\t\tjQuery( '.give-no-js' ).hide();\n\t\t\tjQuery( form_object ).find( '#give-payment-mode-select .give-loading-text' ).fadeOut();\n\n\t\t\t// trigger an event on success for hooks\n\t\t\tjQuery( document ).trigger( 'give_gateway_loaded', [ response, jQuery( form_object ).attr( 'id' ) ] );\n\t\t}\n\t);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give-ajax.js","import FloatLabels from 'float-labels.js';\n\njQuery( function( $ ) {\n\n\tvar doc = $( document );\n\n\t// Trigger float-labels\n\tgive_fl_trigger();\n\n\t// Set custom validation message.\n\tgive_change_html5_form_field_validation_message();\n\n\t// Donation grid shortcode popup.\n\t$( '.js-give-grid-modal-launcher' ).magnificPopup( {\n\t\ttype: 'inline',\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tcloseBtnInside: true,\n\t\tmidClick: true,\n\t\tremovalDelay: 300,\n\t\tmainClass: 'modal-fade-slide',\n\t});\n\n\t// Disable button if it have give-disabled class init.\n\tdoc.on( 'click touchend', '.give-disabled', function ( e ) {\n\t\te.preventDefault();\n\t\treturn false;\n\t} );\n\n\tdoc.on( 'give_gateway_loaded', function( ev, response, form_id ) {\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t} );\n\n\tdoc.on( 'give_checkout_billing_address_updated', function( ev, response, form_id ) {\n\t\tif ( ! $( 'form#' + form_id ).hasClass( 'float-labels-enabled' ) ) return;\n\t\t// Trigger float-labels\n\t\tgive_fl_trigger();\n\t} );\n\n\t// Reveal Btn which displays the checkout content\n\tdoc.on( 'click', '.give-btn-reveal', function( e ) {\n\t\te.preventDefault();\n\t\tvar this_button = $( this );\n\t\tvar this_form = $( this ).parents( 'form' );\n\t\tvar payment_field_id = '#give-payment-mode-select',\n\t\t\t$payment_field = $( payment_field_id ),\n\t\t\tshow_field_ids = '';\n\t\tthis_button.hide();\n\n\t\t// Show payment field if active payment gateway count greater then one.\n\t\tif ( $( 'li', $payment_field ).length > 1 ) {\n\t\t\tshow_field_ids = payment_field_id + ', ';\n\t\t}\n\n\t\tthis_form.find( show_field_ids + '#give_purchase_form_wrap' ).slideDown();\n\t\treturn false;\n\t} );\n\n\t// Modal with Magnific\n\tdoc.on( 'click', '.give-btn-modal', function( e ) {\n\t\te.preventDefault();\n\t\tvar this_form_wrap = $( this ).parents( 'div.give-form-wrap' );\n\t\tvar this_form = this_form_wrap.find( 'form.give-form' );\n\t\tvar this_amount_field = this_form.find( '#give-amount' );\n\t\tvar this_amount = this_amount_field.val();\n\n\t\t//Check to ensure our amount is greater than 0\n\t\t//Does this number have a value\n\t\tif ( ! this_amount || this_amount <= 0 ) {\n\t\t\tthis_amount_field.focus();\n\t\t\treturn false;\n\t\t}\n\n\t\tgive_open_form_modal( this_form_wrap, this_form );\n\n\t} );\n\n\t// Auto hide frontend notices.\n\tvar give_notices = jQuery( '.give_notice[data-dismiss-type=\"auto\"]' );\n\tif ( give_notices.length ) {\n\t\tgive_notices.each( function( index, $notice ) {\n\t\t\t$notice = $( $notice );\n\n\t\t\t// auto hide setting message in 5 seconds.\n\t\t\twindow.setTimeout(\n\t\t\t\tfunction() {\n\t\t\t\t\t$notice.slideUp();\n\t\t\t\t},\n\t\t\t\t$notice.data( 'dismiss-interval' )\n\t\t\t);\n\t\t} );\n\t}\n\n\t// Button to close notices on front-end.\n\t$('body').on( 'click', '.give-notice-close', function() {\n\t\t$(this).hide();\n\t\tconst notice_container = $(this).closest( '.give_notices' );\n\t\tnotice_container.slideUp();\n\t});\n\n\tdoc.on( 'change', '#give_profile_billing_address_wrap #give_address_country', update_profile_state_field );\n\n\t// Reset Form Fields on clicking back button of browser.\n\t// @see https://developer.mozilla.org/en-US/Firefox/Releases/1.5/Using_Firefox_1.5_caching\n\t// @see https://webkit.org/blog/427/webkit-page-cache-i-the-basics/\n\twindow.addEventListener( 'pageshow', function( event ) {\n\t\tvar historyTraversal = event.persisted || ( typeof 'undefined' !== window.performance && 2 === window.performance.navigation.type );\n\n\t\tif ( historyTraversal ) {\n\t\t\tlet form = $( 'body' ).find( 'form.give-form' )[0];\n\n\t\t\tif ( undefined !== form ) {\n\t\t\t\tform.reset();\n\t\t\t}\n\t\t}\n\t});\n});\n\n/**\n * Open form modal\n *\n * @param {object} $form_wrap\n * @param {object} $form\n */\nwindow.give_open_form_modal = function ( $form_wrap, $form ) {\n\t// Hide form children.\n\tvar children = '#give_purchase_form_wrap, #give-payment-mode-select, .mfp-close, .give-hidden';\n\n\t//Alls well, open popup!\n\tjQuery.magnificPopup.open( {\n\t\tmainClass: give_global_vars.magnific_options.main_class,\n\t\tcloseOnBgClick: give_global_vars.magnific_options.close_on_bg_click,\n\t\tfixedContentPos: true,\n\t\tfixedBgPos: true,\n\t\tremovalDelay: 250, //delay removal by X to allow out-animation\n\t\titems: {\n\t\t\tsrc: $form,\n\t\t\ttype: 'inline'\n\t\t},\n\t\tcallbacks: {\n\t\t\tbeforeOpen: function() {\n\n\t\t\t\tjQuery( 'body' ).addClass( 'give-modal-open' );\n\n\t\t\t\t// add title, content, goal and error to form if admin want to show button only\n\t\t\t\tif ( $form_wrap.hasClass( 'give-display-button-only' ) && ! $form.data( 'content' ) ) {\n\n\t\t\t\t\tvar $form_content = jQuery( '.give-form-content-wrap', $form_wrap ),\n\t\t\t\t\t\t$form_title = jQuery( '.give-form-title', $form_wrap ),\n\t\t\t\t\t\t$form_goal = jQuery( '.give-goal-progress', $form_wrap ),\n\t\t\t\t\t\t$form_error = jQuery( '>.give_error', $form_wrap ),\n\t\t\t\t\t\t$form_errors = jQuery( '.give_errors', $form_wrap );\n\n\t\t\t\t\t// Add content container to form.\n\t\t\t\t\tif ( $form_content.length && ! jQuery( '.give-form-content-wrap', $form ).length ) {\n\t\t\t\t\t\tif ( $form_content.hasClass( 'give_post_form-content' ) ) {\n\t\t\t\t\t\t\t$form.append( $form_content );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$form.prepend( $form_content );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add errors container to form.\n\t\t\t\t\tif ( $form_errors.length && ! jQuery( '.give_errors', $form ).length ) {\n\t\t\t\t\t\t$form_errors.each( function( index, $error ) {\n\t\t\t\t\t\t\t$form.prepend( jQuery( $error ) );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add error container to form.\n\t\t\t\t\tif ( $form_error.length && ! jQuery( '>.give_error', $form ).length ) {\n\t\t\t\t\t\t$form_error.each( function( index, $error ) {\n\t\t\t\t\t\t\t$form.prepend( jQuery( $error ) );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add goal container to form.\n\t\t\t\t\tif ( $form_goal.length && ! jQuery( '.give-goal-progress', $form ).length ) {\n\t\t\t\t\t\t$form.prepend( $form_goal );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add title container to form.\n\t\t\t\t\tif ( $form_title.length && ! jQuery( '.give-form-title', $form ).length ) {\n\t\t\t\t\t\t$form.prepend( $form_title );\n\t\t\t\t\t}\n\n\t\t\t\t\t$form.data( 'content', 'loaded' );\n\t\t\t\t}\n\t\t\t},\n\t\t\topen: function() {\n\n\t\t\t\t// Will fire when this exact popup is opened\n\t\t\t\t// this - is Magnific Popup object\n\t\t\t\tvar $mfp_content = jQuery( '.mfp-content' );\n\t\t\t\tif ( $mfp_content.outerWidth() >= 500 ) {\n\t\t\t\t\t$mfp_content.addClass( 'give-responsive-mfp-content' );\n\t\t\t\t}\n\n\t\t\t\t// Hide .give-hidden and .give-btn-modal if admin only want to show only button.\n\t\t\t\tif ( $form_wrap.hasClass( 'give-display-button-only' ) ) {\n\t\t\t\t\tchildren = $form.children().not( '.give-btn-modal' );\n\t\t\t\t}\n\n\t\t\t\t//Hide all form elements besides the ones required for payment\n\t\t\t\t$form.children().not( children ).hide();\n\t\t\t},\n\t\t\tclose: function() {\n\t\t\t\t//Remove popup class\n\t\t\t\t$form.removeClass( 'mfp-hide' );\n\n\t\t\t\tjQuery( 'body' ).removeClass( 'give-modal-open' );\n\n\t\t\t\t//Show all fields again\n\t\t\t\t$form.children().not( children ).show();\n\t\t\t}\n\t\t}\n\t} );\n};\n\n/**\n * Floating Labels Custom Events\n */\nwindow.give_fl_trigger = function() {\n\twindow.give_float_labels = 'undefined' === typeof window.give_float_labels ? {} : window.give_float_labels;\n\n\tif ( window.give_float_labels instanceof FloatLabels ) {\n\t\twindow.give_float_labels.rebuild();\n\t}\n\telse {\n\t\twindow.give_float_labels = new FloatLabels( '.float-labels-enabled', {\n\t\t\texclude: '#give-amount, .give-select-level, [multiple]',\n\t\t\tprioritize: 'placeholder',\n\t\t\tprefix: 'give-fl-',\n\t\t\tstyle: 'give',\n\t\t} );\n\t}\n};\n\n/**\n * Change localize html5 form validation message\n */\nwindow.give_change_html5_form_field_validation_message = function() {\n\tvar $forms = jQuery( '.give-form' ),\n\t\t$input_fields;\n\n\t// Bailout if no any donation from exist.\n\tif ( ! $forms.length ) {\n\t\treturn;\n\t}\n\n\tjQuery.each( $forms, function( index, $form ) {\n\t\t// Get form input fields.\n\t\t$input_fields = jQuery( 'input', $form );\n\n\t\t// Bailout.\n\t\tif ( ! $input_fields.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tjQuery.each( $input_fields, function( index, item ) {\n\t\t\titem = jQuery( item ).get( 0 );\n\n\t\t\t// Set custom message only if translation exit in give global object.\n\t\t\tif ( give_global_vars.form_translation.hasOwnProperty( item.name ) ) {\n\t\t\t\titem.oninvalid = function( e ) {\n\t\t\t\t\te.target.setCustomValidity( '' );\n\t\t\t\t\tif ( ! e.target.validity.valid ) {\n\t\t\t\t\t\te.target.setCustomValidity( give_global_vars.form_translation[ item.name ] );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\t} );\n};\n\n/**\n * Update state/province fields per country selection\n *\n * @since 1.8.14\n */\nwindow.update_profile_state_field = function() {\n\tvar $this = jQuery( this ),\n\t\t$form = $this.parents( 'form' );\n\tif ( 'give_address_country' === $this.attr( 'id' ) ) {\n\n\t\t//Disable the State field until updated\n\t\t$form.find( '#give_address_state' ).empty().append( '' ).prop( 'disabled', true );\n\n\t\t// If the country field has changed, we need to update the state/province field\n\t\tvar postData = {\n\t\t\taction: 'give_get_states',\n\t\t\tcountry: $this.val(),\n\t\t\tfield_name: 'give_address_state'\n\t\t};\n\n\t\tjQuery.ajax( {\n\t\t\ttype: 'POST',\n\t\t\tdata: postData,\n\t\t\turl: give_global_vars.ajaxurl,\n\t\t\txhrFields: {\n\t\t\t\twithCredentials: true\n\t\t\t},\n\t\t\tsuccess: function( response ) {\n\t\t\t\tvar html = '';\n\t\t\t\tvar states_label = response.states_label;\n\t\t\t\tif ( typeof (response.states_found) != undefined && true == response.states_found ) {\n\t\t\t\t\thtml = response.data;\n\t\t\t\t} else {\n\t\t\t\t\thtml = '';\n\t\t\t\t}\n\t\t\t\t$form.find( 'input[name=\"give_address_state\"], select[name=\"give_address_state\"]' ).replaceWith( html );\n\n\t\t\t\t// Check if user want to show the feilds or not.\n\t\t\t\tif ( typeof (response.show_field) != undefined && true == response.show_field ) {\n\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).removeClass( 'give-hidden' );\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-last' );\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-wide' );\n\t\t\t\t} else {\n\t\t\t\t\t$form.find( 'p#give-card-state-wrap' ).addClass( 'give-hidden' );\n\n\t\t\t\t\t// Add support to zip fields.\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).addClass( 'form-row-wide' );\n\t\t\t\t\t$form.find( 'p#give-card-zip-wrap' ).removeClass( 'form-row-last' );\n\t\t\t\t}\n\t\t\t}\n\t\t} ).fail( function( data ) {\n\t\t\tif ( window.console && window.console.log ) {\n\t\t\t\tconsole.log( data );\n\t\t\t}\n\t\t} );\n\t}\n\treturn false;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/frontend/give-misc.js","/*!\n * Float Labels\n * @version: 3.3.4\n * @author: Paul Ryley (http://geminilabs.io)\n * @url: https://geminilabs.github.io/float-labels.js\n * @license: MIT\n */\n\n/** global: define, navigator, NodeList, Option */\n\n;(function( window, document, undefined )\n{\n\t\"use strict\";\n\n\tvar Plugin = function( el, options )\n\t{\n\t\tthis.el = this.isString( el ) ? document.querySelectorAll( el ) : [el];\n\t\tthis.config = [];\n\t\tthis.options = options;\n\t\tthis.selectors = [];\n\t\tthis.init();\n\t\tthis.destroy = function() {\n\t\t\tthis.loop( function( el ) {\n\t\t\t\tel.removeEventListener( 'reset', this.events.reset );\n\t\t\t\tthis.removeClasses( el );\n\t\t\t}, function( field ) {\n\t\t\t\tthis.reset( field );\n\t\t\t});\n\t\t};\n\t\tthis.rebuild = function() {\n\t\t\tthis.loop( null, function( field ) {\n\t\t\t\tthis.floatLabel( field, true );\n\t\t\t});\n\t\t};\n\t};\n\n\tPlugin.prototype = {\n\n\t\tdefaults: {\n\t\t\tcustomEvent: null,\n\t\t\tcustomLabel: null,\n\t\t\tcustomPlaceholder: null,\n\t\t\texclude: '.no-label',\n\t\t\tinputRegex: /email|number|password|search|tel|text|url/,\n\t\t\tprefix: 'fl-',\n\t\t\tprioritize: 'label', // label|placeholder\n\t\t\trequiredClass: 'required',\n\t\t\tstyle: 0, // 0|1|2\n\t\t\ttransform: 'input,select,textarea'\n\t\t},\n\n\t\t/** @return void */\n\t\tinit: function() {\n\t\t\tthis.initEvents();\n\t\t\tthis.loop( function( el, i ) {\n\t\t\t\tvar style = this.config[i].style;\n\t\t\t\tel.addEventListener( 'reset', this.events.reset );\n\t\t\t\tel.classList.add( this.prefixed( 'form' ));\n\t\t\t\tif( style ) {\n\t\t\t\t\tel.classList.add( this.prefixed( 'style-' + style ));\n\t\t\t\t}\n\t\t\t}, function( field ) {\n\t\t\t\tthis.floatLabel( field );\n\t\t\t});\n\t\t},\n\n\t\t/** @return void */\n\t\tinitEvents: function() {\n\t\t\tthis.events = {\n\t\t\t\tblur: this.onBlur.bind( this ),\n\t\t\t\tchange: this.onInput.bind( this ),\n\t\t\t\tfocus: this.onFocus.bind( this ),\n\t\t\t\tinput: this.onInput.bind( this ),\n\t\t\t\treset: this.onReset.bind( this ),\n\t\t\t};\n\t\t},\n\n\t\t/** @return string */\n\t\taddRemove: function( bool ) {\n\t\t\treturn bool ? 'add' : 'remove';\n\t\t},\n\n\t\t/** @return null|void */\n\t\tbuild: function( el ) {\n\t\t\tvar labelEl = this.getLabel( el );\n\t\t\tif( !labelEl )return;\n\t\t\tel.classList.add( this.prefixed( el.tagName.toLowerCase() ));\n\t\t\tthis.setLabel( labelEl, el );\n\t\t\tthis.setPlaceholder( labelEl, el );\n\t\t\tthis.wrapLabel( labelEl, el );\n\t\t\tthis.handleEvents( el, 'add' );\n\t\t\tif( typeof this.config[this.current].customEvent === 'function' ) {\n\t\t\t\tthis.config[this.current].customEvent.call( this, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return Element */\n\t\tcreateEl: function( tag, attributes ) {\n\t\t\tvar el = ( typeof tag === 'string' ) ? document.createElement( tag ) : tag;\n\t\t\tattributes = attributes || {};\n\t\t\tfor( var key in attributes ) {\n\t\t\t\tif( !attributes.hasOwnProperty( key ))continue;\n\t\t\t\tel.setAttribute( key, attributes[key] );\n\t\t\t}\n\t\t\treturn el;\n\t\t},\n\n\t\t/** @return object */\n\t\textend: function() {\n\t\t\tvar args = [].slice.call( arguments );\n\t\t\tvar result = args[0];\n\t\t\tvar extenders = args.slice(1);\n\t\t\tObject.keys( extenders ).forEach( function( i ) {\n\t\t\t\tfor( var key in extenders[i] ) {\n\t\t\t\t\tif( !extenders[i].hasOwnProperty( key ))continue;\n\t\t\t\t\tresult[key] = extenders[i][key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\n\t\t/** @return null|void */\n\t\tfloatLabel: function( el, rebuild ) {\n\t\t\tif( !this.isValidField( el ))return;\n\t\t\tif( this.hasParent( el )) {\n\t\t\t\tif( rebuild !== true )return;\n\t\t\t\tthis.reset( el );\n\t\t\t}\n\t\t\tthis.build( el );\n\t\t},\n\n\t\t/** @return string|false */\n\t\tgetLabel: function( el ) {\n\t\t\tvar label = 'label[for=\"' + el.getAttribute( 'id' ) + '\"]';\n\t\t\tvar labelEl = this.el[this.current].querySelectorAll( label );\n\t\t\t// check for multiple labels with identical 'for' attributes\n\t\t\tif( labelEl.length > 1 ) {\n\t\t\t\tlabelEl = el.parentNode.querySelectorAll( label );\n\t\t\t}\n\t\t\tif( labelEl.length === 1 ) {\n\t\t\t\treturn labelEl[0];\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/** @return string */\n\t\tgetLabelText: function( labelEl, el ) {\n\t\t\tvar labelText = labelEl.textContent.replace( /[*:]/g, '' ).trim();\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( !labelText || ( labelText && placeholderText && this.config[this.current].prioritize === 'placeholder' )) {\n\t\t\t\tlabelText = placeholderText;\n\t\t\t}\n\t\t\treturn labelText;\n\t\t},\n\n\t\t/** @return void */\n\t\thandleEvents: function( el, action ) {\n\t\t\tvar events = this.events;\n\t\t\tvar isMicrosoftSelectEl = el.nodeName === 'SELECT' && this.isMSBrowser();\n\t\t\t['blur','input','focus'].forEach( function( event ) {\n\t\t\t\tif( event === 'input' && ( el.type === 'file' || isMicrosoftSelectEl )) {\n\t\t\t\t\tevent = 'change';\n\t\t\t\t}\n\t\t\t\tel[ action + 'EventListener']( event, events[event] );\n\t\t\t});\n\t\t},\n\n\t\t/** @return bool */\n\t\thasParent: function( el ) {\n\t\t\treturn el.parentNode.classList.contains( this.prefixed( 'wrap' ));\n\t\t},\n\n\t\t/** @return bool */\n\t\tisMSBrowser: function() {\n\t\t\treturn !!navigator.userAgent.match(/Edge|MSIE|Trident/g);\n\t\t},\n\n\t\t/** @return bool */\n\t\tisString: function( str ) {\n\t\t\treturn Object.prototype.toString.call( str ) === \"[object String]\";\n\t\t},\n\n\t\t/** @return bool */\n\t\tisValidField: function( el ) {\n\t\t\tvar isInvalidInput = el.tagName === 'INPUT' && !this.config[this.current].inputRegex.test( el.getAttribute( 'type' ));\n\t\t\tvar isInvalidSelect = el.tagName === 'SELECT' && el.getAttribute( 'multiple' ) !== null;\n\t\t\treturn el.getAttribute( 'id' ) && !isInvalidInput && !isInvalidSelect;\n\t\t},\n\n\t\t/** @return void */\n\t\tloop: function( elCallback, fieldCallback ) {\n\t\t\tfor( var i = 0; i < this.el.length; ++i ) {\n\t\t\t\tif( typeof this.selectors[i] === 'undefined' ) {\n\t\t\t\t\tvar config = this.extend( {}, this.defaults, this.options, this.el[i].getAttribute( 'data-options' ));\n\t\t\t\t\tvar exclude = ':not(' + config.exclude.split( /[\\s,]+/ ).join( '):not(' ) + ')';\n\t\t\t\t\tthis.selectors[i] = config.transform.replace( /,/g, exclude + ',' ) + exclude;\n\t\t\t\t\tthis.config[i] = config;\n\t\t\t\t}\n\t\t\t\tvar fields = this.el[i].querySelectorAll( this.selectors[i] );\n\t\t\t\tthis.current = i;\n\t\t\t\tif( typeof elCallback === 'function' ) {\n\t\t\t\t\telCallback.call( this, this.el[i], i );\n\t\t\t\t}\n\t\t\t\tfor( var x = 0; x < fields.length; ++x ) {\n\t\t\t\t\tif( typeof fieldCallback === 'function' ) {\n\t\t\t\t\t\tfieldCallback.call( this, fields[x], i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tonBlur: function( ev ) {\n\t\t\tev.target.parentNode.classList.remove( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonInput: function( ev ) {\n\t\t\tev.target.parentNode.classList[\n\t\t\t\tthis.addRemove( ev.target.value.length )\n\t\t\t]( this.prefixed( 'is-active' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonFocus: function( ev ) {\n\t\t\tev.target.parentNode.classList.add( this.prefixed( 'has-focus' ));\n\t\t},\n\n\t\t/** @return void */\n\t\tonReset: function() {\n\t\t\tsetTimeout( this.resetFields.bind( this ));\n\t\t},\n\n\t\t/** @return string */\n\t\tprefixed: function( value ) {\n\t\t\treturn this.config[this.current].prefix + value;\n\t\t},\n\n\t\t/** @return void */\n\t\tremoveClasses: function( el ) {\n\t\t\tvar prefix = this.config[this.current].prefix;\n\t\t\tvar classes = el.className.split( ' ' ).filter( function( c ) {\n\t\t\t\treturn c.lastIndexOf( prefix, 0 ) !== 0;\n\t\t\t});\n\t\t\tel.className = classes.join( ' ' ).trim();\n\t\t},\n\n\t\t/** @return null|void */\n\t\treset: function( el ) {\n\t\t\tvar parent = el.parentNode;\n\t\t\tif( !this.hasParent( el ))return;\n\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\twhile( parent.firstElementChild ) {\n\t\t\t\tvar childEl = parent.firstElementChild;\n\t\t\t\tthis.removeClasses( childEl );\n\t\t\t\tfragment.appendChild( childEl );\n\t\t\t}\n\t\t\tparent.parentNode.replaceChild( fragment, parent );\n\t\t\tthis.resetPlaceholder( el );\n\t\t\tthis.handleEvents( el, 'remove' );\n\t\t},\n\n\t\t/** @return void */\n\t\tresetFields: function() {\n\t\t\tvar fields = this.el[this.current].querySelectorAll( this.selectors[this.current] );\n\t\t\tfor( var i = 0; i < fields.length; ++i ) {\n\t\t\t\tfields[i].parentNode.classList[\n\t\t\t\t\tthis.addRemove( fields[i].tagName === 'SELECT' && fields[i].value !== '' )\n\t\t\t\t]( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tresetPlaceholder: function( el ) {\n\t\t\tvar dataPlaceholder = 'data-placeholder';\n\t\t\tvar originalPlaceholder = el.getAttribute( dataPlaceholder );\n\t\t\tif( originalPlaceholder !== null ) {\n\t\t\t\tel.removeAttribute( dataPlaceholder );\n\t\t\t\tel.setAttribute( 'placeholder', originalPlaceholder );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetLabel: function( labelEl, el ) {\n\t\t\tlabelEl.classList.add( this.prefixed( 'label' ));\n\t\t\tlabelEl.textContent = this.getLabelText( labelEl, el );\n\t\t\tif( typeof this.config[this.current].customLabel === 'function' ) {\n\t\t\t\tlabelEl.textContent = this.config[this.current].customLabel.call( this, labelEl, el );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetPlaceholder: function( labelEl, el ) {\n\t\t\tvar placeholderText = el.getAttribute( 'placeholder' );\n\t\t\tif( this.config[this.current].prioritize === 'label' || !placeholderText ) {\n\t\t\t\tif( placeholderText ) {\n\t\t\t\t\tel.setAttribute( 'data-placeholder', placeholderText );\n\t\t\t\t}\n\t\t\t\tplaceholderText = this.getLabelText( labelEl, el );\n\t\t\t}\n\t\t\tif( typeof this.config[this.current].customPlaceholder === 'function' ) {\n\t\t\t\tplaceholderText = this.config[this.current].customPlaceholder.call( this, placeholderText, el, labelEl );\n\t\t\t}\n\t\t\tif( el.tagName === 'SELECT' ) {\n\t\t\t\tthis.setSelectPlaceholder( el, placeholderText );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tel.setAttribute( 'placeholder', placeholderText );\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\tsetSelectPlaceholder: function( el, placeholderText ) {\n\t\t\tvar childEl = el.firstElementChild;\n\t\t\tif( childEl.hasAttribute( 'value' ) && childEl.value ) {\n\t\t\t\tvar selected = el.options[el.selectedIndex].defaultSelected !== true ? true : false;\n\t\t\t\tel.insertBefore( new Option( placeholderText, '', selected, selected ), childEl );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tchildEl.setAttribute( 'value', '' );\n\t\t\t}\n\t\t\tif( childEl.textContent === '' ) {\n\t\t\t\tchildEl.textContent = placeholderText;\n\t\t\t}\n\t\t},\n\n\t\t/** @return void */\n\t\twrapLabel: function( labelEl, el ) {\n\t\t\tvar wrapper = this.createEl( 'div', {\n\t\t\t\tclass: this.prefixed( 'wrap' ) + ' ' + this.prefixed( 'wrap-' + el.tagName.toLowerCase() ),\n\t\t\t});\n\t\t\tif( el.value !== undefined && el.value.length ) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-active' ));\n\t\t\t}\n\t\t\tif( el.getAttribute( 'required' ) !== null || el.classList.contains( this.config[this.current].requiredClass )) {\n\t\t\t\twrapper.classList.add( this.prefixed( 'is-required' ));\n\t\t\t}\n\t\t\tel.parentNode.insertBefore( wrapper, el );\n\t\t\twrapper.appendChild( labelEl );\n\t\t\twrapper.appendChild( el );\n\t\t},\n\t};\n\n\tif( typeof define === \"function\" && define.amd ) {\n\t\tdefine( [], function() { return Plugin; });\n\t}\n\telse if( typeof module === \"object\" && module.exports ) {\n\t\tmodule.exports = Plugin;\n\t}\n\telse {\n\t\twindow.FloatLabels = Plugin;\n\t}\n\n})( window, document );\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/float-labels.js/src/float-labels.js\n// module id = 45\n// module chunks = 2"],"sourceRoot":""}