/*! jQuery Migrate v3.4.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ "undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e,window)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery"),window):t(jQuery,window)}(function(s,n){"use strict";function e(e){return 0<=function(e,t){for(var r=/^(\d+)\.(\d+)\.(\d+)/,n=r.exec(e)||[],o=r.exec(t)||[],a=1;a<=3;a++){if(+o[a]<+n[a])return 1;if(+n[a]<+o[a])return-1}return 0}(s.fn.jquery,e)}s.migrateVersion="3.4.1";var t=Object.create(null);s.migrateDisablePatches=function(){for(var e=0;e\x20\t\r\n\f]*)[^>]*)\/>/gi;s.UNSAFE_restoreLegacyHtmlPrefilter=function(){s.migrateEnablePatches("self-closed-tags")},i(s,"htmlPrefilter",function(e){var t,r;return(r=(t=e).replace(F,"<$1>"))!==t&&T(t)!==T(r)&&u("self-closed-tags","HTML tags must be properly nested and closed: "+t),e.replace(F,"<$1>")},"self-closed-tags"),s.migrateDisablePatches("self-closed-tags");var D,W,_,I=s.fn.offset;return i(s.fn,"offset",function(){var e=this[0];return!e||e.nodeType&&e.getBoundingClientRect?I.apply(this,arguments):(u("offset-valid-elem","jQuery.fn.offset() requires a valid DOM element"),arguments.length?this:void 0)},"offset-valid-elem"),s.ajax&&(D=s.param,i(s,"param",function(e,t){var r=s.ajaxSettings&&s.ajaxSettings.traditional;return void 0===t&&r&&(u("param-ajax-traditional","jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),t=r),D.call(this,e,t)},"param-ajax-traditional")),c(s.fn,"andSelf",s.fn.addBack,"andSelf","jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"),s.Deferred&&(W=s.Deferred,_=[["resolve","done",s.Callbacks("once memory"),s.Callbacks("once memory"),"resolved"],["reject","fail",s.Callbacks("once memory"),s.Callbacks("once memory"),"rejected"],["notify","progress",s.Callbacks("memory"),s.Callbacks("memory")]],i(s,"Deferred",function(e){var a=W(),i=a.promise();function t(){var o=arguments;return s.Deferred(function(n){s.each(_,function(e,t){var r="function"==typeof o[e]&&o[e];a[t[1]](function(){var e=r&&r.apply(this,arguments);e&&"function"==typeof e.promise?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[t[0]+"With"](this===i?n.promise():this,r?[e]:arguments)})}),o=null}).promise()}return c(a,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),c(i,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),e&&e.call(a,a),a},"deferred-pipe"),s.Deferred.exceptionHook=W.exceptionHook),s}); ; // Generated by CoffeeScript 1.4.0 /* jQuery Credit Card Validator Copyright 2012 Pawel Decowski This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. To view a copy of this license, visit: http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to: Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. */ (function() { var $, __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; }; $ = jQuery; $.fn.validateCreditCard = function(callback, options) { var card, card_type, card_types, get_card_type, is_valid_length, is_valid_luhn, normalize, validate, validate_number, _i, _len, _ref, _ref1; card_types = [ { name: 'amex', pattern: /^3[47]/, valid_length: [15] }, { name: 'diners_club_carte_blanche', pattern: /^30[0-5]/, valid_length: [14] }, { name: 'diners_club_international', pattern: /^36/, valid_length: [14] }, { name: 'jcb', pattern: /^35(2[89]|[3-8][0-9])/, valid_length: [16] }, { name: 'laser', pattern: /^(6304|670[69]|6771)/, valid_length: [16, 17, 18, 19] }, { name: 'visa_electron', pattern: /^(4026|417500|4508|4844|491(3|7))/, valid_length: [16] }, { name: 'visa', pattern: /^4/, valid_length: [16] }, { name: 'mastercard', pattern: /^5[1-5]/, valid_length: [16] }, { name: 'maestro', pattern: /^(5018|5020|5038|6304|6759|676[1-3])/, valid_length: [12, 13, 14, 15, 16, 17, 18, 19] }, { name: 'discover', pattern: /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/, valid_length: [16] } ]; if (options == null) { options = {}; } if ((_ref = options.accept) == null) { options.accept = (function() { var _i, _len, _results; _results = []; for (_i = 0, _len = card_types.length; _i < _len; _i++) { card = card_types[_i]; _results.push(card.name); } return _results; })(); } _ref1 = options.accept; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { card_type = _ref1[_i]; if (__indexOf.call((function() { var _j, _len1, _results; _results = []; for (_j = 0, _len1 = card_types.length; _j < _len1; _j++) { card = card_types[_j]; _results.push(card.name); } return _results; })(), card_type) < 0) { throw "Credit card type '" + card_type + "' is not supported"; } } get_card_type = function(number) { var _j, _len1, _ref2; _ref2 = (function() { var _k, _len1, _ref2, _results; _results = []; for (_k = 0, _len1 = card_types.length; _k < _len1; _k++) { card = card_types[_k]; if (_ref2 = card.name, __indexOf.call(options.accept, _ref2) >= 0) { _results.push(card); } } return _results; })(); for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { card_type = _ref2[_j]; if (number.match(card_type.pattern)) { return card_type; } } return null; }; is_valid_luhn = function(number) { var digit, n, sum, _j, _len1, _ref2; sum = 0; _ref2 = number.split('').reverse(); for (n = _j = 0, _len1 = _ref2.length; _j < _len1; n = ++_j) { digit = _ref2[n]; digit = +digit; if (n % 2) { digit *= 2; if (digit < 10) { sum += digit; } else { sum += digit - 9; } } else { sum += digit; } } return sum % 10 === 0; }; is_valid_length = function(number, card_type) { var _ref2; return _ref2 = number.length, __indexOf.call(card_type.valid_length, _ref2) >= 0; }; validate_number = function(number) { var length_valid, luhn_valid; card_type = get_card_type(number); luhn_valid = false; length_valid = false; if (card_type != null) { luhn_valid = is_valid_luhn(number); length_valid = is_valid_length(number, card_type); } return callback({ card_type: card_type, luhn_valid: luhn_valid, length_valid: length_valid }); }; validate = function() { var number; number = normalize($(this).val()); return validate_number(number); }; normalize = function(number) { return number.replace(/[ -]/g, ''); }; this.bind('input', function() { $(this).unbind('keyup'); return validate.call(this); }); this.bind('keyup', function() { return validate.call(this); }); if (this.length !== 0) { validate.call(this); } return this; }; }).call(this); ;