{
  "version": 3,
  "sources": ["../../javascript/application.js"],
  "sourcesContent": ["// Shared vendor libraries + ooma_types\n// Shared vendor libraries and ooma_types used by both application.js and buyer.js\n// This is the single source of truth \u2014 update here when adding/removing shared deps.\n\n// jQuery UJS (from jquery-rails gem)\n// --- jquery_ujs.js ---\n/* jshint node: true */\n\n/**\n * Unobtrusive scripting adapter for jQuery\n * https://github.com/rails/jquery-ujs\n *\n * Requires jQuery 1.8.0 or later.\n *\n * Released under the MIT license\n *\n */\n\n(function() {\n  'use strict';\n\n  var jqueryUjsInit = function($, undefined) {\n\n  // Cut down on the number of issues from people inadvertently including jquery_ujs twice\n  // by detecting and raising an error when it happens.\n  if ( $.rails !== undefined ) {\n    $.error('jquery-ujs has already been loaded!');\n  }\n\n  // Shorthand to make it a little easier to call public rails functions from within rails.js\n  var rails;\n  var $document = $(document);\n\n  $.rails = rails = {\n    // Link elements bound by jquery-ujs\n    linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n\n    // Button elements bound by jquery-ujs\n    buttonClickSelector: 'button[data-remote]:not([form]):not(form button), button[data-confirm]:not([form]):not(form button)',\n\n    // Select elements bound by jquery-ujs\n    inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n\n    // Form elements bound by jquery-ujs\n    formSubmitSelector: 'form:not([data-turbo=true])',\n\n    // Form input elements bound by jquery-ujs\n    formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n\n    // Form input elements disabled during form submission\n    disableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n\n    // Form input elements re-enabled after form submission\n    enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n\n    // Form required input elements\n    requiredInputSelector: 'input[name][required]:not([disabled]), textarea[name][required]:not([disabled])',\n\n    // Form file input elements\n    fileInputSelector: 'input[name][type=file]:not([disabled])',\n\n    // Link onClick disable selector with possible reenable after remote submission\n    linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n\n    // Button onClick disable selector with possible reenable after remote submission\n    buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]',\n\n    // Up-to-date Cross-Site Request Forgery token\n    csrfToken: function() {\n     return $('meta[name=csrf-token]').attr('content');\n    },\n\n    // URL param that must contain the CSRF token\n    csrfParam: function() {\n     return $('meta[name=csrf-param]').attr('content');\n    },\n\n    // Make sure that every Ajax request sends the CSRF token\n    CSRFProtection: function(xhr) {\n      var token = rails.csrfToken();\n      if (token) xhr.setRequestHeader('X-CSRF-Token', token);\n    },\n\n    // Make sure that all forms have actual up-to-date tokens (cached forms contain old ones)\n    refreshCSRFTokens: function(){\n      $('form input[name=\"' + rails.csrfParam() + '\"]').val(rails.csrfToken());\n    },\n\n    // Triggers an event on an element and returns false if the event result is false\n    fire: function(obj, name, data) {\n      var event = $.Event(name);\n      obj.trigger(event, data);\n      return event.result !== false;\n    },\n\n    // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm\n    confirm: function(message) {\n      return confirm(message);\n    },\n\n    // Default ajax function, may be overridden with custom function in $.rails.ajax\n    ajax: function(options) {\n      return $.ajax(options);\n    },\n\n    // Default way to get an element's href. May be overridden at $.rails.href.\n    href: function(element) {\n      return element[0].href;\n    },\n\n    // Checks \"data-remote\" if true to handle the request through a XHR request.\n    isRemote: function(element) {\n      return element.data('remote') !== undefined && element.data('remote') !== false;\n    },\n\n    // Submits \"remote\" forms and links with ajax\n    handleRemote: function(element) {\n      var method, url, data, withCredentials, dataType, options;\n\n      if (rails.fire(element, 'ajax:before')) {\n        withCredentials = element.data('with-credentials') || null;\n        dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType);\n\n        if (element.is('form')) {\n          method = element.data('ujs:submit-button-formmethod') || element.attr('method');\n          url = element.data('ujs:submit-button-formaction') || element.attr('action');\n          data = $(element[0]).serializeArray();\n          // memoized value from clicked submit button\n          var button = element.data('ujs:submit-button');\n          if (button) {\n            data.push(button);\n            element.data('ujs:submit-button', null);\n          }\n          element.data('ujs:submit-button-formmethod', null);\n          element.data('ujs:submit-button-formaction', null);\n        } else if (element.is(rails.inputChangeSelector)) {\n          method = element.data('method');\n          url = element.data('url');\n          data = element.serialize();\n          if (element.data('params')) data = data + '&' + element.data('params');\n        } else if (element.is(rails.buttonClickSelector)) {\n          method = element.data('method') || 'get';\n          url = element.data('url');\n          data = element.serialize();\n          if (element.data('params')) data = data + '&' + element.data('params');\n        } else {\n          method = element.data('method');\n          url = rails.href(element);\n          data = element.data('params') || null;\n        }\n\n        options = {\n          type: method || 'GET', data: data, dataType: dataType,\n          // stopping the \"ajax:beforeSend\" event will cancel the ajax request\n          beforeSend: function(xhr, settings) {\n            if (settings.dataType === undefined) {\n              xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);\n            }\n            if (rails.fire(element, 'ajax:beforeSend', [xhr, settings])) {\n              element.trigger('ajax:send', xhr);\n            } else {\n              return false;\n            }\n          },\n          success: function(data, status, xhr) {\n            element.trigger('ajax:success', [data, status, xhr]);\n          },\n          complete: function(xhr, status) {\n            element.trigger('ajax:complete', [xhr, status]);\n          },\n          error: function(xhr, status, error) {\n            element.trigger('ajax:error', [xhr, status, error]);\n          },\n          crossDomain: rails.isCrossDomain(url)\n        };\n\n        // There is no withCredentials for IE6-8 when\n        // \"Enable native XMLHTTP support\" is disabled\n        if (withCredentials) {\n          options.xhrFields = {\n            withCredentials: withCredentials\n          };\n        }\n\n        // Only pass url to `ajax` options if not blank\n        if (url) { options.url = url; }\n\n        return rails.ajax(options);\n      } else {\n        return false;\n      }\n    },\n\n    // Determines if the request is a cross domain request.\n    isCrossDomain: function(url) {\n      var originAnchor = document.createElement('a');\n      originAnchor.href = location.href;\n      var urlAnchor = document.createElement('a');\n\n      try {\n        urlAnchor.href = url;\n        // This is a workaround to a IE bug.\n        urlAnchor.href = urlAnchor.href;\n\n        // If URL protocol is false or is a string containing a single colon\n        // *and* host are false, assume it is not a cross-domain request\n        // (should only be the case for IE7 and IE compatibility mode).\n        // Otherwise, evaluate protocol and host of the URL against the origin\n        // protocol and host.\n        return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) ||\n          (originAnchor.protocol + '//' + originAnchor.host ===\n            urlAnchor.protocol + '//' + urlAnchor.host));\n      } catch (e) {\n        // If there is an error parsing the URL, assume it is crossDomain.\n        return true;\n      }\n    },\n\n    // Handles \"data-method\" on links such as:\n    // <a href=\"/users/5\" data-method=\"delete\" rel=\"nofollow\" data-confirm=\"Are you sure?\">Delete</a>\n    handleMethod: function(link) {\n      var href = rails.href(link),\n        method = link.data('method'),\n        target = link.attr('target'),\n        csrfToken = rails.csrfToken(),\n        csrfParam = rails.csrfParam(),\n        form = $('<form method=\"post\" action=\"' + href + '\"></form>'),\n        metadataInput = '<input name=\"_method\" value=\"' + method + '\" type=\"hidden\" />';\n\n      if (csrfParam !== undefined && csrfToken !== undefined && !rails.isCrossDomain(href)) {\n        metadataInput += '<input name=\"' + csrfParam + '\" value=\"' + csrfToken + '\" type=\"hidden\" />';\n      }\n\n      if (target) { form.attr('target', target); }\n\n      form.hide().append(metadataInput).appendTo('body');\n      form.submit();\n    },\n\n    // Helper function that returns form elements that match the specified CSS selector\n    // If form is actually a \"form\" element this will return associated elements outside the from that have\n    // the html form attribute set\n    formElements: function(form, selector) {\n      return form.is('form') ? $(form[0].elements).filter(selector) : form.find(selector);\n    },\n\n    /* Disables form elements:\n      - Caches element value in 'ujs:enable-with' data store\n      - Replaces element text with value of 'data-disable-with' attribute\n      - Sets disabled property to true\n    */\n    disableFormElements: function(form) {\n      rails.formElements(form, rails.disableSelector).each(function() {\n        rails.disableFormElement($(this));\n      });\n    },\n\n    disableFormElement: function(element) {\n      var method, replacement;\n\n      method = element.is('button') ? 'html' : 'val';\n      replacement = element.data('disable-with');\n\n      if (replacement !== undefined) {\n        element.data('ujs:enable-with', element[method]());\n        element[method](replacement);\n      }\n\n      element.prop('disabled', true);\n      element.data('ujs:disabled', true);\n    },\n\n    /* Re-enables disabled form elements:\n      - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`)\n      - Sets disabled property to false\n    */\n    enableFormElements: function(form) {\n      rails.formElements(form, rails.enableSelector).each(function() {\n        rails.enableFormElement($(this));\n      });\n    },\n\n    enableFormElement: function(element) {\n      var method = element.is('button') ? 'html' : 'val';\n      if (element.data('ujs:enable-with') !== undefined) {\n        element[method](element.data('ujs:enable-with'));\n        element.removeData('ujs:enable-with'); // clean up cache\n      }\n      element.prop('disabled', false);\n      element.removeData('ujs:disabled');\n    },\n\n   /* For 'data-confirm' attribute:\n      - Fires `confirm` event\n      - Shows the confirmation dialog\n      - Fires the `confirm:complete` event\n\n      Returns `true` if no function stops the chain and user chose yes; `false` otherwise.\n      Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog.\n      Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function\n      return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog.\n   */\n    allowAction: function(element) {\n      var message = element.data('confirm'),\n          answer = false, callback;\n      if (!message) { return true; }\n\n      if (rails.fire(element, 'confirm')) {\n        try {\n          answer = rails.confirm(message);\n        } catch (e) {\n          (console.error || console.log).call(console, e.stack || e);\n        }\n        callback = rails.fire(element, 'confirm:complete', [answer]);\n      }\n      return answer && callback;\n    },\n\n    // Helper function which checks for blank inputs in a form that match the specified CSS selector\n    blankInputs: function(form, specifiedSelector, nonBlank) {\n      var foundInputs = $(),\n        input,\n        valueToCheck,\n        radiosForNameWithNoneSelected,\n        radioName,\n        selector = specifiedSelector || 'input,textarea',\n        requiredInputs = form.find(selector),\n        checkedRadioButtonNames = {};\n\n      requiredInputs.each(function() {\n        input = $(this);\n        if (input.is('input[type=radio]')) {\n\n          // Don't count unchecked required radio as blank if other radio with same name is checked,\n          // regardless of whether same-name radio input has required attribute or not. The spec\n          // states https://www.w3.org/TR/html5/forms.html#the-required-attribute\n          radioName = input.attr('name');\n\n          // Skip if we've already seen the radio with this name.\n          if (!checkedRadioButtonNames[radioName]) {\n\n            // If none checked\n            if (form.find('input[type=radio]:checked[name=\"' + radioName + '\"]').length === 0) {\n              radiosForNameWithNoneSelected = form.find(\n                'input[type=radio][name=\"' + radioName + '\"]');\n              foundInputs = foundInputs.add(radiosForNameWithNoneSelected);\n            }\n\n            // We only need to check each name once.\n            checkedRadioButtonNames[radioName] = radioName;\n          }\n        } else {\n          valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : !!input.val();\n          if (valueToCheck === nonBlank) {\n            foundInputs = foundInputs.add(input);\n          }\n        }\n      });\n      return foundInputs.length ? foundInputs : false;\n    },\n\n    // Helper function which checks for non-blank inputs in a form that match the specified CSS selector\n    nonBlankInputs: function(form, specifiedSelector) {\n      return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank\n    },\n\n    // Helper function, needed to provide consistent behavior in IE\n    stopEverything: function(e) {\n      $(e.target).trigger('ujs:everythingStopped');\n      e.stopImmediatePropagation();\n      return false;\n    },\n\n    //  Replace element's html with the 'data-disable-with' after storing original html\n    //  and prevent clicking on it\n    disableElement: function(element) {\n      var replacement = element.data('disable-with');\n\n      if (replacement !== undefined) {\n        element.data('ujs:enable-with', element.html()); // store enabled state\n        element.html(replacement);\n      }\n\n      element.on('click.railsDisable', function(e) { // prevent further clicking\n        return rails.stopEverything(e);\n      });\n      element.data('ujs:disabled', true);\n    },\n\n    // Restore element to its original state which was disabled by 'disableElement' above\n    enableElement: function(element) {\n      if (element.data('ujs:enable-with') !== undefined) {\n        element.html(element.data('ujs:enable-with')); // set to old enabled state\n        element.removeData('ujs:enable-with'); // clean up cache\n      }\n      element.off('click.railsDisable'); // enable element\n      element.removeData('ujs:disabled');\n    }\n  };\n\n  if (rails.fire($document, 'rails:attachBindings')) {\n\n    $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }});\n\n    // This event works the same as the load event, except that it fires every\n    // time the page is loaded.\n    //\n    // See https://github.com/rails/jquery-ujs/issues/357\n    // See https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching\n    $(window).on('pageshow.rails', function () {\n      $($.rails.enableSelector).each(function () {\n        var element = $(this);\n\n        if (element.data('ujs:disabled')) {\n          $.rails.enableFormElement(element);\n        }\n      });\n\n      $($.rails.linkDisableSelector).each(function () {\n        var element = $(this);\n\n        if (element.data('ujs:disabled')) {\n          $.rails.enableElement(element);\n        }\n      });\n    });\n\n    $document.on('ajax:complete', rails.linkDisableSelector, function() {\n        rails.enableElement($(this));\n    });\n\n    $document.on('ajax:complete', rails.buttonDisableSelector, function() {\n        rails.enableFormElement($(this));\n    });\n\n    $document.on('click.rails', rails.linkClickSelector, function(e) {\n      var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey;\n      if (!rails.allowAction(link)) return rails.stopEverything(e);\n\n      if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link);\n\n      if (rails.isRemote(link)) {\n        if (metaClick && (!method || method === 'GET') && !data) { return true; }\n\n        var handleRemote = rails.handleRemote(link);\n        // Response from rails.handleRemote() will either be false or a deferred object promise.\n        if (handleRemote === false) {\n          rails.enableElement(link);\n        } else {\n          handleRemote.fail( function() { rails.enableElement(link); } );\n        }\n        return false;\n\n      } else if (method) {\n        rails.handleMethod(link);\n        return false;\n      }\n    });\n\n    $document.on('click.rails', rails.buttonClickSelector, function(e) {\n      var button = $(this);\n\n      if (!rails.allowAction(button) || !rails.isRemote(button)) return rails.stopEverything(e);\n\n      if (button.is(rails.buttonDisableSelector)) rails.disableFormElement(button);\n\n      var handleRemote = rails.handleRemote(button);\n      // Response from rails.handleRemote() will either be false or a deferred object promise.\n      if (handleRemote === false) {\n        rails.enableFormElement(button);\n      } else {\n        handleRemote.fail( function() { rails.enableFormElement(button); } );\n      }\n      return false;\n    });\n\n    $document.on('change.rails', rails.inputChangeSelector, function(e) {\n      var link = $(this);\n      if (!rails.allowAction(link) || !rails.isRemote(link)) return rails.stopEverything(e);\n\n      rails.handleRemote(link);\n      return false;\n    });\n\n    $document.on('submit.rails', rails.formSubmitSelector, function(e) {\n      var form = $(this),\n        remote = rails.isRemote(form),\n        blankRequiredInputs,\n        nonBlankFileInputs;\n\n      if (!rails.allowAction(form)) return rails.stopEverything(e);\n\n      // Skip other logic when required values are missing or file upload is present\n      if (form.attr('novalidate') === undefined) {\n        if (form.data('ujs:formnovalidate-button') === undefined) {\n          blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector, false);\n          if (blankRequiredInputs && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) {\n            return rails.stopEverything(e);\n          }\n        } else {\n          // Clear the formnovalidate in case the next button click is not on a formnovalidate button\n          // Not strictly necessary to do here, since it is also reset on each button click, but just to be certain\n          form.data('ujs:formnovalidate-button', undefined);\n        }\n      }\n\n      if (remote) {\n        nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector);\n        if (nonBlankFileInputs) {\n          // Slight timeout so that the submit button gets properly serialized\n          // (make it easy for event handler to serialize form without disabled values)\n          setTimeout(function(){ rails.disableFormElements(form); }, 13);\n          var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]);\n\n          // Re-enable form elements if event bindings return false (canceling normal form submission)\n          if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); }\n\n          return aborted;\n        }\n\n        rails.handleRemote(form);\n        return false;\n\n      } else {\n        // Slight timeout so that the submit button gets properly serialized\n        setTimeout(function(){ rails.disableFormElements(form); }, 13);\n      }\n    });\n\n    $document.on('click.rails', rails.formInputClickSelector, function(event) {\n      var button = $(this);\n\n      if (!rails.allowAction(button)) return rails.stopEverything(event);\n\n      // Register the pressed submit button\n      var name = button.attr('name'),\n        data = name ? {name:name, value:button.val()} : null;\n\n      var form = button.closest('form');\n      if (form.length === 0) {\n        form = $('#' + button.attr('form'));\n      }\n      form.data('ujs:submit-button', data);\n\n      // Save attributes from button\n      form.data('ujs:formnovalidate-button', button.attr('formnovalidate'));\n      form.data('ujs:submit-button-formaction', button.attr('formaction'));\n      form.data('ujs:submit-button-formmethod', button.attr('formmethod'));\n    });\n\n    $document.on('ajax:send.rails', rails.formSubmitSelector, function(event) {\n      if (this === event.target) rails.disableFormElements($(this));\n    });\n\n    $document.on('ajax:complete.rails', rails.formSubmitSelector, function(event) {\n      if (this === event.target) rails.enableFormElements($(this));\n    });\n\n    $(function(){\n      rails.refreshCSRFTokens();\n    });\n  }\n\n  };\n\n  if (window.jQuery) {\n    jqueryUjsInit(jQuery);\n  } else if (typeof exports === 'object' && typeof module === 'object') {\n    module.exports = jqueryUjsInit;\n  }\n})();\n\n;\n\n// App JS (order matters - dependencies first)\n// --- spin.min.js ---\n(function(t,e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.Spinner=e()})(this,function(){\"use strict\";function t(t,e){var i,n=document.createElement(t||\"div\");for(i in e)n[i]=e[i];return n}function e(t){for(var e=1,i=arguments.length;i>e;e++)t.appendChild(arguments[e]);return t}function i(t,e,i,n){var r=[\"opacity\",e,~~(100*t),i,n].join(\"-\"),o=.01+100*(i/n),a=Math.max(1-(1-t)/e*(100-o),t),s=u.substring(0,u.indexOf(\"Animation\")).toLowerCase(),l=s&&\"-\"+s+\"-\"||\"\";return c[r]||(p.insertRule(\"@\"+l+\"keyframes \"+r+\"{\"+\"0%{opacity:\"+a+\"}\"+o+\"%{opacity:\"+t+\"}\"+(o+.01)+\"%{opacity:1}\"+(o+e)%100+\"%{opacity:\"+t+\"}\"+\"100%{opacity:\"+a+\"}\"+\"}\",p.cssRules.length),c[r]=1),r}function n(t,e){var i,n,r=t.style;for(e=e.charAt(0).toUpperCase()+e.slice(1),n=0;d.length>n;n++)if(i=d[n]+e,void 0!==r[i])return i;return void 0!==r[e]?e:void 0}function r(t,e){for(var i in e)t.style[n(t,i)||i]=e[i];return t}function o(t){for(var e=1;arguments.length>e;e++){var i=arguments[e];for(var n in i)void 0===t[n]&&(t[n]=i[n])}return t}function a(t,e){return\"string\"==typeof t?t:t[e%t.length]}function s(t){this.opts=o(t||{},s.defaults,f)}function l(){function i(e,i){return t(\"<\"+e+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"spin-vml\">',i)}p.addRule(\".spin-vml\",\"behavior:url(#default#VML)\"),s.prototype.lines=function(t,n){function o(){return r(i(\"group\",{coordsize:d+\" \"+d,coordorigin:-u+\" \"+-u}),{width:d,height:d})}function s(t,s,l){e(p,e(r(o(),{rotation:360/n.lines*t+\"deg\",left:~~s}),e(r(i(\"roundrect\",{arcsize:n.corners}),{width:u,height:n.width,left:n.radius,top:-n.width>>1,filter:l}),i(\"fill\",{color:a(n.color,t),opacity:n.opacity}),i(\"stroke\",{opacity:0}))))}var l,u=n.length+n.width,d=2*u,c=2*-(n.width+n.length)+\"px\",p=r(o(),{position:\"absolute\",top:c,left:c});if(n.shadow)for(l=1;n.lines>=l;l++)s(l,-2,\"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)\");for(l=1;n.lines>=l;l++)s(l);return e(t,p)},s.prototype.opacity=function(t,e,i,n){var r=t.firstChild;n=n.shadow&&n.lines||0,r&&r.childNodes.length>e+n&&(r=r.childNodes[e+n],r=r&&r.firstChild,r=r&&r.firstChild,r&&(r.opacity=i))}}var u,d=[\"webkit\",\"Moz\",\"ms\",\"O\"],c={},p=function(){var i=t(\"style\",{type:\"text/css\"});return e(document.getElementsByTagName(\"head\")[0],i),i.sheet||i.styleSheet}(),f={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:\"#000\",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:\"spinner\",top:\"50%\",left:\"50%\",position:\"absolute\"};s.defaults={},o(s.prototype,{spin:function(e){this.stop();var i=this,n=i.opts,o=i.el=r(t(0,{className:n.className}),{position:n.position,width:0,zIndex:n.zIndex});if(n.radius+n.length+n.width,r(o,{left:n.left,top:n.top}),e&&e.insertBefore(o,e.firstChild||null),o.setAttribute(\"role\",\"progressbar\"),i.lines(o,i.opts),!u){var a,s=0,l=(n.lines-1)*(1-n.direction)/2,d=n.fps,c=d/n.speed,p=(1-n.opacity)/(c*n.trail/100),f=c/n.lines;(function h(){s++;for(var t=0;n.lines>t;t++)a=Math.max(1-(s+(n.lines-t)*f)%c*p,n.opacity),i.opacity(o,t*n.direction+l,a,n);i.timeout=i.el&&setTimeout(h,~~(1e3/d))})()}return i},stop:function(){var t=this.el;return t&&(clearTimeout(this.timeout),t.parentNode&&t.parentNode.removeChild(t),this.el=void 0),this},lines:function(n,o){function s(e,i){return r(t(),{position:\"absolute\",width:o.length+o.width+\"px\",height:o.width+\"px\",background:e,boxShadow:i,transformOrigin:\"left\",transform:\"rotate(\"+~~(360/o.lines*d+o.rotate)+\"deg) translate(\"+o.radius+\"px\"+\",0)\",borderRadius:(o.corners*o.width>>1)+\"px\"})}for(var l,d=0,c=(o.lines-1)*(1-o.direction)/2;o.lines>d;d++)l=r(t(),{position:\"absolute\",top:1+~(o.width/2)+\"px\",transform:o.hwaccel?\"translate3d(0,0,0)\":\"\",opacity:o.opacity,animation:u&&i(o.opacity,o.trail,c+d*o.direction,o.lines)+\" \"+1/o.speed+\"s linear infinite\"}),o.shadow&&e(l,r(s(\"#000\",\"0 0 4px #000\"),{top:\"2px\"})),e(n,e(l,s(a(o.color,d),\"0 0 1px rgba(0,0,0,.1)\")));return n},opacity:function(t,e,i){t.childNodes.length>e&&(t.childNodes[e].style.opacity=i)}});var h=r(t(\"group\"),{behavior:\"url(#default#VML)\"});return!n(h,\"transform\")&&h.adj?l():u=n(h,\"animation\"),s});\n;\n// --- ladda.min.js ---\n/*!\n * Ladda 0.9.8 (2015-08-04, 11:23)\n * http://lab.hakim.se/ladda\n * MIT licensed\n *\n * Copyright (C) 2015 Hakim El Hattab, http://hakim.se\n */\n(function(t,e){\"object\"==typeof exports?module.exports=e(require(\"spin.js\")):\"function\"==typeof define&&define.amd?define([\"spin\"],e):t.Ladda=e(t.Spinner)})(this,function(t){\"use strict\";function e(t){if(t===void 0)return console.warn(\"Ladda button target must be defined.\"),void 0;if(/ladda-button/i.test(t.className)||(t.className+=\" ladda-button\"),t.hasAttribute(\"data-style\")||t.setAttribute(\"data-style\",\"expand-right\"),!t.querySelector(\".ladda-label\")){var e=document.createElement(\"span\");e.className=\"ladda-label\",u(t,e)}var a,n=t.querySelector(\".ladda-spinner\");n||(n=document.createElement(\"span\"),n.className=\"ladda-spinner\"),t.appendChild(n);var r,i={start:function(){return a||(a=o(t)),t.setAttribute(\"disabled\",\"\"),t.setAttribute(\"data-loading\",\"\"),clearTimeout(r),a.spin(n),this.setProgress(0),this},startAfter:function(t){return clearTimeout(r),r=setTimeout(function(){i.start()},t),this},stop:function(){return t.removeAttribute(\"disabled\"),t.removeAttribute(\"data-loading\"),clearTimeout(r),a&&(r=setTimeout(function(){a.stop()},1e3)),this},toggle:function(){return this.isLoading()?this.stop():this.start(),this},setProgress:function(e){e=Math.max(Math.min(e,1),0);var a=t.querySelector(\".ladda-progress\");0===e&&a&&a.parentNode?a.parentNode.removeChild(a):(a||(a=document.createElement(\"div\"),a.className=\"ladda-progress\",t.appendChild(a)),a.style.width=(e||0)*t.offsetWidth+\"px\")},enable:function(){return this.stop(),this},disable:function(){return this.stop(),t.setAttribute(\"disabled\",\"\"),this},isLoading:function(){return t.hasAttribute(\"data-loading\")},remove:function(){clearTimeout(r),t.removeAttribute(\"disabled\",\"\"),t.removeAttribute(\"data-loading\",\"\"),a&&(a.stop(),a=null);for(var e=0,n=d.length;n>e;e++)if(i===d[e]){d.splice(e,1);break}}};return d.push(i),i}function a(t,e){for(;t.parentNode&&t.tagName!==e;)t=t.parentNode;return e===t.tagName?t:void 0}function n(t){for(var e=[\"input\",\"textarea\",\"select\"],a=[],n=0;e.length>n;n++)for(var r=t.getElementsByTagName(e[n]),i=0;r.length>i;i++)r[i].hasAttribute(\"required\")&&a.push(r[i]);return a}function r(t,r){r=r||{};var i=[];\"string\"==typeof t?i=s(document.querySelectorAll(t)):\"object\"==typeof t&&\"string\"==typeof t.nodeName&&(i=[t]);for(var o=0,u=i.length;u>o;o++)(function(){var t=i[o];if(\"function\"==typeof t.addEventListener){var s=e(t),u=-1;t.addEventListener(\"click\",function(){var e=!0,i=a(t,\"FORM\");if(i!==void 0)for(var o=n(i),d=0;o.length>d;d++)\"\"===o[d].value.replace(/^\\s+|\\s+$/g,\"\")&&(e=!1),\"checkbox\"!==o[d].type&&\"radio\"!==o[d].type||o[d].checked||(e=!1),\"email\"===o[d].type&&(e=/^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$/.test(o[d].value));e&&(s.startAfter(1),\"number\"==typeof r.timeout&&(clearTimeout(u),u=setTimeout(s.stop,r.timeout)),\"function\"==typeof r.callback&&r.callback.apply(null,[s]))},!1)}})()}function i(){for(var t=0,e=d.length;e>t;t++)d[t].stop()}function o(e){var a,n,r=e.offsetHeight;0===r&&(r=parseFloat(window.getComputedStyle(e).height)),r>32&&(r*=.8),e.hasAttribute(\"data-spinner-size\")&&(r=parseInt(e.getAttribute(\"data-spinner-size\"),10)),e.hasAttribute(\"data-spinner-color\")&&(a=e.getAttribute(\"data-spinner-color\")),e.hasAttribute(\"data-spinner-lines\")&&(n=parseInt(e.getAttribute(\"data-spinner-lines\"),10));var i=.2*r,o=.6*i,s=7>i?2:3;return new t({color:a||\"#fff\",lines:n||12,radius:i,length:o,width:s,zIndex:\"auto\",top:\"auto\",left:\"auto\",className:\"\"})}function s(t){for(var e=[],a=0;t.length>a;a++)e.push(t[a]);return e}function u(t,e){var a=document.createRange();a.selectNodeContents(t),a.surroundContents(e),t.appendChild(e)}var d=[];return{bind:r,create:e,stopAll:i}});\n;\n// --- button_spiner.js ---\nbuttonSpiner = function(){\n  var l;\n  var tag;\n  var tag_text;\n\n  this.start = function($el){\n    tag = $el;\n    showSpiner($el);\n  };\n\n  this.stop = function(){\n    if (typeof(l) !== \"undefined\") {\n      try {\n        l.stop();\n        $(tag).text(tag_text);\n      }\n      catch (e){ console.log(\"Variable \" + e.message + \" (buttonSpiner)\"); }\n    }\n  };\n\n  function showSpiner($el){\n    $($el).text(chooseTitle($($el).text()));\n    l = Ladda.create($el);\n    l.start();\n  };\n\n  function chooseTitle(name){\n    tag_text = name;\n    switch(name.replace(/\\s+/g, '')){\n      case \"SubmitOrder\":\n        return \"Processing Order\";\n      case \"Save\":\n        return \"Saving\";\n      case \"Delete\":\n        return \"Deleting\";\n      case \"Add\":\n        return \"Adding\";\n      case \"CreateBuyer\":\n        return \"Creating\";\n      default:\n        return \"Loading\";\n    };\n  };\n\n};\n\nbutton_spiner = new buttonSpiner;\n\n;\n// --- experiment.js ---\nvar Experiment = {};\n\nExperiment.params = function(checkoutPage){\n  var state = '', city = '';\n  var params = {};\n  if (checkoutPage.find('#city_state').length) {\n    var city_state = checkoutPage.find('#city_state').val().split('|');\n    state = city_state[1];\n    city = city_state[0];\n  } else {\n    state = checkoutPage.find('#state').val();\n    city = checkoutPage.find('#city').val();\n  }\n\n  if (this.exp == 0 || this.exp == 1) {\n    params = {\n      first_name: checkoutPage.find('#first_name').val(),\n      last_name: checkoutPage.find('#last_name').val(),\n      street_address: checkoutPage.find('#street_address').val(),\n      street_address2: checkoutPage.find('#street_address2').val(),\n      zip: checkoutPage.find('#zip').val().toUpperCase(),\n      state: state,\n      city: city\n    }\n  } else {\n    params = {\n      first_name: checkoutPage.find('#first_name').val(),\n      last_name: checkoutPage.find('#last_name').val(),\n      street_address: checkoutPage.find('#street_address').val(),\n      street_address2: checkoutPage.find('#street_address2').val(),\n      email: checkoutPage.find('#email').val(),\n      zip: checkoutPage.find('#zip').val().toUpperCase(),\n      state: state,\n      city: city\n    }\n  }\n  if ($('form#shipping').find('#company_name').length) {\n    $.extend(params, {business_name: checkoutPage.find('#company_name').val()});\n  }\n  if ($('form#shipping').find('#phone').length) {\n    $.extend(params, {phone: checkoutPage.find('#phone').val()});\n  }\n\n  var $hCaptchaResponse = $('form#shipping').find('textarea[name=\"h-captcha-response\"]');\n  var $gRecaptchaResponse = $('form#shipping').find('textarea[name=\"g-recaptcha-response\"]');\n\n  if($hCaptchaResponse.length > 0 && !!$hCaptchaResponse.val()) {\n    $.extend(params, { h_captcha_response: $hCaptchaResponse.val() });\n  } else if($gRecaptchaResponse.length > 0 && !!$gRecaptchaResponse.val()) {\n    $.extend(params, { g_recaptcha_response: $gRecaptchaResponse.val() });\n  }\n\n  return params;\n};\n\nExperiment.checkoutFields = function(){\n\n  function getOfferCookie() {\n    if (Cookies.get('offer')) return JSON.parse(Cookies.get('offer'));\n  }\n\n  function isTeloHomeOffice() {\n    return getOfferCookie() && getOfferCookie().match(/telo.*(office)/i);\n  }\n\n  var fields = {};\n  if (this.exp == 0 || this.exp == 1) {\n    fields =  {\n      inputs: {\n        firstName: '#first_name',\n        lastName: '#last_name',\n        address: '#street_address',\n        address2: '#street_address2',\n        zip: '#zip',\n        city: '#city',\n        state: '#state',\n        cityState: '#city_state'\n      },\n      errorsLabels: {\n        firstName: 'label[for=first_name]',\n        lastName: 'label[for=last_name]',\n        address: 'label[for=street_address]',\n        address2: 'label[for=street_address2]',\n        zip: 'label[for=zip]',\n        city: 'label[for=city]',\n        cityState: 'label[for=city_state]'\n      }\n    }\n  } else {\n    fields = {\n      inputs: {\n        firstName: '#first_name',\n        lastName: '#last_name',\n        address: '#street_address',\n        address2: '#street_address2',\n        email: '#email',\n        zip: '#zip',\n        city: '#city',\n        state: '#state',\n        cityState: '#city_state'\n      },\n      errorsLabels: {\n        firstName: 'label[for=first_name]',\n        lastName: 'label[for=last_name]',\n        address: 'label[for=street_address]',\n        address2: 'label[for=street_address2]',\n        email: 'label[for=email]',\n        zip: 'label[for=zip]',\n        city: 'label[for=city]',\n        cityState: 'label[for=city_state]',\n        phoneNumber: 'label[for=phone]'\n      }\n    }\n  }\n  if ($('form#shipping').find('#company_name').length) {\n    if (!isTeloHomeOffice()) {\n      $.extend(true, fields, {\n        inputs: {\n          companyName: '#company_name'\n        },\n        errorsLabels: {\n          companyName: 'label[for=company_name]'\n        }\n      });\n    }\n  }\n  if ($('form#shipping').find('#phone').length) {\n    $.extend(true, fields, {\n      inputs: {\n        phoneNumber: '#phone'\n      },\n      errorsLabels: {\n        phoneNumber: 'label[for=phone]'\n      }\n    });\n  }\n  return fields;\n};\n\n;\n\n// Vendor libraries (from vendor/assets/javascripts/)\n// --- inputmask.js ---\n/*\n * Input Mask Core\n * http://github.com/RobinHerbots/jquery.inputmask\n * Copyright (c) 2010 -\tRobin Herbots\n * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n * Version: 0.0.0-dev\n */\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"inputmask.dependencyLib\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"./inputmask.dependencyLib.jquery\"));\n\t} else {\n\t\tfactory(window.dependencyLib || jQuery);\n\t}\n}\n(function ($) {\n\tfunction Inputmask(alias, options) {\n\t\t//allow instanciating without new\n\t\tif (!(this instanceof Inputmask)) {\n\t\t\treturn new Inputmask(alias, options);\n\t\t}\n\n\t\tif ($.isPlainObject(alias)) {\n\t\t\toptions = alias;\n\t\t} else {\n\t\t\toptions = options || {};\n\t\t\toptions.alias = alias;\n\t\t}\n\n\t\tthis.el = undefined;\n\t\t//init options\n\t\tthis.opts = $.extend(true, {}, this.defaults, options);\n\t\tthis.noMasksCache = options && options.definitions !== undefined;\n\t\tthis.userOptions = options || {}; //user passed options\n\t\tthis.events = {};\n\t\tresolveAlias(this.opts.alias, options, this.opts);\n\t}\n\n\tInputmask.prototype = {\n\t\t//options default\n\t\tdefaults: {\n\t\t\tplaceholder: \"_\",\n\t\t\toptionalmarker: {\n\t\t\t\tstart: \"[\",\n\t\t\t\tend: \"]\"\n\t\t\t},\n\t\t\tquantifiermarker: {\n\t\t\t\tstart: \"{\",\n\t\t\t\tend: \"}\"\n\t\t\t},\n\t\t\tgroupmarker: {\n\t\t\t\tstart: \"(\",\n\t\t\t\tend: \")\"\n\t\t\t},\n\t\t\talternatormarker: \"|\",\n\t\t\tescapeChar: \"\\\\\",\n\t\t\tmask: null, //needs tobe null instead of undefined as the extend method does not consider props with the undefined value\n\t\t\toncomplete: $.noop, //executes when the mask is complete\n\t\t\tonincomplete: $.noop, //executes when the mask is incomplete and focus is lost\n\t\t\toncleared: $.noop, //executes when the mask is cleared\n\t\t\trepeat: 0, //repetitions of the mask: * ~ forever, otherwise specify an integer\n\t\t\tgreedy: true, //true: allocated buffer for the mask and repetitions - false: allocate only if needed\n\t\t\tautoUnmask: false, //automatically unmask when retrieving the value with $.fn.val or value if the browser supports __lookupGetter__ or getOwnPropertyDescriptor\n\t\t\tremoveMaskOnSubmit: false, //remove the mask before submitting the form.\n\t\t\tclearMaskOnLostFocus: true,\n\t\t\tinsertMode: true, //insert the input or overwrite the input\n\t\t\tclearIncomplete: false, //clear the incomplete input on blur\n\t\t\taliases: {}, //aliases definitions => see jquery.inputmask.extensions.js\n\t\t\talias: null,\n\t\t\tonKeyDown: $.noop, //callback to implement autocomplete on certain keys for example. args => event, buffer, caretPos, opts\n\t\t\tonBeforeMask: null, //executes before masking the initial value to allow preprocessing of the initial value.\targs => initialValue, opts => return processedValue\n\t\t\tonBeforePaste: function (pastedValue, opts) {\n\t\t\t\treturn $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;\n\t\t\t}, //executes before masking the pasted value to allow preprocessing of the pasted value.\targs => pastedValue, opts => return processedValue\n\t\t\tonBeforeWrite: null, //executes before writing to the masked element. args => event, opts\n\t\t\tonUnMask: null, //executes after unmasking to allow postprocessing of the unmaskedvalue.\targs => maskedValue, unmaskedValue, opts\n\t\t\tshowMaskOnFocus: true, //show the mask-placeholder when the input has focus\n\t\t\tshowMaskOnHover: true, //show the mask-placeholder when hovering the empty input\n\t\t\tonKeyValidation: $.noop, //executes on every key-press with the result of isValid. Params: key, result, opts\n\t\t\tskipOptionalPartCharacter: \" \", //a character which can be used to skip an optional part of a mask\n\t\t\tshowTooltip: false, //show the activemask as tooltip\n\t\t\ttooltip: undefined, //tooltip to show\n\t\t\tnumericInput: false, //numericInput input direction style (input shifts to the left while holding the caret position)\n\t\t\trightAlign: false, //align to the right\n\t\t\tundoOnEscape: true, //pressing escape reverts the value to the value before focus\n\t\t\t//numeric basic properties\n\t\t\tradixPoint: \"\", //\".\", // | \",\"\n\t\t\tradixPointDefinitionSymbol: undefined, //set the radixPoint definitionSymbol ~ used for awareness of the radixpoint\n\t\t\tgroupSeparator: \"\", //\",\", // | \".\"\n\t\t\tradixFocus: false, //position caret to radixpoint on initial click\n\t\t\t//numeric basic properties\n\t\t\tnojumps: false, //do not jump over fixed parts in the mask\n\t\t\tnojumpsThreshold: 0, //start nojumps as of\n\t\t\tkeepStatic: null, //try to keep the mask static while typing. Decisions to alter the mask will be posponed if possible - null see auto selection for multi masks\n\t\t\tpositionCaretOnTab: false, //when enabled the caret position is set after the latest valid position on TAB\n\t\t\ttabThrough: false, //allows for tabbing through the different parts of the masked field\n\t\t\tsupportsInputType: [\"text\", \"tel\", \"password\"], //list with the supported input types\n\t\t\tdefinitions: {\n\t\t\t\t\"9\": {\n\t\t\t\t\tvalidator: \"[0-9]\",\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tdefinitionSymbol: \"*\"\n\t\t\t\t},\n\t\t\t\t\"a\": {\n\t\t\t\t\tvalidator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u0451\\u00C0-\\u00FF\\u00B5]\",\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tdefinitionSymbol: \"*\"\n\t\t\t\t},\n\t\t\t\t\"*\": {\n\t\t\t\t\tvalidator: \"[0-9A-Za-z\\u0410-\\u044F\\u0401\\u0451\\u00C0-\\u00FF\\u00B5]\",\n\t\t\t\t\tcardinality: 1\n\t\t\t\t}\n\t\t\t},\n\t\t\t//specify keyCodes which should not be considered in the keypress event, otherwise the preventDefault will stop their default behavior especially in FF\n\t\t\tignorables: [8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123],\n\t\t\tisComplete: null, //override for isComplete - args => buffer, opts - return true || false\n\t\t\tcanClearPosition: $.noop, //hook to alter the clear behavior in the stripValidPositions args => maskset, position, lastValidPosition, opts => return true|false\n\t\t\tpostValidation: null, //hook to postValidate the result from isValid.\tUsefull for validating the entry as a whole.\targs => buffer, currentResult, opts => return true/false\n\t\t\tstaticDefinitionSymbol: undefined, //specify a definitionSymbol for static content, used to make matches for alternators\n\t\t\tjitMasking: false, //just in time masking ~ only mask while typing, can n (number), true or false\n\t\t\tnullable: true, //return nothing instead of the buffertemplate when nothing is returned.\n\t\t\tinputEventOnly: false //testing inputfallback behavior\n\t\t},\n\t\tmasksCache: {},\n\t\tmask: function (elems) {\n\t\t\tvar that = this;\n\t\t\tif (typeof elems === \"string\") {\n\t\t\t\telems = document.getElementById(elems) || document.querySelectorAll(elems);\n\t\t\t}\n\t\t\telems = elems.nodeName ? [elems] : elems;\n\t\t\t$.each(elems, function (ndx, el) {\n\t\t\t\tvar scopedOpts = $.extend(true, {}, that.opts);\n\t\t\t\timportAttributeOptions(el, scopedOpts, $.extend(true, {}, that.userOptions));\n\t\t\t\tvar maskset = generateMaskSet(scopedOpts, that.noMasksCache);\n\t\t\t\tif (maskset !== undefined) {\n\t\t\t\t\tif (el.inputmask !== undefined) {\n\t\t\t\t\t\tel.inputmask.remove();\n\t\t\t\t\t}\n\t\t\t\t\t//store inputmask instance on the input with element reference\n\t\t\t\t\tel.inputmask = new Inputmask();\n\t\t\t\t\tel.inputmask.opts = scopedOpts;\n\t\t\t\t\tel.inputmask.noMasksCache = that.noMasksCache;\n\t\t\t\t\tel.inputmask.userOptions = $.extend(true, {}, that.userOptions);\n\t\t\t\t\tel.inputmask.el = el;\n\t\t\t\t\tel.inputmask.maskset = maskset;\n\t\t\t\t\tel.inputmask.isRTL = false;\n\n\t\t\t\t\t$.data(el, \"_inputmask_opts\", scopedOpts);\n\n\t\t\t\t\tmaskScope({\n\t\t\t\t\t\t\"action\": \"mask\",\n\t\t\t\t\t\t\"el\": el\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn elems && elems[0] ? (elems[0].inputmask || this) : this;\n\t\t},\n\t\toption: function (options, noremask) { //set extra options || retrieve value of a current option\n\t\t\tif (typeof options === \"string\") {\n\t\t\t\treturn this.opts[options];\n\t\t\t} else if (typeof options === \"object\") {\n\t\t\t\t$.extend(this.userOptions, options); //user passed options\n\t\t\t\t//remask\n\t\t\t\tif (this.el && noremask !== true) {\n\t\t\t\t\tthis.mask(this.el);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t},\n\t\tunmaskedvalue: function (value) {\n\t\t\treturn maskScope({\n\t\t\t\t\"action\": \"unmaskedvalue\",\n\t\t\t\t\"el\": this.el,\n\t\t\t\t\"value\": value\n\t\t\t}, this.el && this.el.inputmask ? this.el.inputmask.maskset : generateMaskSet(this.opts, this.noMasksCache), this.opts);\n\t\t},\n\t\tremove: function () {\n\t\t\tif (this.el) {\n\t\t\t\tmaskScope({\n\t\t\t\t\t\"action\": \"remove\",\n\t\t\t\t\t\"el\": this.el\n\t\t\t\t});\n\t\t\t\tthis.el.inputmask = undefined; //delete ~ undefined\n\t\t\t\treturn this.el;\n\t\t\t}\n\t\t},\n\t\tgetemptymask: function () { //return the default (empty) mask value, usefull for setting the default value in validation\n\t\t\treturn maskScope({\n\t\t\t\t\"action\": \"getemptymask\"\n\t\t\t}, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);\n\t\t},\n\t\thasMaskedValue: function () { //check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value\n\t\t\treturn !this.opts.autoUnmask;\n\t\t},\n\t\tisComplete: function () {\n\t\t\treturn maskScope({\n\t\t\t\t\"action\": \"isComplete\",\n\t\t\t\t\"el\": this.el //optional\n\t\t\t}, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);\n\t\t},\n\t\tgetmetadata: function () { //return mask metadata if exists\n\t\t\treturn maskScope({\n\t\t\t\t\"action\": \"getmetadata\"\n\t\t\t}, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);\n\t\t},\n\t\tisValid: function (value) {\n\t\t\treturn maskScope({\n\t\t\t\t\"action\": \"isValid\",\n\t\t\t\t\"value\": value\n\t\t\t}, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);\n\t\t},\n\t\tformat: function (value, metadata) {\n\t\t\treturn maskScope({\n\t\t\t\t\"action\": \"format\",\n\t\t\t\t\"value\": value,\n\t\t\t\t\"metadata\": metadata //true/false getmetadata\n\t\t\t}, this.maskset || generateMaskSet(this.opts, this.noMasksCache), this.opts);\n\t\t}\n\t};\n\n\t//apply defaults, definitions, aliases\n\tInputmask.extendDefaults = function (options) {\n\t\t$.extend(true, Inputmask.prototype.defaults, options);\n\t};\n\tInputmask.extendDefinitions = function (definition) {\n\t\t$.extend(true, Inputmask.prototype.defaults.definitions, definition);\n\t};\n\tInputmask.extendAliases = function (alias) {\n\t\t$.extend(true, Inputmask.prototype.defaults.aliases, alias);\n\t};\n\t//static fn on inputmask\n\tInputmask.format = function (value, options, metadata) {\n\t\treturn Inputmask(options).format(value, metadata);\n\t};\n\tInputmask.unmask = function (value, options) {\n\t\treturn Inputmask(options).unmaskedvalue(value);\n\t};\n\tInputmask.isValid = function (value, options) {\n\t\treturn Inputmask(options).isValid(value);\n\t};\n\tInputmask.remove = function (elems) {\n\t\t$.each(elems, function (ndx, el) {\n\t\t\tif (el.inputmask) el.inputmask.remove();\n\t\t});\n\t};\n\tInputmask.escapeRegex = function (str) {\n\t\tvar specials = [\"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\"];\n\t\treturn str.replace(new RegExp(\"(\\\\\" + specials.join(\"|\\\\\") + \")\", \"gim\"), \"\\\\$1\");\n\t};\n\tInputmask.keyCode = {\n\t\tALT: 18,\n\t\tBACKSPACE: 8,\n\t\tBACKSPACE_SAFARI: 127,\n\t\tCAPS_LOCK: 20,\n\t\tCOMMA: 188,\n\t\tCOMMAND: 91,\n\t\tCOMMAND_LEFT: 91,\n\t\tCOMMAND_RIGHT: 93,\n\t\tCONTROL: 17,\n\t\tDELETE: 46,\n\t\tDOWN: 40,\n\t\tEND: 35,\n\t\tENTER: 13,\n\t\tESCAPE: 27,\n\t\tHOME: 36,\n\t\tINSERT: 45,\n\t\tLEFT: 37,\n\t\tMENU: 93,\n\t\tNUMPAD_ADD: 107,\n\t\tNUMPAD_DECIMAL: 110,\n\t\tNUMPAD_DIVIDE: 111,\n\t\tNUMPAD_ENTER: 108,\n\t\tNUMPAD_MULTIPLY: 106,\n\t\tNUMPAD_SUBTRACT: 109,\n\t\tPAGE_DOWN: 34,\n\t\tPAGE_UP: 33,\n\t\tPERIOD: 190,\n\t\tRIGHT: 39,\n\t\tSHIFT: 16,\n\t\tSPACE: 32,\n\t\tTAB: 9,\n\t\tUP: 38,\n\t\tWINDOWS: 91,\n\t\tX: 88\n\t};\n\n\t//helper functions\n\tfunction isInputEventSupported(eventName) {\n\t\tvar el = document.createElement(\"input\"),\n\t\t\tevName = \"on\" + eventName,\n\t\t\tisSupported = (evName in el);\n\t\tif (!isSupported) {\n\t\t\tel.setAttribute(evName, \"return;\");\n\t\t\tisSupported = typeof el[evName] == \"function\";\n\t\t}\n\t\tel = null;\n\t\treturn isSupported;\n\t}\n\n\tfunction isElementTypeSupported(input, opts) {\n\t\tvar elementType = input.getAttribute(\"type\");\n\t\tvar isSupported = (input.tagName === \"INPUT\" && $.inArray(elementType, opts.supportsInputType) !== -1) || input.isContentEditable || input.tagName === \"TEXTAREA\";\n\t\tif (!isSupported && input.tagName === \"INPUT\") {\n\t\t\tvar el = document.createElement(\"input\");\n\t\t\tel.setAttribute(\"type\", elementType);\n\t\t\tisSupported = el.type === \"text\"; //apply mask only if the type is not natively supported\n\t\t\tel = null;\n\t\t}\n\t\treturn isSupported;\n\t}\n\n\tfunction resolveAlias(aliasStr, options, opts) {\n\t\tvar aliasDefinition = opts.aliases[aliasStr];\n\t\tif (aliasDefinition) {\n\t\t\tif (aliasDefinition.alias) resolveAlias(aliasDefinition.alias, undefined, opts); //alias is another alias\n\t\t\t$.extend(true, opts, aliasDefinition); //merge alias definition in the options\n\t\t\t$.extend(true, opts, options); //reapply extra given options\n\t\t\treturn true;\n\t\t} else //alias not found - try as mask\n\t\tif (opts.mask === null) {\n\t\t\topts.mask = aliasStr;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tfunction importAttributeOptions(npt, opts, userOptions) {\n\t\tvar attrOptions = npt.getAttribute(\"data-inputmask\"),\n\t\t\toption, dataoptions, optionData, p;\n\n\t\tfunction importOption(option, optionData) {\n\t\t\toptionData = optionData !== undefined ? optionData : npt.getAttribute(\"data-inputmask-\" + option);\n\t\t\tif (optionData !== null) {\n\t\t\t\tif (typeof optionData === \"string\") {\n\t\t\t\t\tif (option.indexOf(\"on\") === 0) optionData = window[optionData]; //get function definition\n\t\t\t\t\telse if (optionData === \"false\") optionData = false;\n\t\t\t\t\telse if (optionData === \"true\") optionData = true;\n\t\t\t\t}\n\t\t\t\tuserOptions[option] = optionData;\n\t\t\t}\n\t\t}\n\n\t\tif (attrOptions && attrOptions !== \"\") {\n\t\t\tattrOptions = attrOptions.replace(new RegExp(\"'\", \"g\"), '\"');\n\t\t\tdataoptions = JSON.parse(\"{\" + attrOptions + \"}\");\n\t\t}\n\n\t\t//resolve aliases\n\t\tif (dataoptions) { //pickup alias from data-inputmask\n\t\t\toptionData = undefined;\n\t\t\tfor (p in dataoptions) {\n\t\t\t\tif (p.toLowerCase() === \"alias\") {\n\t\t\t\t\toptionData = dataoptions[p];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\timportOption(\"alias\", optionData); //pickup alias from data-inputmask-alias\n\t\tif (userOptions.alias) {\n\t\t\tresolveAlias(userOptions.alias, userOptions, opts);\n\t\t}\n\n\t\tfor (option in opts) {\n\t\t\tif (dataoptions) {\n\t\t\t\toptionData = undefined;\n\t\t\t\tfor (p in dataoptions) {\n\t\t\t\t\tif (p.toLowerCase() === option.toLowerCase()) {\n\t\t\t\t\t\toptionData = dataoptions[p];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\timportOption(option, optionData);\n\t\t}\n\n\t\t$.extend(true, opts, userOptions);\n\t\treturn opts;\n\t}\n\n\tfunction generateMaskSet(opts, nocache) {\n\t\tvar ms;\n\n\t\tfunction analyseMask(mask) {\n\t\t\tvar tokenizer = /(?:[?*+]|\\{[0-9\\+\\*]+(?:,[0-9\\+\\*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g,\n\t\t\t\tescaped = false,\n\t\t\t\tcurrentToken = new MaskToken(),\n\t\t\t\tmatch,\n\t\t\t\tm,\n\t\t\t\topenenings = [],\n\t\t\t\tmaskTokens = [],\n\t\t\t\topeningToken,\n\t\t\t\tcurrentOpeningToken,\n\t\t\t\talternator,\n\t\t\t\tlastMatch,\n\t\t\t\tgroupToken;\n\n\t\t\tfunction MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\n\t\t\t\tthis.matches = [];\n\t\t\t\tthis.isGroup = isGroup || false;\n\t\t\t\tthis.isOptional = isOptional || false;\n\t\t\t\tthis.isQuantifier = isQuantifier || false;\n\t\t\t\tthis.isAlternator = isAlternator || false;\n\t\t\t\tthis.quantifier = {\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: 1\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t//test definition => {fn: RegExp/function, cardinality: int, optionality: bool, newBlockMarker: bool, casing: null/upper/lower, def: definitionSymbol, placeholder: placeholder, mask: real maskDefinition}\n\t\t\tfunction insertTestDefinition(mtoken, element, position) {\n\t\t\t\tvar maskdef = opts.definitions[element];\n\t\t\t\tposition = position !== undefined ? position : mtoken.matches.length;\n\t\t\t\tvar prevMatch = mtoken.matches[position - 1];\n\t\t\t\tif (maskdef && !escaped) {\n\t\t\t\t\tmaskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder(opts) : maskdef.placeholder;\n\t\t\t\t\tvar prevalidators = maskdef.prevalidator,\n\t\t\t\t\t\tprevalidatorsL = prevalidators ? prevalidators.length : 0;\n\t\t\t\t\t//handle prevalidators\n\t\t\t\t\tfor (var i = 1; i < maskdef.cardinality; i++) {\n\t\t\t\t\t\tvar prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [],\n\t\t\t\t\t\t\tvalidator = prevalidator.validator,\n\t\t\t\t\t\t\tcardinality = prevalidator.cardinality;\n\t\t\t\t\t\tmtoken.matches.splice(position++, 0, {\n\t\t\t\t\t\t\tfn: validator ? typeof validator === \"string\" ? new RegExp(validator) : new function () {\n\t\t\t\t\t\t\t\tthis.test = validator;\n\t\t\t\t\t\t\t} : new RegExp(\".\"),\n\t\t\t\t\t\t\tcardinality: cardinality ? cardinality : 1,\n\t\t\t\t\t\t\toptionality: mtoken.isOptional,\n\t\t\t\t\t\t\tnewBlockMarker: prevMatch === undefined || prevMatch.def !== (maskdef.definitionSymbol || element),\n\t\t\t\t\t\t\tcasing: maskdef.casing,\n\t\t\t\t\t\t\tdef: maskdef.definitionSymbol || element,\n\t\t\t\t\t\t\tplaceholder: maskdef.placeholder,\n\t\t\t\t\t\t\tmask: element\n\t\t\t\t\t\t});\n\t\t\t\t\t\tprevMatch = mtoken.matches[position - 1];\n\t\t\t\t\t}\n\t\t\t\t\tmtoken.matches.splice(position++, 0, {\n\t\t\t\t\t\tfn: maskdef.validator ? typeof maskdef.validator == \"string\" ? new RegExp(maskdef.validator) : new function () {\n\t\t\t\t\t\t\tthis.test = maskdef.validator;\n\t\t\t\t\t\t} : new RegExp(\".\"),\n\t\t\t\t\t\tcardinality: maskdef.cardinality,\n\t\t\t\t\t\toptionality: mtoken.isOptional,\n\t\t\t\t\t\tnewBlockMarker: prevMatch === undefined || prevMatch.def !== (maskdef.definitionSymbol || element),\n\t\t\t\t\t\tcasing: maskdef.casing,\n\t\t\t\t\t\tdef: maskdef.definitionSymbol || element,\n\t\t\t\t\t\tplaceholder: maskdef.placeholder,\n\t\t\t\t\t\tmask: element\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tmtoken.matches.splice(position++, 0, {\n\t\t\t\t\t\tfn: null,\n\t\t\t\t\t\tcardinality: 0,\n\t\t\t\t\t\toptionality: mtoken.isOptional,\n\t\t\t\t\t\tnewBlockMarker: prevMatch === undefined || prevMatch.def !== element,\n\t\t\t\t\t\tcasing: null,\n\t\t\t\t\t\tdef: opts.staticDefinitionSymbol || element,\n\t\t\t\t\t\tplaceholder: opts.staticDefinitionSymbol !== undefined ? element : undefined,\n\t\t\t\t\t\tmask: element\n\t\t\t\t\t});\n\t\t\t\t\tescaped = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction verifyGroupMarker(lastMatch, isOpenGroup) {\n\t\t\t\tif (lastMatch.isGroup) { //this is not a group but a normal mask => convert\n\t\t\t\t\tlastMatch.isGroup = false;\n\t\t\t\t\tinsertTestDefinition(lastMatch, opts.groupmarker.start, 0);\n\t\t\t\t\tif (isOpenGroup !== true) {\n\t\t\t\t\t\tinsertTestDefinition(lastMatch, opts.groupmarker.end);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction maskCurrentToken(m, currentToken, lastMatch, extraCondition) {\n\t\t\t\tif (currentToken.matches.length > 0 && (extraCondition === undefined || extraCondition)) {\n\t\t\t\t\tlastMatch = currentToken.matches[currentToken.matches.length - 1];\n\t\t\t\t\tverifyGroupMarker(lastMatch);\n\t\t\t\t}\n\t\t\t\tinsertTestDefinition(currentToken, m);\n\t\t\t}\n\n\t\t\tfunction defaultCase() {\n\t\t\t\tif (openenings.length > 0) {\n\t\t\t\t\tcurrentOpeningToken = openenings[openenings.length - 1];\n\t\t\t\t\tmaskCurrentToken(m, currentOpeningToken, lastMatch, !currentOpeningToken.isAlternator);\n\t\t\t\t\tif (currentOpeningToken.isAlternator) { //handle alternator a | b case\n\t\t\t\t\t\talternator = openenings.pop();\n\t\t\t\t\t\tfor (var mndx = 0; mndx < alternator.matches.length; mndx++) {\n\t\t\t\t\t\t\talternator.matches[mndx].isGroup = false; //don't mark alternate groups as group\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (openenings.length > 0) {\n\t\t\t\t\t\t\tcurrentOpeningToken = openenings[openenings.length - 1];\n\t\t\t\t\t\t\tcurrentOpeningToken.matches.push(alternator);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentToken.matches.push(alternator);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tmaskCurrentToken(m, currentToken, lastMatch);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction reverseTokens(maskToken) {\n\t\t\t\tfunction reverseStatic(st) {\n\t\t\t\t\tif (st === opts.optionalmarker.start) st = opts.optionalmarker.end;\n\t\t\t\t\telse if (st === opts.optionalmarker.end) st = opts.optionalmarker.start;\n\t\t\t\t\telse if (st === opts.groupmarker.start) st = opts.groupmarker.end;\n\t\t\t\t\telse if (st === opts.groupmarker.end) st = opts.groupmarker.start;\n\n\t\t\t\t\treturn st;\n\t\t\t\t}\n\n\t\t\t\tmaskToken.matches = maskToken.matches.reverse();\n\t\t\t\tfor (var match in maskToken.matches) {\n\t\t\t\t\tvar intMatch = parseInt(match);\n\t\t\t\t\tif (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) { //reposition quantifier\n\t\t\t\t\t\tvar qt = maskToken.matches[match];\n\t\t\t\t\t\tmaskToken.matches.splice(match, 1);\n\t\t\t\t\t\tmaskToken.matches.splice(intMatch + 1, 0, qt);\n\t\t\t\t\t}\n\t\t\t\t\tif (maskToken.matches[match].matches !== undefined) {\n\t\t\t\t\t\tmaskToken.matches[match] = reverseTokens(maskToken.matches[match]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmaskToken.matches[match] = reverseStatic(maskToken.matches[match]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn maskToken;\n\t\t\t}\n\n\t\t\twhile (match = tokenizer.exec(mask)) {\n\t\t\t\tm = match[0];\n\n\t\t\t\tif (escaped) {\n\t\t\t\t\tdefaultCase();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tswitch (m.charAt(0)) {\n\t\t\t\t\tcase opts.escapeChar:\n\t\t\t\t\t\tescaped = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase opts.optionalmarker.end:\n\t\t\t\t\t// optional closing\n\t\t\t\t\tcase opts.groupmarker.end:\n\t\t\t\t\t\t// Group closing\n\t\t\t\t\t\topeningToken = openenings.pop();\n\t\t\t\t\t\tif (openingToken !== undefined) {\n\t\t\t\t\t\t\tif (openenings.length > 0) {\n\t\t\t\t\t\t\t\tcurrentOpeningToken = openenings[openenings.length - 1];\n\t\t\t\t\t\t\t\tcurrentOpeningToken.matches.push(openingToken);\n\t\t\t\t\t\t\t\tif (currentOpeningToken.isAlternator) { //handle alternator (a) | (b) case\n\t\t\t\t\t\t\t\t\talternator = openenings.pop();\n\t\t\t\t\t\t\t\t\tfor (var mndx = 0; mndx < alternator.matches.length; mndx++) {\n\t\t\t\t\t\t\t\t\t\talternator.matches[mndx].isGroup = false; //don't mark alternate groups as group\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (openenings.length > 0) {\n\t\t\t\t\t\t\t\t\t\tcurrentOpeningToken = openenings[openenings.length - 1];\n\t\t\t\t\t\t\t\t\t\tcurrentOpeningToken.matches.push(alternator);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcurrentToken.matches.push(alternator);\n\t\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} else {\n\t\t\t\t\t\t\t\tcurrentToken.matches.push(openingToken);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else defaultCase();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase opts.optionalmarker.start:\n\t\t\t\t\t\t// optional opening\n\t\t\t\t\t\topenenings.push(new MaskToken(false, true));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase opts.groupmarker.start:\n\t\t\t\t\t\t// Group opening\n\t\t\t\t\t\topenenings.push(new MaskToken(true));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase opts.quantifiermarker.start:\n\t\t\t\t\t\t//Quantifier\n\t\t\t\t\t\tvar quantifier = new MaskToken(false, false, true);\n\n\t\t\t\t\t\tm = m.replace(/[{}]/g, \"\");\n\t\t\t\t\t\tvar mq = m.split(\",\"),\n\t\t\t\t\t\t\tmq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]),\n\t\t\t\t\t\t\tmq1 = mq.length === 1 ? mq0 : (isNaN(mq[1]) ? mq[1] : parseInt(mq[1]));\n\t\t\t\t\t\tif (mq1 === \"*\" || mq1 === \"+\") {\n\t\t\t\t\t\t\tmq0 = mq1 === \"*\" ? 0 : 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tquantifier.quantifier = {\n\t\t\t\t\t\t\tmin: mq0,\n\t\t\t\t\t\t\tmax: mq1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (openenings.length > 0) {\n\t\t\t\t\t\t\tvar matches = openenings[openenings.length - 1].matches;\n\t\t\t\t\t\t\tmatch = matches.pop();\n\t\t\t\t\t\t\tif (!match.isGroup) {\n\t\t\t\t\t\t\t\tgroupToken = new MaskToken(true);\n\t\t\t\t\t\t\t\tgroupToken.matches.push(match);\n\t\t\t\t\t\t\t\tmatch = groupToken;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatches.push(match);\n\t\t\t\t\t\t\tmatches.push(quantifier);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmatch = currentToken.matches.pop();\n\t\t\t\t\t\t\tif (!match.isGroup) {\n\t\t\t\t\t\t\t\tgroupToken = new MaskToken(true);\n\t\t\t\t\t\t\t\tgroupToken.matches.push(match);\n\t\t\t\t\t\t\t\tmatch = groupToken;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcurrentToken.matches.push(match);\n\t\t\t\t\t\t\tcurrentToken.matches.push(quantifier);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase opts.alternatormarker:\n\t\t\t\t\t\tif (openenings.length > 0) {\n\t\t\t\t\t\t\tcurrentOpeningToken = openenings[openenings.length - 1];\n\t\t\t\t\t\t\tlastMatch = currentOpeningToken.matches.pop();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlastMatch = currentToken.matches.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (lastMatch.isAlternator) {\n\t\t\t\t\t\t\topenenings.push(lastMatch);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talternator = new MaskToken(false, false, false, true);\n\t\t\t\t\t\t\talternator.matches.push(lastMatch);\n\t\t\t\t\t\t\topenenings.push(alternator);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdefaultCase();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (openenings.length > 0) {\n\t\t\t\topeningToken = openenings.pop();\n\t\t\t\tverifyGroupMarker(openingToken, true);\n\t\t\t\tcurrentToken.matches.push(openingToken);\n\t\t\t}\n\t\t\tif (currentToken.matches.length > 0) {\n\t\t\t\tlastMatch = currentToken.matches[currentToken.matches.length - 1];\n\t\t\t\tverifyGroupMarker(lastMatch);\n\t\t\t\tmaskTokens.push(currentToken);\n\t\t\t}\n\n\t\t\tif (opts.numericInput) {\n\t\t\t\treverseTokens(maskTokens[0]);\n\t\t\t}\n\t\t\t// console.log(JSON.stringify(maskTokens));\n\t\t\treturn maskTokens;\n\t\t}\n\n\t\tfunction generateMask(mask, metadata) {\n\t\t\tif (mask === null || mask === \"\") {\n\t\t\t\treturn undefined;\n\t\t\t} else {\n\t\t\t\tif (mask.length === 1 && opts.greedy === false && opts.repeat !== 0) {\n\t\t\t\t\topts.placeholder = \"\";\n\t\t\t\t} //hide placeholder with single non-greedy mask\n\t\t\t\tif (opts.repeat > 0 || opts.repeat === \"*\" || opts.repeat === \"+\") {\n\t\t\t\t\tvar repeatStart = opts.repeat === \"*\" ? 0 : (opts.repeat === \"+\" ? 1 : opts.repeat);\n\t\t\t\t\tmask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + \",\" + opts.repeat + opts.quantifiermarker.end;\n\t\t\t\t}\n\n\t\t\t\t// console.log(mask);\n\t\t\t\tvar masksetDefinition;\n\t\t\t\tif (Inputmask.prototype.masksCache[mask] === undefined || nocache === true) {\n\t\t\t\t\tmasksetDefinition = {\n\t\t\t\t\t\t\"mask\": mask,\n\t\t\t\t\t\t\"maskToken\": analyseMask(mask),\n\t\t\t\t\t\t\"validPositions\": {},\n\t\t\t\t\t\t\"_buffer\": undefined,\n\t\t\t\t\t\t\"buffer\": undefined,\n\t\t\t\t\t\t\"tests\": {},\n\t\t\t\t\t\t\"metadata\": metadata\n\t\t\t\t\t};\n\t\t\t\t\tif (nocache !== true) {\n\t\t\t\t\t\tInputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask] = masksetDefinition;\n\t\t\t\t\t\tmasksetDefinition = $.extend(true, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]);\n\t\t\t\t\t}\n\t\t\t\t} else masksetDefinition = $.extend(true, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]);\n\n\t\t\t\treturn masksetDefinition;\n\t\t\t}\n\t\t}\n\n\t\tfunction preProcessMask(mask) {\n\t\t\tmask = mask.toString();\n\t\t\t// if (opts.numericInput) {\n\t\t\t// \tmask = mask.split('').reverse();\n\t\t\t// \tmask = mask.join('');\n\t\t\t// }\n\t\t\treturn mask;\n\t\t}\n\n\t\tif ($.isFunction(opts.mask)) { //allow mask to be a preprocessing fn - should return a valid mask\n\t\t\topts.mask = opts.mask(opts);\n\t\t}\n\t\tif ($.isArray(opts.mask)) {\n\t\t\tif (opts.mask.length > 1) {\n\t\t\t\topts.keepStatic = opts.keepStatic === null ? true : opts.keepStatic; //enable by default when passing multiple masks when the option is not explicitly specified\n\t\t\t\tvar altMask = \"(\";\n\t\t\t\t$.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function (ndx, msk) {\n\t\t\t\t\tif (altMask.length > 1) {\n\t\t\t\t\t\taltMask += \")|(\";\n\t\t\t\t\t}\n\t\t\t\t\tif (msk.mask !== undefined && !$.isFunction(msk.mask)) {\n\t\t\t\t\t\taltMask += preProcessMask(msk.mask);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taltMask += preProcessMask(msk);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\taltMask += \")\";\n\t\t\t\treturn generateMask(altMask, opts.mask);\n\t\t\t} else opts.mask = opts.mask.pop();\n\t\t}\n\n\t\tif (opts.mask) {\n\t\t\tif (opts.mask.mask !== undefined && !$.isFunction(opts.mask.mask)) {\n\t\t\t\tms = generateMask(preProcessMask(opts.mask.mask), opts.mask);\n\t\t\t} else {\n\t\t\t\tms = generateMask(preProcessMask(opts.mask), opts.mask);\n\t\t\t}\n\t\t}\n\n\t\treturn ms;\n\t}\n\n\tvar ua = navigator.userAgent,\n\t\tmobile = /mobile/i.test(ua),\n\t\tiemobile = /iemobile/i.test(ua),\n\t\tiphone = /iphone/i.test(ua) && !iemobile;\n\t//android = /android.*safari.*/i.test(ua) && !iemobile;\n\n\t//masking scope\n\t//actionObj definition see below\n\tfunction maskScope(actionObj, maskset, opts) {\n\t\tvar isRTL = false,\n\t\t\tundoValue,\n\t\t\tel, $el,\n\t\t\tskipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround\n\t\t\tskipInputEvent = false, //skip when triggered from within inputmask\n\t\t\tignorable = false,\n\t\t\tmaxLength,\n\t\t\tmouseEnter = true;\n\n\t\t//maskset helperfunctions\n\t\tfunction getMaskTemplate(baseOnInput, minimalPos, includeInput) {\n\t\t\tminimalPos = minimalPos || 0;\n\t\t\tvar maskTemplate = [],\n\t\t\t\tndxIntlzr, pos = 0,\n\t\t\t\ttest, testPos, lvp = getLastValidPosition();\n\t\t\tmaxLength = el !== undefined ? el.maxLength : undefined;\n\t\t\tif (maxLength === -1) maxLength = undefined;\n\t\t\tdo {\n\t\t\t\tif (baseOnInput === true && getMaskSet().validPositions[pos]) {\n\t\t\t\t\tvar validPos = getMaskSet().validPositions[pos];\n\t\t\t\t\ttest = validPos.match;\n\t\t\t\t\tndxIntlzr = validPos.locator.slice();\n\t\t\t\t\tmaskTemplate.push(includeInput === true ? validPos.input : getPlaceholder(pos, test));\n\t\t\t\t} else {\n\t\t\t\t\ttestPos = getTestTemplate(pos, ndxIntlzr, pos - 1);\n\t\t\t\t\ttest = testPos.match;\n\t\t\t\t\tndxIntlzr = testPos.locator.slice();\n\t\t\t\t\tif (opts.jitMasking === false || pos < lvp || (isFinite(opts.jitMasking) && opts.jitMasking > pos)) {\n\t\t\t\t\t\tmaskTemplate.push(getPlaceholder(pos, test));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpos++;\n\t\t\t} while ((maxLength === undefined || pos < maxLength) && (test.fn !== null || test.def !== \"\") || minimalPos > pos);\n\t\t\tif (maskTemplate[maskTemplate.length - 1] === \"\") {\n\t\t\t\tmaskTemplate.pop(); //drop the last one which is empty\n\t\t\t}\n\n\t\t\tgetMaskSet().maskLength = pos + 1;\n\t\t\treturn maskTemplate;\n\t\t}\n\n\t\tfunction getMaskSet() {\n\t\t\treturn maskset;\n\t\t}\n\n\t\tfunction resetMaskSet(soft) {\n\t\t\tvar maskset = getMaskSet();\n\t\t\tmaskset.buffer = undefined;\n\t\t\tif (soft !== true) {\n\t\t\t\tmaskset.tests = {};\n\t\t\t\tmaskset._buffer = undefined;\n\t\t\t\tmaskset.validPositions = {};\n\t\t\t\tmaskset.p = 0;\n\t\t\t}\n\t\t}\n\n\t\tfunction getLastValidPosition(closestTo, strict, validPositions) {\n\t\t\tvar before = -1,\n\t\t\t\tafter = -1,\n\t\t\t\tvalids = validPositions || getMaskSet().validPositions; //for use in valhook ~ context switch\n\t\t\tif (closestTo === undefined) closestTo = -1;\n\t\t\tfor (var posNdx in valids) {\n\t\t\t\tvar psNdx = parseInt(posNdx);\n\t\t\t\tif (valids[psNdx] && (strict || valids[psNdx].match.fn !== null)) {\n\t\t\t\t\tif (psNdx <= closestTo) before = psNdx;\n\t\t\t\t\tif (psNdx >= closestTo) after = psNdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn (before !== -1 && (closestTo - before) > 1) || after < closestTo ? before : after;\n\t\t}\n\n\t\tfunction setValidPosition(pos, validTest, fromSetValid, isSelection) {\n\t\t\tif (isSelection || (opts.insertMode && getMaskSet().validPositions[pos] !== undefined && fromSetValid === undefined)) {\n\t\t\t\t//reposition & revalidate others\n\t\t\t\tvar positionsClone = $.extend(true, {}, getMaskSet().validPositions),\n\t\t\t\t\tlvp = getLastValidPosition(),\n\t\t\t\t\ti;\n\t\t\t\tfor (i = pos; i <= lvp; i++) { //clear selection\n\t\t\t\t\tdelete getMaskSet().validPositions[i];\n\t\t\t\t}\n\t\t\t\tgetMaskSet().validPositions[pos] = validTest;\n\t\t\t\tvar valid = true,\n\t\t\t\t\tj, vps = getMaskSet().validPositions, needsValidation = false;\n\t\t\t\tfor (i = (j = pos); i <= lvp; i++) {\n\t\t\t\t\tvar t = positionsClone[i];\n\t\t\t\t\tif (t !== undefined) {\n\t\t\t\t\t\tvar posMatch = j,\n\t\t\t\t\t\t\tprevPosMatch = -1;\n\t\t\t\t\t\twhile (posMatch < getMaskSet().maskLength && ((t.match.fn == null && vps[i] && (vps[i].match.optionalQuantifier === true || vps[i].match.optionality === true)) || t.match.fn != null)) {\n\t\t\t\t\t\t\t//determine next position\n\t\t\t\t\t\t\tif (t.match.fn === null || (!opts.keepStatic && vps[i] && (vps[i + 1] !== undefined && getTests(i + 1, vps[i].locator.slice(), i).length > 1 || vps[i].alternation !== undefined))) {\n\t\t\t\t\t\t\t\tposMatch++;\n\t\t\t\t\t\t\t} else posMatch = seekNext(j);\n\n\t\t\t\t\t\t\tif (needsValidation === false && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) { //obvious match\n\t\t\t\t\t\t\t\tgetMaskSet().validPositions[posMatch] = $.extend(true, {}, positionsClone[posMatch]);\n\t\t\t\t\t\t\t\tgetMaskSet().validPositions[posMatch].input = t.input;\n\t\t\t\t\t\t\t\tj = posMatch;\n\t\t\t\t\t\t\t\tvalid = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else if (positionCanMatchDefinition(posMatch, t.match.def)) { //validated match\n\t\t\t\t\t\t\t\tvar result = isValid(posMatch, t.input, true, true);\n\t\t\t\t\t\t\t\tvalid = result !== false;\n\t\t\t\t\t\t\t\tj = (result.caret || result.insert) ? getLastValidPosition() : posMatch;\n\t\t\t\t\t\t\t\tneedsValidation = true;\n\t\t\t\t\t\t\t\tif (valid) break;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvalid = t.match.fn == null;\n\t\t\t\t\t\t\t\tif (prevPosMatch === posMatch) break; //prevent endless loop\n\t\t\t\t\t\t\t\tprevPosMatch = posMatch;\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\tif (!valid) break;\n\t\t\t\t}\n\n\t\t\t\tif (!valid) {\n\t\t\t\t\tgetMaskSet().validPositions = $.extend(true, {}, positionsClone);\n\t\t\t\t\tresetMaskSet(true);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else getMaskSet().validPositions[pos] = validTest;\n\n\t\t\tresetMaskSet(true);\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction stripValidPositions(start, end, nocheck, strict) {\n\t\t\tfunction IsEnclosedStatic(pos) {\n\t\t\t\tvar posMatch = getMaskSet().validPositions[pos];\n\t\t\t\tif (posMatch !== undefined && posMatch.match.fn === null) {\n\t\t\t\t\tvar prevMatch = getMaskSet().validPositions[pos - 1],\n\t\t\t\t\t\tnextMatch = getMaskSet().validPositions[pos + 1];\n\t\t\t\t\treturn prevMatch !== undefined && nextMatch !== undefined;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar i, startPos = start,\n\t\t\t\tpositionsClone = $.extend(true, {}, getMaskSet().validPositions), needsValidation = false;\n\t\t\tgetMaskSet().p = start; //needed for alternated position after overtype selection\n\n\t\t\tfor (i = end - 1; i >= startPos; i--) { //clear selection\n\t\t\t\tif (getMaskSet().validPositions[i] !== undefined) {\n\t\t\t\t\tif (nocheck === true ||\n\t\t\t\t\t\t(!IsEnclosedStatic(i) && opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) !== false)) {\n\t\t\t\t\t\tdelete getMaskSet().validPositions[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//clear buffer\n\t\t\tresetMaskSet(true);\n\t\t\tfor (i = startPos + 1; i <= getLastValidPosition();) {\n\t\t\t\twhile (getMaskSet().validPositions[startPos] !== undefined) startPos++;\n\t\t\t\tvar s = getMaskSet().validPositions[startPos];\n\t\t\t\tif (i < startPos) i = startPos + 1;\n\t\t\t\t// while (getMaskSet().validPositions[i] == undefined) i++;\n\t\t\t\tif ((getMaskSet().validPositions[i] !== undefined || !isMask(i)) && s === undefined) {\n\t\t\t\t\tvar t = getTestTemplate(i);\n\t\t\t\t\tif (needsValidation === false && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def) { //obvious match\n\t\t\t\t\t\tgetMaskSet().validPositions[startPos] = $.extend(true, {}, positionsClone[startPos]);\n\t\t\t\t\t\tgetMaskSet().validPositions[startPos].input = t.input;\n\t\t\t\t\t\tdelete getMaskSet().validPositions[i];\n\t\t\t\t\t\ti++;\n\t\t\t\t\t} else if (positionCanMatchDefinition(startPos, t.match.def)) {\n\t\t\t\t\t\tif (isValid(startPos, t.input || getPlaceholder(i), true) !== false) {\n\t\t\t\t\t\t\tdelete getMaskSet().validPositions[i];\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\tneedsValidation = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!isMask(i)) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tstartPos--;\n\t\t\t\t\t}\n\t\t\t\t\tstartPos++;\n\t\t\t\t} else i++;\n\t\t\t}\n\n\t\t\tresetMaskSet(true);\n\t\t}\n\n\t\tfunction getTestTemplate(pos, ndxIntlzr, tstPs) {\n\t\t\tvar testPos = getMaskSet().validPositions[pos];\n\t\t\tif (testPos === undefined) {\n\t\t\t\tvar testPositions = getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs),\n\t\t\t\t\tlvp = getLastValidPosition(),\n\t\t\t\t\tlvTest = getMaskSet().validPositions[lvp] || getTests(0)[0],\n\t\t\t\t\tlvTestAltArr = (lvTest.alternation !== undefined) ? lvTest.locator[lvTest.alternation].toString().split(\",\") : [];\n\t\t\t\tfor (var ndx = 0; ndx < testPositions.length; ndx++) {\n\t\t\t\t\ttestPos = testPositions[ndx];\n\n\t\t\t\t\tif (testPos.match &&\n\t\t\t\t\t\t(((opts.greedy && testPos.match.optionalQuantifier !== true) || (testPos.match.optionality === false || testPos.match.newBlockMarker === false) && testPos.match.optionalQuantifier !== true) &&\n\t\t\t\t\t\t((lvTest.alternation === undefined || lvTest.alternation !== testPos.alternation) ||\n\t\t\t\t\t\t(testPos.locator[lvTest.alternation] !== undefined && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAltArr))))) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn testPos;\n\t\t}\n\n\t\tfunction getTest(pos) {\n\t\t\tif (getMaskSet().validPositions[pos]) {\n\t\t\t\treturn getMaskSet().validPositions[pos].match;\n\t\t\t}\n\t\t\treturn getTests(pos)[0].match;\n\t\t}\n\n\t\tfunction positionCanMatchDefinition(pos, def) {\n\t\t\tvar valid = false,\n\t\t\t\ttests = getTests(pos);\n\t\t\tfor (var tndx = 0; tndx < tests.length; tndx++) {\n\t\t\t\tif (tests[tndx].match && tests[tndx].match.def === def) {\n\t\t\t\t\tvalid = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn valid;\n\t\t}\n\n\t\tfunction selectBestMatch(pos, alternateNdx) {\n\t\t\tvar bestMatch, indexPos;\n\t\t\tif (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) {\n\t\t\t\t$.each(getMaskSet().tests[pos] || [getMaskSet().validPositions[pos]], function (ndx, lmnt) {\n\t\t\t\t\tvar ndxPos = lmnt.alternation ? lmnt.locator[lmnt.alternation].toString().indexOf(alternateNdx) : -1;\n\t\t\t\t\tif ((indexPos === undefined || ndxPos < indexPos) && ndxPos !== -1) {\n\t\t\t\t\t\tbestMatch = lmnt;\n\t\t\t\t\t\tindexPos = ndxPos;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn bestMatch;\n\t\t}\n\n\t\tfunction getTests(pos, ndxIntlzr, tstPs) {\n\t\t\tvar maskTokens = getMaskSet().maskToken,\n\t\t\t\ttestPos = ndxIntlzr ? tstPs : 0,\n\t\t\t\tndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [0],\n\t\t\t\tmatches = [],\n\t\t\t\tinsertStop = false,\n\t\t\t\tlatestMatch,\n\t\t\t\tcacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\n\n\t\t\tfunction resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) { //ndxInitializer contains a set of indexes to speedup searches in the mtokens\n\t\t\t\tfunction handleMatch(match, loopNdx, quantifierRecurse) {\n\t\t\t\t\tfunction isFirstMatch(latestMatch, tokenGroup) {\n\t\t\t\t\t\tvar firstMatch = $.inArray(latestMatch, tokenGroup.matches) === 0;\n\t\t\t\t\t\tif (!firstMatch) {\n\t\t\t\t\t\t\t$.each(tokenGroup.matches, function (ndx, match) {\n\t\t\t\t\t\t\t\tif (match.isQuantifier === true) {\n\t\t\t\t\t\t\t\t\tfirstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]);\n\t\t\t\t\t\t\t\t\tif (firstMatch) return false;\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\treturn firstMatch;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction resolveNdxInitializer(pos, alternateNdx) {\n\t\t\t\t\t\tvar bestMatch = selectBestMatch(pos, alternateNdx);\n\t\t\t\t\t\treturn bestMatch ? bestMatch.locator.slice(bestMatch.alternation + 1) : [];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (testPos > 10000) {\n\t\t\t\t\t\tthrow \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + getMaskSet().mask;\n\t\t\t\t\t}\n\t\t\t\t\tif (testPos === pos && match.matches === undefined) {\n\t\t\t\t\t\tmatches.push({\n\t\t\t\t\t\t\t\"match\": match,\n\t\t\t\t\t\t\t\"locator\": loopNdx.reverse(),\n\t\t\t\t\t\t\t\"cd\": cacheDependency\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else if (match.matches !== undefined) {\n\t\t\t\t\t\tif (match.isGroup && quantifierRecurse !== match) { //when a group pass along to the quantifier\n\t\t\t\t\t\t\tmatch = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx);\n\t\t\t\t\t\t\tif (match) return true;\n\t\t\t\t\t\t} else if (match.isOptional) {\n\t\t\t\t\t\t\tvar optionalToken = match;\n\t\t\t\t\t\t\tmatch = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse);\n\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\tlatestMatch = matches[matches.length - 1].match;\n\t\t\t\t\t\t\t\tif (isFirstMatch(latestMatch, optionalToken)) {\n\t\t\t\t\t\t\t\t\tinsertStop = true; //insert a stop\n\t\t\t\t\t\t\t\t\ttestPos = pos; //match the position after the group\n\t\t\t\t\t\t\t\t} else return true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (match.isAlternator) {\n\t\t\t\t\t\t\tvar alternateToken = match,\n\t\t\t\t\t\t\t\tmalternateMatches = [],\n\t\t\t\t\t\t\t\tmaltMatches,\n\t\t\t\t\t\t\t\tcurrentMatches = matches.slice(),\n\t\t\t\t\t\t\t\tloopNdxCnt = loopNdx.length;\n\t\t\t\t\t\t\tvar altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;\n\t\t\t\t\t\t\tif (altIndex === -1 || typeof altIndex === \"string\") {\n\t\t\t\t\t\t\t\tvar currentPos = testPos,\n\t\t\t\t\t\t\t\t\tndxInitializerClone = ndxInitializer.slice(),\n\t\t\t\t\t\t\t\t\taltIndexArr = [],\n\t\t\t\t\t\t\t\t\tamndx;\n\t\t\t\t\t\t\t\tif (typeof altIndex == \"string\") {\n\t\t\t\t\t\t\t\t\taltIndexArr = altIndex.split(\",\");\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfor (amndx = 0; amndx < alternateToken.matches.length; amndx++) {\n\t\t\t\t\t\t\t\t\t\taltIndexArr.push(amndx);\n\t\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\tfor (var ndx = 0; ndx < altIndexArr.length; ndx++) {\n\t\t\t\t\t\t\t\t\tamndx = parseInt(altIndexArr[ndx]);\n\t\t\t\t\t\t\t\t\tmatches = [];\n\t\t\t\t\t\t\t\t\t//set the correct ndxInitializer\n\t\t\t\t\t\t\t\t\tndxInitializer = resolveNdxInitializer(testPos, amndx);\n\t\t\t\t\t\t\t\t\tmatch = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [amndx].concat(loopNdx), quantifierRecurse) || match;\n\t\t\t\t\t\t\t\t\tif (match !== true && match !== undefined && (altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length)) { //no match in the alternations (length mismatch) => look further\n\t\t\t\t\t\t\t\t\t\tvar ntndx = $.inArray(match, maskToken.matches) + 1;\n\t\t\t\t\t\t\t\t\t\tif (maskToken.matches.length > ntndx) {\n\t\t\t\t\t\t\t\t\t\t\tmatch = handleMatch(maskToken.matches[ntndx], [ntndx].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse);\n\t\t\t\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t\t\t\taltIndexArr.push(ntndx.toString());\n\t\t\t\t\t\t\t\t\t\t\t\t$.each(matches, function (ndx, lmnt) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tlmnt.alternation = loopNdx.length - 1;\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmaltMatches = matches.slice();\n\t\t\t\t\t\t\t\t\ttestPos = currentPos;\n\t\t\t\t\t\t\t\t\tmatches = [];\n\t\t\t\t\t\t\t\t\t//cloneback\n\t\t\t\t\t\t\t\t\tfor (var i = 0; i < ndxInitializerClone.length; i++) {\n\t\t\t\t\t\t\t\t\t\tndxInitializer[i] = ndxInitializerClone[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t//fuzzy merge matches\n\t\t\t\t\t\t\t\t\tfor (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\n\t\t\t\t\t\t\t\t\t\tvar altMatch = maltMatches[ndx1];\n\t\t\t\t\t\t\t\t\t\taltMatch.alternation = altMatch.alternation || loopNdxCnt;\n\t\t\t\t\t\t\t\t\t\tfor (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\n\t\t\t\t\t\t\t\t\t\t\tvar altMatch2 = malternateMatches[ndx2];\n\t\t\t\t\t\t\t\t\t\t\t//verify equality\n\t\t\t\t\t\t\t\t\t\t\tif (altMatch.match.def === altMatch2.match.def && (typeof altIndex !== \"string\" || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1)) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (altMatch.match.mask === altMatch2.match.mask) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmaltMatches.splice(ndx1, 1);\n\t\t\t\t\t\t\t\t\t\t\t\t\tndx1--;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tif (altMatch2.locator[altMatch.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\taltMatch2.locator[altMatch.alternation] = altMatch2.locator[altMatch.alternation] + \",\" + altMatch.locator[altMatch.alternation];\n\t\t\t\t\t\t\t\t\t\t\t\t\taltMatch2.alternation = altMatch.alternation; //we pass the alternation index => used in determineLastRequiredPosition\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmalternateMatches = malternateMatches.concat(maltMatches);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (typeof altIndex == \"string\") { //filter matches\n\t\t\t\t\t\t\t\t\tmalternateMatches = $.map(malternateMatches, function (lmnt, ndx) {\n\t\t\t\t\t\t\t\t\t\tif (isFinite(ndx)) {\n\t\t\t\t\t\t\t\t\t\t\tvar mamatch,\n\t\t\t\t\t\t\t\t\t\t\t\talternation = lmnt.alternation,\n\t\t\t\t\t\t\t\t\t\t\t\taltLocArr = lmnt.locator[alternation].toString().split(\",\");\n\t\t\t\t\t\t\t\t\t\t\tlmnt.locator[alternation] = undefined;\n\t\t\t\t\t\t\t\t\t\t\tlmnt.alternation = undefined;\n\n\t\t\t\t\t\t\t\t\t\t\tfor (var alndx = 0; alndx < altLocArr.length; alndx++) {\n\t\t\t\t\t\t\t\t\t\t\t\tmamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1;\n\t\t\t\t\t\t\t\t\t\t\t\tif (mamatch) { //rebuild the locator with valid entries\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (lmnt.locator[alternation] !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlmnt.locator[alternation] += \",\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlmnt.locator[alternation] += altLocArr[alndx];\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else lmnt.locator[alternation] = parseInt(altLocArr[alndx]);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tlmnt.alternation = alternation;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif (lmnt.locator[alternation] !== undefined) return lmnt;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tmatches = currentMatches.concat(malternateMatches);\n\t\t\t\t\t\t\t\ttestPos = pos;\n\t\t\t\t\t\t\t\tinsertStop = matches.length > 0; //insert a stopelemnt when there is an alternate - needed for non-greedy option\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// if (alternateToken.matches[altIndex]) { //if not in the initial alternation => look further\n\t\t\t\t\t\t\t\tmatch = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [altIndex].concat(loopNdx), quantifierRecurse);\n\t\t\t\t\t\t\t\t// } else match = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (match) return true;\n\t\t\t\t\t\t} else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) {\n\t\t\t\t\t\t\tvar qt = match;\n\t\t\t\t\t\t\tfor (var qndx = (ndxInitializer.length > 0) ? ndxInitializer.shift() : 0; (qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max)) && testPos <= pos; qndx++) {\n\t\t\t\t\t\t\t\tvar tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];\n\t\t\t\t\t\t\t\tmatch = handleMatch(tokenGroup, [qndx].concat(loopNdx), tokenGroup); //set the tokenGroup as quantifierRecurse marker\n\t\t\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\t\t\t//get latest match\n\t\t\t\t\t\t\t\t\tlatestMatch = matches[matches.length - 1].match;\n\t\t\t\t\t\t\t\t\tlatestMatch.optionalQuantifier = qndx > (qt.quantifier.min - 1);\n\t\t\t\t\t\t\t\t\tif (isFirstMatch(latestMatch, tokenGroup)) { //search for next possible match\n\t\t\t\t\t\t\t\t\t\tif (qndx > (qt.quantifier.min - 1)) {\n\t\t\t\t\t\t\t\t\t\t\tinsertStop = true;\n\t\t\t\t\t\t\t\t\t\t\ttestPos = pos; //match the position after the group\n\t\t\t\t\t\t\t\t\t\t\tbreak; //stop quantifierloop\n\t\t\t\t\t\t\t\t\t\t} else return true;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\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} else {\n\t\t\t\t\t\t\tmatch = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse);\n\t\t\t\t\t\t\tif (match) return true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else testPos++;\n\t\t\t\t}\n\n\t\t\t\tfor (var tndx = (ndxInitializer.length > 0 ? ndxInitializer.shift() : 0); tndx < maskToken.matches.length; tndx++) {\n\t\t\t\t\tif (maskToken.matches[tndx].isQuantifier !== true) {\n\t\t\t\t\t\tvar match = handleMatch(maskToken.matches[tndx], [tndx].concat(loopNdx), quantifierRecurse);\n\t\t\t\t\t\tif (match && testPos === pos) {\n\t\t\t\t\t\t\treturn match;\n\t\t\t\t\t\t} else if (testPos > pos) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction mergeLocators(tests) {\n\t\t\t\tvar locator = [];\n\t\t\t\tif (!$.isArray(tests)) tests = [tests];\n\n\t\t\t\tif (tests[0].alternation === undefined) {\n\t\t\t\t\tlocator = tests[0].locator.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$.each(tests, function (ndx, tst) {\n\t\t\t\t\t\tif (tst.def !== \"\") {\n\t\t\t\t\t\t\tif (locator.length === 0) locator = tst.locator.slice();\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tfor (var i = 0; i < locator.length; i++) {\n\t\t\t\t\t\t\t\t\tif (tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1) {\n\t\t\t\t\t\t\t\t\t\tlocator[i] += \",\" + tst.locator[i];\n\t\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\t\t\treturn locator;\n\t\t\t}\n\n\t\t\tfunction filterTests(tests) {\n\t\t\t\tif (false && ndxIntlzr !== undefined) {\n\t\t\t\t\tvar temp = $.map(tests, function (test) {\n\t\t\t\t\t\tvar match = true;\n\t\t\t\t\t\tfor (var i = 0, ndxtl = tests.length, ndxil = ndxIntlzr ? ndxIntlzr.length : 0; i < ndxil; i++) {\n\t\t\t\t\t\t\tif ((typeof test.locator[i] === \"string\" && !checkAlternationMatch(test.locator[i].split(\",\"), ndxIntlzr[i].toString().split(\",\"))) ||\n\t\t\t\t\t\t\t\t(typeof test.locator[i] !== \"string\" && (test.locator[i] < ndxIntlzr[i] && (i !== ndxil - 1 || i !== ndxtl - 1 )))) {\n\t\t\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (temp.length == 0) {\n\t\t\t\t\t\tconsole.log(JSON.stringify(tests));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn temp;\n\t\t\t\t}\n\t\t\t\treturn tests;\n\t\t\t}\n\n\t\t\tif (pos > -1) {\n\t\t\t\tif (ndxIntlzr === undefined) { //determine index initializer\n\t\t\t\t\tvar previousPos = pos - 1,\n\t\t\t\t\t\ttest;\n\t\t\t\t\twhile ((test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) === undefined && previousPos > -1) {\n\t\t\t\t\t\tpreviousPos--;\n\t\t\t\t\t}\n\t\t\t\t\tif (test !== undefined && previousPos > -1) {\n\t\t\t\t\t\tndxInitializer = mergeLocators(test);\n\t\t\t\t\t\tcacheDependency = ndxInitializer.join(\"\");\n\t\t\t\t\t\ttestPos = previousPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) { //cacheDependency is set on all tests, just check on the first\n\t\t\t\t\t//console.log(\"cache hit \" + pos + \" - \" + ndxIntlzr);\n\t\t\t\t\treturn filterTests(getMaskSet().tests[pos]);\n\t\t\t\t} else {\n\t\t\t\t\t//console.log(\"cache mis \" + pos + \" - \" + ndxIntlzr);\n\t\t\t\t\t//if (ndxIntlzr !== undefined) { //initially faster load\n\t\t\t\t\t//\ttestPos = ndxIntlzr ? tstPs : 0;\n\t\t\t\t\t//\tndxInitializer = ndxIntlzr || [0];\n\t\t\t\t\t//\tcacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\n\t\t\t\t\t//}\n\t\t\t\t}\n\t\t\t\tfor (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {\n\t\t\t\t\tvar match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [mtndx]);\n\t\t\t\t\tif ((match && testPos === pos) || testPos > pos) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (matches.length === 0 || insertStop) {\n\t\t\t\tmatches.push({\n\t\t\t\t\tmatch: {\n\t\t\t\t\t\tfn: null,\n\t\t\t\t\t\tcardinality: 0,\n\t\t\t\t\t\toptionality: true,\n\t\t\t\t\t\tcasing: null,\n\t\t\t\t\t\tdef: \"\"\n\t\t\t\t\t},\n\t\t\t\t\tlocator: [],\n\t\t\t\t\tcd: cacheDependency\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tgetMaskSet().tests[pos] = $.extend(true, [], matches); //set a clone to prevent overwriting some props\n\t\t\t//console.log(pos + \" - \" + JSON.stringify(matches));\n\t\t\treturn getMaskSet().tests[pos];\n\t\t}\n\n\t\tfunction getBufferTemplate() {\n\t\t\tif (getMaskSet()._buffer === undefined) {\n\t\t\t\t//generate template\n\t\t\t\tgetMaskSet()._buffer = getMaskTemplate(false, 1);\n\t\t\t}\n\t\t\treturn getMaskSet()._buffer;\n\t\t}\n\n\t\tfunction getBuffer(noCache) {\n\t\t\tif (getMaskSet().buffer === undefined || noCache === true) {\n\t\t\t\tif (noCache === true) {\n\t\t\t\t\tfor (var testNdx in getMaskSet().tests) {\n\t\t\t\t\t\tif (getMaskSet().validPositions[testNdx] === undefined) {\n\t\t\t\t\t\t\tdelete getMaskSet().tests[testNdx];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tgetMaskSet().buffer = getMaskTemplate(true, getLastValidPosition(), true);\n\t\t\t}\n\t\t\treturn getMaskSet().buffer;\n\t\t}\n\n\t\tfunction refreshFromBuffer(start, end, buffer) {\n\t\t\tvar i;\n\t\t\tbuffer = buffer;\n\t\t\tif (start === true) {\n\t\t\t\tresetMaskSet();\n\t\t\t\tstart = 0;\n\t\t\t\tend = buffer.length;\n\t\t\t} else {\n\t\t\t\tfor (i = start; i < end; i++) {\n\t\t\t\t\tdelete getMaskSet().validPositions[i];\n\t\t\t\t\tdelete getMaskSet().tests[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (i = start; i < end; i++) {\n\t\t\t\tresetMaskSet(true); //prevents clobber from the buffer\n\t\t\t\tif (buffer[i] !== opts.skipOptionalPartCharacter) {\n\t\t\t\t\tisValid(i, buffer[i], true, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction casing(elem, test, pos) {\n\t\t\tswitch (test.casing) {\n\t\t\t\tcase \"upper\":\n\t\t\t\t\telem = elem.toUpperCase();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"lower\":\n\t\t\t\t\telem = elem.toLowerCase();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"title\":\n\t\t\t\t\tvar posBefore = getMaskSet().validPositions[pos - 1];\n\t\t\t\t\tif (pos === 0 || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE)) {\n\t\t\t\t\t\telem = elem.toUpperCase();\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = elem.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn elem;\n\t\t}\n\n\t\tfunction checkAlternationMatch(altArr1, altArr2) {\n\t\t\tvar altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1),\n\t\t\t\tisMatch = false;\n\t\t\tfor (var alndx = 0; alndx < altArr1.length; alndx++) {\n\t\t\t\tif ($.inArray(altArr1[alndx], altArrC) !== -1) {\n\t\t\t\t\tisMatch = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn isMatch;\n\t\t}\n\n\t\tfunction isValid(pos, c, strict, fromSetValid) { //strict true ~ no correction or autofill\n\t\t\tfunction isSelection(posObj) {\n\t\t\t\treturn isRTL ? (posObj.begin - posObj.end) > 1 || ((posObj.begin - posObj.end) === 1 && opts.insertMode) :\n\t\t\t\t(posObj.end - posObj.begin) > 1 || ((posObj.end - posObj.begin) === 1 && opts.insertMode);\n\t\t\t}\n\n\t\t\tstrict = strict === true; //always set a value to strict to prevent possible strange behavior in the extensions\n\n\t\t\tvar maskPos = pos;\n\t\t\tif (pos.begin !== undefined) { //position was a position object - used to handle a delete by typing over a selection\n\t\t\t\tmaskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin;\n\t\t\t}\n\n\t\t\tfunction _isValid(position, c, strict, fromSetValid) {\n\t\t\t\tvar rslt = false;\n\t\t\t\t$.each(getTests(position), function (ndx, tst) {\n\t\t\t\t\tvar test = tst.match;\n\t\t\t\t\tvar loopend = c ? 1 : 0,\n\t\t\t\t\t\tchrs = \"\";\n\t\t\t\t\tfor (var i = test.cardinality; i > loopend; i--) {\n\t\t\t\t\t\tchrs += getBufferElement(position - (i - 1));\n\t\t\t\t\t}\n\t\t\t\t\tif (c) {\n\t\t\t\t\t\tchrs += c;\n\t\t\t\t\t}\n\n\t\t\t\t\t//make sure the buffer is set and correct\n\t\t\t\t\tgetBuffer(true);\n\t\t\t\t\t//return is false or a json object => { pos: ??, c: ??} or true\n\t\t\t\t\trslt = test.fn != null ?\n\t\t\t\t\t\ttest.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && test.def !== \"\" ? //non mask\n\t\t\t\t\t{\n\t\t\t\t\t\tc: test.placeholder || test.def,\n\t\t\t\t\t\tpos: position\n\t\t\t\t\t} : false;\n\n\t\t\t\t\tif (rslt !== false) {\n\t\t\t\t\t\tvar elem = rslt.c !== undefined ? rslt.c : c;\n\t\t\t\t\t\telem = (elem === opts.skipOptionalPartCharacter && test.fn === null) ? (test.placeholder || test.def) : elem;\n\n\t\t\t\t\t\tvar validatedPos = position,\n\t\t\t\t\t\t\tpossibleModifiedBuffer = getBuffer();\n\n\t\t\t\t\t\tif (rslt.remove !== undefined) { //remove position(s)\n\t\t\t\t\t\t\tif (!$.isArray(rslt.remove)) rslt.remove = [rslt.remove];\n\t\t\t\t\t\t\t$.each(rslt.remove.sort(function (a, b) {\n\t\t\t\t\t\t\t\treturn b - a;\n\t\t\t\t\t\t\t}), function (ndx, lmnt) {\n\t\t\t\t\t\t\t\tstripValidPositions(lmnt, lmnt + 1, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rslt.insert !== undefined) { //insert position(s)\n\t\t\t\t\t\t\tif (!$.isArray(rslt.insert)) rslt.insert = [rslt.insert];\n\t\t\t\t\t\t\t$.each(rslt.insert.sort(function (a, b) {\n\t\t\t\t\t\t\t\treturn a - b;\n\t\t\t\t\t\t\t}), function (ndx, lmnt) {\n\t\t\t\t\t\t\t\tisValid(lmnt.pos, lmnt.c, false, fromSetValid);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rslt.refreshFromBuffer) {\n\t\t\t\t\t\t\tvar refresh = rslt.refreshFromBuffer;\n\t\t\t\t\t\t\tstrict = true;\n\t\t\t\t\t\t\trefreshFromBuffer(refresh === true ? refresh : refresh.start, refresh.end, possibleModifiedBuffer);\n\t\t\t\t\t\t\tif (rslt.pos === undefined && rslt.c === undefined) {\n\t\t\t\t\t\t\t\trslt.pos = getLastValidPosition();\n\t\t\t\t\t\t\t\treturn false; //breakout if refreshFromBuffer && nothing to insert\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalidatedPos = rslt.pos !== undefined ? rslt.pos : position;\n\t\t\t\t\t\t\tif (validatedPos !== position) {\n\t\t\t\t\t\t\t\trslt = $.extend(rslt, isValid(validatedPos, elem, true, fromSetValid)); //revalidate new position strict\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (rslt !== true && rslt.pos !== undefined && rslt.pos !== position) { //their is a position offset\n\t\t\t\t\t\t\tvalidatedPos = rslt.pos;\n\t\t\t\t\t\t\trefreshFromBuffer(position, validatedPos, getBuffer().slice());\n\t\t\t\t\t\t\tif (validatedPos !== position) {\n\t\t\t\t\t\t\t\trslt = $.extend(rslt, isValid(validatedPos, elem, true)); //revalidate new position strict\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\tif (rslt !== true && rslt.pos === undefined && rslt.c === undefined) {\n\t\t\t\t\t\t\treturn false; //breakout if nothing to insert\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (ndx > 0) {\n\t\t\t\t\t\t\tresetMaskSet(true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!setValidPosition(validatedPos, $.extend({}, tst, {\n\t\t\t\t\t\t\t\t\"input\": casing(elem, test, validatedPos)\n\t\t\t\t\t\t\t}), fromSetValid, isSelection(pos))) {\n\t\t\t\t\t\t\trslt = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false; //break from $.each\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn rslt;\n\t\t\t}\n\n\t\t\tfunction alternate(pos, c, strict, fromSetValid) {\n\t\t\t\tvar validPsClone = $.extend(true, {}, getMaskSet().validPositions),\n\t\t\t\t\ttestsClone = $.extend(true, {}, getMaskSet().tests),\n\t\t\t\t\tlastAlt,\n\t\t\t\t\talternation,\n\t\t\t\t\tisValidRslt,\n\t\t\t\t\taltPos, i, validPos;\n\t\t\t\t//find last modified alternation\n\t\t\t\tfor (var lAlt = getLastValidPosition(); lAlt >= 0; lAlt--) {\n\t\t\t\t\taltPos = getMaskSet().validPositions[lAlt];\n\t\t\t\t\tif (altPos && altPos.alternation !== undefined) {\n\t\t\t\t\t\tlastAlt = lAlt;\n\t\t\t\t\t\talternation = getMaskSet().validPositions[lastAlt].alternation;\n\t\t\t\t\t\tif (getTestTemplate(lastAlt).locator[altPos.alternation] !== altPos.locator[altPos.alternation]) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (alternation !== undefined) {\n\t\t\t\t\t//find first decision making position\n\t\t\t\t\tlastAlt = parseInt(lastAlt);\n\t\t\t\t\tfor (var decisionPos in getMaskSet().validPositions) {\n\t\t\t\t\t\tdecisionPos = parseInt(decisionPos);\n\t\t\t\t\t\taltPos = getMaskSet().validPositions[decisionPos];\n\t\t\t\t\t\tif (decisionPos >= lastAlt && altPos.alternation !== undefined) {\n\t\t\t\t\t\t\tvar altNdxs;\n\t\t\t\t\t\t\tif (lastAlt === 0) {\n\t\t\t\t\t\t\t\taltNdxs = [];\n\t\t\t\t\t\t\t\t$.each(getMaskSet().tests[lastAlt], function (ndx, test) {\n\t\t\t\t\t\t\t\t\tif (test.locator[alternation] !== undefined) {\n\t\t\t\t\t\t\t\t\t\taltNdxs = altNdxs.concat(test.locator[alternation].toString().split(\",\"));\n\t\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} else {\n\t\t\t\t\t\t\t\taltNdxs = getMaskSet().validPositions[lastAlt].locator[alternation].toString().split(\",\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar decisionTaker = altPos.locator[alternation] !== undefined ? altPos.locator[alternation] : altNdxs[0]; //no match in the alternations (length mismatch)\n\t\t\t\t\t\t\tif (decisionTaker.length > 0) { //no decision taken ~ take first one as decider\n\t\t\t\t\t\t\t\tdecisionTaker = decisionTaker.split(\",\")[0];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (var mndx = 0; mndx < altNdxs.length; mndx++) {\n\t\t\t\t\t\t\t\tvar validInputs = [],\n\t\t\t\t\t\t\t\t\tstaticInputsBeforePos = 0,\n\t\t\t\t\t\t\t\t\tstaticInputsBeforePosAlternate = 0;\n\t\t\t\t\t\t\t\tif (decisionTaker < altNdxs[mndx]) {\n\t\t\t\t\t\t\t\t\tvar possibilityPos, possibilities;\n\t\t\t\t\t\t\t\t\tfor (var dp = decisionPos; dp >= 0; dp--) {\n\t\t\t\t\t\t\t\t\t\tpossibilityPos = getMaskSet().validPositions[dp];\n\t\t\t\t\t\t\t\t\t\tif (possibilityPos !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tvar bestMatch = selectBestMatch(dp, altNdxs[mndx]);\n\t\t\t\t\t\t\t\t\t\t\tif (getMaskSet().validPositions[dp].match.def !== bestMatch.match.def) {\n\t\t\t\t\t\t\t\t\t\t\t\tvalidInputs.push(getMaskSet().validPositions[dp].input);\n\t\t\t\t\t\t\t\t\t\t\t\tgetMaskSet().validPositions[dp] = bestMatch;\n\t\t\t\t\t\t\t\t\t\t\t\tgetMaskSet().validPositions[dp].input = getPlaceholder(dp);\n\t\t\t\t\t\t\t\t\t\t\t\tif (getMaskSet().validPositions[dp].match.fn === null) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstaticInputsBeforePosAlternate++;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tpossibilityPos = bestMatch;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tpossibilities = possibilityPos.locator[alternation]; //store to reset\n\t\t\t\t\t\t\t\t\t\t\tpossibilityPos.locator[alternation] = parseInt(altNdxs[mndx]);\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (decisionTaker !== possibilityPos.locator[alternation]) {\n\t\t\t\t\t\t\t\t\t\tfor (i = decisionPos + 1; i < getLastValidPosition(undefined, true) + 1; i++) {\n\t\t\t\t\t\t\t\t\t\t\tvalidPos = getMaskSet().validPositions[i];\n\t\t\t\t\t\t\t\t\t\t\tif (validPos && validPos.match.fn != null) {\n\t\t\t\t\t\t\t\t\t\t\t\tvalidInputs.push(validPos.input);\n\t\t\t\t\t\t\t\t\t\t\t} else if (i < pos) staticInputsBeforePos++;\n\t\t\t\t\t\t\t\t\t\t\tdelete getMaskSet().validPositions[i];\n\t\t\t\t\t\t\t\t\t\t\tdelete getMaskSet().tests[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tresetMaskSet(true); //clear getbuffer\n\t\t\t\t\t\t\t\t\t\topts.keepStatic = !opts.keepStatic; //disable keepStatic on getMaskLength\n\t\t\t\t\t\t\t\t\t\tisValidRslt = true;\n\t\t\t\t\t\t\t\t\t\twhile (validInputs.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\tvar input = validInputs.shift();\n\t\t\t\t\t\t\t\t\t\t\tif (input !== opts.skipOptionalPartCharacter) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (!(isValidRslt = isValid(getLastValidPosition(undefined, true) + 1, input, false, fromSetValid))) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tpossibilityPos.alternation = alternation;\n\t\t\t\t\t\t\t\t\t\tpossibilityPos.locator[alternation] = possibilities; //reset forceddecision ~ needed for proper delete\n\t\t\t\t\t\t\t\t\t\tif (isValidRslt) {\n\t\t\t\t\t\t\t\t\t\t\tvar targetLvp = getLastValidPosition(pos) + 1;\n\t\t\t\t\t\t\t\t\t\t\tfor (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\tvalidPos = getMaskSet().validPositions[i];\n\t\t\t\t\t\t\t\t\t\t\t\tif ((validPos === undefined || validPos.match.fn == null) && i < pos) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstaticInputsBeforePosAlternate++;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tpos = pos + (staticInputsBeforePosAlternate - staticInputsBeforePos);\n\t\t\t\t\t\t\t\t\t\t\tisValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\topts.keepStatic = !opts.keepStatic; //enable keepStatic on getMaskLength\n\t\t\t\t\t\t\t\t\t\tif (!isValidRslt) {\n\t\t\t\t\t\t\t\t\t\t\tresetMaskSet();\n\t\t\t\t\t\t\t\t\t\t\tgetMaskSet().validPositions = $.extend(true, {}, validPsClone);\n\t\t\t\t\t\t\t\t\t\t\tgetMaskSet().tests = $.extend(true, {}, testsClone);\n\t\t\t\t\t\t\t\t\t\t} else return isValidRslt;\n\t\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\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//set alternator choice on previous skipped placeholder positions\n\t\t\tfunction trackbackAlternations(originalPos, newPos) {\n\t\t\t\tvar vp = getMaskSet().validPositions[newPos],\n\t\t\t\t\ttargetLocator = vp.locator,\n\t\t\t\t\ttll = targetLocator.length;\n\n\t\t\t\tfor (var ps = originalPos; ps < newPos; ps++) {\n\t\t\t\t\tif (getMaskSet().validPositions[ps] === undefined && !isMask(ps, true)) {\n\t\t\t\t\t\tvar tests = getTests(ps),\n\t\t\t\t\t\t\tbestMatch = tests[0],\n\t\t\t\t\t\t\tequality = -1;\n\t\t\t\t\t\t$.each(tests, function (ndx, tst) { //find best matching\n\t\t\t\t\t\t\tfor (var i = 0; i < tll; i++) {\n\t\t\t\t\t\t\t\tif (tst.locator[i] !== undefined && checkAlternationMatch(tst.locator[i].toString().split(\",\"), targetLocator[i].toString().split(\",\"))) {\n\t\t\t\t\t\t\t\t\tif (equality < i) {\n\t\t\t\t\t\t\t\t\t\tequality = i;\n\t\t\t\t\t\t\t\t\t\tbestMatch = tst;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetValidPosition(ps, $.extend({}, bestMatch, {\n\t\t\t\t\t\t\t\"input\": bestMatch.match.placeholder || bestMatch.match.def\n\t\t\t\t\t\t}), true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tvar result = false,\n\t\t\t\tpositionsClone = $.extend(true, {}, getMaskSet().validPositions); //clone the currentPositions\n\n\t\t\t//Check for a nonmask before the pos\n\t\t\t//find previous valid\n\t\t\tfor (var pndx = maskPos - 1; pndx > -1; pndx--) {\n\t\t\t\tif (getMaskSet().validPositions[pndx]) break;\n\t\t\t}\n\t\t\t////fill missing nonmask and valid placeholders\n\t\t\tvar testTemplate;\n\t\t\tfor (pndx++; pndx < maskPos; pndx++) {\n\t\t\t\tif (getMaskSet().validPositions[pndx] === undefined &&\n\t\t\t\t\t(opts.jitMasking === false || opts.jitMasking > pndx) &&\n\t\t\t\t\t((testTemplate = getTestTemplate(pndx)).match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, true) ||\n\t\t\t\t\t($.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, false, opts)))) {\n\t\t\t\t\t_isValid(getLastValidPosition(pndx, true) + 1, testTemplate.match.placeholder || (testTemplate.match.fn == null ? testTemplate.match.def : (getPlaceholder(pndx) !== \"\" ? getPlaceholder(pndx) : getBuffer()[pndx])), true, fromSetValid);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tif (isSelection(pos)) {\n\t\t\t\thandleRemove(undefined, Inputmask.keyCode.DELETE, pos);\n\t\t\t\tmaskPos = getMaskSet().p;\n\t\t\t}\n\n\t\t\tif (maskPos < getMaskSet().maskLength) {\n\t\t\t\tresult = _isValid(maskPos, c, strict, fromSetValid);\n\t\t\t\tif ((!strict || fromSetValid === true) && result === false) {\n\t\t\t\t\tvar currentPosValid = getMaskSet().validPositions[maskPos];\n\t\t\t\t\tif (currentPosValid && currentPosValid.match.fn === null && (currentPosValid.match.def === c || c === opts.skipOptionalPartCharacter)) {\n\t\t\t\t\t\tresult = {\n\t\t\t\t\t\t\t\"caret\": seekNext(maskPos)\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if ((opts.insertMode || getMaskSet().validPositions[seekNext(maskPos)] === undefined) && !isMask(maskPos, true)) { //does the input match on a further position?\n\t\t\t\t\t\tvar staticChar = getTestTemplate(maskPos).match;\n\t\t\t\t\t\tstaticChar = staticChar.placeholder || staticChar.def;\n\t\t\t\t\t\t_isValid(maskPos, staticChar, strict, fromSetValid);\n\t\t\t\t\t\tfor (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) {\n\t\t\t\t\t\t\tresult = _isValid(nPos, c, strict, fromSetValid);\n\t\t\t\t\t\t\tif (result !== false) {\n\t\t\t\t\t\t\t\ttrackbackAlternations(maskPos, nPos);\n\t\t\t\t\t\t\t\tmaskPos = nPos;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (result === false && opts.keepStatic) { //try fuzzy alternator logic\n\t\t\t\tresult = alternate(maskPos, c, strict, fromSetValid);\n\t\t\t}\n\t\t\tif (result === true) {\n\t\t\t\tresult = {\n\t\t\t\t\t\"pos\": maskPos\n\t\t\t\t};\n\t\t\t}\n\t\t\tif ($.isFunction(opts.postValidation) && result !== false && !strict && fromSetValid !== true) {\n\t\t\t\tresult = opts.postValidation(getBuffer(true), result, opts) ? result : false;\n\t\t\t}\n\n\t\t\tif (result.pos === undefined) {\n\t\t\t\tresult.pos = maskPos;\n\t\t\t}\n\n\t\t\tif (result === false) {\n\t\t\t\tresetMaskSet(true);\n\t\t\t\tgetMaskSet().validPositions = $.extend(true, {}, positionsClone); //revert validation changes\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tfunction isMask(pos, strict) {\n\t\t\tvar test;\n\t\t\tif (strict) {\n\t\t\t\ttest = getTestTemplate(pos).match;\n\t\t\t\tif (test.def === \"\") test = getTest(pos);\n\t\t\t} else test = getTest(pos);\n\n\t\t\tif (test.fn != null) {\n\t\t\t\treturn test.fn;\n\t\t\t} else if (strict !== true && pos > -1 && !opts.keepStatic && getMaskSet().validPositions[pos] === undefined) {\n\t\t\t\tvar tests = getTests(pos);\n\t\t\t\treturn tests.length > 2;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction seekNext(pos, newBlock) {\n\t\t\tvar maskL = getMaskSet().maskLength;\n\t\t\tif (pos >= maskL) return maskL;\n\t\t\tvar position = pos;\n\t\t\twhile (++position < maskL && ((newBlock === true && (getTest(position).newBlockMarker !== true || !isMask(position))) || (newBlock !== true && !isMask(position) && (opts.nojumps !== true || opts.nojumpsThreshold > position)))) {\n\t\t\t}\n\t\t\treturn position;\n\t\t}\n\n\t\tfunction seekPrevious(pos, newBlock) {\n\t\t\tvar position = pos;\n\t\t\tif (position <= 0) return 0;\n\n\t\t\twhile (--position > 0 && ((newBlock === true && getTest(position).newBlockMarker !== true) || (newBlock !== true && !isMask(position)))) {\n\t\t\t}\n\n\t\t\treturn position;\n\t\t}\n\n\t\tfunction getBufferElement(position) {\n\t\t\treturn getMaskSet().validPositions[position] === undefined ? getPlaceholder(position) : getMaskSet().validPositions[position].input;\n\t\t}\n\n\t\tfunction writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {\n\t\t\tif (event && $.isFunction(opts.onBeforeWrite)) {\n\t\t\t\tvar result = opts.onBeforeWrite(event, buffer, caretPos, opts);\n\t\t\t\tif (result) {\n\t\t\t\t\tif (result.refreshFromBuffer) {\n\t\t\t\t\t\tvar refresh = result.refreshFromBuffer;\n\t\t\t\t\t\trefreshFromBuffer(refresh === true ? refresh : refresh.start, refresh.end, result.buffer || buffer);\n\t\t\t\t\t\tbuffer = getBuffer(true);\n\t\t\t\t\t}\n\t\t\t\t\t//only alter when intented !== undefined\n\t\t\t\t\tif (caretPos !== undefined) caretPos = result.caret !== undefined ? result.caret : caretPos;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinput.inputmask._valueSet(buffer.join(\"\"));\n\t\t\tif (caretPos !== undefined && (event === undefined || event.type !== \"blur\")) {\n\t\t\t\tcaret(input, caretPos);\n\t\t\t}\n\t\t\tif (triggerInputEvent === true) {\n\t\t\t\tskipInputEvent = true;\n\t\t\t\t$(input).trigger(\"input\");\n\t\t\t}\n\t\t}\n\n\t\tfunction getPlaceholder(pos, test) {\n\t\t\ttest = test || getTest(pos);\n\t\t\tif (test.placeholder !== undefined) {\n\t\t\t\treturn test.placeholder;\n\t\t\t} else if (test.fn === null) {\n\t\t\t\tif (pos > -1 && !opts.keepStatic && getMaskSet().validPositions[pos] === undefined) {\n\t\t\t\t\tvar tests = getTests(pos),\n\t\t\t\t\t\tstaticAlternations = [],\n\t\t\t\t\t\tprevTest;\n\t\t\t\t\tif (tests.length > 2) {\n\t\t\t\t\t\tfor (var i = 0; i < tests.length; i++) {\n\t\t\t\t\t\t\tif (tests[i].match.optionality !== true && tests[i].match.optionalQuantifier !== true &&\n\t\t\t\t\t\t\t\t(tests[i].match.fn === null || (prevTest === undefined || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, true, opts) !== false))) {\n\t\t\t\t\t\t\t\tstaticAlternations.push(tests[i]);\n\t\t\t\t\t\t\t\tif (tests[i].match.fn === null) prevTest = tests[i];\n\t\t\t\t\t\t\t\tif (staticAlternations.length > 1) return opts.placeholder.charAt(pos % opts.placeholder.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn test.def;\n\t\t\t}\n\t\t\treturn opts.placeholder.charAt(pos % opts.placeholder.length);\n\t\t}\n\n\t\tfunction checkVal(input, writeOut, strict, nptvl) {\n\t\t\tvar inputValue = nptvl.slice(),\n\t\t\t\tcharCodes = \"\",\n\t\t\t\tinitialNdx = 0, result;\n\n\t\t\tfunction isTemplateMatch() {\n\t\t\t\tvar isMatch = false;\n\t\t\t\tvar charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join(\"\").indexOf(charCodes);\n\t\t\t\tif (charCodeNdx !== -1 && !isMask(initialNdx)) {\n\t\t\t\t\tisMatch = true;\n\t\t\t\t\tvar bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx);\n\t\t\t\t\tfor (var i = 0; i < bufferTemplateArr.length; i++) {\n\t\t\t\t\t\tif (bufferTemplateArr[i] !== \" \") {\n\t\t\t\t\t\t\tisMatch = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn isMatch;\n\t\t\t}\n\n\t\t\tresetMaskSet();\n\t\t\tgetMaskSet().p = seekNext(-1);\n\t\t\t// if (writeOut) input.inputmask._valueSet(\"\"); //initial clear\n\n\t\t\tif (!strict) {\n\t\t\t\tif (opts.autoUnmask !== true) {\n\t\t\t\t\tvar staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(\"\"),\n\t\t\t\t\t\tmatches = inputValue.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(staticInput), \"g\"));\n\t\t\t\t\tif (matches && matches.length > 0) {\n\t\t\t\t\t\tinputValue.splice(0, matches.length * staticInput.length);\n\t\t\t\t\t\tinitialNdx = seekNext(initialNdx);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tinitialNdx = seekNext(initialNdx);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t$.each(inputValue, function (ndx, charCode) {\n\t\t\t\tif (charCode !== undefined) { //inputfallback strips some elements out of the inputarray.  $.each logically presents them as undefined\n\t\t\t\t\tvar keypress = new $.Event(\"keypress\");\n\t\t\t\t\tkeypress.which = charCode.charCodeAt(0);\n\t\t\t\t\tcharCodes += charCode;\n\t\t\t\t\tvar lvp = getLastValidPosition(undefined, true),\n\t\t\t\t\t\tlvTest = getMaskSet().validPositions[lvp],\n\t\t\t\t\t\tnextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : undefined, lvp);\n\t\t\t\t\tif (!isTemplateMatch() || strict || opts.autoUnmask) {\n\t\t\t\t\t\tvar pos = strict ? ndx : (nextTest.match.fn == null && nextTest.match.optionality && (lvp + 1) < getMaskSet().p ? lvp + 1 : getMaskSet().p);\n\t\t\t\t\t\tresult = keypressEvent.call(input, keypress, true, false, strict, pos);\n\t\t\t\t\t\tinitialNdx = pos + 1;\n\t\t\t\t\t\tcharCodes = \"\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = keypressEvent.call(input, keypress, true, false, true, lvp + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif (!strict && $.isFunction(opts.onBeforeWrite)) {\n\t\t\t\t\t\tresult = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts);\n\t\t\t\t\t\tif (result && result.refreshFromBuffer) {\n\t\t\t\t\t\t\tvar refresh = result.refreshFromBuffer;\n\t\t\t\t\t\t\trefreshFromBuffer(refresh === true ? refresh : refresh.start, refresh.end, result.buffer);\n\t\t\t\t\t\t\tresetMaskSet(true);\n\t\t\t\t\t\t\tif (result.caret) {\n\t\t\t\t\t\t\t\tgetMaskSet().p = result.caret;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (writeOut) {\n\t\t\t\twriteBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : undefined, new $.Event(\"checkval\"));\n\t\t\t}\n\t\t}\n\n\t\tfunction unmaskedvalue(input) {\n\t\t\tif (input && input.inputmask === undefined) {\n\t\t\t\treturn input.value;\n\t\t\t}\n\n\t\t\tvar umValue = [],\n\t\t\t\tvps = getMaskSet().validPositions;\n\t\t\tfor (var pndx in vps) {\n\t\t\t\tif (vps[pndx].match && vps[pndx].match.fn != null) {\n\t\t\t\t\tumValue.push(vps[pndx].input);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar unmaskedValue = umValue.length === 0 ? null : (isRTL ? umValue.reverse() : umValue).join(\"\");\n\t\t\tif (unmaskedValue !== null) {\n\t\t\t\tvar bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\n\t\t\t\tif ($.isFunction(opts.onUnMask)) {\n\t\t\t\t\tunmaskedValue = (opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn unmaskedValue;\n\t\t}\n\n\t\tfunction caret(input, begin, end, notranslate) {\n\t\t\tfunction translatePosition(pos) {\n\t\t\t\tif (notranslate !== true && isRTL && typeof pos === \"number\" && (!opts.greedy || opts.placeholder !== \"\")) {\n\t\t\t\t\tvar bffrLght = getBuffer().join(\"\").length; //join is needed because sometimes we get an empty buffer element which must not be counted for the caret position (numeric alias)\n\t\t\t\t\tpos = bffrLght - pos;\n\t\t\t\t}\n\t\t\t\treturn pos;\n\t\t\t}\n\n\t\t\tvar range;\n\t\t\tif (typeof begin === \"number\") {\n\t\t\t\tbegin = translatePosition(begin);\n\t\t\t\tend = translatePosition(end);\n\t\t\t\tend = (typeof end == \"number\") ? end : begin;\n\t\t\t\t// if (!$(input).is(\":visible\")) {\n\t\t\t\t// \treturn;\n\t\t\t\t// }\n\n\t\t\t\tvar scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\n\t\t\t\tinput.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0;\n\n\t\t\t\tif (!mobile && opts.insertMode === false && begin === end) end++; //set visualization for insert/overwrite mode\n\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\tinput.selectionStart = begin;\n\t\t\t\t\tinput.selectionEnd = end;\n\t\t\t\t} else if (window.getSelection) {\n\t\t\t\t\trange = document.createRange();\n\t\t\t\t\tif (input.firstChild === undefined || input.firstChild === null) {\n\t\t\t\t\t\tvar textNode = document.createTextNode(\"\");\n\t\t\t\t\t\tinput.appendChild(textNode);\n\t\t\t\t\t}\n\t\t\t\t\trange.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length);\n\t\t\t\t\trange.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length);\n\t\t\t\t\trange.collapse(true);\n\t\t\t\t\tvar sel = window.getSelection();\n\t\t\t\t\tsel.removeAllRanges();\n\t\t\t\t\tsel.addRange(range);\n\t\t\t\t\t//input.focus();\n\t\t\t\t} else if (input.createTextRange) {\n\t\t\t\t\trange = input.createTextRange();\n\t\t\t\t\trange.collapse(true);\n\t\t\t\t\trange.moveEnd(\"character\", end);\n\t\t\t\t\trange.moveStart(\"character\", begin);\n\t\t\t\t\trange.select();\n\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (input.setSelectionRange) {\n\t\t\t\t\tbegin = input.selectionStart;\n\t\t\t\t\tend = input.selectionEnd;\n\t\t\t\t} else if (window.getSelection) {\n\t\t\t\t\trange = window.getSelection().getRangeAt(0);\n\t\t\t\t\tif (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) {\n\t\t\t\t\t\tbegin = range.startOffset;\n\t\t\t\t\t\tend = range.endOffset;\n\t\t\t\t\t}\n\t\t\t\t} else if (document.selection && document.selection.createRange) {\n\t\t\t\t\trange = document.selection.createRange();\n\t\t\t\t\tbegin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length);\n\t\t\t\t\tend = begin + range.text.length;\n\t\t\t\t}\n\t\t\t\t/*eslint-disable consistent-return */\n\t\t\t\treturn {\n\t\t\t\t\t\"begin\": translatePosition(begin),\n\t\t\t\t\t\"end\": translatePosition(end)\n\t\t\t\t};\n\t\t\t\t/*eslint-enable consistent-return */\n\t\t\t}\n\t\t}\n\n\t\tfunction determineLastRequiredPosition(returnDefinition) {\n\t\t\tvar buffer = getBuffer(),\n\t\t\t\tbl = buffer.length,\n\t\t\t\tpos, lvp = getLastValidPosition(),\n\t\t\t\tpositions = {},\n\t\t\t\tlvTest = getMaskSet().validPositions[lvp],\n\t\t\t\tndxIntlzr = lvTest !== undefined ? lvTest.locator.slice() : undefined,\n\t\t\t\ttestPos;\n\t\t\tfor (pos = lvp + 1; pos < buffer.length; pos++) {\n\t\t\t\ttestPos = getTestTemplate(pos, ndxIntlzr, pos - 1);\n\t\t\t\tndxIntlzr = testPos.locator.slice();\n\t\t\t\tpositions[pos] = $.extend(true, {}, testPos);\n\t\t\t}\n\n\t\t\tvar lvTestAlt = lvTest && lvTest.alternation !== undefined ? lvTest.locator[lvTest.alternation] : undefined;\n\t\t\tfor (pos = bl - 1; pos > lvp; pos--) {\n\t\t\t\ttestPos = positions[pos];\n\t\t\t\tif ((testPos.match.optionality ||\n\t\t\t\t\ttestPos.match.optionalQuantifier ||\n\t\t\t\t\t(lvTestAlt && ((lvTestAlt !== positions[pos].locator[lvTest.alternation] && testPos.match.fn != null) ||\n\t\t\t\t\t(testPos.match.fn === null && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && getTests(pos)[0].def !== \"\")))) && buffer[pos] === getPlaceholder(pos, testPos.match)) {\n\t\t\t\t\tbl--;\n\t\t\t\t} else break;\n\t\t\t}\n\t\t\treturn returnDefinition ? {\n\t\t\t\t\"l\": bl,\n\t\t\t\t\"def\": positions[bl] ? positions[bl].match : undefined\n\t\t\t} : bl;\n\t\t}\n\n\t\tfunction clearOptionalTail(buffer) {\n\t\t\tvar rl = determineLastRequiredPosition(),\n\t\t\t\tlmib = buffer.length - 1;\n\t\t\tfor (; lmib > rl; lmib--) {\n\t\t\t\tif (isMask(lmib)) break; //fixme ismask is not good enough\n\t\t\t}\n\t\t\tbuffer.splice(rl, lmib + 1 - rl);\n\n\t\t\treturn buffer;\n\t\t}\n\n\t\tfunction isComplete(buffer) { //return true / false / undefined (repeat *)\n\t\t\tif ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);\n\t\t\tif (opts.repeat === \"*\") return undefined;\n\t\t\tvar complete = false,\n\t\t\t\tlrp = determineLastRequiredPosition(true),\n\t\t\t\taml = seekPrevious(lrp.l);\n\n\t\t\tif (lrp.def === undefined || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\n\t\t\t\tcomplete = true;\n\t\t\t\tfor (var i = 0; i <= aml; i++) {\n\t\t\t\t\tvar test = getTestTemplate(i).match;\n\t\t\t\t\tif ((test.fn !== null && getMaskSet().validPositions[i] === undefined && test.optionality !== true && test.optionalQuantifier !== true) || (test.fn === null && buffer[i] !== getPlaceholder(i, test))) {\n\t\t\t\t\t\tcomplete = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn complete;\n\t\t}\n\n\t\tvar EventRuler = {\n\t\t\ton: function (input, eventName, eventHandler) {\n\t\t\t\tvar ev = function (e) {\n\t\t\t\t\t// console.log(\"triggered \" + e.type);\n\t\t\t\t\tif (this.inputmask === undefined && this.nodeName !== \"FORM\") { //happens when cloning an object with jquery.clone\n\t\t\t\t\t\tvar imOpts = $.data(this, \"_inputmask_opts\");\n\t\t\t\t\t\tif (imOpts)(new Inputmask(imOpts)).mask(this);\n\t\t\t\t\t\telse EventRuler.off(this);\n\t\t\t\t\t} else if (e.type !== \"setvalue\" && (this.disabled || (this.readOnly && !(e.type === \"keydown\" && (e.ctrlKey && e.keyCode === 67) || (opts.tabThrough === false && e.keyCode === Inputmask.keyCode.TAB))))) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tswitch (e.type) {\n\t\t\t\t\t\t\tcase \"input\":\n\t\t\t\t\t\t\t\tif (skipInputEvent === true) {\n\t\t\t\t\t\t\t\t\tskipInputEvent = false;\n\t\t\t\t\t\t\t\t\treturn e.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"keydown\":\n\t\t\t\t\t\t\t\t//Safari 5.1.x - modal dialog fires keypress twice workaround\n\t\t\t\t\t\t\t\tskipKeyPressEvent = false;\n\t\t\t\t\t\t\t\tskipInputEvent = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"keypress\":\n\t\t\t\t\t\t\t\tif (skipKeyPressEvent === true) {\n\t\t\t\t\t\t\t\t\treturn e.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tskipKeyPressEvent = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase \"click\":\n\t\t\t\t\t\t\t\tif (iemobile) {\n\t\t\t\t\t\t\t\t\tvar that = this;\n\t\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\t\teventHandler.apply(that, arguments);\n\t\t\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// console.log(\"executed \" + e.type);\n\t\t\t\t\t\tvar returnVal = eventHandler.apply(this, arguments);\n\t\t\t\t\t\tif (returnVal === false) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn returnVal;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\t//keep instance of the event\n\t\t\t\tinput.inputmask.events[eventName] = input.inputmask.events[eventName] || [];\n\t\t\t\tinput.inputmask.events[eventName].push(ev);\n\n\t\t\t\tif ($.inArray(eventName, [\"submit\", \"reset\"]) !== -1) {\n\t\t\t\t\tif (input.form != null) $(input.form).on(eventName, ev);\n\t\t\t\t} else {\n\t\t\t\t\t$(input).on(eventName, ev);\n\t\t\t\t}\n\t\t\t},\n\t\t\toff: function (input, event) {\n\t\t\t\tif (input.inputmask && input.inputmask.events) {\n\t\t\t\t\tvar events;\n\t\t\t\t\tif (event) {\n\t\t\t\t\t\tevents = [];\n\t\t\t\t\t\tevents[event] = input.inputmask.events[event];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tevents = input.inputmask.events;\n\t\t\t\t\t}\n\t\t\t\t\t$.each(events, function (eventName, evArr) {\n\t\t\t\t\t\twhile (evArr.length > 0) {\n\t\t\t\t\t\t\tvar ev = evArr.pop();\n\t\t\t\t\t\t\tif ($.inArray(eventName, [\"submit\", \"reset\"]) !== -1) {\n\t\t\t\t\t\t\t\tif (input.form != null) $(input.form).off(eventName, ev);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$(input).off(eventName, ev);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete input.inputmask.events[eventName];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfunction patchValueProperty(npt) {\n\t\t\tvar valueGet;\n\t\t\tvar valueSet;\n\n\t\t\tfunction patchValhook(type) {\n\t\t\t\tif ($.valHooks && ($.valHooks[type] === undefined || $.valHooks[type].inputmaskpatch !== true)) {\n\t\t\t\t\tvar valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function (elem) {\n\t\t\t\t\t\treturn elem.value;\n\t\t\t\t\t};\n\t\t\t\t\tvar valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function (elem, value) {\n\t\t\t\t\t\telem.value = value;\n\t\t\t\t\t\treturn elem;\n\t\t\t\t\t};\n\n\t\t\t\t\t$.valHooks[type] = {\n\t\t\t\t\t\tget: function (elem) {\n\t\t\t\t\t\t\tif (elem.inputmask) {\n\t\t\t\t\t\t\t\tif (elem.inputmask.opts.autoUnmask) {\n\t\t\t\t\t\t\t\t\treturn elem.inputmask.unmaskedvalue();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar result = valhookGet(elem);\n\t\t\t\t\t\t\t\t\treturn getLastValidPosition(undefined, undefined, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== true ? result : \"\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else return valhookGet(elem);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tset: function (elem, value) {\n\t\t\t\t\t\t\tvar $elem = $(elem),\n\t\t\t\t\t\t\t\tresult;\n\t\t\t\t\t\t\tresult = valhookSet(elem, value);\n\t\t\t\t\t\t\tif (elem.inputmask) {\n\t\t\t\t\t\t\t\t$elem.trigger(\"setvalue\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinputmaskpatch: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction getter() {\n\t\t\t\tif (this.inputmask) {\n\t\t\t\t\treturn this.inputmask.opts.autoUnmask ?\n\t\t\t\t\t\tthis.inputmask.unmaskedvalue() :\n\t\t\t\t\t\t(getLastValidPosition() !== -1 || opts.nullable !== true ?\n\t\t\t\t\t\t\t(document.activeElement === this && opts.clearMaskOnLostFocus ?\n\t\t\t\t\t\t\t\t(isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") :\n\t\t\t\t\t\t\t\tvalueGet.call(this)) :\n\t\t\t\t\t\t\t\"\");\n\t\t\t\t} else return valueGet.call(this);\n\t\t\t}\n\n\t\t\tfunction setter(value) {\n\t\t\t\tvalueSet.call(this, value);\n\t\t\t\tif (this.inputmask) {\n\t\t\t\t\t$(this).trigger(\"setvalue\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction installNativeValueSetFallback(npt) {\n\t\t\t\tEventRuler.on(npt, \"mouseenter\", function (event) {\n\t\t\t\t\tvar $input = $(this),\n\t\t\t\t\t\tinput = this,\n\t\t\t\t\t\tvalue = input.inputmask._valueGet();\n\t\t\t\t\tif (value !== getBuffer().join(\"\") /*&& getLastValidPosition() > 0*/) {\n\t\t\t\t\t\t$input.trigger(\"setvalue\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!npt.inputmask.__valueGet) {\n\t\t\t\tif (Object.getOwnPropertyDescriptor) {\n\t\t\t\t\tif (typeof Object.getPrototypeOf !== \"function\") {\n\t\t\t\t\t\tObject.getPrototypeOf = typeof \"test\".__proto__ === \"object\" ? function (object) {\n\t\t\t\t\t\t\treturn object.__proto__;\n\t\t\t\t\t\t} : function (object) {\n\t\t\t\t\t\t\treturn object.constructor.prototype;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tvar valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : undefined;\n\t\t\t\t\tif (valueProperty && valueProperty.get && valueProperty.set) {\n\t\t\t\t\t\tvalueGet = valueProperty.get;\n\t\t\t\t\t\tvalueSet = valueProperty.set;\n\t\t\t\t\t\tObject.defineProperty(npt, \"value\", {\n\t\t\t\t\t\t\tget: getter,\n\t\t\t\t\t\t\tset: setter,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (npt.tagName !== \"INPUT\") {\n\t\t\t\t\t\tvalueGet = function () {\n\t\t\t\t\t\t\treturn this.textContent;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tvalueSet = function (value) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tObject.defineProperty(npt, \"value\", {\n\t\t\t\t\t\t\tget: getter,\n\t\t\t\t\t\t\tset: setter,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (document.__lookupGetter__ && npt.__lookupGetter__(\"value\")) {\n\t\t\t\t\tvalueGet = npt.__lookupGetter__(\"value\");\n\t\t\t\t\tvalueSet = npt.__lookupSetter__(\"value\");\n\n\t\t\t\t\tnpt.__defineGetter__(\"value\", getter);\n\t\t\t\t\tnpt.__defineSetter__(\"value\", setter);\n\t\t\t\t}\n\t\t\t\tnpt.inputmask.__valueGet = valueGet; //store native property getter\n\t\t\t\tnpt.inputmask._valueGet = function (overruleRTL) {\n\t\t\t\t\treturn isRTL && overruleRTL !== true ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\n\t\t\t\t};\n\t\t\t\tnpt.inputmask.__valueSet = valueSet; //store native property setter\n\t\t\t\tnpt.inputmask._valueSet = function (value, overruleRTL) { //null check is needed for IE8 => otherwise converts to \"null\"\n\t\t\t\t\tvalueSet.call(this.el, (value === null || value === undefined) ? \"\" : ((overruleRTL !== true && isRTL) ? value.split(\"\").reverse().join(\"\") : value));\n\t\t\t\t};\n\n\t\t\t\tif (valueGet === undefined) { //jquery.val fallback\n\t\t\t\t\tvalueGet = function () {\n\t\t\t\t\t\treturn this.value;\n\t\t\t\t\t};\n\t\t\t\t\tvalueSet = function (value) {\n\t\t\t\t\t\tthis.value = value;\n\t\t\t\t\t};\n\t\t\t\t\tpatchValhook(npt.type);\n\t\t\t\t\tinstallNativeValueSetFallback(npt);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction handleRemove(input, k, pos, strict) {\n\t\t\tfunction generalize() {\n\t\t\t\tif (opts.keepStatic) {\n\t\t\t\t\tresetMaskSet(true);\n\t\t\t\t\tvar validInputs = [],\n\t\t\t\t\t\tlastAlt, positionsClone = $.extend(true, {}, getMaskSet().validPositions);\n\t\t\t\t\t//find last alternation\n\t\t\t\t\tfor (lastAlt = getLastValidPosition(); lastAlt >= 0; lastAlt--) {\n\t\t\t\t\t\tvar validPos = getMaskSet().validPositions[lastAlt];\n\t\t\t\t\t\tif (validPos) {\n\t\t\t\t\t\t\tif (validPos.match.fn != null) {\n\t\t\t\t\t\t\t\tvalidInputs.push(validPos.input);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete getMaskSet().validPositions[lastAlt];\n\t\t\t\t\t\t\tif (validPos.alternation !== undefined && validPos.locator[validPos.alternation] === getTestTemplate(lastAlt).locator[validPos.alternation]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (lastAlt > -1) {\n\t\t\t\t\t\twhile (validInputs.length > 0) {\n\t\t\t\t\t\t\tgetMaskSet().p = seekNext(getLastValidPosition());\n\t\t\t\t\t\t\tvar keypress = new $.Event(\"keypress\");\n\t\t\t\t\t\t\tkeypress.which = validInputs.pop().charCodeAt(0);\n\t\t\t\t\t\t\tkeypressEvent.call(input, keypress, true, false, false, getMaskSet().p);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else getMaskSet().validPositions = $.extend(true, {}, positionsClone); //restore original positions\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (opts.numericInput || isRTL) {\n\t\t\t\tif (k === Inputmask.keyCode.BACKSPACE) {\n\t\t\t\t\tk = Inputmask.keyCode.DELETE;\n\t\t\t\t} else if (k === Inputmask.keyCode.DELETE) {\n\t\t\t\t\tk = Inputmask.keyCode.BACKSPACE;\n\t\t\t\t}\n\n\t\t\t\tif (isRTL) {\n\t\t\t\t\tvar pend = pos.end;\n\t\t\t\t\tpos.end = pos.begin;\n\t\t\t\t\tpos.begin = pend;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === false)) {\n\t\t\t\tpos.begin = seekPrevious(pos.begin);\n\t\t\t\tif (getMaskSet().validPositions[pos.begin] !== undefined && (getMaskSet().validPositions[pos.begin].input === opts.groupSeparator || getMaskSet().validPositions[pos.begin].input === opts.radixPoint)) {\n\t\t\t\t\tpos.begin--;\n\t\t\t\t}\n\t\t\t} else if (k === Inputmask.keyCode.DELETE && pos.begin === pos.end) {\n\t\t\t\tpos.end = isMask(pos.end) ? pos.end + 1 : seekNext(pos.end) + 1;\n\t\t\t\tif (getMaskSet().validPositions[pos.begin] !== undefined && (getMaskSet().validPositions[pos.begin].input === opts.groupSeparator || getMaskSet().validPositions[pos.begin].input === opts.radixPoint)) {\n\t\t\t\t\tpos.end++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstripValidPositions(pos.begin, pos.end, false, strict);\n\t\t\tif (strict !== true) {\n\t\t\t\tgeneralize(); //revert the alternation\n\t\t\t}\n\t\t\tvar lvp = getLastValidPosition(pos.begin);\n\t\t\tif (lvp < pos.begin) {\n\t\t\t\tif (lvp === -1) resetMaskSet();\n\t\t\t\tgetMaskSet().p = seekNext(lvp);\n\t\t\t} else if (strict !== true) {\n\t\t\t\tgetMaskSet().p = pos.begin;\n\t\t\t}\n\t\t}\n\n\t\tfunction keydownEvent(e) {\n\t\t\tvar input = this,\n\t\t\t\t$input = $(input),\n\t\t\t\tk = e.keyCode,\n\t\t\t\tpos = caret(input);\n\n\t\t\t//backspace, delete, and escape get special treatment\n\t\t\tif (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || (iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI) || (e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported(\"cut\"))) { //backspace/delete\n\t\t\t\te.preventDefault(); //stop default action but allow propagation\n\t\t\t\thandleRemove(input, k, pos);\n\t\t\t\twriteBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(\"\"));\n\t\t\t\tif (input.inputmask._valueGet() === getBufferTemplate().join(\"\")) {\n\t\t\t\t\t$input.trigger(\"cleared\");\n\t\t\t\t} else if (isComplete(getBuffer()) === true) {\n\t\t\t\t\t$input.trigger(\"complete\");\n\t\t\t\t}\n\t\t\t\tif (opts.showTooltip) { //update tooltip\n\t\t\t\t\tinput.title = opts.tooltip || getMaskSet().mask;\n\t\t\t\t}\n\t\t\t} else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch\n\t\t\t\te.preventDefault();\n\t\t\t\tvar caretPos = seekNext(getLastValidPosition());\n\t\t\t\tif (!opts.insertMode && caretPos === getMaskSet().maskLength && !e.shiftKey) caretPos--;\n\t\t\t\tcaret(input, e.shiftKey ? pos.begin : caretPos, caretPos, true);\n\t\t\t} else if ((k === Inputmask.keyCode.HOME && !e.shiftKey) || k === Inputmask.keyCode.PAGE_UP) { //Home or page_up\n\t\t\t\te.preventDefault();\n\t\t\t\tcaret(input, 0, e.shiftKey ? pos.begin : 0, true);\n\t\t\t} else if (((opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE) || (k === 90 && e.ctrlKey)) && e.altKey !== true) { //escape && undo && #762\n\t\t\t\tcheckVal(input, true, false, undoValue.split(\"\"));\n\t\t\t\t$input.trigger(\"click\");\n\t\t\t} else if (k === Inputmask.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) { //insert\n\t\t\t\topts.insertMode = !opts.insertMode;\n\t\t\t\tcaret(input, !opts.insertMode && pos.begin === getMaskSet().maskLength ? pos.begin - 1 : pos.begin);\n\t\t\t} else if (opts.tabThrough === true && k === Inputmask.keyCode.TAB) {\n\t\t\t\tif (e.shiftKey === true) {\n\t\t\t\t\tif (getTest(pos.begin).fn === null) {\n\t\t\t\t\t\tpos.begin = seekNext(pos.begin);\n\t\t\t\t\t}\n\t\t\t\t\tpos.end = seekPrevious(pos.begin, true);\n\t\t\t\t\tpos.begin = seekPrevious(pos.end, true);\n\t\t\t\t} else {\n\t\t\t\t\tpos.begin = seekNext(pos.begin, true);\n\t\t\t\t\tpos.end = seekNext(pos.begin, true);\n\t\t\t\t\tif (pos.end < getMaskSet().maskLength) pos.end--;\n\t\t\t\t}\n\t\t\t\tif (pos.begin < getMaskSet().maskLength) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcaret(input, pos.begin, pos.end);\n\t\t\t\t}\n\t\t\t} else if (opts.insertMode === false && !e.shiftKey) {\n\t\t\t\tif (k === Inputmask.keyCode.RIGHT) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tvar caretPos = caret(input);\n\t\t\t\t\t\tcaret(input, caretPos.begin);\n\t\t\t\t\t}, 0);\n\t\t\t\t} else if (k === Inputmask.keyCode.LEFT) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tvar caretPos = caret(input);\n\t\t\t\t\t\tcaret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\topts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts);\n\t\t\tignorable = $.inArray(k, opts.ignorables) !== -1;\n\t\t}\n\n\t\tfunction keypressEvent(e, checkval, writeOut, strict, ndx) {\n\t\t\tvar input = this,\n\t\t\t\t$input = $(input),\n\t\t\t\tk = e.which || e.charCode || e.keyCode;\n\n\t\t\tif (checkval !== true && (!(e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable))) {\n\t\t\t\tif (k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join(\"\")) {\n\t\t\t\t\tundoValue = getBuffer().join(\"\");\n\t\t\t\t\t// e.preventDefault();\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$input.trigger(\"change\");\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tif (k) {\n\t\t\t\t\t//special treat the decimal separator\n\t\t\t\t\tif (k === 46 && e.shiftKey === false && opts.radixPoint === \",\") k = 44;\n\t\t\t\t\tvar pos = checkval ? {\n\t\t\t\t\t\t\tbegin: ndx,\n\t\t\t\t\t\t\tend: ndx\n\t\t\t\t\t\t} : caret(input),\n\t\t\t\t\t\tforwardPosition, c = String.fromCharCode(k);\n\n\t\t\t\t\tgetMaskSet().writeOutBuffer = true;\n\t\t\t\t\tvar valResult = isValid(pos, c, strict);\n\t\t\t\t\tif (valResult !== false) {\n\t\t\t\t\t\tvar p = valResult.pos; //set new position from isValid\n\t\t\t\t\t\tresetMaskSet(true);\n\t\t\t\t\t\tif (valResult.caret !== undefined) {\n\t\t\t\t\t\t\tforwardPosition = valResult.caret;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar vps = getMaskSet().validPositions;\n\t\t\t\t\t\t\tif (!opts.keepStatic && (vps[p + 1] !== undefined && getTests(p + 1, vps[p].locator.slice(), p).length > 1 || vps[p].alternation !== undefined)) {\n\t\t\t\t\t\t\t\tforwardPosition = p + 1;\n\t\t\t\t\t\t\t} else forwardPosition = seekNext(p);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgetMaskSet().p = forwardPosition; //needed for checkval\n\t\t\t\t\t}\n\n\t\t\t\t\tif (writeOut !== false) {\n\t\t\t\t\t\tvar self = this;\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\topts.onKeyValidation.call(self, k, valResult, opts);\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\tif (getMaskSet().writeOutBuffer && valResult !== false) {\n\t\t\t\t\t\t\tvar buffer = getBuffer();\n\t\t\t\t\t\t\twriteBuffer(input, buffer, (opts.numericInput && valResult.caret === undefined) ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== true);\n\t\t\t\t\t\t\tif (checkval !== true) {\n\t\t\t\t\t\t\t\tsetTimeout(function () { //timeout needed for IE\n\t\t\t\t\t\t\t\t\tif (isComplete(buffer) === true) $input.trigger(\"complete\");\n\t\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opts.showTooltip) { //update tooltip\n\t\t\t\t\t\tinput.title = opts.tooltip || getMaskSet().mask;\n\t\t\t\t\t}\n\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (checkval) {\n\t\t\t\t\t\tvalResult.forwardPosition = forwardPosition;\n\t\t\t\t\t\treturn valResult;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction pasteEvent(e) {\n\t\t\tvar input = this,\n\t\t\t\tev = e.originalEvent || e,\n\t\t\t\t$input = $(input),\n\t\t\t\tinputValue = input.inputmask._valueGet(true),\n\t\t\t\tcaretPos = caret(input),\n\t\t\t\ttempValue;\n\n\t\t\tif (isRTL) {\n\t\t\t\ttempValue = caretPos.end;\n\t\t\t\tcaretPos.end = caretPos.begin;\n\t\t\t\tcaretPos.begin = tempValue;\n\t\t\t}\n\n\t\t\tvar valueBeforeCaret = inputValue.substr(0, caretPos.begin),\n\t\t\t\tvalueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\n\n\t\t\tif (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join(\"\")) valueBeforeCaret = \"\";\n\t\t\tif (valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\")) valueAfterCaret = \"\";\n\t\t\tif (isRTL) {\n\t\t\t\ttempValue = valueBeforeCaret;\n\t\t\t\tvalueBeforeCaret = valueAfterCaret;\n\t\t\t\tvalueAfterCaret = tempValue;\n\t\t\t}\n\n\t\t\tif (window.clipboardData && window.clipboardData.getData) { // IE\n\t\t\t\tinputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret;\n\t\t\t} else if (ev.clipboardData && ev.clipboardData.getData) {\n\t\t\t\tinputValue = valueBeforeCaret + ev.clipboardData.getData(\"text/plain\") + valueAfterCaret;\n\t\t\t}\n\n\t\t\tvar pasteValue = inputValue;\n\t\t\tif ($.isFunction(opts.onBeforePaste)) {\n\t\t\t\tpasteValue = opts.onBeforePaste(inputValue, opts);\n\t\t\t\tif (pasteValue === false) {\n\t\t\t\t\treturn e.preventDefault();\n\t\t\t\t}\n\t\t\t\tif (!pasteValue) {\n\t\t\t\t\tpasteValue = inputValue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcheckVal(input, false, false, isRTL ? pasteValue.split(\"\").reverse() : pasteValue.toString().split(\"\"));\n\t\t\twriteBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, true);\n\t\t\tif (isComplete(getBuffer()) === true) {\n\t\t\t\t$input.trigger(\"complete\");\n\t\t\t}\n\n\t\t\treturn e.preventDefault();\n\t\t}\n\n\t\tfunction inputFallBackEvent(e) { //fallback when keypress fails\n\t\t\tvar input = this,\n\t\t\t\tinputValue = input.inputmask._valueGet();\n\n\t\t\tif (getBuffer().join(\"\") !== inputValue) {\n\t\t\t\tvar caretPos = caret(input);\n\t\t\t\tinputValue = inputValue.replace(new RegExp(\"(\" + Inputmask.escapeRegex(getBufferTemplate().join(\"\")) + \")*\"), \"\");\n\n\t\t\t\tif (iemobile) { //iemobile just set the character at the end althought the caret position is correctly set\n\t\t\t\t\tvar inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\n\t\t\t\t\tif (inputChar.length === 1) {\n\t\t\t\t\t\tvar keypress = new $.Event(\"keypress\");\n\t\t\t\t\t\tkeypress.which = inputChar.charCodeAt(0);\n\t\t\t\t\t\tkeypressEvent.call(input, keypress, true, true, false, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (caretPos.begin > inputValue.length) {\n\t\t\t\t\tcaret(input, inputValue.length);\n\t\t\t\t\tcaretPos = caret(input);\n\t\t\t\t}\n\t\t\t\t//detect & treat possible backspace\n\t\t\t\tif ((getBuffer().length - inputValue.length) === 1 && inputValue.charAt(caretPos.begin) !== getBuffer()[caretPos.begin] && inputValue.charAt(caretPos.begin + 1) !== getBuffer()[caretPos.begin] && !isMask(caretPos.begin)) {\n\t\t\t\t\te.keyCode = Inputmask.keyCode.BACKSPACE;\n\t\t\t\t\tkeydownEvent.call(input, e);\n\t\t\t\t} else {\n\t\t\t\t\tvar lvp = getLastValidPosition() + 1;\n\t\t\t\t\tvar bufferTemplate = getBuffer().slice(lvp).join('');\n\t\t\t\t\twhile (inputValue.match(Inputmask.escapeRegex(bufferTemplate) + \"$\") === null) {\n\t\t\t\t\t\tbufferTemplate = bufferTemplate.slice(1);\n\t\t\t\t\t}\n\t\t\t\t\tinputValue = inputValue.replace(bufferTemplate, \"\");\n\t\t\t\t\tinputValue = inputValue.split(\"\");\n\n\t\t\t\t\tcheckVal(input, true, false, inputValue);\n\n\t\t\t\t\tif (isComplete(getBuffer()) === true) {\n\t\t\t\t\t\t$(input).trigger(\"complete\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\n\t\tfunction setValueEvent(e) {\n\t\t\tvar input = this,\n\t\t\t\tvalue = input.inputmask._valueGet();\n\t\t\tcheckVal(input, true, false, ($.isFunction(opts.onBeforeMask) ? (opts.onBeforeMask(value, opts) || value) : value).split(\"\"));\n\t\t\tundoValue = getBuffer().join(\"\");\n\t\t\tif ((opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\")) {\n\t\t\t\tinput.inputmask._valueSet(\"\");\n\t\t\t}\n\t\t}\n\n\t\tfunction focusEvent(e) {\n\t\t\tvar input = this,\n\t\t\t\tnptValue = input.inputmask._valueGet();\n\t\t\tif (opts.showMaskOnFocus && (!opts.showMaskOnHover || (opts.showMaskOnHover && nptValue === \"\"))) {\n\t\t\t\tif (input.inputmask._valueGet() !== getBuffer().join(\"\")) {\n\t\t\t\t\twriteBuffer(input, getBuffer(), seekNext(getLastValidPosition()));\n\t\t\t\t}\n\t\t\t} else if (mouseEnter === false) { //only executed on focus without mouseenter\n\t\t\t\tcaret(input, seekNext(getLastValidPosition()));\n\t\t\t}\n\t\t\tif (opts.positionCaretOnTab === true) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tcaret(input, seekNext(getLastValidPosition()));\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t\tundoValue = getBuffer().join(\"\");\n\t\t}\n\n\t\tfunction mouseleaveEvent(e) {\n\t\t\tvar input = this;\n\t\t\tmouseEnter = false;\n\t\t\tif (opts.clearMaskOnLostFocus && document.activeElement !== input) {\n\t\t\t\tvar buffer = getBuffer().slice(),\n\t\t\t\t\tnptValue = input.inputmask._valueGet();\n\t\t\t\tif (nptValue !== input.getAttribute(\"placeholder\") && nptValue !== \"\") {\n\t\t\t\t\tif (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\")) {\n\t\t\t\t\t\tbuffer = [];\n\t\t\t\t\t} else { //clearout optional tail of the mask\n\t\t\t\t\t\tclearOptionalTail(buffer);\n\t\t\t\t\t}\n\t\t\t\t\twriteBuffer(input, buffer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction clickEvent(e) {\n\t\t\tfunction doRadixFocus(clickPos) {\n\t\t\t\tif (opts.radixFocus && opts.radixPoint !== \"\") {\n\t\t\t\t\tvar vps = getMaskSet().validPositions;\n\t\t\t\t\tif (vps[clickPos] === undefined || (vps[clickPos].input === getPlaceholder(clickPos))) {\n\t\t\t\t\t\tif (clickPos < seekNext(-1)) return true;\n\t\t\t\t\t\tvar radixPos = $.inArray(opts.radixPoint, getBuffer());\n\t\t\t\t\t\tif (radixPos !== -1) {\n\t\t\t\t\t\t\tfor (var vp in vps) {\n\t\t\t\t\t\t\t\tif (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar input = this;\n\t\t\tsetTimeout(function () { //needed for Chrome ~ initial selection clears after the clickevent\n\t\t\t\tif (document.activeElement === input) {\n\t\t\t\t\tvar selectedCaret = caret(input);\n\t\t\t\t\tif (selectedCaret.begin === selectedCaret.end) {\n\t\t\t\t\t\tif (doRadixFocus(selectedCaret.begin)) {\n\t\t\t\t\t\t\tcaret(input, opts.numericInput ? seekNext($.inArray(opts.radixPoint, getBuffer())) : $.inArray(opts.radixPoint, getBuffer()));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar clickPosition = selectedCaret.begin,\n\t\t\t\t\t\t\t\tlvclickPosition = getLastValidPosition(clickPosition, true),\n\t\t\t\t\t\t\t\tlastPosition = seekNext(lvclickPosition);\n\n\t\t\t\t\t\t\tif (clickPosition < lastPosition) {\n\t\t\t\t\t\t\t\tcaret(input, !isMask(clickPosition) && !isMask(clickPosition - 1) ? seekNext(clickPosition) : clickPosition);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar placeholder = getPlaceholder(lastPosition);\n\t\t\t\t\t\t\t\tif ((placeholder !== \"\" && getBuffer()[lastPosition] !== placeholder) || (!isMask(lastPosition, true) && getTest(lastPosition).def === placeholder)) {\n\t\t\t\t\t\t\t\t\tlastPosition = seekNext(lastPosition);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcaret(input, lastPosition);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\n\t\tfunction dblclickEvent(e) {\n\t\t\tvar input = this;\n\t\t\tsetTimeout(function () {\n\t\t\t\tcaret(input, 0, seekNext(getLastValidPosition()));\n\t\t\t}, 0);\n\t\t}\n\n\t\tfunction cutEvent(e) {\n\t\t\tvar input = this,\n\t\t\t\t$input = $(input),\n\t\t\t\tpos = caret(input),\n\t\t\t\tev = e.originalEvent || e;\n\n\t\t\t//correct clipboardData\n\t\t\tvar clipboardData = window.clipboardData || ev.clipboardData,\n\t\t\t\tclipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);\n\t\t\tclipboardData.setData(\"text\", isRTL ? clipData.reverse().join(\"\") : clipData.join(\"\"));\n\t\t\tif (document.execCommand) document.execCommand(\"copy\"); // copy selected content to system clipbaord\n\n\t\t\thandleRemove(input, Inputmask.keyCode.DELETE, pos);\n\t\t\twriteBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(\"\"));\n\n\t\t\tif (input.inputmask._valueGet() === getBufferTemplate().join(\"\")) {\n\t\t\t\t$input.trigger(\"cleared\");\n\t\t\t}\n\n\t\t\tif (opts.showTooltip) { //update tooltip\n\t\t\t\tinput.title = opts.tooltip || getMaskSet().mask;\n\t\t\t}\n\t\t}\n\n\t\tfunction blurEvent(e) {\n\t\t\tvar $input = $(this),\n\t\t\t\tinput = this;\n\t\t\tif (input.inputmask) {\n\t\t\t\tvar nptValue = input.inputmask._valueGet(),\n\t\t\t\t\tbuffer = getBuffer().slice();\n\t\t\t\tif (undoValue !== buffer.join(\"\")) {\n\t\t\t\t\tsetTimeout(function () { //change event should be triggered after the other buffer manipulations on blur\n\t\t\t\t\t\t$input.trigger(\"change\");\n\t\t\t\t\t\tundoValue = buffer.join(\"\");\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t\tif (nptValue !== \"\") {\n\t\t\t\t\tif (opts.clearMaskOnLostFocus) {\n\t\t\t\t\t\tif (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\")) {\n\t\t\t\t\t\t\tbuffer = [];\n\t\t\t\t\t\t} else { //clearout optional tail of the mask\n\t\t\t\t\t\t\tclearOptionalTail(buffer);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (isComplete(buffer) === false) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t$input.trigger(\"incomplete\");\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\tif (opts.clearIncomplete) {\n\t\t\t\t\t\t\tresetMaskSet();\n\t\t\t\t\t\t\tif (opts.clearMaskOnLostFocus) {\n\t\t\t\t\t\t\t\tbuffer = [];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbuffer = getBufferTemplate().slice();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\twriteBuffer(input, buffer, undefined, e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction mouseenterEvent(e) {\n\t\t\tvar input = this;\n\t\t\tmouseEnter = true;\n\t\t\tif (document.activeElement !== input && opts.showMaskOnHover) {\n\t\t\t\tif (input.inputmask._valueGet() !== getBuffer().join(\"\")) {\n\t\t\t\t\twriteBuffer(input, getBuffer());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction submitEvent(e) { //trigger change on submit if any\n\t\t\tif (undoValue !== getBuffer().join(\"\")) {\n\t\t\t\t$el.trigger(\"change\");\n\t\t\t}\n\t\t\tif (opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\")) {\n\t\t\t\tel.inputmask._valueSet(\"\"); //clear masktemplete on submit and still has focus\n\t\t\t}\n\t\t\tif (opts.removeMaskOnSubmit) {\n\t\t\t\tel.inputmask._valueSet(el.inputmask.unmaskedvalue(), true);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\twriteBuffer(el, getBuffer());\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\n\t\tfunction resetEvent(e) {\n\t\t\tsetTimeout(function () {\n\t\t\t\t$el.trigger(\"setvalue\");\n\t\t\t}, 0);\n\t\t}\n\n\t\tfunction mask(elem) {\n\t\t\tel = elem;\n\t\t\t$el = $(el);\n\n\t\t\t//show tooltip\n\t\t\tif (opts.showTooltip) {\n\t\t\t\tel.title = opts.tooltip || getMaskSet().mask;\n\t\t\t}\n\n\t\t\tif (el.dir === \"rtl\" || opts.rightAlign) {\n\t\t\t\tel.style.textAlign = \"right\";\n\t\t\t}\n\n\t\t\tif (el.dir === \"rtl\" || opts.numericInput) {\n\t\t\t\tel.dir = \"ltr\";\n\t\t\t\tel.removeAttribute(\"dir\");\n\t\t\t\tel.inputmask.isRTL = true;\n\t\t\t\tisRTL = true;\n\t\t\t}\n\n\t\t\t//unbind all events - to make sure that no other mask will interfere when re-masking\n\t\t\tEventRuler.off(el);\n\t\t\tpatchValueProperty(el);\n\t\t\tif (isElementTypeSupported(el, opts)) {\n\t\t\t\t//bind events\n\t\t\t\tEventRuler.on(el, \"submit\", submitEvent);\n\t\t\t\tEventRuler.on(el, \"reset\", resetEvent);\n\n\t\t\t\tEventRuler.on(el, \"mouseenter\", mouseenterEvent);\n\t\t\t\tEventRuler.on(el, \"blur\", blurEvent);\n\t\t\t\tEventRuler.on(el, \"focus\", focusEvent);\n\t\t\t\tEventRuler.on(el, \"mouseleave\", mouseleaveEvent);\n\t\t\t\tEventRuler.on(el, \"click\", clickEvent);\n\t\t\t\tEventRuler.on(el, \"dblclick\", dblclickEvent);\n\t\t\t\tEventRuler.on(el, \"paste\", pasteEvent);\n\t\t\t\tEventRuler.on(el, \"dragdrop\", pasteEvent);\n\t\t\t\tEventRuler.on(el, \"drop\", pasteEvent);\n\t\t\t\tEventRuler.on(el, \"cut\", cutEvent);\n\t\t\t\tEventRuler.on(el, \"complete\", opts.oncomplete);\n\t\t\t\tEventRuler.on(el, \"incomplete\", opts.onincomplete);\n\t\t\t\tEventRuler.on(el, \"cleared\", opts.oncleared);\n\t\t\t\tif (opts.inputEventOnly !== true) {\n\t\t\t\t\tEventRuler.on(el, \"keydown\", keydownEvent);\n\t\t\t\t\tEventRuler.on(el, \"keypress\", keypressEvent);\n\t\t\t\t}\n\t\t\t\tEventRuler.on(el, \"input\", inputFallBackEvent);\n\t\t\t}\n\t\t\tEventRuler.on(el, \"setvalue\", setValueEvent);\n\n\t\t\t//apply mask\n\t\t\tif (el.inputmask._valueGet() !== \"\" || opts.clearMaskOnLostFocus === false || document.activeElement === el) {\n\t\t\t\tvar initialValue = $.isFunction(opts.onBeforeMask) ? (opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet()) : el.inputmask._valueGet();\n\t\t\t\tcheckVal(el, true, false, initialValue.split(\"\"));\n\t\t\t\tvar buffer = getBuffer().slice();\n\t\t\t\tundoValue = buffer.join(\"\");\n\t\t\t\t// Wrap document.activeElement in a try/catch block since IE9 throw \"Unspecified error\" if document.activeElement is undefined when we are in an IFrame.\n\t\t\t\tif (isComplete(buffer) === false) {\n\t\t\t\t\tif (opts.clearIncomplete) {\n\t\t\t\t\t\tresetMaskSet();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.clearMaskOnLostFocus && document.activeElement !== el) {\n\t\t\t\t\tif (getLastValidPosition() === -1) {\n\t\t\t\t\t\tbuffer = [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclearOptionalTail(buffer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twriteBuffer(el, buffer);\n\t\t\t\tif (document.activeElement === el) { //position the caret when in focus\n\t\t\t\t\tcaret(el, seekNext(getLastValidPosition()));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n//action object\n\t\tvar valueBuffer;\n\t\tif (actionObj !== undefined) {\n\t\t\tswitch (actionObj.action) {\n\t\t\t\tcase \"isComplete\":\n\t\t\t\t\tel = actionObj.el;\n\t\t\t\t\treturn isComplete(getBuffer());\n\t\t\t\tcase \"unmaskedvalue\":\n\t\t\t\t\tel = actionObj.el;\n\n\t\t\t\t\tif (el !== undefined && el.inputmask !== undefined) {\n\t\t\t\t\t\tmaskset = el.inputmask.maskset;\n\t\t\t\t\t\topts = el.inputmask.opts;\n\t\t\t\t\t\tisRTL = el.inputmask.isRTL;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueBuffer = actionObj.value;\n\n\t\t\t\t\t\tif (opts.numericInput) {\n\t\t\t\t\t\t\tisRTL = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalueBuffer = ($.isFunction(opts.onBeforeMask) ? (opts.onBeforeMask(valueBuffer, opts) || valueBuffer) : valueBuffer).split(\"\");\n\t\t\t\t\t\tcheckVal(undefined, false, false, isRTL ? valueBuffer.reverse() : valueBuffer);\n\t\t\t\t\t\tif ($.isFunction(opts.onBeforeWrite)) opts.onBeforeWrite(undefined, getBuffer(), 0, opts);\n\t\t\t\t\t}\n\t\t\t\t\treturn unmaskedvalue(el);\n\t\t\t\tcase \"mask\":\n\t\t\t\t\tel = actionObj.el;\n\t\t\t\t\tmaskset = el.inputmask.maskset;\n\t\t\t\t\topts = el.inputmask.opts;\n\t\t\t\t\tisRTL = el.inputmask.isRTL;\n\t\t\t\t\tundoValue = getBuffer().join(\"\");\n\t\t\t\t\tmask(el);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"format\":\n\t\t\t\t\tif (opts.numericInput) {\n\t\t\t\t\t\tisRTL = true;\n\t\t\t\t\t}\n\t\t\t\t\tvalueBuffer = ($.isFunction(opts.onBeforeMask) ? (opts.onBeforeMask(actionObj.value, opts) || actionObj.value) : actionObj.value).split(\"\");\n\t\t\t\t\tcheckVal(undefined, false, false, isRTL ? valueBuffer.reverse() : valueBuffer);\n\t\t\t\t\tif ($.isFunction(opts.onBeforeWrite)) opts.onBeforeWrite(undefined, getBuffer(), 0, opts);\n\n\t\t\t\t\tif (actionObj.metadata) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tvalue: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\n\t\t\t\t\t\t\tmetadata: maskScope({\n\t\t\t\t\t\t\t\t\"action\": \"getmetadata\"\n\t\t\t\t\t\t\t}, maskset, opts)\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\n\t\t\t\tcase \"isValid\":\n\t\t\t\t\tif (opts.numericInput) {\n\t\t\t\t\t\tisRTL = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (actionObj.value) {\n\t\t\t\t\t\tvalueBuffer = actionObj.value.split(\"\");\n\t\t\t\t\t\tcheckVal(undefined, false, true, isRTL ? valueBuffer.reverse() : valueBuffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tactionObj.value = getBuffer().join(\"\");\n\t\t\t\t\t}\n\t\t\t\t\tvar buffer = getBuffer();\n\t\t\t\t\tvar rl = determineLastRequiredPosition(),\n\t\t\t\t\t\tlmib = buffer.length - 1;\n\t\t\t\t\tfor (; lmib > rl; lmib--) {\n\t\t\t\t\t\tif (isMask(lmib)) break;\n\t\t\t\t\t}\n\t\t\t\t\tbuffer.splice(rl, lmib + 1 - rl);\n\n\t\t\t\t\treturn isComplete(buffer) && actionObj.value === getBuffer().join(\"\");\n\t\t\t\tcase \"getemptymask\":\n\t\t\t\t\treturn getBufferTemplate().join(\"\");\n\t\t\t\tcase \"remove\":\n\t\t\t\t\tel = actionObj.el;\n\t\t\t\t\t$el = $(el);\n\t\t\t\t\tmaskset = el.inputmask.maskset;\n\t\t\t\t\topts = el.inputmask.opts;\n\t\t\t\t\t//writeout the unmaskedvalue\n\t\t\t\t\tel.inputmask._valueSet(unmaskedvalue(el));\n\t\t\t\t\t//unbind all events\n\t\t\t\t\tEventRuler.off(el);\n\t\t\t\t\t//restore the value property\n\t\t\t\t\tvar valueProperty;\n\t\t\t\t\tif (Object.getOwnPropertyDescriptor && Object.getPrototypeOf) {\n\t\t\t\t\t\tvalueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\");\n\t\t\t\t\t\tif (valueProperty) {\n\t\t\t\t\t\t\tif (el.inputmask.__valueGet) {\n\t\t\t\t\t\t\t\tObject.defineProperty(el, \"value\", {\n\t\t\t\t\t\t\t\t\tget: el.inputmask.__valueGet,\n\t\t\t\t\t\t\t\t\tset: el.inputmask.__valueSet,\n\t\t\t\t\t\t\t\t\tconfigurable: true\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} else if (document.__lookupGetter__ && el.__lookupGetter__(\"value\")) {\n\t\t\t\t\t\tif (el.inputmask.__valueGet) {\n\t\t\t\t\t\t\tel.__defineGetter__(\"value\", el.inputmask.__valueGet);\n\t\t\t\t\t\t\tel.__defineSetter__(\"value\", el.inputmask.__valueSet);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//clear data\n\t\t\t\t\tel.inputmask = undefined;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"getmetadata\":\n\t\t\t\t\tif ($.isArray(maskset.metadata)) {\n\t\t\t\t\t\t//find last alternation\n\t\t\t\t\t\tvar alternation, lvp = getLastValidPosition(undefined, true);\n\t\t\t\t\t\tfor (var firstAlt = lvp; firstAlt >= 0; firstAlt--) {\n\t\t\t\t\t\t\tif (getMaskSet().validPositions[firstAlt] && getMaskSet().validPositions[firstAlt].alternation !== undefined) {\n\t\t\t\t\t\t\t\talternation = getMaskSet().validPositions[firstAlt].alternation;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn alternation !== undefined ? maskset.metadata[getMaskSet().validPositions[firstAlt].locator[alternation]] : [];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn maskset.metadata;\n\t\t\t}\n\t\t}\n\t}\n\n//make inputmask available\n\twindow.Inputmask = Inputmask;\n\treturn Inputmask;\n}));\n\n;\n// --- jquery.inputmask.js ---\n/*\n * Input Mask plugin for jquery\n * http://github.com/RobinHerbots/jquery.inputmask\n * Copyright (c) 2010 -\tRobin Herbots\n * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n * Version: 0.0.0-dev\n */\n\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"jquery\", \"inputmask\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"jquery\"), require(\"./inputmask\"));\n\t} else {\n\t\tfactory(jQuery, window.Inputmask);\n\t}\n}\n(function ($, Inputmask) {\n\tif ($.fn.inputmask === undefined) {\n\t\t//jquery plugin\n\t\t$.fn.inputmask = function (fn, options) {\n\t\t\tvar nptmask, input = this[0];\n\t\t\tif (options === undefined) options = {};\n\t\t\tif (typeof fn === \"string\") {\n\t\t\t\tswitch (fn) {\n\t\t\t\t\tcase \"unmaskedvalue\":\n\t\t\t\t\t\treturn input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();\n\t\t\t\t\tcase \"remove\":\n\t\t\t\t\t\treturn this.each(function () {\n\t\t\t\t\t\t\tif (this.inputmask) this.inputmask.remove();\n\t\t\t\t\t\t});\n\t\t\t\t\tcase \"getemptymask\":\n\t\t\t\t\t\treturn input && input.inputmask ? input.inputmask.getemptymask() : \"\";\n\t\t\t\t\tcase \"hasMaskedValue\": //check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value\n\t\t\t\t\t\treturn input && input.inputmask ? input.inputmask.hasMaskedValue() : false;\n\t\t\t\t\tcase \"isComplete\":\n\t\t\t\t\t\treturn input && input.inputmask ? input.inputmask.isComplete() : true;\n\t\t\t\t\tcase \"getmetadata\": //return mask metadata if exists\n\t\t\t\t\t\treturn input && input.inputmask ? input.inputmask.getmetadata() : undefined;\n\t\t\t\t\tcase \"setvalue\":\n\t\t\t\t\t\t$(input).val(options);\n\t\t\t\t\t\tif (input && input.inputmask !== undefined) {\n\t\t\t\t\t\t\t$(input).triggerHandler(\"setvalue\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"option\":\n\t\t\t\t\t\tif (typeof options === \"string\") {\n\t\t\t\t\t\t\tif (input && input.inputmask !== undefined) {\n\t\t\t\t\t\t\t\treturn input.inputmask.option(options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn this.each(function () {\n\t\t\t\t\t\t\t\tif (this.inputmask !== undefined) {\n\t\t\t\t\t\t\t\t\treturn this.inputmask.option(options);\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\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\toptions.alias = fn;\n\t\t\t\t\t\tnptmask = new Inputmask(options);\n\t\t\t\t\t\treturn this.each(function () {\n\t\t\t\t\t\t\tnptmask.mask(this);\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (typeof fn == \"object\") {\n\t\t\t\tnptmask = new Inputmask(fn);\n\t\t\t\tif (fn.mask === undefined && fn.alias === undefined) {\n\t\t\t\t\treturn this.each(function () {\n\t\t\t\t\t\tif (this.inputmask !== undefined) {\n\t\t\t\t\t\t\treturn this.inputmask.option(fn);\n\t\t\t\t\t\t} else nptmask.mask(this);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn this.each(function () {\n\t\t\t\t\t\tnptmask.mask(this);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (fn === undefined) {\n\t\t\t\t//look for data-inputmask atributes\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tnptmask = new Inputmask(options);\n\t\t\t\t\tnptmask.mask(this);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t}\n\treturn $.fn.inputmask;\n}));\n\n;\n// --- inputmask.date.extensions.js ---\n/*\n Input Mask plugin extensions\n http://github.com/RobinHerbots/jquery.inputmask\n Copyright (c) 2010 -  Robin Herbots\n Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n Version: 0.0.0-dev\n\n Optional extensions on the jquery.inputmask base\n */\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"inputmask.dependencyLib\", \"inputmask\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"./inputmask.dependencyLib.jquery\"), require(\"./inputmask\"));\n\t} else {\n\t\tfactory(window.dependencyLib || jQuery, window.Inputmask);\n\t}\n}\n(function ($, Inputmask) {\n\t//date & time aliases\n\tInputmask.extendDefinitions({\n\t\t\"h\": { //hours\n\t\t\tvalidator: \"[01][0-9]|2[0-3]\",\n\t\t\tcardinality: 2,\n\t\t\tprevalidator: [{\n\t\t\t\tvalidator: \"[0-2]\",\n\t\t\t\tcardinality: 1\n\t\t\t}]\n\t\t},\n\t\t\"s\": { //seconds || minutes\n\t\t\tvalidator: \"[0-5][0-9]\",\n\t\t\tcardinality: 2,\n\t\t\tprevalidator: [{\n\t\t\t\tvalidator: \"[0-5]\",\n\t\t\t\tcardinality: 1\n\t\t\t}]\n\t\t},\n\t\t\"d\": { //basic day\n\t\t\tvalidator: \"0[1-9]|[12][0-9]|3[01]\",\n\t\t\tcardinality: 2,\n\t\t\tprevalidator: [{\n\t\t\t\tvalidator: \"[0-3]\",\n\t\t\t\tcardinality: 1\n\t\t\t}]\n\t\t},\n\t\t\"m\": { //basic month\n\t\t\tvalidator: \"0[1-9]|1[012]\",\n\t\t\tcardinality: 2,\n\t\t\tprevalidator: [{\n\t\t\t\tvalidator: \"[01]\",\n\t\t\t\tcardinality: 1\n\t\t\t}]\n\t\t},\n\t\t\"y\": { //basic year\n\t\t\tvalidator: \"(19|20)\\\\d{2}\",\n\t\t\tcardinality: 4,\n\t\t\tprevalidator: [{\n\t\t\t\tvalidator: \"[12]\",\n\t\t\t\tcardinality: 1\n\t\t\t}, {\n\t\t\t\tvalidator: \"(19|20)\",\n\t\t\t\tcardinality: 2\n\t\t\t}, {\n\t\t\t\tvalidator: \"(19|20)\\\\d\",\n\t\t\t\tcardinality: 3\n\t\t\t}]\n\t\t}\n\t});\n\tInputmask.extendAliases({\n\t\t\"dd/mm/yyyy\": {\n\t\t\tmask: \"1/2/y\",\n\t\t\tplaceholder: \"dd/mm/yyyy\",\n\t\t\tregex: {\n\t\t\t\tval1pre: new RegExp(\"[0-3]\"), //daypre\n\t\t\t\tval1: new RegExp(\"0[1-9]|[12][0-9]|3[01]\"), //day\n\t\t\t\tval2pre: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[1-9]|[12][0-9]|3[01])\" + escapedSeparator + \"[01])\");\n\t\t\t\t}, //monthpre\n\t\t\t\tval2: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[1-9]|[12][0-9])\" + escapedSeparator + \"(0[1-9]|1[012]))|(30\" + escapedSeparator + \"(0[13-9]|1[012]))|(31\" + escapedSeparator + \"(0[13578]|1[02]))\");\n\t\t\t\t} //month\n\t\t\t},\n\t\t\tleapday: \"29/02/\",\n\t\t\tseparator: \"/\",\n\t\t\tyearrange: {\n\t\t\t\tminyear: 1900,\n\t\t\t\tmaxyear: 2099\n\t\t\t},\n\t\t\tisInYearRange: function (chrs, minyear, maxyear) {\n\t\t\t\tif (isNaN(chrs)) return false;\n\t\t\t\tvar enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length)));\n\t\t\t\tvar enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));\n\t\t\t\treturn (!isNaN(enteredyear) ? minyear <= enteredyear && enteredyear <= maxyear : false) ||\n\t\t\t\t\t(!isNaN(enteredyear2) ? minyear <= enteredyear2 && enteredyear2 <= maxyear : false);\n\t\t\t},\n\t\t\tdeterminebaseyear: function (minyear, maxyear, hint) {\n\t\t\t\tvar currentyear = (new Date()).getFullYear();\n\t\t\t\tif (minyear > currentyear) return minyear;\n\t\t\t\tif (maxyear < currentyear) {\n\t\t\t\t\tvar maxYearPrefix = maxyear.toString().slice(0, 2);\n\t\t\t\t\tvar maxYearPostfix = maxyear.toString().slice(2, 4);\n\t\t\t\t\twhile (maxyear < maxYearPrefix + hint) {\n\t\t\t\t\t\tmaxYearPrefix--;\n\t\t\t\t\t}\n\t\t\t\t\tvar maxxYear = maxYearPrefix + maxYearPostfix;\n\t\t\t\t\treturn minyear > maxxYear ? minyear : maxxYear;\n\t\t\t\t}\n\t\t\t\tif (minyear <= currentyear && currentyear <= maxyear) {\n\t\t\t\t\tvar currentYearPrefix = currentyear.toString().slice(0, 2);\n\t\t\t\t\twhile (maxyear < currentYearPrefix + hint) {\n\t\t\t\t\t\tcurrentYearPrefix--;\n\t\t\t\t\t}\n\t\t\t\t\tvar currentYearAndHint = currentYearPrefix + hint;\n\t\t\t\t\treturn currentYearAndHint < minyear ? minyear : currentYearAndHint;\n\t\t\t\t}\n\t\t\t\treturn currentyear;\n\t\t\t},\n\t\t\tonKeyDown: function (e, buffer, caretPos, opts) {\n\t\t\t\tvar $input = $(this);\n\t\t\t\tif (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n\t\t\t\t\tvar today = new Date();\n\t\t\t\t\t$input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());\n\t\t\t\t\t$input.trigger(\"setvalue\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetFrontValue: function (mask, buffer, opts) {\n\t\t\t\tvar start = 0,\n\t\t\t\t\tlength = 0;\n\t\t\t\tfor (var i = 0; i < mask.length; i++) {\n\t\t\t\t\tif (mask.charAt(i) === \"2\") break;\n\t\t\t\t\tvar definition = opts.definitions[mask.charAt(i)];\n\t\t\t\t\tif (definition) {\n\t\t\t\t\t\tstart += length;\n\t\t\t\t\t\tlength = definition.cardinality;\n\t\t\t\t\t} else length++;\n\t\t\t\t}\n\t\t\t\treturn buffer.join(\"\").substr(start, length);\n\t\t\t},\n\t\t\tdefinitions: {\n\t\t\t\t\"1\": { //val1 ~ day or month\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tvar isValid = opts.regex.val1.test(chrs);\n\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\tif (chrs.charAt(1) === opts.separator || \"-./\".indexOf(chrs.charAt(1)) !== -1) {\n\t\t\t\t\t\t\t\tisValid = opts.regex.val1.test(\"0\" + chrs.charAt(0));\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos - 1] = \"0\";\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"refreshFromBuffer\": {\n\t\t\t\t\t\t\t\t\t\t\tstart: pos - 1,\n\t\t\t\t\t\t\t\t\t\t\tend: pos\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\t\t\"c\": chrs.charAt(0)\n\t\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\treturn isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 2,\n\t\t\t\t\tprevalidator: [{\n\t\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\t\tvar pchrs = chrs;\n\t\t\t\t\t\t\tif (!isNaN(maskset.buffer[pos + 1])) pchrs += maskset.buffer[pos + 1];\n\t\t\t\t\t\t\tvar isValid = pchrs.length === 1 ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);\n\t\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\t\tisValid = opts.regex.val1.test(chrs + \"0\");\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos] = chrs;\n\t\t\t\t\t\t\t\t\tmaskset.buffer[++pos] = \"0\";\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\t\t\"c\": \"0\"\n\t\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\tisValid = opts.regex.val1.test(\"0\" + chrs);\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos] = \"0\";\n\t\t\t\t\t\t\t\t\tpos++;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\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\treturn isValid;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcardinality: 1\n\t\t\t\t\t}]\n\t\t\t\t},\n\t\t\t\t\"2\": { //val2 ~ day or month\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tvar frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n\t\t\t\t\t\tif (frontValue.indexOf(opts.placeholder[0]) !== -1) frontValue = \"01\" + opts.separator;\n\t\t\t\t\t\tvar isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);\n\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\tif (chrs.charAt(1) === opts.separator || \"-./\".indexOf(chrs.charAt(1)) !== -1) {\n\t\t\t\t\t\t\t\tisValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs.charAt(0));\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos - 1] = \"0\";\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"refreshFromBuffer\": {\n\t\t\t\t\t\t\t\t\t\t\tstart: pos - 1,\n\t\t\t\t\t\t\t\t\t\t\tend: pos\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\t\t\"c\": chrs.charAt(0)\n\t\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\n\t\t\t\t\t\t//check leap yeap\n\t\t\t\t\t\tif ((opts.mask.indexOf(\"2\") === opts.mask.length - 1) && isValid) {\n\t\t\t\t\t\t\tvar dayMonthValue = maskset.buffer.join(\"\").substr(4, 4) + chrs;\n\t\t\t\t\t\t\tif (dayMonthValue !== opts.leapday) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar year = parseInt(maskset.buffer.join(\"\").substr(0, 4), 10); //detect leap year\n\t\t\t\t\t\t\t\tif (year % 4 === 0) {\n\t\t\t\t\t\t\t\t\tif (year % 100 === 0) {\n\t\t\t\t\t\t\t\t\t\tif (year % 400 === 0) {\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else return false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 2,\n\t\t\t\t\tprevalidator: [{\n\t\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\t\tif (!isNaN(maskset.buffer[pos + 1])) chrs += maskset.buffer[pos + 1];\n\t\t\t\t\t\t\tvar frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n\t\t\t\t\t\t\tif (frontValue.indexOf(opts.placeholder[0]) !== -1) frontValue = \"01\" + opts.separator;\n\t\t\t\t\t\t\tvar isValid = chrs.length === 1 ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);\n\t\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\t\tisValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs);\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos] = \"0\";\n\t\t\t\t\t\t\t\t\tpos++;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\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\treturn isValid;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcardinality: 1\n\t\t\t\t\t}]\n\t\t\t\t},\n\t\t\t\t\"y\": { //year\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tif (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {\n\t\t\t\t\t\t\tvar dayMonthValue = maskset.buffer.join(\"\").substr(0, 6);\n\t\t\t\t\t\t\tif (dayMonthValue !== opts.leapday) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar year = parseInt(chrs, 10); //detect leap year\n\t\t\t\t\t\t\t\tif (year % 4 === 0) {\n\t\t\t\t\t\t\t\t\tif (year % 100 === 0) {\n\t\t\t\t\t\t\t\t\t\tif (year % 400 === 0) return true;\n\t\t\t\t\t\t\t\t\t\telse return false;\n\t\t\t\t\t\t\t\t\t} else return true;\n\t\t\t\t\t\t\t\t} else return false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else return false;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 4,\n\t\t\t\t\tprevalidator: [{\n\t\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\t\tvar isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n\t\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\t\tvar yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 1);\n\n\t\t\t\t\t\t\t\tisValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos++] = yearPrefix.charAt(0);\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\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\tyearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 2);\n\n\t\t\t\t\t\t\t\tisValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos++] = yearPrefix.charAt(0);\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos++] = yearPrefix.charAt(1);\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\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\treturn isValid;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcardinality: 1\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\t\tvar isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n\t\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\t\tvar yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\n\n\t\t\t\t\t\t\t\tisValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos++] = yearPrefix.charAt(1);\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tyearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\n\t\t\t\t\t\t\t\tif (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {\n\t\t\t\t\t\t\t\t\tvar dayMonthValue = maskset.buffer.join(\"\").substr(0, 6);\n\t\t\t\t\t\t\t\t\tif (dayMonthValue !== opts.leapday) {\n\t\t\t\t\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tvar year = parseInt(chrs, 10); //detect leap year\n\t\t\t\t\t\t\t\t\t\tif (year % 4 === 0) {\n\t\t\t\t\t\t\t\t\t\t\tif (year % 100 === 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (year % 400 === 0) isValid = true;\n\t\t\t\t\t\t\t\t\t\t\t\telse isValid = false;\n\t\t\t\t\t\t\t\t\t\t\t} else isValid = true;\n\t\t\t\t\t\t\t\t\t\t} else isValid = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else isValid = false;\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos - 1] = yearPrefix.charAt(0);\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos++] = yearPrefix.charAt(1);\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos++] = chrs.charAt(0);\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"refreshFromBuffer\": {\n\t\t\t\t\t\t\t\t\t\t\tstart: pos - 3,\n\t\t\t\t\t\t\t\t\t\t\tend: pos\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\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\treturn isValid;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcardinality: 2\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\t\treturn opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcardinality: 3\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t},\n\t\t\tinsertMode: false,\n\t\t\tautoUnmask: false\n\t\t},\n\t\t\"mm/dd/yyyy\": {\n\t\t\tplaceholder: \"mm/dd/yyyy\",\n\t\t\talias: \"dd/mm/yyyy\", //reuse functionality of dd/mm/yyyy alias\n\t\t\tregex: {\n\t\t\t\tval2pre: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n\t\t\t\t}, //daypre\n\t\t\t\tval2: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n\t\t\t\t}, //day\n\t\t\t\tval1pre: new RegExp(\"[01]\"), //monthpre\n\t\t\t\tval1: new RegExp(\"0[1-9]|1[012]\") //month\n\t\t\t},\n\t\t\tleapday: \"02/29/\",\n\t\t\tonKeyDown: function (e, buffer, caretPos, opts) {\n\t\t\t\tvar $input = $(this);\n\t\t\t\tif (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n\t\t\t\t\tvar today = new Date();\n\t\t\t\t\t$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());\n\t\t\t\t\t$input.trigger(\"setvalue\");\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"yyyy/mm/dd\": {\n\t\t\tmask: \"y/1/2\",\n\t\t\tplaceholder: \"yyyy/mm/dd\",\n\t\t\talias: \"mm/dd/yyyy\",\n\t\t\tleapday: \"/02/29\",\n\t\t\tonKeyDown: function (e, buffer, caretPos, opts) {\n\t\t\t\tvar $input = $(this);\n\t\t\t\tif (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n\t\t\t\t\tvar today = new Date();\n\t\t\t\t\t$input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());\n\t\t\t\t\t$input.trigger(\"setvalue\");\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"dd.mm.yyyy\": {\n\t\t\tmask: \"1.2.y\",\n\t\t\tplaceholder: \"dd.mm.yyyy\",\n\t\t\tleapday: \"29.02.\",\n\t\t\tseparator: \".\",\n\t\t\talias: \"dd/mm/yyyy\"\n\t\t},\n\t\t\"dd-mm-yyyy\": {\n\t\t\tmask: \"1-2-y\",\n\t\t\tplaceholder: \"dd-mm-yyyy\",\n\t\t\tleapday: \"29-02-\",\n\t\t\tseparator: \"-\",\n\t\t\talias: \"dd/mm/yyyy\"\n\t\t},\n\t\t\"mm.dd.yyyy\": {\n\t\t\tmask: \"1.2.y\",\n\t\t\tplaceholder: \"mm.dd.yyyy\",\n\t\t\tleapday: \"02.29.\",\n\t\t\tseparator: \".\",\n\t\t\talias: \"mm/dd/yyyy\"\n\t\t},\n\t\t\"mm-dd-yyyy\": {\n\t\t\tmask: \"1-2-y\",\n\t\t\tplaceholder: \"mm-dd-yyyy\",\n\t\t\tleapday: \"02-29-\",\n\t\t\tseparator: \"-\",\n\t\t\talias: \"mm/dd/yyyy\"\n\t\t},\n\t\t\"yyyy.mm.dd\": {\n\t\t\tmask: \"y.1.2\",\n\t\t\tplaceholder: \"yyyy.mm.dd\",\n\t\t\tleapday: \".02.29\",\n\t\t\tseparator: \".\",\n\t\t\talias: \"yyyy/mm/dd\"\n\t\t},\n\t\t\"yyyy-mm-dd\": {\n\t\t\tmask: \"y-1-2\",\n\t\t\tplaceholder: \"yyyy-mm-dd\",\n\t\t\tleapday: \"-02-29\",\n\t\t\tseparator: \"-\",\n\t\t\talias: \"yyyy/mm/dd\"\n\t\t},\n\t\t\"datetime\": {\n\t\t\tmask: \"1/2/y h:s\",\n\t\t\tplaceholder: \"dd/mm/yyyy hh:mm\",\n\t\t\talias: \"dd/mm/yyyy\",\n\t\t\tregex: {\n\t\t\t\thrspre: new RegExp(\"[012]\"), //hours pre\n\t\t\t\thrs24: new RegExp(\"2[0-4]|1[3-9]\"),\n\t\t\t\thrs: new RegExp(\"[01][0-9]|2[0-4]\"), //hours\n\t\t\t\tampm: new RegExp(\"^[a|p|A|P][m|M]\"),\n\t\t\t\tmspre: new RegExp(\"[0-5]\"), //minutes/seconds pre\n\t\t\t\tms: new RegExp(\"[0-5][0-9]\")\n\t\t\t},\n\t\t\ttimeseparator: \":\",\n\t\t\thourFormat: \"24\", // or 12\n\t\t\tdefinitions: {\n\t\t\t\t\"h\": { //hours\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tif (opts.hourFormat === \"24\") {\n\t\t\t\t\t\t\tif (parseInt(chrs, 10) === 24) {\n\t\t\t\t\t\t\t\tmaskset.buffer[pos - 1] = \"0\";\n\t\t\t\t\t\t\t\tmaskset.buffer[pos] = \"0\";\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\"refreshFromBuffer\": {\n\t\t\t\t\t\t\t\t\t\tstart: pos - 1,\n\t\t\t\t\t\t\t\t\t\tend: pos\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\"c\": \"0\"\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar isValid = opts.regex.hrs.test(chrs);\n\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\tif (chrs.charAt(1) === opts.timeseparator || \"-.:\".indexOf(chrs.charAt(1)) !== -1) {\n\t\t\t\t\t\t\t\tisValid = opts.regex.hrs.test(\"0\" + chrs.charAt(0));\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos - 1] = \"0\";\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos] = chrs.charAt(0);\n\t\t\t\t\t\t\t\t\tpos++;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"refreshFromBuffer\": {\n\t\t\t\t\t\t\t\t\t\t\tstart: pos - 2,\n\t\t\t\t\t\t\t\t\t\t\tend: pos\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\t\t\"c\": opts.timeseparator\n\t\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\n\t\t\t\t\t\tif (isValid && opts.hourFormat !== \"24\" && opts.regex.hrs24.test(chrs)) {\n\n\t\t\t\t\t\t\tvar tmp = parseInt(chrs, 10);\n\n\t\t\t\t\t\t\tif (tmp === 24) {\n\t\t\t\t\t\t\t\tmaskset.buffer[pos + 5] = \"a\";\n\t\t\t\t\t\t\t\tmaskset.buffer[pos + 6] = \"m\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmaskset.buffer[pos + 5] = \"p\";\n\t\t\t\t\t\t\t\tmaskset.buffer[pos + 6] = \"m\";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttmp = tmp - 12;\n\n\t\t\t\t\t\t\tif (tmp < 10) {\n\t\t\t\t\t\t\t\tmaskset.buffer[pos] = tmp.toString();\n\t\t\t\t\t\t\t\tmaskset.buffer[pos - 1] = \"0\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmaskset.buffer[pos] = tmp.toString().charAt(1);\n\t\t\t\t\t\t\t\tmaskset.buffer[pos - 1] = tmp.toString().charAt(0);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\"refreshFromBuffer\": {\n\t\t\t\t\t\t\t\t\tstart: pos - 1,\n\t\t\t\t\t\t\t\t\tend: pos + 6\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"c\": maskset.buffer[pos]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 2,\n\t\t\t\t\tprevalidator: [{\n\t\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\t\tvar isValid = opts.regex.hrspre.test(chrs);\n\t\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\t\tisValid = opts.regex.hrs.test(\"0\" + chrs);\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos] = \"0\";\n\t\t\t\t\t\t\t\t\tpos++;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\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\treturn isValid;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcardinality: 1\n\t\t\t\t\t}]\n\t\t\t\t},\n\t\t\t\t\"s\": { //seconds || minutes\n\t\t\t\t\tvalidator: \"[0-5][0-9]\",\n\t\t\t\t\tcardinality: 2,\n\t\t\t\t\tprevalidator: [{\n\t\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\t\tvar isValid = opts.regex.mspre.test(chrs);\n\t\t\t\t\t\t\tif (!strict && !isValid) {\n\t\t\t\t\t\t\t\tisValid = opts.regex.ms.test(\"0\" + chrs);\n\t\t\t\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\t\t\t\tmaskset.buffer[pos] = \"0\";\n\t\t\t\t\t\t\t\t\tpos++;\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos\n\t\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\treturn isValid;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcardinality: 1\n\t\t\t\t\t}]\n\t\t\t\t},\n\t\t\t\t\"t\": { //am/pm\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\treturn opts.regex.ampm.test(chrs + \"m\");\n\t\t\t\t\t},\n\t\t\t\t\tcasing: \"lower\",\n\t\t\t\t\tcardinality: 1\n\t\t\t\t}\n\t\t\t},\n\t\t\tinsertMode: false,\n\t\t\tautoUnmask: false\n\t\t},\n\t\t\"datetime12\": {\n\t\t\tmask: \"1/2/y h:s t\\\\m\",\n\t\t\tplaceholder: \"dd/mm/yyyy hh:mm xm\",\n\t\t\talias: \"datetime\",\n\t\t\thourFormat: \"12\"\n\t\t},\n\t\t\"mm/dd/yyyy hh:mm xm\": {\n\t\t\tmask: \"1/2/y h:s t\\\\m\",\n\t\t\tplaceholder: \"mm/dd/yyyy hh:mm xm\",\n\t\t\talias: \"datetime12\",\n\t\t\tregex: {\n\t\t\t\tval2pre: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n\t\t\t\t},\n\t\t\t\tval2: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n\t\t\t\t},\n\t\t\t\tval1pre: new RegExp(\"[01]\"),\n\t\t\t\tval1: new RegExp(\"0[1-9]|1[012]\")\n\t\t\t},\n\t\t\tleapday: \"02/29/\",\n\t\t\tonKeyDown: function (e, buffer, caretPos, opts) {\n\t\t\t\tvar $input = $(this);\n\t\t\t\tif (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n\t\t\t\t\tvar today = new Date();\n\t\t\t\t\t$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());\n\t\t\t\t\t$input.trigger(\"setvalue\");\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"hh:mm t\": {\n\t\t\tmask: \"h:s t\\\\m\",\n\t\t\tplaceholder: \"hh:mm xm\",\n\t\t\talias: \"datetime\",\n\t\t\thourFormat: \"12\"\n\t\t},\n\t\t\"h:s t\": {\n\t\t\tmask: \"h:s t\\\\m\",\n\t\t\tplaceholder: \"hh:mm xm\",\n\t\t\talias: \"datetime\",\n\t\t\thourFormat: \"12\"\n\t\t},\n\t\t\"hh:mm:ss\": {\n\t\t\tmask: \"h:s:s\",\n\t\t\tplaceholder: \"hh:mm:ss\",\n\t\t\talias: \"datetime\",\n\t\t\tautoUnmask: false\n\t\t},\n\t\t\"hh:mm\": {\n\t\t\tmask: \"h:s\",\n\t\t\tplaceholder: \"hh:mm\",\n\t\t\talias: \"datetime\",\n\t\t\tautoUnmask: false\n\t\t},\n\t\t\"date\": {\n\t\t\talias: \"dd/mm/yyyy\" // \"mm/dd/yyyy\"\n\t\t},\n\t\t\"mm/yyyy\": {\n\t\t\tmask: \"1/y\",\n\t\t\tplaceholder: \"mm/yyyy\",\n\t\t\tleapday: \"donotuse\",\n\t\t\tseparator: \"/\",\n\t\t\talias: \"mm/dd/yyyy\"\n\t\t},\n\t\t\"shamsi\": {\n\t\t\tregex: {\n\t\t\t\tval2pre: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"[0-3])\");\n\t\t\t\t},\n\t\t\t\tval2: function (separator) {\n\t\t\t\t\tvar escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n\t\t\t\t\treturn new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[1-9]|1[012])\" + escapedSeparator + \"30)|((0[1-6])\" + escapedSeparator + \"31)\");\n\t\t\t\t},\n\t\t\t\tval1pre: new RegExp(\"[01]\"),\n\t\t\t\tval1: new RegExp(\"0[1-9]|1[012]\")\n\t\t\t},\n\t\t\tyearrange: {\n\t\t\t\tminyear: 1300,\n\t\t\t\tmaxyear: 1499\n\t\t\t},\n\t\t\tmask: \"y/1/2\",\n\t\t\tleapday: \"/12/30\",\n\t\t\tplaceholder: \"yyyy/mm/dd\",\n\t\t\talias: \"mm/dd/yyyy\",\n\t\t\tclearIncomplete: true\n\t\t}\n\t});\n\n\treturn Inputmask;\n}));\n\n;\n// --- inputmask.dependencyLib.jquery.js ---\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"jquery\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"jquery\"));\n\t} else {\n\t\tfactory(jQuery);\n\t}\n}\n(function ($) {\n\twindow.dependencyLib = $;\n\treturn $;\n}));\n\n;\n// --- inputmask.extensions.js ---\n/*\n Input Mask plugin extensions\n http://github.com/RobinHerbots/jquery.inputmask\n Copyright (c) 2010 -  Robin Herbots\n Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n Version: 0.0.0-dev\n\n Optional extensions on the jquery.inputmask base\n */\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"inputmask.dependencyLib\", \"inputmask\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"./inputmask.dependencyLib.jquery\"), require(\"./inputmask\"));\n\t} else {\n\t\tfactory(window.dependencyLib || jQuery, window.Inputmask);\n\t}\n}\n(function ($, Inputmask) {\n\t//extra definitions\n\tInputmask.extendDefinitions({\n\t\t\"A\": {\n\t\t\tvalidator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u0451\\u00C0-\\u00FF\\u00B5]\",\n\t\t\tcardinality: 1,\n\t\t\tcasing: \"upper\" //auto uppercasing\n\t\t},\n\t\t\"&\": { //alfanumeric uppercasing\n\t\t\tvalidator: \"[0-9A-Za-z\\u0410-\\u044F\\u0401\\u0451\\u00C0-\\u00FF\\u00B5]\",\n\t\t\tcardinality: 1,\n\t\t\tcasing: \"upper\"\n\t\t},\n\t\t\"#\": { //hexadecimal\n\t\t\tvalidator: \"[0-9A-Fa-f]\",\n\t\t\tcardinality: 1,\n\t\t\tcasing: \"upper\"\n\t\t}\n\t});\n\tInputmask.extendAliases({\n\t\t\"url\": {\n\t\t\tdefinitions: {\n\t\t\t\t\"i\": {\n\t\t\t\t\tvalidator: \".\",\n\t\t\t\t\tcardinality: 1\n\t\t\t\t}\n\t\t\t},\n\t\t\tmask: \"(\\\\http://)|(\\\\http\\\\s://)|(ftp://)|(ftp\\\\s://)i{+}\",\n\t\t\tinsertMode: false,\n\t\t\tautoUnmask: false\n\t\t},\n\t\t\"ip\": { //ip-address mask\n\t\t\tmask: \"i[i[i]].i[i[i]].i[i[i]].i[i[i]]\",\n\t\t\tdefinitions: {\n\t\t\t\t\"i\": {\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tif (pos - 1 > -1 && maskset.buffer[pos - 1] !== \".\") {\n\t\t\t\t\t\t\tchrs = maskset.buffer[pos - 1] + chrs;\n\t\t\t\t\t\t\tif (pos - 2 > -1 && maskset.buffer[pos - 2] !== \".\") {\n\t\t\t\t\t\t\t\tchrs = maskset.buffer[pos - 2] + chrs;\n\t\t\t\t\t\t\t} else chrs = \"0\" + chrs;\n\t\t\t\t\t\t} else chrs = \"00\" + chrs;\n\t\t\t\t\t\treturn new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\").test(chrs);\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 1\n\t\t\t\t}\n\t\t\t},\n\t\t\tonUnMask: function (maskedValue, unmaskedValue, opts) {\n\t\t\t\treturn maskedValue;\n\t\t\t}\n\t\t},\n\t\t\"email\": {\n\t\t\t//https://en.wikipedia.org/wiki/Domain_name#Domain_name_space\n\t\t\t//https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names\n\t\t\t//should be extended with the toplevel domains at the end\n\t\t\tmask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\n\t\t\tgreedy: false,\n\t\t\tonBeforePaste: function (pastedValue, opts) {\n\t\t\t\tpastedValue = pastedValue.toLowerCase();\n\t\t\t\treturn pastedValue.replace(\"mailto:\", \"\");\n\t\t\t},\n\t\t\tdefinitions: {\n\t\t\t\t\"*\": {\n\t\t\t\t\tvalidator: \"[0-9A-Za-z!#$%&'*+/=?^_`{|}~\\-]\",\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tcasing: \"lower\"\n\t\t\t\t},\n\t\t\t\t\"-\": {\n\t\t\t\t\tvalidator: \"[0-9A-Za-z\\-]\",\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tcasing: \"lower\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tonUnMask: function (maskedValue, unmaskedValue, opts) {\n\t\t\t\treturn maskedValue;\n\t\t\t}\n\t\t},\n\t\t\"mac\": {\n\t\t\tmask: \"##:##:##:##:##:##\"\n\t\t},\n\t\t//https://en.wikipedia.org/wiki/Vehicle_identification_number\n\t\t// see issue #1199\n\t\t\"vin\": {\n\t\t\tmask: \"V{13}9{4}\",\n\t\t\tdefinitions: {\n\t\t\t\t'V': {\n\t\t\t\t\tvalidator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tcasing: \"upper\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tclearIncomplete: true,\n\t\t\tautoUnmask: true\n\t\t}\n\t});\n\treturn Inputmask;\n}));\n\n;\n// --- inputmask.numeric.extensions.js ---\n/*\n Input Mask plugin extensions\n http://github.com/RobinHerbots/jquery.inputmask\n Copyright (c) 2010 - Robin Herbots\n Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n Version: 0.0.0-dev\n\n Optional extensions on the jquery.inputmask base\n */\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"inputmask.dependencyLib\", \"inputmask\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"./inputmask.dependencyLib.jquery\"), require(\"./inputmask\"));\n\t} else {\n\t\tfactory(window.dependencyLib || jQuery, window.Inputmask);\n\t}\n}\n(function ($, Inputmask) {\n\t//number aliases\n\tInputmask.extendAliases({\n\t\t\"numeric\": {\n\t\t\tmask: function (opts) {\n\t\t\t\tfunction autoEscape(txt) {\n\t\t\t\t\tvar escapedTxt = \"\";\n\t\t\t\t\tfor (var i = 0; i < txt.length; i++) {\n\t\t\t\t\t\tif (opts.definitions[txt.charAt(i)] ||\n\t\t\t\t\t\t\topts.optionalmarker.start === txt.charAt(i) ||\n\t\t\t\t\t\t\topts.optionalmarker.end === txt.charAt(i) ||\n\t\t\t\t\t\t\topts.quantifiermarker.start === txt.charAt(i) ||\n\t\t\t\t\t\t\topts.quantifiermarker.end === txt.charAt(i) ||\n\t\t\t\t\t\t\topts.groupmarker.start === txt.charAt(i) ||\n\t\t\t\t\t\t\topts.groupmarker.end === txt.charAt(i) ||\n\t\t\t\t\t\t\topts.alternatormarker === txt.charAt(i))\n\t\t\t\t\t\t\tescapedTxt += \"\\\\\" + txt.charAt(i)\n\t\t\t\t\t\telse escapedTxt += txt.charAt(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn escapedTxt;\n\t\t\t\t}\n\n\t\t\t\tif (opts.repeat !== 0 && isNaN(opts.integerDigits)) {\n\t\t\t\t\topts.integerDigits = opts.repeat;\n\t\t\t\t}\n\t\t\t\topts.repeat = 0;\n\t\t\t\tif (opts.groupSeparator === opts.radixPoint) { //treat equal separator and radixpoint\n\t\t\t\t\tif (opts.radixPoint === \".\") {\n\t\t\t\t\t\topts.groupSeparator = \",\";\n\t\t\t\t\t} else if (opts.radixPoint === \",\") {\n\t\t\t\t\t\topts.groupSeparator = \".\";\n\t\t\t\t\t} else opts.groupSeparator = \"\";\n\t\t\t\t}\n\t\t\t\tif (opts.groupSeparator === \" \") { //prevent conflict with default skipOptionalPartCharacter\n\t\t\t\t\topts.skipOptionalPartCharacter = undefined;\n\t\t\t\t}\n\t\t\t\topts.autoGroup = opts.autoGroup && opts.groupSeparator !== \"\";\n\t\t\t\tif (opts.autoGroup) {\n\t\t\t\t\tif (typeof opts.groupSize == \"string\" && isFinite(opts.groupSize)) opts.groupSize = parseInt(opts.groupSize);\n\t\t\t\t\tif (isFinite(opts.integerDigits)) {\n\t\t\t\t\t\tvar seps = Math.floor(opts.integerDigits / opts.groupSize);\n\t\t\t\t\t\tvar mod = opts.integerDigits % opts.groupSize;\n\t\t\t\t\t\topts.integerDigits = parseInt(opts.integerDigits) + (mod === 0 ? seps - 1 : seps);\n\t\t\t\t\t\tif (opts.integerDigits < 1) {\n\t\t\t\t\t\t\topts.integerDigits = \"*\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//enforce placeholder to single\n\t\t\t\tif (opts.placeholder.length > 1) {\n\t\t\t\t\topts.placeholder = opts.placeholder.charAt(0);\n\t\t\t\t}\n\t\t\t\t//only allow radixfocus when placeholder = 0\n\t\t\t\topts.radixFocus = opts.radixFocus && opts.placeholder !== \"\" && opts.integerOptional === true;\n\n\t\t\t\topts.definitions[\";\"] = opts.definitions[\"~\"]; //clone integer def for decimals\n\t\t\t\topts.definitions[\";\"].definitionSymbol = \"~\";\n\n\t\t\t\tif (opts.numericInput === true) { //finance people input style\n\t\t\t\t\topts.radixFocus = false;\n\t\t\t\t\topts.digitsOptional = false;\n\t\t\t\t\tif (isNaN(opts.digits)) opts.digits = 2;\n\t\t\t\t\topts.decimalProtect = false;\n\t\t\t\t}\n\n\t\t\t\tvar mask = autoEscape(opts.prefix);\n\t\t\t\tmask += \"[+]\";\n\t\t\t\tif (opts.integerOptional === true) {\n\t\t\t\t\tmask += \"~{1,\" + opts.integerDigits + \"}\";\n\t\t\t\t} else mask += \"~{\" + opts.integerDigits + \"}\";\n\t\t\t\tif (opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {\n\t\t\t\t\tif (opts.decimalProtect) opts.radixPointDefinitionSymbol = \":\";\n\t\t\t\t\tif (opts.digitsOptional) {\n\t\t\t\t\t\tmask += \"[\" + (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{1,\" + opts.digits + \"}]\";\n\t\t\t\t\t} else mask += (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{\" + opts.digits + \"}\";\n\t\t\t\t}\n\t\t\t\tmask += \"[-]\";\n\t\t\t\tmask += autoEscape(opts.suffix);\n\n\t\t\t\topts.greedy = false; //enforce greedy false\n\n\t\t\t\t//convert min and max options\n\t\t\t\tif (opts.min !== null) {\n\t\t\t\t\topts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n\t\t\t\t\tif (opts.radixPoint === \",\") opts.min = opts.min.replace(opts.radixPoint, \".\");\n\t\t\t\t}\n\t\t\t\tif (opts.max !== null) {\n\t\t\t\t\topts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n\t\t\t\t\tif (opts.radixPoint === \",\") opts.max = opts.max.replace(opts.radixPoint, \".\");\n\t\t\t\t}\n\t\t\t\treturn mask;\n\t\t\t},\n\t\t\tplaceholder: \"\",\n\t\t\tgreedy: false,\n\t\t\tdigits: \"*\", //number of fractionalDigits\n\t\t\tdigitsOptional: true,\n\t\t\tradixPoint: \".\",\n\t\t\tradixFocus: true,\n\t\t\tgroupSize: 3,\n\t\t\tgroupSeparator: \"\",\n\t\t\tautoGroup: false,\n\t\t\tallowPlus: true,\n\t\t\tallowMinus: true,\n\t\t\tnegationSymbol: {\n\t\t\t\tfront: \"-\", //\"(\"\n\t\t\t\tback: \"\" //\")\"\n\t\t\t},\n\t\t\tintegerDigits: \"+\", //number of integerDigits\n\t\t\tintegerOptional: true,\n\t\t\tprefix: \"\",\n\t\t\tsuffix: \"\",\n\t\t\trightAlign: true,\n\t\t\tdecimalProtect: true, //do not allow assumption of decimals input without entering the radixpoint\n\t\t\tmin: null, //minimum value\n\t\t\tmax: null, //maximum value\n\t\t\tstep: 1,\n\t\t\tinsertMode: true,\n\t\t\tautoUnmask: false,\n\t\t\tunmaskAsNumber: false,\n\t\t\tpostFormat: function (buffer, pos, opts) { //this needs to be removed // this is crap\n\t\t\t\t// console.log(buffer);\n\t\t\t\tif (opts.numericInput === true) {\n\t\t\t\t\tbuffer = buffer.reverse();\n\t\t\t\t\tif (isFinite(pos)) {\n\t\t\t\t\t\tpos = buffer.join(\"\").length - pos - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar suffixStripped = false,\n\t\t\t\t\ti, l;\n\t\t\t\tif (buffer.length >= opts.suffix.length && buffer.join(\"\").indexOf(opts.suffix) === (buffer.length - opts.suffix.length)) {\n\t\t\t\t\tbuffer.length = buffer.length - opts.suffix.length; //strip suffix\n\t\t\t\t\tsuffixStripped = true;\n\t\t\t\t}\n\t\t\t\t//position overflow corrections\n\t\t\t\tpos = pos >= buffer.length ? buffer.length - 1 : (pos < opts.prefix.length ? opts.prefix.length : pos);\n\n\t\t\t\tvar needsRefresh = false,\n\t\t\t\t\tcharAtPos = buffer[pos];\n\n\t\t\t\tvar cbuf = buffer.slice();\n\t\t\t\tif (charAtPos === opts.groupSeparator) {\n\t\t\t\t\tcbuf.splice(pos--, 1);\n\t\t\t\t\tcharAtPos = cbuf[pos];\n\t\t\t\t}\n\t\t\t\tif (charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back) cbuf[pos] = \"?\";\n\t\t\t\tvar bufVal = cbuf.join(\"\"),\n\t\t\t\t\tbufValOrigin = bufVal;\n\t\t\t\tif (bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) {\n\t\t\t\t\tvar escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);\n\t\t\t\t\tneedsRefresh = bufVal.indexOf(opts.groupSeparator) === 0;\n\t\t\t\t\tbufVal = bufVal.replace(new RegExp(escapedGroupSeparator, \"g\"), \"\");\n\t\t\t\t\tvar radixSplit = bufVal.split(opts.radixPoint);\n\t\t\t\t\tbufVal = opts.radixPoint === \"\" ? bufVal : radixSplit[0];\n\t\t\t\t\tif (bufVal !== (opts.prefix + \"?0\") && bufVal.length >= (opts.groupSize + opts.prefix.length)) {\n\t\t\t\t\t\t//needsRefresh = true;\n\t\t\t\t\t\tvar reg = new RegExp(\"([-\\+]?[\\\\d\\?]+)([\\\\d\\?]{\" + opts.groupSize + \"})\");\n\t\t\t\t\t\twhile (reg.test(bufVal) && opts.groupSeparator !== \"\") {\n\t\t\t\t\t\t\tbufVal = bufVal.replace(reg, \"$1\" + opts.groupSeparator + \"$2\");\n\t\t\t\t\t\t\tbufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (opts.radixPoint !== \"\" && radixSplit.length > 1) {\n\t\t\t\t\t\tbufVal += opts.radixPoint + radixSplit[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tneedsRefresh = bufValOrigin !== bufVal;\n\t\t\t\tbuffer.length = bufVal.length; //align the length\n\t\t\t\tfor (i = 0, l = bufVal.length; i < l; i++) {\n\t\t\t\t\tbuffer[i] = bufVal.charAt(i);\n\t\t\t\t}\n\t\t\t\tvar newPos = $.inArray(\"?\", buffer);\n\t\t\t\tif (newPos === -1) newPos = $.inArray(charAtPos, buffer);\n\t\t\t\tbuffer[newPos] = charAtPos;\n\n\t\t\t\tif (!needsRefresh && suffixStripped) {\n\t\t\t\t\tfor (i = 0, l = opts.suffix.length; i < l; i++) {\n\t\t\t\t\t\tbuffer.push(opts.suffix.charAt(i));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// console.log(\"formatted \" + buffer + \" refresh \" + needsRefresh);\n\t\t\t\tnewPos = (opts.numericInput && isFinite(pos)) ? buffer.join(\"\").length - newPos - 1 : newPos;\n\t\t\t\tif (opts.numericInput) {\n\t\t\t\t\tbuffer = buffer.reverse();\n\t\t\t\t\tif ($.inArray(opts.radixPoint, buffer) < newPos && (buffer.join(\"\").length - opts.suffix.length) !== newPos) {\n\t\t\t\t\t\tnewPos = newPos - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tpos: newPos,\n\t\t\t\t\t\"refreshFromBuffer\": needsRefresh,\n\t\t\t\t\t\"buffer\": buffer\n\t\t\t\t};\n\t\t\t},\n\t\t\tonBeforeWrite: function (e, buffer, caretPos, opts) {\n\t\t\t\tvar rslt;\n\t\t\t\tif (e && (e.type === \"blur\" || e.type === \"checkval\" || e.type === \"keydown\")) {\n\t\t\t\t\tvar maskedValue = opts.numericInput ? buffer.slice().reverse().join(\"\") : buffer.join(\"\"),\n\t\t\t\t\t\tprocessValue = maskedValue.replace(opts.prefix, \"\");\n\t\t\t\t\tprocessValue = processValue.replace(opts.suffix, \"\");\n\t\t\t\t\tprocessValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n\t\t\t\t\tif (opts.radixPoint === \",\") processValue = processValue.replace(opts.radixPoint, \".\");\n\t\t\t\t\t//handle negation symbol\n\t\t\t\t\tvar isNegative = processValue.match(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"));\n\t\t\t\t\tisNegative = isNegative !== null && isNegative.length === 1;\n\t\t\t\t\tprocessValue = processValue.replace(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"), \"\");\n\t\t\t\t\tprocessValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\");\n\t\t\t\t\t//strip placeholder at the end\n\t\t\t\t\tif (isNaN(opts.placeholder)) {\n\t\t\t\t\t\tprocessValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), \"g\"), \"\");\n\t\t\t\t\t}\n\t\t\t\t\tprocessValue = processValue === opts.negationSymbol.front ? processValue + \"0\" : processValue;\n\n\t\t\t\t\tif (processValue !== \"\" && isFinite(processValue)) {\n\t\t\t\t\t\tvar floatValue = parseFloat(processValue),\n\t\t\t\t\t\t\tsignedFloatValue = isNegative ? floatValue * -1 : floatValue;\n\t\t\t\t\t\tif (opts.min !== null && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min)) {\n\t\t\t\t\t\t\tfloatValue = Math.abs(opts.min);\n\t\t\t\t\t\t\tisNegative = opts.min < 0;\n\t\t\t\t\t\t\tmaskedValue = undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (opts.max !== null && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max)) {\n\t\t\t\t\t\t\tfloatValue = Math.abs(opts.max);\n\t\t\t\t\t\t\tisNegative = opts.max < 0;\n\t\t\t\t\t\t\tmaskedValue = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tprocessValue = floatValue.toString().replace(\".\", opts.radixPoint).split('');\n\t\t\t\t\t\tif (isFinite(opts.digits)) {\n\t\t\t\t\t\t\tvar radixPosition = $.inArray(opts.radixPoint, processValue);\n\t\t\t\t\t\t\tvar rpb = $.inArray(opts.radixPoint, maskedValue);\n\t\t\t\t\t\t\tif (radixPosition === -1) {\n\t\t\t\t\t\t\t\tprocessValue.push(opts.radixPoint);\n\t\t\t\t\t\t\t\tradixPosition = processValue.length - 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (var i = 1; i <= opts.digits; i++) {\n\t\t\t\t\t\t\t\tif (!opts.digitsOptional && (processValue[radixPosition + i] === undefined || processValue[radixPosition + i] === opts.placeholder.charAt(0))) {\n\t\t\t\t\t\t\t\t\tprocessValue[radixPosition + i] = \"0\";\n\t\t\t\t\t\t\t\t} else if (rpb !== -1 && maskedValue[rpb + i] !== undefined) {\n\t\t\t\t\t\t\t\t\tprocessValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (processValue[processValue.length - 1] === opts.radixPoint) {\n\t\t\t\t\t\t\t\tdelete processValue[processValue.length - 1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ((floatValue.toString() !== processValue && floatValue.toString() + \".\" !== processValue) || isNegative) {\n\t\t\t\t\t\t\tif (isNegative && (floatValue !== 0 || e.type !== \"blur\")) {\n\t\t\t\t\t\t\t\tprocessValue.unshift(opts.negationSymbol.front);\n\t\t\t\t\t\t\t\tprocessValue.push(opts.negationSymbol.back);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprocessValue = (opts.prefix + processValue.join(\"\")).split(\"\");\n\t\t\t\t\t\t\tif (opts.numericInput) processValue = processValue.reverse();\n\t\t\t\t\t\t\trslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts);\n\t\t\t\t\t\t\tif (rslt.buffer) rslt.refreshFromBuffer = rslt.buffer.join(\"\") !== buffer.join(\"\");\n\t\t\t\t\t\t\treturn rslt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.autoGroup) {\n\t\t\t\t\trslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts);\n\t\t\t\t\trslt.caret = caretPos <= opts.prefix.length ? rslt.pos : rslt.pos + 1;\n\t\t\t\t\treturn rslt;\n\t\t\t\t}\n\t\t\t},\n\t\t\tregex: {\n\t\t\t\tintegerPart: function (opts) {\n\t\t\t\t\treturn new RegExp(\"[\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"\\+]?\\\\d+\");\n\t\t\t\t},\n\t\t\t\tintegerNPart: function (opts) {\n\t\t\t\t\treturn new RegExp(\"[\\\\d\" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + \"]+\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tsignHandler: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\tif (!strict && (opts.allowMinus && chrs === \"-\") || (opts.allowPlus && chrs === \"+\")) {\n\t\t\t\t\tvar matchRslt = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n\n\t\t\t\t\tif (matchRslt && matchRslt[0].length > 0) {\n\t\t\t\t\t\tif (maskset.buffer[matchRslt.index] === (chrs === \"-\" ? \"+\" : opts.negationSymbol.front)) {\n\t\t\t\t\t\t\tif (chrs === \"-\") {\n\t\t\t\t\t\t\t\tif (opts.negationSymbol.back !== \"\") {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"c\": opts.negationSymbol.front,\n\t\t\t\t\t\t\t\t\t\t\"remove\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos,\n\t\t\t\t\t\t\t\t\t\t\"insert\": {\n\t\t\t\t\t\t\t\t\t\t\t\"pos\": maskset.buffer.length - opts.suffix.length - 1,\n\t\t\t\t\t\t\t\t\t\t\t\"c\": opts.negationSymbol.back\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"c\": opts.negationSymbol.front,\n\t\t\t\t\t\t\t\t\t\t\"remove\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos\n\t\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} else {\n\t\t\t\t\t\t\t\tif (opts.negationSymbol.back !== \"\") {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"c\": \"+\",\n\t\t\t\t\t\t\t\t\t\t\"remove\": [matchRslt.index, maskset.buffer.length - opts.suffix.length - 1],\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"c\": \"+\",\n\t\t\t\t\t\t\t\t\t\t\"remove\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos\n\t\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} else if (maskset.buffer[matchRslt.index] === (chrs === \"-\" ? opts.negationSymbol.front : \"+\")) {\n\t\t\t\t\t\t\tif (chrs === \"-\" && opts.negationSymbol.back !== \"\") {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\"remove\": [matchRslt.index, maskset.buffer.length - opts.suffix.length - 1],\n\t\t\t\t\t\t\t\t\t\"caret\": pos - 1\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\"remove\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\"caret\": pos - 1\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (chrs === \"-\") {\n\t\t\t\t\t\t\t\tif (opts.negationSymbol.back !== \"\") {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"c\": opts.negationSymbol.front,\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos + 1,\n\t\t\t\t\t\t\t\t\t\t\"insert\": {\n\t\t\t\t\t\t\t\t\t\t\t\"pos\": maskset.buffer.length - opts.suffix.length,\n\t\t\t\t\t\t\t\t\t\t\t\"c\": opts.negationSymbol.back\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\t\"c\": opts.negationSymbol.front,\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos + 1\n\t\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} else {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\"c\": chrs,\n\t\t\t\t\t\t\t\t\t\"caret\": pos + 1\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\t\t\treturn false;\n\t\t\t},\n\t\t\tradixHandler: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\tif (!strict && opts.numericInput !== true) {\n\t\t\t\t\t//if ($.inArray(chrs, [\",\", \".\"]) !== -1) chrs = opts.radixPoint;\n\t\t\t\t\tif (chrs === opts.radixPoint && (opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0))) {\n\t\t\t\t\t\tvar radixPos = $.inArray(opts.radixPoint, maskset.buffer),\n\t\t\t\t\t\t\tintegerValue = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n\n\t\t\t\t\t\tif (radixPos !== -1 && maskset.validPositions[radixPos]) {\n\t\t\t\t\t\t\tif (maskset.validPositions[radixPos - 1]) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\"caret\": radixPos + 1\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\"pos\": integerValue.index,\n\t\t\t\t\t\t\t\t\tc: integerValue[0],\n\t\t\t\t\t\t\t\t\t\"caret\": radixPos + 1\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!integerValue || (integerValue[\"0\"] === \"0\" && (integerValue.index + 1) !== pos)) {\n\t\t\t\t\t\t\tmaskset.buffer[integerValue ? integerValue.index : pos] = \"0\";\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\"pos\": (integerValue ? integerValue.index : pos) + 1,\n\t\t\t\t\t\t\t\tc: opts.radixPoint\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tleadingZeroHandler: function (chrs, maskset, pos, strict, opts, isSelection) {\n\t\t\t\tif (!strict) {\n\t\t\t\t\tif (opts.numericInput === true) {\n\t\t\t\t\t\tvar buffer = maskset.buffer.slice(\"\").reverse();\n\t\t\t\t\t\tvar bufferChar = buffer[opts.prefix.length];\n\t\t\t\t\t\tif (bufferChar === \"0\" && maskset.validPositions[pos - 1] === undefined) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\"remove\": buffer.length - opts.prefix.length - 1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar radixPosition = $.inArray(opts.radixPoint, maskset.buffer),\n\t\t\t\t\t\t\tmatchRslt = maskset.buffer.slice(0, radixPosition !== -1 ? radixPosition : undefined).join(\"\").match(opts.regex.integerNPart(opts));\n\t\t\t\t\t\tif (matchRslt && (radixPosition === -1 || pos <= radixPosition)) {\n\t\t\t\t\t\t\tvar decimalPart = radixPosition === -1 ? 0 : parseInt(maskset.buffer.slice(radixPosition + 1).join(\"\"));\n\t\t\t\t\t\t\tif (matchRslt[\"0\"].indexOf(opts.placeholder !== \"\" ? opts.placeholder.charAt(0) : \"0\") === 0 &&\n\t\t\t\t\t\t\t\t(matchRslt.index + 1 === pos || (isSelection !== true && decimalPart === 0))) {\n\t\t\t\t\t\t\t\tmaskset.buffer.splice(matchRslt.index, 1);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\"pos\": matchRslt.index,\n\t\t\t\t\t\t\t\t\t\"remove\": matchRslt.index\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (chrs === \"0\" && pos <= matchRslt.index && matchRslt[\"0\"] !== opts.groupSeparator) {\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\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tdefinitions: {\n\t\t\t\t\"~\": {\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts, isSelection) {\n\t\t\t\t\t\tvar isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tisValid = opts.radixHandler(chrs, maskset, pos, strict, opts);\n\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\tisValid = strict ? new RegExp(\"[0-9\" + Inputmask.escapeRegex(opts.groupSeparator) + \"]\").test(chrs) : new RegExp(\"[0-9]\").test(chrs);\n\t\t\t\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\t\t\t\tisValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection);\n\t\t\t\t\t\t\t\t\tif (isValid === true) {\n\t\t\t\t\t\t\t\t\t\t//handle overwrite when fixed precision\n\t\t\t\t\t\t\t\t\t\tvar radixPosition = $.inArray(opts.radixPoint, maskset.buffer);\n\t\t\t\t\t\t\t\t\t\tif (radixPosition !== -1 && (opts.digitsOptional === false || maskset.validPositions[pos]) && opts.numericInput !== true && pos > radixPosition && !strict) {\n\t\t\t\t\t\t\t\t\t\t\tisValid = {\n\t\t\t\t\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\t\t\t\t\"remove\": pos\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tisValid = {\n\t\t\t\t\t\t\t\t\t\t\t\tpos: pos\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t}\n\t\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\n\t\t\t\t\t\treturn isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 1\n\t\t\t\t},\n\t\t\t\t\"+\": {\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tvar isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n\t\t\t\t\t\tif (!isValid && ((strict && opts.allowMinus && chrs === opts.negationSymbol.front) || (opts.allowMinus && chrs === \"-\") || (opts.allowPlus && chrs === \"+\"))) {\n\t\t\t\t\t\t\tif (!strict && chrs === \"-\") {\n\t\t\t\t\t\t\t\tif (opts.negationSymbol.back !== \"\") {\n\t\t\t\t\t\t\t\t\tisValid = {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\t\t\"c\": chrs === \"-\" ? opts.negationSymbol.front : \"+\",\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos + 1,\n\t\t\t\t\t\t\t\t\t\t\"insert\": {\n\t\t\t\t\t\t\t\t\t\t\t\"pos\": maskset.buffer.length,\n\t\t\t\t\t\t\t\t\t\t\t\"c\": opts.negationSymbol.back\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tisValid = {\n\t\t\t\t\t\t\t\t\t\t\"pos\": pos,\n\t\t\t\t\t\t\t\t\t\t\"c\": chrs === \"-\" ? opts.negationSymbol.front : \"+\",\n\t\t\t\t\t\t\t\t\t\t\"caret\": pos + 1\n\t\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} else {\n\t\t\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tplaceholder: \"\"\n\t\t\t\t},\n\t\t\t\t\"-\": {\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tvar isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n\t\t\t\t\t\tif (!isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back) {\n\t\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tplaceholder: \"\"\n\t\t\t\t},\n\t\t\t\t\":\": {\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tvar isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tvar radix = \"[\" + Inputmask.escapeRegex(opts.radixPoint) + \"]\";\n\t\t\t\t\t\t\tisValid = new RegExp(radix).test(chrs);\n\t\t\t\t\t\t\tif (isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint) {\n\t\t\t\t\t\t\t\tisValid = {\n\t\t\t\t\t\t\t\t\t\"caret\": pos + 1\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\treturn isValid ? {\n\t\t\t\t\t\t\tc: opts.radixPoint\n\t\t\t\t\t\t} : isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 1,\n\t\t\t\t\tplaceholder: function (opts) {\n\t\t\t\t\t\treturn opts.radixPoint;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonUnMask: function (maskedValue, unmaskedValue, opts) {\n\t\t\t\tvar processValue = maskedValue.replace(opts.prefix, \"\");\n\t\t\t\tprocessValue = processValue.replace(opts.suffix, \"\");\n\t\t\t\tprocessValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n\t\t\t\tif (opts.unmaskAsNumber) {\n\t\t\t\t\tif (opts.radixPoint !== \"\" && processValue.indexOf(opts.radixPoint) !== -1) processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\");\n\t\t\t\t\treturn Number(processValue);\n\t\t\t\t}\n\t\t\t\treturn processValue;\n\t\t\t},\n\t\t\tisComplete: function (buffer, opts) {\n\t\t\t\tvar maskedValue = buffer.join(\"\"),\n\t\t\t\t\tbufClone = buffer.slice();\n\t\t\t\t//verify separator positions\n\t\t\t\topts.postFormat(bufClone, 0, opts);\n\t\t\t\tif (bufClone.join(\"\") !== maskedValue) return false;\n\n\t\t\t\tvar processValue = maskedValue.replace(opts.prefix, \"\");\n\t\t\t\tprocessValue = processValue.replace(opts.suffix, \"\");\n\t\t\t\tprocessValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n\t\t\t\tif (opts.radixPoint === \",\") processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\");\n\t\t\t\treturn isFinite(processValue);\n\t\t\t},\n\t\t\tonBeforeMask: function (initialValue, opts) {\n\t\t\t\tif (opts.radixPoint !== \"\" && isFinite(initialValue)) {\n\t\t\t\t\tinitialValue = initialValue.toString().replace(\".\", opts.radixPoint);\n\t\t\t\t} else {\n\t\t\t\t\tvar kommaMatches = initialValue.match(/,/g);\n\t\t\t\t\tvar dotMatches = initialValue.match(/\\./g);\n\t\t\t\t\tif (dotMatches && kommaMatches) {\n\t\t\t\t\t\tif (dotMatches.length > kommaMatches.length) {\n\t\t\t\t\t\t\tinitialValue = initialValue.replace(/\\./g, \"\");\n\t\t\t\t\t\t\tinitialValue = initialValue.replace(\",\", opts.radixPoint);\n\t\t\t\t\t\t} else if (kommaMatches.length > dotMatches.length) {\n\t\t\t\t\t\t\tinitialValue = initialValue.replace(/,/g, \"\");\n\t\t\t\t\t\t\tinitialValue = initialValue.replace(\".\", opts.radixPoint);\n\t\t\t\t\t\t} else { //equal\n\t\t\t\t\t\t\tinitialValue = initialValue.indexOf(\".\") < initialValue.indexOf(\",\") ? initialValue.replace(/\\./g, \"\") : initialValue = initialValue.replace(/,/g, \"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinitialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (opts.digits === 0) {\n\t\t\t\t\tif (initialValue.indexOf(\".\") !== -1) {\n\t\t\t\t\t\tinitialValue = initialValue.substring(0, initialValue.indexOf(\".\"));\n\t\t\t\t\t} else if (initialValue.indexOf(\",\") !== -1) {\n\t\t\t\t\t\tinitialValue = initialValue.substring(0, initialValue.indexOf(\",\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (opts.radixPoint !== \"\" && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) {\n\t\t\t\t\tvar valueParts = initialValue.split(opts.radixPoint),\n\t\t\t\t\t\tdecPart = valueParts[1].match(new RegExp(\"\\\\d*\"))[0];\n\t\t\t\t\tif (parseInt(opts.digits) < decPart.toString().length) {\n\t\t\t\t\t\tvar digitsFactor = Math.pow(10, parseInt(opts.digits));\n\t\t\t\t\t\t//make the initialValue a valid javascript number for the parsefloat\n\t\t\t\t\t\tinitialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\");\n\t\t\t\t\t\tinitialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;\n\t\t\t\t\t\tinitialValue = initialValue.toString().replace(\".\", opts.radixPoint);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn initialValue.toString();\n\t\t\t},\n\t\t\tcanClearPosition: function (maskset, position, lvp, strict, opts) {\n\t\t\t\tvar positionInput = maskset.validPositions[position].input,\n\t\t\t\t\tcanClear = ((positionInput !== opts.radixPoint || (maskset.validPositions[position].match.fn !== null && opts.decimalProtect === false)) || isFinite(positionInput)) ||\n\t\t\t\t\t\tposition === lvp ||\n\t\t\t\t\t\tpositionInput === opts.groupSeparator ||\n\t\t\t\t\t\tpositionInput === opts.negationSymbol.front ||\n\t\t\t\t\t\tpositionInput === opts.negationSymbol.back;\n\t\t\t\treturn canClear;\n\t\t\t},\n\t\t\tonKeyDown: function (e, buffer, caretPos, opts) {\n\t\t\t\tvar $input = $(this);\n\t\t\t\tif (e.ctrlKey) {\n\t\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\t\tcase Inputmask.keyCode.UP:\n\t\t\t\t\t\t\t$input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step));\n\t\t\t\t\t\t\t$input.trigger(\"setvalue\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase Inputmask.keyCode.DOWN:\n\t\t\t\t\t\t\t$input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step));\n\t\t\t\t\t\t\t$input.trigger(\"setvalue\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"currency\": {\n\t\t\tprefix: \"$ \",\n\t\t\tgroupSeparator: \",\",\n\t\t\talias: \"numeric\",\n\t\t\tplaceholder: \"0\",\n\t\t\tautoGroup: true,\n\t\t\tdigits: 2,\n\t\t\tdigitsOptional: false,\n\t\t\tclearMaskOnLostFocus: false\n\t\t},\n\t\t\"decimal\": {\n\t\t\talias: \"numeric\"\n\t\t},\n\t\t\"integer\": {\n\t\t\talias: \"numeric\",\n\t\t\tdigits: 0,\n\t\t\tradixPoint: \"\"\n\t\t},\n\t\t\"percentage\": {\n\t\t\talias: \"numeric\",\n\t\t\tdigits: 2,\n\t\t\tradixPoint: \".\",\n\t\t\tplaceholder: \"0\",\n\t\t\tautoGroup: false,\n\t\t\tmin: 0,\n\t\t\tmax: 100,\n\t\t\tsuffix: \" %\",\n\t\t\tallowPlus: false,\n\t\t\tallowMinus: false\n\t\t}\n\t});\n\treturn Inputmask;\n}));\n\n;\n// --- inputmask.phone.extensions.js ---\n/*\n Input Mask plugin extensions\n http://github.com/RobinHerbots/jquery.inputmask\n Copyright (c) 2010 -  Robin Herbots\n Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n Version: 0.0.0-dev\n\n Phone extension.\n When using this extension make sure you specify the correct url to get the masks\n\n $(selector).inputmask(\"phone\", {\n url: \"Scripts/jquery.inputmask/phone-codes/phone-codes.json\",\n onKeyValidation: function () { //show some metadata in the console\n console.log($(this).inputmask(\"getmetadata\")[\"cd\"]);\n }\n });\n\n\n */\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"jquery\", \"inputmask\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"jquery\"), require(\"./inputmask\"));\n\t} else {\n\t\tfactory(window.dependencyLib || jQuery, window.Inputmask);\n\t}\n}\n(function ($, Inputmask) {\n\tInputmask.extendAliases({\n\t\t\"phone\": {\n\t\t\turl: \"phone-codes/phone-codes.js\",\n\t\t\tcountrycode: \"\",\n\t\t\tphoneCodeCache: {},\n\t\t\tmask: function (opts) {\n\t\t\t\tif (opts.phoneCodeCache[opts.url] === undefined) {\n\t\t\t\t\tvar maskList = [];\n\t\t\t\t\topts.definitions[\"#\"] = opts.definitions[\"9\"];\n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\turl: opts.url,\n\t\t\t\t\t\tasync: false,\n\t\t\t\t\t\ttype: \"get\",\n\t\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\t\tsuccess: function (response) {\n\t\t\t\t\t\t\tmaskList = response;\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror: function (xhr, ajaxOptions, thrownError) {\n\t\t\t\t\t\t\talert(thrownError + \" - \" + opts.url);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\topts.phoneCodeCache[opts.url] = maskList.sort(function (a, b) {\n\t\t\t\t\t\treturn (a.mask || a) < (b.mask || b) ? -1 : 1;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn opts.phoneCodeCache[opts.url];\n\t\t\t},\n\t\t\tkeepStatic: false,\n\t\t\tnojumps: true,\n\t\t\tnojumpsThreshold: 1,\n\t\t\tonBeforeMask: function (value, opts) {\n\t\t\t\tvar processedValue = value.replace(/^0{1,2}/, \"\").replace(/[\\s]/g, \"\");\n\t\t\t\tif (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) {\n\t\t\t\t\tprocessedValue = \"+\" + opts.countrycode + processedValue;\n\t\t\t\t}\n\n\t\t\t\treturn processedValue;\n\t\t\t}\n\t\t},\n\t\t\"phonebe\": {\n\t\t\talias: \"phone\",\n\t\t\turl: \"phone-codes/phone-be.js\",\n\t\t\tcountrycode: \"32\",\n\t\t\tnojumpsThreshold: 4\n\t\t}\n\t});\n\treturn Inputmask;\n}));\n\n;\n// --- inputmask.regex.extensions.js ---\n/*\n Input Mask plugin extensions\n http://github.com/RobinHerbots/jquery.inputmask\n Copyright (c) 2010 -  Robin Herbots\n Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n Version: 0.0.0-dev\n\n Regex extensions on the jquery.inputmask base\n Allows for using regular expressions as a mask\n */\n(function (factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([\"inputmask.dependencyLib\", \"inputmask\"], factory);\n\t} else if (typeof exports === \"object\") {\n\t\tmodule.exports = factory(require(\"./inputmask.dependencyLib.jquery\"), require(\"./inputmask\"));\n\t} else {\n\t\tfactory(window.dependencyLib || jQuery, window.Inputmask);\n\t}\n}\n(function ($, Inputmask) {\n\tInputmask.extendAliases({ // $(selector).inputmask(\"Regex\", { regex: \"[0-9]*\"}\n\t\t\"Regex\": {\n\t\t\tmask: \"r\",\n\t\t\tgreedy: false,\n\t\t\trepeat: \"*\",\n\t\t\tregex: null,\n\t\t\tregexTokens: null,\n\t\t\t//Thx to https://github.com/slevithan/regex-colorizer for the tokenizer regex\n\t\t\ttokenizer: /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g,\n\t\t\tquantifierFilter: /[0-9]+[^,]/,\n\t\t\tisComplete: function (buffer, opts) {\n\t\t\t\treturn new RegExp(opts.regex).test(buffer.join(\"\"));\n\t\t\t},\n\t\t\tdefinitions: {\n\t\t\t\t\"r\": {\n\t\t\t\t\tvalidator: function (chrs, maskset, pos, strict, opts) {\n\t\t\t\t\t\tvar cbuffer = maskset.buffer.slice(),\n\t\t\t\t\t\t\tbufferStr,\n\t\t\t\t\t\t\tregexPart = \"\",\n\t\t\t\t\t\t\tisValid = false,\n\t\t\t\t\t\t\topenGroupCount = 0,\n\t\t\t\t\t\t\tgroupToken;\n\n\t\t\t\t\t\tfunction RegexToken(isGroup, isQuantifier) {\n\t\t\t\t\t\t\tthis.matches = [];\n\t\t\t\t\t\t\tthis.isGroup = isGroup || false;\n\t\t\t\t\t\t\tthis.isQuantifier = isQuantifier || false;\n\t\t\t\t\t\t\tthis.quantifier = {\n\t\t\t\t\t\t\t\tmin: 1,\n\t\t\t\t\t\t\t\tmax: 1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tthis.repeaterPart = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction analyseRegex() {\n\t\t\t\t\t\t\tvar currentToken = new RegexToken(),\n\t\t\t\t\t\t\t\tmatch, m, opengroups = [];\n\n\t\t\t\t\t\t\topts.regexTokens = [];\n\n\t\t\t\t\t\t\t// The tokenizer regex does most of the tokenization grunt work\n\t\t\t\t\t\t\twhile (match = opts.tokenizer.exec(opts.regex)) {\n\t\t\t\t\t\t\t\tm = match[0];\n\t\t\t\t\t\t\t\tswitch (m.charAt(0)) {\n\t\t\t\t\t\t\t\t\tcase \"(\": // Group opening\n\t\t\t\t\t\t\t\t\t\topengroups.push(new RegexToken(true));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \")\": // Group closing\n\t\t\t\t\t\t\t\t\t\tgroupToken = opengroups.pop();\n\t\t\t\t\t\t\t\t\t\tif (opengroups.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\topengroups[opengroups.length - 1].matches.push(groupToken);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tcurrentToken.matches.push(groupToken);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase \"{\":\n\t\t\t\t\t\t\t\t\tcase \"+\":\n\t\t\t\t\t\t\t\t\tcase \"*\": //Quantifier\n\t\t\t\t\t\t\t\t\t\tvar quantifierToken = new RegexToken(false, true);\n\t\t\t\t\t\t\t\t\t\tm = m.replace(/[{}]/g, \"\");\n\t\t\t\t\t\t\t\t\t\tvar mq = m.split(\",\"),\n\t\t\t\t\t\t\t\t\t\t\tmq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]),\n\t\t\t\t\t\t\t\t\t\t\tmq1 = mq.length === 1 ? mq0 : (isNaN(mq[1]) ? mq[1] : parseInt(mq[1]));\n\t\t\t\t\t\t\t\t\t\tquantifierToken.quantifier = {\n\t\t\t\t\t\t\t\t\t\t\tmin: mq0,\n\t\t\t\t\t\t\t\t\t\t\tmax: mq1\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\tif (opengroups.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\tvar matches = opengroups[opengroups.length - 1].matches;\n\t\t\t\t\t\t\t\t\t\t\tmatch = matches.pop();\n\t\t\t\t\t\t\t\t\t\t\tif (!match.isGroup) {\n\t\t\t\t\t\t\t\t\t\t\t\tgroupToken = new RegexToken(true);\n\t\t\t\t\t\t\t\t\t\t\t\tgroupToken.matches.push(match);\n\t\t\t\t\t\t\t\t\t\t\t\tmatch = groupToken;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tmatches.push(match);\n\t\t\t\t\t\t\t\t\t\t\tmatches.push(quantifierToken);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tmatch = currentToken.matches.pop();\n\t\t\t\t\t\t\t\t\t\t\tif (!match.isGroup) {\n\t\t\t\t\t\t\t\t\t\t\t\tgroupToken = new RegexToken(true);\n\t\t\t\t\t\t\t\t\t\t\t\tgroupToken.matches.push(match);\n\t\t\t\t\t\t\t\t\t\t\t\tmatch = groupToken;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tcurrentToken.matches.push(match);\n\t\t\t\t\t\t\t\t\t\t\tcurrentToken.matches.push(quantifierToken);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tif (opengroups.length > 0) {\n\t\t\t\t\t\t\t\t\t\t\topengroups[opengroups.length - 1].matches.push(m);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tcurrentToken.matches.push(m);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (currentToken.matches.length > 0) {\n\t\t\t\t\t\t\t\topts.regexTokens.push(currentToken);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction validateRegexToken(token, fromGroup) {\n\t\t\t\t\t\t\tvar isvalid = false;\n\t\t\t\t\t\t\tif (fromGroup) {\n\t\t\t\t\t\t\t\tregexPart += \"(\";\n\t\t\t\t\t\t\t\topenGroupCount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (var mndx = 0; mndx < token.matches.length; mndx++) {\n\t\t\t\t\t\t\t\tvar matchToken = token.matches[mndx];\n\t\t\t\t\t\t\t\tif (matchToken.isGroup === true) {\n\t\t\t\t\t\t\t\t\tisvalid = validateRegexToken(matchToken, true);\n\t\t\t\t\t\t\t\t} else if (matchToken.isQuantifier === true) {\n\t\t\t\t\t\t\t\t\tvar crrntndx = $.inArray(matchToken, token.matches),\n\t\t\t\t\t\t\t\t\t\tmatchGroup = token.matches[crrntndx - 1];\n\t\t\t\t\t\t\t\t\tvar regexPartBak = regexPart;\n\t\t\t\t\t\t\t\t\tif (isNaN(matchToken.quantifier.max)) {\n\t\t\t\t\t\t\t\t\t\twhile (matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length) {\n\t\t\t\t\t\t\t\t\t\t\tisvalid = validateRegexToken(matchGroup, true);\n\t\t\t\t\t\t\t\t\t\t\tif (isvalid) break;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tisvalid = isvalid || validateRegexToken(matchGroup, true);\n\t\t\t\t\t\t\t\t\t\tif (isvalid) matchToken.repeaterPart = regexPart;\n\t\t\t\t\t\t\t\t\t\tregexPart = regexPartBak + matchToken.quantifier.max;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tfor (var i = 0, qm = matchToken.quantifier.max - 1; i < qm; i++) {\n\t\t\t\t\t\t\t\t\t\t\tisvalid = validateRegexToken(matchGroup, true);\n\t\t\t\t\t\t\t\t\t\t\tif (isvalid) break;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tregexPart = regexPartBak + \"{\" + matchToken.quantifier.min + \",\" + matchToken.quantifier.max + \"}\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (matchToken.matches !== undefined) {\n\t\t\t\t\t\t\t\t\tfor (var k = 0; k < matchToken.length; k++) {\n\t\t\t\t\t\t\t\t\t\tisvalid = validateRegexToken(matchToken[k], fromGroup);\n\t\t\t\t\t\t\t\t\t\tif (isvalid) break;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar testExp;\n\t\t\t\t\t\t\t\t\tif (matchToken.charAt(0) == \"[\") {\n\t\t\t\t\t\t\t\t\t\ttestExp = regexPart;\n\t\t\t\t\t\t\t\t\t\ttestExp += matchToken;\n\t\t\t\t\t\t\t\t\t\tfor (var j = 0; j < openGroupCount; j++) {\n\t\t\t\t\t\t\t\t\t\t\ttestExp += \")\";\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tvar exp = new RegExp(\"^(\" + testExp + \")$\");\n\t\t\t\t\t\t\t\t\t\tisvalid = exp.test(bufferStr);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tfor (var l = 0, tl = matchToken.length; l < tl; l++) {\n\t\t\t\t\t\t\t\t\t\t\tif (matchToken.charAt(l) === \"\\\\\") continue;\n\t\t\t\t\t\t\t\t\t\t\ttestExp = regexPart;\n\t\t\t\t\t\t\t\t\t\t\ttestExp += matchToken.substr(0, l + 1);\n\t\t\t\t\t\t\t\t\t\t\ttestExp = testExp.replace(/\\|$/, \"\");\n\t\t\t\t\t\t\t\t\t\t\tfor (var j = 0; j < openGroupCount; j++) {\n\t\t\t\t\t\t\t\t\t\t\t\ttestExp += \")\";\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tvar exp = new RegExp(\"^(\" + testExp + \")$\");\n\t\t\t\t\t\t\t\t\t\t\tisvalid = exp.test(bufferStr);\n\t\t\t\t\t\t\t\t\t\t\tif (isvalid) break;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tregexPart += matchToken;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (isvalid) break;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (fromGroup) {\n\t\t\t\t\t\t\t\tregexPart += \")\";\n\t\t\t\t\t\t\t\topenGroupCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn isvalid;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (opts.regexTokens === null) {\n\t\t\t\t\t\t\tanalyseRegex();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcbuffer.splice(pos, 0, chrs);\n\t\t\t\t\t\tbufferStr = cbuffer.join(\"\");\n\t\t\t\t\t\tfor (var i = 0; i < opts.regexTokens.length; i++) {\n\t\t\t\t\t\t\tvar regexToken = opts.regexTokens[i];\n\t\t\t\t\t\t\tisValid = validateRegexToken(regexToken, regexToken.isGroup);\n\t\t\t\t\t\t\tif (isValid) break;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn isValid;\n\t\t\t\t\t},\n\t\t\t\t\tcardinality: 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn Inputmask;\n}));\n\n;\n// --- jquery.payform.js ---\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\nvar payform;\n\npayform = require(2);\n\n(function($) {\n  $.payform = payform;\n  $.payform.fn = {\n    formatCardNumber: function() {\n      return payform.cardNumberInput(this.get(0));\n    },\n    formatCardExpiry: function() {\n      return payform.expiryInput(this.get(0));\n    },\n    formatCardCVC: function() {\n      return payform.cvcInput(this.get(0));\n    },\n    formatNumeric: function() {\n      return payform.numericInput(this.get(0));\n    },\n    /* Add method formatCardMonthYear */\n    formatCardMonthYear: function() {\n      return payform.monthYearInput(this.get(0));\n    }\n  };\n  return $.fn.payform = function(method) {\n    if ($.payform.fn[method] != null) {\n      $.payform.fn[method].call(this);\n    }\n    return this;\n  };\n})(window.jQuery || window.Zepto);\n\n\n\n},{}],2:[function(require,module,exports){\n\n/*\n  Payform Javascript Library\n\n  URL: https://github.com/jondavidjohn/payform\n  Author: Jonathan D. Johnson <me@jondavidjohn.com>\n  License: MIT\n  Version: 1.1.0\n */\nvar __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(function(name, definition) {\n  if (typeof module !== \"undefined\" && module !== null) {\n    return module.exports = definition();\n  } else if (typeof define === 'function' && typeof define.amd === 'object') {\n    return define(name, definition);\n  } else {\n    return this[name] = definition();\n  }\n})('payform', function() {\n  var cardFromNumber, cardFromType, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardExpiry, formatCardNumber, formatForwardExpiry, formatForwardSlashAndSpace, hasTextSelected, luhnCheck, payform, reFormatMonthYear, reFormatCVC, reFormatCardNumber, reFormatExpiry, restrictMonthYear, restrictCVC, restrictCardNumber, restrictExpiry, restrictNumeric, _eventNormalize, _getCaretPos, _on;\n  _getCaretPos = function(ele) {\n    var r, rc, re;\n    if (ele.selectionStart != null) {\n      return ele.selectionStart;\n    } else if (document.selection != null) {\n      ele.focus();\n      r = document.selection.createRange();\n      re = ele.createTextRange();\n      rc = re.duplicate();\n      re.moveToBookmark(r.getBookmark());\n      rc.setEndPoint('EndToStart', re);\n      return rc.text.length;\n    }\n  };\n  _eventNormalize = function(listener) {\n    return function(e) {\n      if (e == null) {\n        e = window.event;\n      }\n      e.target = e.target || e.srcElement;\n      e.which = e.which || e.keyCode;\n      if (e.preventDefault == null) {\n        e.preventDefault = function() {\n          return this.returnValue = false;\n        };\n      }\n      return listener(e);\n    };\n  };\n  _on = function(ele, event, listener) {\n    listener = _eventNormalize(listener);\n    if (ele.addEventListener != null) {\n      return ele.addEventListener(event, listener, false);\n    } else {\n      return ele.attachEvent(\"on\" + event, listener);\n    }\n  };\n  payform = {};\n  defaultFormat = /(\\d{1,4})/g;\n  payform.cards = [\n    {\n      type: 'visaelectron',\n      pattern: /^4(026|17500|405|508|844|91[37])/,\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'maestro',\n      pattern: /^(5(018|0[23]|[68])|6(39|7))/,\n      format: defaultFormat,\n      length: [12, 13, 14, 15, 16, 17, 18, 19],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'forbrugsforeningen',\n      pattern: /^600/,\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'dankort',\n      pattern: /^5019/,\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'visa',\n      pattern: /^4/,\n      format: defaultFormat,\n      length: [13, 16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'mastercard',\n      pattern: /^5[0-5]/,\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'amex',\n      pattern: /^3[47]/,\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      pattern: /^3[0689]/,\n      format: defaultFormat,\n      length: [14],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'discover',\n      pattern: /^6([045]|22)/,\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }, {\n      type: 'unionpay',\n      pattern: /^(62|88)/,\n      format: defaultFormat,\n      length: [16, 17, 18, 19],\n      cvcLength: [3],\n      luhn: false\n    }, {\n      type: 'jcb',\n      pattern: /^35/,\n      format: defaultFormat,\n      length: [16],\n      cvcLength: [3],\n      luhn: true\n    }\n  ];\n  cardFromNumber = function(num) {\n    var card, _i, _len, _ref;\n    num = (num + '').replace(/\\D/g, '');\n    _ref = payform.cards;\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      card = _ref[_i];\n      if (card.pattern.test(num)) {\n        return card;\n      }\n    }\n  };\n  cardFromType = function(type) {\n    var card, _i, _len, _ref;\n    _ref = payform.cards;\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      card = _ref[_i];\n      if (card.type === type) {\n        return card;\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  hasTextSelected = function(target) {\n    var _ref;\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 (target.selectionStart != null) && target.selectionStart !== target.selectionEnd;\n  };\n  reFormatCardNumber = function(e) {\n    var cursor;\n    cursor = _getCaretPos(e.target);\n    var value_before_format = e.target.value || '';\n    e.target.value = payform.formatCardNumber(e.target.value);\n    if ((cursor != null) && e.type !== 'change') {\n      e.target.setSelectionRange(cursor, cursor);\n      var is_android_chrome = navigator.userAgent.indexOf(\"Android\") > -1 && navigator.userAgent.indexOf(\"Chrome\") > -1;\n      if (is_android_chrome && e.target.value[_getCaretPos(e.target)-1] == ' ' && e.target.value.length > value_before_format.length){\n        cursor += 1;\n        e.target.setSelectionRange(cursor, cursor);\n      }\n      return;\n    }\n  };\n  formatCardNumber = function(e) {\n    var card, cursor, digit, length, re, upperLength, value;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    value = e.target.value;\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    cursor = _getCaretPos(e.target);\n    if (cursor && cursor !== 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 e.target.value = value + \" \" + digit;\n      });\n    } else if (re.test(value + digit)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return e.target.value = (value + digit) + \" \";\n      });\n    }\n  };\n  formatBackCardNumber = function(e) {\n    var cursor, value;\n    value = e.target.value;\n    if (e.which !== 8) {\n      return;\n    }\n    cursor = _getCaretPos(e.target);\n    if (cursor && cursor !== value.length) {\n      return;\n    }\n    if (/\\d\\s$/.test(value)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return e.target.value = value.replace(/\\d\\s$/, '');\n      });\n    } else if (/\\s\\d?$/.test(value)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return e.target.value = value.replace(/\\d$/, '');\n      });\n    }\n  };\n  reFormatExpiry = function(e) {\n    var cursor;\n    cursor = _getCaretPos(e.target);\n    e.target.value = payform.formatCardExpiry(e.target.value);\n    if ((cursor != null) && e.type !== 'change') {\n      return e.target.setSelectionRange(cursor, cursor);\n    }\n  };\n  formatCardExpiry = function(e) {\n    var digit, val;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    val = e.target.value + digit;\n    if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return e.target.value = \"0\" + val + \" / \";\n      });\n    } else if (/^\\d\\d$/.test(val)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return e.target.value = val + \" / \";\n      });\n    }\n  };\n  formatForwardExpiry = function(e) {\n    var digit, val;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    val = e.target.value;\n    if (/^\\d\\d$/.test(val)) {\n      return e.target.value = val + \" / \";\n    }\n  };\n  formatForwardSlashAndSpace = function(e) {\n    var val, which;\n    which = String.fromCharCode(e.which);\n    if (!(which === '/' || which === ' ')) {\n      return;\n    }\n    val = e.target.value;\n    if (/^\\d$/.test(val) && val !== '0') {\n      return e.target.value = \"0\" + val + \" / \";\n    }\n  };\n  formatBackExpiry = function(e) {\n    var cursor, value;\n    value = e.target.value;\n    if (e.which !== 8) {\n      return;\n    }\n    cursor = _getCaretPos(e.target);\n    if (cursor && cursor !== value.length) {\n      return;\n    }\n    if (/\\d\\s\\/\\s$/.test(value)) {\n      e.preventDefault();\n      return setTimeout(function() {\n        return e.target.value = value.replace(/\\d\\s\\/\\s$/, '');\n      });\n    }\n  };\n  /* Add method reFormatMonthYear */\n  reFormatMonthYear = function(e) {\n    var cursor;\n    cursor = _getCaretPos(e.target);\n    e.target.value = e.target.value.replace(/\\D/g, '').slice(0, 2);\n    if ((cursor != null) && e.type !== 'change') {\n      return e.target.setSelectionRange(cursor, cursor);\n    }\n  };\n  reFormatCVC = function(e) {\n    var cursor;\n    cursor = _getCaretPos(e.target);\n    e.target.value = e.target.value.replace(/\\D/g, '').slice(0, 4);\n    if ((cursor != null) && e.type !== 'change') {\n      return e.target.setSelectionRange(cursor, cursor);\n    }\n  };\n  restrictNumeric = function(e) {\n    var input;\n    if (e.metaKey || e.ctrlKey) {\n      return;\n    }\n    if (e.which === 0) {\n      return;\n    }\n    if (e.which < 33) {\n      return;\n    }\n    input = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(input)) {\n      return e.preventDefault();\n    }\n  };\n  restrictCardNumber = function(e) {\n    var card, digit, value;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    if (hasTextSelected(e.target)) {\n      return;\n    }\n    value = (e.target.value + digit).replace(/\\D/g, '');\n    card = cardFromNumber(value);\n    if (card && value.length > card.length[card.length.length - 1]) {\n      return e.preventDefault();\n    } else if (value.length > 16) {\n      return e.preventDefault();\n    }\n  };\n  restrictExpiry = function(e) {\n    var digit, value;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    if (hasTextSelected(e.target)) {\n      return;\n    }\n    value = e.target.value + digit;\n    value = value.replace(/\\D/g, '');\n    if (value.length > 6) {\n      return e.preventDefault();\n    }\n  };\n  /* Add method restrictMonthYear */\n  restrictMonthYear = function(e) {\n    var digit, val;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    if (hasTextSelected(e.target)) {\n      return;\n    }\n    val = e.target.value + digit;\n    if (val.length > 2) {\n      return e.preventDefault();\n    }\n  };\n  restrictCVC = function(e) {\n    var digit, val;\n    digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n    if (hasTextSelected(e.target)) {\n      return;\n    }\n    val = e.target.value + digit;\n    if (val.length > 4) {\n      return e.preventDefault();\n    }\n  };\n  /* Add method monthYearInput */\n  payform.monthYearInput = function(input) {\n    _on(input, 'keypress', restrictNumeric);\n    _on(input, 'keypress', restrictMonthYear);\n    _on(input, 'paste', reFormatMonthYear);\n    _on(input, 'change', reFormatMonthYear);\n    return _on(input, 'input', reFormatMonthYear);\n  };\n  payform.cvcInput = function(input) {\n    _on(input, 'keypress', restrictNumeric);\n    _on(input, 'keypress', restrictCVC);\n    _on(input, 'paste', reFormatCVC);\n    _on(input, 'change', reFormatCVC);\n    return _on(input, 'input', reFormatCVC);\n  };\n  payform.expiryInput = function(input) {\n    _on(input, 'keypress', restrictNumeric);\n    _on(input, 'keypress', restrictExpiry);\n    _on(input, 'keypress', formatCardExpiry);\n    _on(input, 'keypress', formatForwardSlashAndSpace);\n    _on(input, 'keypress', formatForwardExpiry);\n    _on(input, 'keydown', formatBackExpiry);\n    _on(input, 'change', reFormatExpiry);\n    return _on(input, 'input', reFormatExpiry);\n  };\n  payform.cardNumberInput = function(input) {\n    _on(input, 'keypress', restrictNumeric);\n    _on(input, 'keypress', restrictCardNumber);\n    _on(input, 'keypress', formatCardNumber);\n    _on(input, 'keydown', formatBackCardNumber);\n    _on(input, 'paste', reFormatCardNumber);\n    _on(input, 'change', reFormatCardNumber);\n    return _on(input, 'input', reFormatCardNumber);\n  };\n  payform.numericInput = function(input) {\n    _on(input, 'keypress', restrictNumeric);\n    _on(input, 'paste', restrictNumeric);\n    _on(input, 'change', restrictNumeric);\n    return _on(input, 'input', restrictNumeric);\n  };\n  payform.parseCardExpiry = function(value) {\n    var month, prefix, year, _ref;\n    value = value.replace(/\\s/g, '');\n    _ref = value.split('/', 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  payform.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  payform.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 = String(month).trim();\n    year = String(year).trim();\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  payform.validateCardCVC = function(cvc, type) {\n    var card, _ref;\n    cvc = String(cvc).trim();\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  payform.parseCardType = 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  payform.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 = groups.filter(Boolean);\n      return groups.join(' ');\n    }\n  };\n  payform.formatCardExpiry = 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  return payform;\n});\n\n\n\n},{}]},{},[1]);\n\n;\n\n// Mustache (needed by iconhaz and templates)\n// --- mustache.min.js ---\n(function(global,factory){typeof exports===\"object\"&&typeof module!==\"undefined\"?module.exports=factory():typeof define===\"function\"&&define.amd?define(factory):(global=global||self,global.Mustache=factory())})(this,function(){\"use strict\";var objectToString=Object.prototype.toString;var isArray=Array.isArray||function isArrayPolyfill(object){return objectToString.call(object)===\"[object Array]\"};function isFunction(object){return typeof object===\"function\"}function typeStr(obj){return isArray(obj)?\"array\":typeof obj}function escapeRegExp(string){return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g,\"\\\\$&\")}function hasProperty(obj,propName){return obj!=null&&typeof obj===\"object\"&&propName in obj}function primitiveHasOwnProperty(primitive,propName){return primitive!=null&&typeof primitive!==\"object\"&&primitive.hasOwnProperty&&primitive.hasOwnProperty(propName)}var regExpTest=RegExp.prototype.test;function testRegExp(re,string){return regExpTest.call(re,string)}var nonSpaceRe=/\\S/;function isWhitespace(string){return!testRegExp(nonSpaceRe,string)}var entityMap={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#x2F;\",\"`\":\"&#x60;\",\"=\":\"&#x3D;\"};function escapeHtml(string){return String(string).replace(/[&<>\"'`=\\/]/g,function fromEntityMap(s){return entityMap[s]})}var whiteRe=/\\s*/;var spaceRe=/\\s+/;var equalsRe=/\\s*=/;var curlyRe=/\\s*\\}/;var tagRe=/#|\\^|\\/|>|\\{|&|=|!/;function parseTemplate(template,tags){if(!template)return[];var lineHasNonSpace=false;var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;var indentation=\"\";var tagIndex=0;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tagsToCompile){if(typeof tagsToCompile===\"string\")tagsToCompile=tagsToCompile.split(spaceRe,2);if(!isArray(tagsToCompile)||tagsToCompile.length!==2)throw new Error(\"Invalid tags: \"+tagsToCompile);openingTagRe=new RegExp(escapeRegExp(tagsToCompile[0])+\"\\\\s*\");closingTagRe=new RegExp(\"\\\\s*\"+escapeRegExp(tagsToCompile[1]));closingCurlyRe=new RegExp(\"\\\\s*\"+escapeRegExp(\"}\"+tagsToCompile[1]))}compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i<valueLength;++i){chr=value.charAt(i);if(isWhitespace(chr)){spaces.push(tokens.length);indentation+=chr}else{nonSpace=true;lineHasNonSpace=true;indentation+=\" \"}tokens.push([\"text\",chr,start,start+1]);start+=1;if(chr===\"\\n\"){stripSpace();indentation=\"\";tagIndex=0;lineHasNonSpace=false}}}if(!scanner.scan(openingTagRe))break;hasTag=true;type=scanner.scan(tagRe)||\"name\";scanner.scan(whiteRe);if(type===\"=\"){value=scanner.scanUntil(equalsRe);scanner.scan(equalsRe);scanner.scanUntil(closingTagRe)}else if(type===\"{\"){value=scanner.scanUntil(closingCurlyRe);scanner.scan(curlyRe);scanner.scanUntil(closingTagRe);type=\"&\"}else{value=scanner.scanUntil(closingTagRe)}if(!scanner.scan(closingTagRe))throw new Error(\"Unclosed tag at \"+scanner.pos);if(type==\">\"){token=[type,value,start,scanner.pos,indentation,tagIndex,lineHasNonSpace]}else{token=[type,value,start,scanner.pos]}tagIndex++;tokens.push(token);if(type===\"#\"||type===\"^\"){sections.push(token)}else if(type===\"/\"){openSection=sections.pop();if(!openSection)throw new Error('Unopened section \"'+value+'\" at '+start);if(openSection[1]!==value)throw new Error('Unclosed section \"'+openSection[1]+'\" at '+start)}else if(type===\"name\"||type===\"{\"||type===\"&\"){nonSpace=true}else if(type===\"=\"){compileTags(value)}}stripSpace();openSection=sections.pop();if(openSection)throw new Error('Unclosed section \"'+openSection[1]+'\" at '+scanner.pos);return nestTokens(squashTokens(tokens))}function squashTokens(tokens){var squashedTokens=[];var token,lastToken;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];if(token){if(token[0]===\"text\"&&lastToken&&lastToken[0]===\"text\"){lastToken[1]+=token[1];lastToken[3]=token[3]}else{squashedTokens.push(token);lastToken=token}}}return squashedTokens}function nestTokens(tokens){var nestedTokens=[];var collector=nestedTokens;var sections=[];var token,section;for(var i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];switch(token[0]){case\"#\":case\"^\":collector.push(token);sections.push(token);collector=token[4]=[];break;case\"/\":section=sections.pop();section[5]=token[2];collector=sections.length>0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return nestedTokens}function Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function eos(){return this.tail===\"\"};Scanner.prototype.scan=function scan(re){var match=this.tail.match(re);if(!match||match.index!==0)return\"\";var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string};Scanner.prototype.scanUntil=function scanUntil(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail=\"\";break;case 0:match=\"\";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return match};function Context(view,parentContext){this.view=view;this.cache={\".\":this.view};this.parent=parentContext}Context.prototype.push=function push(view){return new Context(view,this)};Context.prototype.lookup=function lookup(name){var cache=this.cache;var value;if(cache.hasOwnProperty(name)){value=cache[name]}else{var context=this,intermediateValue,names,index,lookupHit=false;while(context){if(name.indexOf(\".\")>0){intermediateValue=context.view;names=name.split(\".\");index=0;while(intermediateValue!=null&&index<names.length){if(index===names.length-1)lookupHit=hasProperty(intermediateValue,names[index])||primitiveHasOwnProperty(intermediateValue,names[index]);intermediateValue=intermediateValue[names[index++]]}}else{intermediateValue=context.view[name];lookupHit=hasProperty(context.view,name)}if(lookupHit){value=intermediateValue;break}context=context.parent}cache[name]=value}if(isFunction(value))value=value.call(this.view);return value};function Writer(){this.templateCache={_cache:{},set:function set(key,value){this._cache[key]=value},get:function get(key){return this._cache[key]},clear:function clear(){this._cache={}}}}Writer.prototype.clearCache=function clearCache(){if(typeof this.templateCache!==\"undefined\"){this.templateCache.clear()}};Writer.prototype.parse=function parse(template,tags){var cache=this.templateCache;var cacheKey=template+\":\"+(tags||mustache.tags).join(\":\");var isCacheEnabled=typeof cache!==\"undefined\";var tokens=isCacheEnabled?cache.get(cacheKey):undefined;if(tokens==undefined){tokens=parseTemplate(template,tags);isCacheEnabled&&cache.set(cacheKey,tokens)}return tokens};Writer.prototype.render=function render(template,view,partials,config){var tags=this.getConfigTags(config);var tokens=this.parse(template,tags);var context=view instanceof Context?view:new Context(view,undefined);return this.renderTokens(tokens,context,partials,template,config)};Writer.prototype.renderTokens=function renderTokens(tokens,context,partials,originalTemplate,config){var buffer=\"\";var token,symbol,value;for(var i=0,numTokens=tokens.length;i<numTokens;++i){value=undefined;token=tokens[i];symbol=token[0];if(symbol===\"#\")value=this.renderSection(token,context,partials,originalTemplate,config);else if(symbol===\"^\")value=this.renderInverted(token,context,partials,originalTemplate,config);else if(symbol===\">\")value=this.renderPartial(token,context,partials,config);else if(symbol===\"&\")value=this.unescapedValue(token,context);else if(symbol===\"name\")value=this.escapedValue(token,context,config);else if(symbol===\"text\")value=this.rawValue(token);if(value!==undefined)buffer+=value}return buffer};Writer.prototype.renderSection=function renderSection(token,context,partials,originalTemplate,config){var self=this;var buffer=\"\";var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials,config)}if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;j<valueLength;++j){buffer+=this.renderTokens(token[4],context.push(value[j]),partials,originalTemplate,config)}}else if(typeof value===\"object\"||typeof value===\"string\"||typeof value===\"number\"){buffer+=this.renderTokens(token[4],context.push(value),partials,originalTemplate,config)}else if(isFunction(value)){if(typeof originalTemplate!==\"string\")throw new Error(\"Cannot use higher-order sections without the original template\");value=value.call(context.view,originalTemplate.slice(token[3],token[5]),subRender);if(value!=null)buffer+=value}else{buffer+=this.renderTokens(token[4],context,partials,originalTemplate,config)}return buffer};Writer.prototype.renderInverted=function renderInverted(token,context,partials,originalTemplate,config){var value=context.lookup(token[1]);if(!value||isArray(value)&&value.length===0)return this.renderTokens(token[4],context,partials,originalTemplate,config)};Writer.prototype.indentPartial=function indentPartial(partial,indentation,lineHasNonSpace){var filteredIndentation=indentation.replace(/[^ \\t]/g,\"\");var partialByNl=partial.split(\"\\n\");for(var i=0;i<partialByNl.length;i++){if(partialByNl[i].length&&(i>0||!lineHasNonSpace)){partialByNl[i]=filteredIndentation+partialByNl[i]}}return partialByNl.join(\"\\n\")};Writer.prototype.renderPartial=function renderPartial(token,context,partials,config){if(!partials)return;var tags=this.getConfigTags(config);var value=isFunction(partials)?partials(token[1]):partials[token[1]];if(value!=null){var lineHasNonSpace=token[6];var tagIndex=token[5];var indentation=token[4];var indentedValue=value;if(tagIndex==0&&indentation){indentedValue=this.indentPartial(value,indentation,lineHasNonSpace)}var tokens=this.parse(indentedValue,tags);return this.renderTokens(tokens,context,partials,indentedValue,config)}};Writer.prototype.unescapedValue=function unescapedValue(token,context){var value=context.lookup(token[1]);if(value!=null)return value};Writer.prototype.escapedValue=function escapedValue(token,context,config){var escape=this.getConfigEscape(config)||mustache.escape;var value=context.lookup(token[1]);if(value!=null)return typeof value===\"number\"&&escape===mustache.escape?String(value):escape(value)};Writer.prototype.rawValue=function rawValue(token){return token[1]};Writer.prototype.getConfigTags=function getConfigTags(config){if(isArray(config)){return config}else if(config&&typeof config===\"object\"){return config.tags}else{return undefined}};Writer.prototype.getConfigEscape=function getConfigEscape(config){if(config&&typeof config===\"object\"&&!isArray(config)){return config.escape}else{return undefined}};var mustache={name:\"mustache.js\",version:\"4.2.0\",tags:[\"{{\",\"}}\"],clearCache:undefined,escape:undefined,parse:undefined,render:undefined,Scanner:undefined,Context:undefined,Writer:undefined,set templateCache(cache){defaultWriter.templateCache=cache},get templateCache(){return defaultWriter.templateCache}};var defaultWriter=new Writer;mustache.clearCache=function clearCache(){return defaultWriter.clearCache()};mustache.parse=function parse(template,tags){return defaultWriter.parse(template,tags)};mustache.render=function render(template,view,partials,config){if(typeof template!==\"string\"){throw new TypeError('Invalid template! Template should be a \"string\" '+'but \"'+typeStr(template)+'\" was given as the first '+\"argument for mustache#render(template, view, partials)\")}return defaultWriter.render(template,view,partials,config)};mustache.escape=escapeHtml;mustache.Scanner=Scanner;mustache.Context=Context;mustache.Writer=Writer;return mustache});\n\n;\n// --- iconhaz.js ---\n/*!\nICanHaz.js version 0.10.2 -- by @HenrikJoreteg\nMore info at: http://icanhazjs.com\n*/\n(function () {\n/*\n  mustache.js \u2014 Logic-less templates in JavaScript\n\n  See http://mustache.github.com/ for more info.\n*/\n\nvar Mustache = function () {\n  var _toString = Object.prototype.toString;\n\n  Array.isArray = Array.isArray || function (obj) {\n    return _toString.call(obj) == \"[object Array]\";\n  }\n\n  var _trim = String.prototype.trim, trim;\n\n  if (_trim) {\n    trim = function (text) {\n      return text == null ? \"\" : _trim.call(text);\n    }\n  } else {\n    var trimLeft, trimRight;\n\n    // IE doesn't match non-breaking spaces with \\s.\n    if ((/\\S/).test(\"\\xA0\")) {\n      trimLeft = /^[\\s\\xA0]+/;\n      trimRight = /[\\s\\xA0]+$/;\n    } else {\n      trimLeft = /^\\s+/;\n      trimRight = /\\s+$/;\n    }\n\n    trim = function (text) {\n      return text == null ? \"\" :\n        text.toString().replace(trimLeft, \"\").replace(trimRight, \"\");\n    }\n  }\n\n  var escapeMap = {\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  function escapeHTML(string) {\n    return String(string).replace(/&(?!\\w+;)|[<>\"']/g, function (s) {\n      return escapeMap[s] || s;\n    });\n  }\n\n  var regexCache = {};\n  var Renderer = function () {};\n\n  Renderer.prototype = {\n    otag: \"{{\",\n    ctag: \"}}\",\n    pragmas: {},\n    buffer: [],\n    pragmas_implemented: {\n      \"IMPLICIT-ITERATOR\": true\n    },\n    context: {},\n\n    render: function (template, context, partials, in_recursion) {\n      // reset buffer & set context\n      if (!in_recursion) {\n        this.context = context;\n        this.buffer = []; // TODO: make this non-lazy\n      }\n\n      // fail fast\n      if (!this.includes(\"\", template)) {\n        if (in_recursion) {\n          return template;\n        } else {\n          this.send(template);\n          return;\n        }\n      }\n\n      // get the pragmas together\n      template = this.render_pragmas(template);\n\n      // render the template\n      var html = this.render_section(template, context, partials);\n\n      // render_section did not find any sections, we still need to render the tags\n      if (html === false) {\n        html = this.render_tags(template, context, partials, in_recursion);\n      }\n\n      if (in_recursion) {\n        return html;\n      } else {\n        this.sendLines(html);\n      }\n    },\n\n    /*\n      Sends parsed lines\n    */\n    send: function (line) {\n      if (line !== \"\") {\n        this.buffer.push(line);\n      }\n    },\n\n    sendLines: function (text) {\n      if (text) {\n        var lines = text.split(\"\\n\");\n        for (var i = 0; i < lines.length; i++) {\n          this.send(lines[i]);\n        }\n      }\n    },\n\n    /*\n      Looks for %PRAGMAS\n    */\n    render_pragmas: function (template) {\n      // no pragmas\n      if (!this.includes(\"%\", template)) {\n        return template;\n      }\n\n      var that = this;\n      var regex = this.getCachedRegex(\"render_pragmas\", function (otag, ctag) {\n        return new RegExp(otag + \"%([\\\\w-]+) ?([\\\\w]+=[\\\\w]+)?\" + ctag, \"g\");\n      });\n\n      return template.replace(regex, function (match, pragma, options) {\n        if (!that.pragmas_implemented[pragma]) {\n          throw({message:\n            \"This implementation of mustache doesn't understand the '\" +\n            pragma + \"' pragma\"});\n        }\n        that.pragmas[pragma] = {};\n        if (options) {\n          var opts = options.split(\"=\");\n          that.pragmas[pragma][opts[0]] = opts[1];\n        }\n        return \"\";\n        // ignore unknown pragmas silently\n      });\n    },\n\n    /*\n      Tries to find a partial in the curent scope and render it\n    */\n    render_partial: function (name, context, partials) {\n      name = trim(name);\n      if (!partials || partials[name] === undefined) {\n        throw({message: \"unknown_partial '\" + name + \"'\"});\n      }\n      if (!context || typeof context[name] != \"object\") {\n        return this.render(partials[name], context, partials, true);\n      }\n      return this.render(partials[name], context[name], partials, true);\n    },\n\n    /*\n      Renders inverted (^) and normal (#) sections\n    */\n    render_section: function (template, context, partials) {\n      if (!this.includes(\"#\", template) && !this.includes(\"^\", template)) {\n        // did not render anything, there were no sections\n        return false;\n      }\n\n      var that = this;\n\n      var regex = this.getCachedRegex(\"render_section\", function (otag, ctag) {\n        // This regex matches _the first_ section ({{#foo}}{{/foo}}), and captures the remainder\n        return new RegExp(\n          \"^([\\\\s\\\\S]*?)\" +         // all the crap at the beginning that is not {{*}} ($1)\n\n          otag +                    // {{\n          \"(\\\\^|\\\\#)\\\\s*(.+)\\\\s*\" + //  #foo (# == $2, foo == $3)\n          ctag +                    // }}\n\n          \"\\n*([\\\\s\\\\S]*?)\" +       // between the tag ($2). leading newlines are dropped\n\n          otag +                    // {{\n          \"\\\\/\\\\s*\\\\3\\\\s*\" +        //  /foo (backreference to the opening tag).\n          ctag +                    // }}\n\n          \"\\\\s*([\\\\s\\\\S]*)$\",       // everything else in the string ($4). leading whitespace is dropped.\n\n        \"g\");\n      });\n\n\n      // for each {{#foo}}{{/foo}} section do...\n      return template.replace(regex, function (match, before, type, name, content, after) {\n        // before contains only tags, no sections\n        var renderedBefore = before ? that.render_tags(before, context, partials, true) : \"\",\n\n        // after may contain both sections and tags, so use full rendering function\n            renderedAfter = after ? that.render(after, context, partials, true) : \"\",\n\n        // will be computed below\n            renderedContent,\n\n            value = that.find(name, context);\n\n        if (type === \"^\") { // inverted section\n          if (!value || Array.isArray(value) && value.length === 0) {\n            // false or empty list, render it\n            renderedContent = that.render(content, context, partials, true);\n          } else {\n            renderedContent = \"\";\n          }\n        } else if (type === \"#\") { // normal section\n          if (Array.isArray(value)) { // Enumerable, Let's loop!\n            renderedContent = that.map(value, function (row) {\n              return that.render(content, that.create_context(row), partials, true);\n            }).join(\"\");\n          } else if (that.is_object(value)) { // Object, Use it as subcontext!\n            renderedContent = that.render(content, that.create_context(value),\n              partials, true);\n          } else if (typeof value == \"function\") {\n            // higher order section\n            renderedContent = value.call(context, content, function (text) {\n              return that.render(text, context, partials, true);\n            });\n          } else if (value) { // boolean section\n            renderedContent = that.render(content, context, partials, true);\n          } else {\n            renderedContent = \"\";\n          }\n        }\n\n        return renderedBefore + renderedContent + renderedAfter;\n      });\n    },\n\n    /*\n      Replace {{foo}} and friends with values from our view\n    */\n    render_tags: function (template, context, partials, in_recursion) {\n      // tit for tat\n      var that = this;\n\n      var new_regex = function () {\n        return that.getCachedRegex(\"render_tags\", function (otag, ctag) {\n          return new RegExp(otag + \"(=|!|>|&|\\\\{|%)?([^#\\\\^]+?)\\\\1?\" + ctag + \"+\", \"g\");\n        });\n      };\n\n      var regex = new_regex();\n      var tag_replace_callback = function (match, operator, name) {\n        switch(operator) {\n        case \"!\": // ignore comments\n          return \"\";\n        case \"=\": // set new delimiters, rebuild the replace regexp\n          that.set_delimiters(name);\n          regex = new_regex();\n          return \"\";\n        case \">\": // render partial\n          return that.render_partial(name, context, partials);\n        case \"{\": // the triple mustache is unescaped\n        case \"&\": // & operator is an alternative unescape method\n          return that.find(name, context);\n        default: // escape the value\n          return escapeHTML(that.find(name, context));\n        }\n      };\n      var lines = template.split(\"\\n\");\n      for(var i = 0; i < lines.length; i++) {\n        lines[i] = lines[i].replace(regex, tag_replace_callback, this);\n        if (!in_recursion) {\n          this.send(lines[i]);\n        }\n      }\n\n      if (in_recursion) {\n        return lines.join(\"\\n\");\n      }\n    },\n\n    set_delimiters: function (delimiters) {\n      var dels = delimiters.split(\" \");\n      this.otag = this.escape_regex(dels[0]);\n      this.ctag = this.escape_regex(dels[1]);\n    },\n\n    escape_regex: function (text) {\n      // thank you Simon Willison\n      if (!arguments.callee.sRE) {\n        var specials = [\n          '/', '.', '*', '+', '?', '|',\n          '(', ')', '[', ']', '{', '}', '\\\\'\n        ];\n        arguments.callee.sRE = new RegExp(\n          '(\\\\' + specials.join('|\\\\') + ')', 'g'\n        );\n      }\n      return text.replace(arguments.callee.sRE, '\\\\$1');\n    },\n\n    /*\n      find `name` in current `context`. That is find me a value\n      from the view object\n    */\n    find: function (name, context) {\n      name = trim(name);\n\n      // Checks whether a value is thruthy or false or 0\n      function is_kinda_truthy(bool) {\n        return bool === false || bool === 0 || bool;\n      }\n\n      var value;\n\n      // check for dot notation eg. foo.bar\n      if (name.match(/([a-z_]+)\\./ig)) {\n        var childValue = this.walk_context(name, context);\n        if (is_kinda_truthy(childValue)) {\n          value = childValue;\n        }\n      } else {\n        if (is_kinda_truthy(context[name])) {\n          value = context[name];\n        } else if (is_kinda_truthy(this.context[name])) {\n          value = this.context[name];\n        }\n      }\n\n      if (typeof value == \"function\") {\n        return value.apply(context);\n      }\n      if (value !== undefined) {\n        return value;\n      }\n      // silently ignore unkown variables\n      return \"\";\n    },\n\n    walk_context: function (name, context) {\n      var path = name.split('.');\n      // if the var doesn't exist in current context, check the top level context\n      var value_context = (context[path[0]] != undefined) ? context : this.context;\n      var value = value_context[path.shift()];\n      while (value != undefined && path.length > 0) {\n        value_context = value;\n        value = value[path.shift()];\n      }\n      // if the value is a function, call it, binding the correct context\n      if (typeof value == \"function\") {\n        return value.apply(value_context);\n      }\n      return value;\n    },\n\n    // Utility methods\n\n    /* includes tag */\n    includes: function (needle, haystack) {\n      return haystack.indexOf(this.otag + needle) != -1;\n    },\n\n    // by @langalex, support for arrays of strings\n    create_context: function (_context) {\n      if (this.is_object(_context)) {\n        return _context;\n      } else {\n        var iterator = \".\";\n        if (this.pragmas[\"IMPLICIT-ITERATOR\"]) {\n          iterator = this.pragmas[\"IMPLICIT-ITERATOR\"].iterator;\n        }\n        var ctx = {};\n        ctx[iterator] = _context;\n        return ctx;\n      }\n    },\n\n    is_object: function (a) {\n      return a && typeof a == \"object\";\n    },\n\n    /*\n      Why, why, why? Because IE. Cry, cry cry.\n    */\n    map: function (array, fn) {\n      if (typeof array.map == \"function\") {\n        return array.map(fn);\n      } else {\n        var r = [];\n        var l = array.length;\n        for(var i = 0; i < l; i++) {\n          r.push(fn(array[i]));\n        }\n        return r;\n      }\n    },\n\n    getCachedRegex: function (name, generator) {\n      var byOtag = regexCache[this.otag];\n      if (!byOtag) {\n        byOtag = regexCache[this.otag] = {};\n      }\n\n      var byCtag = byOtag[this.ctag];\n      if (!byCtag) {\n        byCtag = byOtag[this.ctag] = {};\n      }\n\n      var regex = byCtag[name];\n      if (!regex) {\n        regex = byCtag[name] = generator(this.otag, this.ctag);\n      }\n\n      return regex;\n    }\n  };\n\n  return({\n    name: \"mustache.js\",\n    version: \"0.4.0\",\n\n    /*\n      Turns a template and view into HTML\n    */\n    to_html: function (template, view, partials, send_fun) {\n      var renderer = new Renderer();\n      if (send_fun) {\n        renderer.send = send_fun;\n      }\n      renderer.render(template, view || {}, partials);\n      if (!send_fun) {\n        return renderer.buffer.join(\"\\n\");\n      }\n    }\n  });\n}();\n/*!\n  ICanHaz.js -- by @HenrikJoreteg\n*/\n/*global  */\n(function () {\n    function trim(stuff) {\n        if (''.trim) return stuff.trim();\n        else return stuff.replace(/^\\s+/, '').replace(/\\s+$/, '');\n    }\n\n    // Establish the root object, `window` in the browser, or `global` on the server.\n    var root = this;\n\n    var ich = {\n        VERSION: \"0.10.2\",\n        templates: {},\n\n        // grab jquery or zepto if it's there\n        $: (typeof window !== 'undefined') ? window.jQuery || window.Zepto || null : null,\n\n        // public function for adding templates\n        // can take a name and template string arguments\n        // or can take an object with name/template pairs\n        // We're enforcing uniqueness to avoid accidental template overwrites.\n        // If you want a different template, it should have a different name.\n        addTemplate: function (name, templateString) {\n            if (typeof name === 'object') {\n                for (var template in name) {\n                    this.addTemplate(template, name[template]);\n                }\n                return;\n            }\n            if (ich[name]) {\n                console.error(\"Invalid name: \" + name + \".\");\n            } else if (ich.templates[name]) {\n                console.error(\"Template \\\"\" + name + \"  \\\" exists\");\n            } else {\n                ich.templates[name] = templateString;\n                ich[name] = function (data, raw) {\n                    data = data || {};\n                    var result = Mustache.to_html(ich.templates[name], data, ich.templates);\n                    return (ich.$ && !raw) ? ich.$(trim(result)) : result;\n                };\n            }\n        },\n\n        // clears all retrieval functions and empties cache\n        clearAll: function () {\n            for (var key in ich.templates) {\n                delete ich[key];\n            }\n            ich.templates = {};\n        },\n\n        // clears/grabs\n        refresh: function () {\n            ich.clearAll();\n            ich.grabTemplates();\n        },\n\n        // grabs templates from the DOM and caches them.\n        // Loop through and add templates.\n        // Whitespace at beginning and end of all templates inside <script> tags will\n        // be trimmed. If you want whitespace around a partial, add it in the parent,\n        // not the partial. Or do it explicitly using <br/> or &nbsp;\n        grabTemplates: function () {\n            var i,\n                l,\n                scripts = document.getElementsByTagName('script'),\n                script,\n                trash = [];\n            for (i = 0, l = scripts.length; i < l; i++) {\n                script = scripts[i];\n                if (script && script.innerHTML && script.id && (script.type === \"text/html\" || script.type === \"text/x-icanhaz\")) {\n                    ich.addTemplate(script.id, trim(script.innerHTML));\n                    trash.unshift(script);\n                }\n            }\n            for (i = 0, l = trash.length; i < l; i++) {\n                trash[i].parentNode.removeChild(trash[i]);\n            }\n        }\n    };\n\n    // Export the ICanHaz object for **Node.js**, with\n    // backwards-compatibility for the old `require()` API. If we're in\n    // the browser, add `ich` as a global object via a string identifier,\n    // for Closure Compiler \"advanced\" mode.\n    if (typeof exports !== 'undefined') {\n        if (typeof module !== 'undefined' && module.exports) {\n            exports = module.exports = ich;\n        }\n        exports.ich = ich;\n    } else {\n        root['ich'] = ich;\n    }\n\n    if (typeof document !== 'undefined') {\n        if (ich.$) {\n            ich.$(function () {\n                ich.grabTemplates();\n            });\n        } else {\n            document.addEventListener('DOMContentLoaded', function () {\n                ich.grabTemplates();\n            }, true);\n        }\n    }\n\n})();\n})();\n;\n\n// Internal gem JS (from ooma_types)\n// --- ooma_form_processor.js ---\nvar Ooma = {\n  Form: {},\n  Address: {},\n  Address2: {},\n  Email: {},\n  Name: {},\n  CompanyName: {},\n  City: {},\n  State: {},\n  CityState: {},\n  Zip: {},\n  Zip4: {},\n  Phone: {},\n  CCNumber: {},\n  CCMonth: {},\n  CCYear: {},\n  CCDate: {},\n  CVV: {}\n};\n\n/*\n * Use to validate form\n * USAGE\n * new Form.Processor({\n *   form: '#form',\n *   submitButton: '#form_submit',\n *   callbacks: {\n *     cityTrigger: function(){true} // used to check if the field should be checked\n *   },\n *   inputsValues: {\n *     inputs: {\n *       firstName: '#first_name',\n *       lastName: '#last_name',\n *       address: '#address',\n *       zip: '#zip',\n *       city: '#city',\n *       phoneNumber: '#phone_number'\n *     },\n *     errorsLabels: {\n *       firstName: 'label[for=first_name]',\n *       lastName: 'label[for=last_name]',\n *       address: 'label[for=address]',\n *       zip: 'label[for=zip]',\n *       city: 'label[for=city]',\n *       phoneNumber: 'label[for=phone_number]'\n *     }\n *   }\n * });\n */\n\nOoma.Form.Processor = function(data) {\n\n  var inputs = data.inputsValues.inputs;\n\n  // Disable submit button on page ready\n  // disableButton({form: data.form, submitButton: data.submitButton, inputs: inputs, callbacks: data.callbacks});\n\n  // Add events to all form inputs\n  Object.keys(inputs).filter(function(key) {\n    var unfocusedFields = [],\n        fieldsAmount = Object.keys(inputs).length;\n\n    $(data.form + \" \" + inputs[key]).bind(\"change keyup paste\", function() {\n      if (unfocusedFields.indexOf(key) != -1) fieldValidation(key);\n      // disableButton({form: data.form, submitButton: data.submitButton, inputs: inputs, callbacks: data.callbacks});\n    });\n\n    $(data.form + \" \" + inputs[key]).bind(\"blur\", function() {\n      if (unfocusedFields.indexOf(key) == -1) unfocusedFields.push(key);\n\n      fieldValidation(key);\n    });\n  });\n\n  // SHOW ERROR MESSAGES ON SUBMIT BUTTON CLICK\n\n  $(data.submitButton).click(function() {\n    var result = true;\n\n    Object.keys(data.inputsValues.inputs).filter(function(key) {\n      // Set validator by name\n      var validator = setValidator(key);\n\n      if (data.callbacks && data.callbacks[key+\"Trigger\"]) {\n        if (data.callbacks[key+\"Trigger\"]()) {\n          if ((key == \"cardDate\") && (key == \"cardDateYear\")) {\n            valid = validator(key);\n          } else {\n            valid = validator($(data.inputsValues.inputs[key]).data(\"value\") || $(data.inputsValues.inputs[key]).val());\n          }\n\n          if (!valid) {\n            showError(data.form, data.inputsValues.errorsLabels[key], data.inputsValues.inputs[key], key, valid);\n          }\n        }\n      } else {\n        if ((key == \"cardDate\") && (key == \"cardDateYear\")) {\n          valid = validator(key);\n        } else {\n          valid = validator($(data.inputsValues.inputs[key]).data(\"value\") || $(data.inputsValues.inputs[key]).val());\n        }\n\n        if (!valid) {\n          // result = valid == true ? true : false \n          showError(data.form, data.inputsValues.errorsLabels[key], data.inputsValues.inputs[key], key, valid);\n        }\n      }\n\n      // this line need because validatior may return not only true/false,\n      // but undefined, 'not finished' etc.\n      if (!valid || valid == \"not finished\" || valid == \"po box\" || valid == \"no_valid_card_ca\") result = false;\n    });\n\n    if (!result) return false;\n  });\n\n  /*\n   * Provide all field validation process\n   * @param {String} key\n   */\n  function fieldValidation(key) {\n    // Set validator and validate value\n    var validator = setValidator(key);\n    var result = true;\n\n    if (data.callbacks && data.callbacks[key+\"Trigger\"]) {\n      if (data.callbacks[key+\"Trigger\"]()) {\n        if ((key != \"cardDate\") && (key != \"cardDateYear\")) {\n          result = validator($(data.inputsValues.inputs[key]).data('value') || $(data.inputsValues.inputs[key]).val());\n        } else {\n          // result = validator($(data.inputsValues.inputs[key]).val(), key);\n          result = validator(key);\n        }\n      }\n    } else {\n      if ((key != \"cardDate\") && (key != \"cardDateYear\")) {\n        result = validator($(data.inputsValues.inputs[key]).data('value') || $(data.inputsValues.inputs[key]).val());\n      } else {\n        // result = validator($(data.inputsValues.inputs[key]).val(), key);\n        result = validator(key);\n      }\n    }\n    // result = validator($(this).val());\n\n    // Show/hide error messages\n    showError(data.form, data.inputsValues.errorsLabels[key], data.inputsValues.inputs[key], key, result);\n\n    // Disable/enable submit button\n    // disableButton({form: data.form, submitButton: data.submitButton, inputs: inputs, callbacks: data.callbacks});\n  }\n\n  /*\n   * Show/hide error messages\n   * @param {String} form\n   * @param {String} label\n   * @param {String} input\n   * @param {Boolean} result\n   */\n  function showError (form, label, input, key, result) {\n    var name, locale = 'us';\n    var lang = (data && typeof data.lang !== 'undefined') ? data.lang : 'en';\n\n    // Set locale\n    try {\n      locale = LOCALE;\n    } catch(err) { }\n\n\n    if (result == \"wrong locale\") console.log(\"LOCALE is wrong!\");\n\n    if (result == true) {\n      if ((key == \"cardDate\") || (key == \"cardDateYear\")) {\n        $(form).find(label).parent().find(\"input\").removeClass(\"error\");\n      } else {\n        $(form).find(input).removeClass(\"error\");\n      }\n      $(label).parent().find(\"div.error\").remove();\n    } else {\n      if (result != \"not finished\") {\n        if ((key == \"cardDate\") || (key == \"cardDateYear\")) {\n          $(form).find(label).parent().find(\"input\").addClass(\"error\");\n        } else {\n          $(form).find(input).addClass(\"error\");\n        }\n\n        // Set error name\n        if ( result == \"po box\" ) {\n          name = \"use_po_box\";\n        } else if ( result == \"no_valid_card_ca\" ) {\n          name = \"enter_card_number_for_ca\";\n        } else if ( result == undefined ) {\n          name = \"enter_\" + ($(label).attr(\"for\"));\n        } else {\n          name = \"enter_valid_\" + ($(label).attr(\"for\"));\n        }\n        // Find created error label or create it\n        if ( $(label).parent().find(\"div.error\").length == 0 ) {\n          $(\"<div class='error'>\" + Localize.Activation[locale][lang][name] + \"</div>\").insertAfter(label);\n        } else {\n          $(label).parent().find(\"div.error\").text(Localize.Activation[locale][lang][name]);\n        }\n      } else {\n        if ((key == \"cardDate\") || (key == \"cardDateYear\")) {\n          $(form).find(label).parent().find(\"input\").removeClass(\"error\");\n          $(label).parent().find(\"div.error\").remove();\n        }\n      }\n    }\n  }\n\n  /*\n   * Set validator by value\n   * @param {string} value\n   * @result {Class} setValidator\n   */\n\n  function setValidator(value) {\n     var validators = {\n       firstName: Ooma.Name.Validator,\n       lastName: Ooma.Name.Validator,\n       companyName: Ooma.CompanyName.Validator,\n       address: Ooma.Address.Validator,\n       address2: Ooma.Address2.Validator,\n       email: Ooma.Email.Validator,\n       zip: Ooma.Zip.Validator,\n       zip4: Ooma.Zip4.Validator,\n       city: Ooma.City.Validator,\n       state: Ooma.State.Validator,\n       cityState: Ooma.CityState.Validator,\n       phoneNumber: Ooma.Phone.Validator,\n       cardNumber: Ooma.CCNumber.Validator,\n       cardMonth: Ooma.CCMonth.Validator,\n       cardYear: Ooma.CCYear.Validator,\n       cardDate: Ooma.CCDate.Validator,\n       cardDateYear: Ooma.CCDate.Validator,\n       cvv: Ooma.CVV.Validator\n     };\n     return validators[value];\n  }\n\n};\n\n;\n// --- ooma_form_processor_initializer.js ---\n\n/*\n * Ooma.Form.ProcessorInitializer is used to reinit the form processor in case the form is changed dynamically.\n * @param {Object} data\n * Example:\n\nShop.FormProcessorInitializer = new Ooma.Form.ProcessorInitializer({\n    form: '#shipping',\n    callbacks: {\n        cityTrigger: function(){ return Shop.ManualEntry}, // used to check if the field should be checked\n        stateTrigger: function(){ return Shop.ManualEntry} // used to check if the field should be checked\n    },\n    inputsValues: {\n        inputs: {\n            firstName: '#first_name',\n            lastName: '#last_name',\n            address: '#street_address',\n            email: '#email',\n            zip: '#zip',\n            city: '#city',\n            state: '#state',\n            phoneNumber: '#phone'\n        },\n        errorsLabels: {\n            firstName: 'label[for=first_name]',\n            lastName: 'label[for=last_name]',\n            address: 'label[for=street_address]',\n            email: 'label[for=email]',\n            zip: 'label[for=zip]',\n            city: 'label[for=city]',\n            phoneNumber: 'label[for=phone]'\n        }\n    },\n    submitButton: \"#btn-shipping\"\n});\nShop.FormProcessorInitializer.init();\n\nthen, in needed callback:\n\n$(document).off('click', '#manual_entry_city_state')\n    .on('click', '#manual_entry_city_state', function(){\n        Shop.FormProcessorInitializer.init();\n    });\n\n*/\n\nOoma.Form.ProcessorInitializer = function(data) {\n    this.data = data;\n    this.init = function() {\n      new Ooma.Form.Processor(this.data)\n    }\n}\n\n;\n// --- ooma_localize.js ---\nvar Localize = {};\n\nLocalize.Activation = {\n  ca: {\n    en: {\n      // Shipping form\n      enter_first_name: \"Please enter a First Name\",\n      enter_valid_first_name: \"Please enter a valid First Name\",\n      enter_last_name: \"Please enter a Last Name\",\n      enter_valid_last_name: \"Please enter a valid Last Name\",\n      enter_company_name: \"Please enter a Company Name\",\n      enter_valid_company_name: \"Please enter a valid Company Name\",\n      enter_address: \"Please enter a street address\",\n      enter_valid_address: \"Please enter a valid street address\",\n      enter_street_address: \"Please enter a street address\",\n      enter_valid_street_address: \"Please enter a valid street address\",\n      use_po_box: \"Unable to ship products to P.O.Box addresses. Please provide a valid street address.\",\n      enter_email: \"Please enter a valid email address\",\n      enter_valid_email: \"Please enter a valid email address\",\n      enter_zip: \"Please enter a Postal Code\",\n      enter_valid_zip: \"Enter a valid Postal Code\",\n      enter_city_state: \"Please select a Municipality/Province\",\n      enter_valid_city_state: \"Please select a valid Municipality/Province\",\n      enter_city: \"Please enter a Municipality\",\n      enter_valid_city: \"Please enter a valid Municipality\",\n      enter_state: \"Please select a Province\",\n      enter_valid_state: \"Please select a Province\",\n      enter_phone: \"Please enter a Phone Number\",\n      enter_valid_phone: \"Please enter a valid Phone Number\",\n\n      // Payment form\n      enter_card_number: \"Please enter a Card Number\",\n      enter_valid_card_number: \"Please enter a valid Card Number\",\n      enter_card_number_for_ca: \"Please enter a Visa, Mastercard  or American Express card number\",\n      enter_month: \"Please enter a date\",\n      enter_valid_month: \"Please enter a valid date\",\n      enter_year: \"Please enter a date\",\n      enter_valid_year: \"Please enter a valid date\",\n      enter_cvv: \"Please enter a CVV\",\n      enter_valid_cvv: \"Please enter a valid CVV\",\n      enter_billing_zip: \"Please enter a Billing Zip\",\n      enter_valid_billing_zip: \"Please enter a valid Billing Zip\",\n\n      // Review form\n      enter_speed: \"Please select a speed\",\n      enter_valid_speed: \"Please select a valid speed\"\n    },\n    fr: {\n      enter_first_name: \"Veuillez entrer un pr\u00E9nom\",\n      enter_valid_first_name: \"Veuillez entrer un pr\u00E9nom valide\",\n      enter_last_name: \"Veuillez entrer un nom de famille\",\n      enter_valid_last_name: \"Veuillez entrer un nom de famille valide\",\n      enter_company_name: \"Veuillez entrer un nom d\u2019entreprise\",\n      enter_valid_company_name: \"Veuillez entrer un nom d\u2019entreprise valide\",\n      enter_address: \"Veuillez entrer une adresse postale\",\n      enter_valid_address: \"Veuillez entrer une adresse postale valide\",\n      enter_street_address: \"Veuillez entrer une adresse postale\",\n      enter_valid_street_address: \"Veuillez entrer une adresse postale valide\",\n      use_po_box: \"Impossible de livrer \u00E0 une case postale. Veuillez fournir une adresse postale valide.\",\n      enter_email: \"Veuillez entrer une adresse courriel\",\n      enter_valid_email: \"Veuillez entrer une adresse courriel valide\",\n      enter_zip: \"Veuillez entrer un code postal\",\n      enter_valid_zip: \"Veuillez entrer un code postal valide\",\n      enter_city_state: \"Veuillez s\u00E9lectionner une municipalit\u00E9 et une province\",\n      enter_valid_city_state: \"Veuillez s\u00E9lectionner une municipalit\u00E9 et une province valides\",\n      enter_city: \"Veuillez entrer une municipalit\u00E9\",\n      enter_valid_city: \"Veuillez entrer une municipalit\u00E9 valide\",\n      enter_state: \"Veuillez s\u00E9lectionner une province\",\n      enter_valid_state: \"Veuillez s\u00E9lectionner une province\",\n      enter_phone: \"Veuillez entrer un num\u00E9ro de t\u00E9l\u00E9phone\",\n      enter_valid_phone: \"Veuillez entrer un num\u00E9ro de t\u00E9l\u00E9phone valide\"\n    }\n  },\n  us: {\n    en: {\n      // Shipping form\n      enter_first_name: \"Please enter a First Name\",\n      enter_valid_first_name: \"Please enter a valid First Name\",\n      enter_last_name: \"Please enter a Last Name\",\n      enter_valid_last_name: \"Please enter a valid Last Name\",\n      enter_company_name: \"Please enter a Company Name\",\n      enter_valid_company_name: \"Please enter a valid Company Name\",\n      enter_street_address: \"Please enter a street address\",\n      enter_valid_street_address: \"Please enter a valid street address\",\n      enter_address: \"Please enter a street address\",\n      enter_valid_address: \"Please enter a valid street address\",\n      use_po_box: \"Unable to ship products to P.O.Box addresses. Please provide a valid street address.\",\n      enter_email: \"Please enter a valid email address\",\n      enter_valid_email: \"Please enter a valid email address\",\n      enter_zip: \"Please enter a Zip\",\n      enter_valid_zip: \"Please enter a valid Zip\",\n      enter_city_state: \"Please select a City/State\",\n      enter_valid_city_state: \"Please select a valid City/State\",\n      enter_city: \"Please enter a City\",\n      enter_valid_city: \"Please enter a valid City\",\n      enter_state: \"Please select a State\",\n      enter_valid_state: \"Please select a valid State\",\n      enter_phone: \"Please enter a Phone Number\",\n      enter_valid_phone: \"Please enter a valid Phone Number\",\n\n      // Payment form\n      enter_card_number: \"Please enter a Card Number\",\n      enter_valid_card_number: \"Please enter a valid Card Number\",\n      enter_month: \"Please enter a date\",\n      enter_valid_month: \"Please enter a valid date\",\n      enter_year: \"Please enter a date\",\n      enter_valid_year: \"Please enter a valid date\",\n      enter_cvv: \"Please enter a CVV\",\n      enter_valid_cvv: \"Please enter a valid CVV\",\n      enter_billing_zip: \"Please enter a Billing Zip\",\n      enter_valid_billing_zip: \"Please enter a valid Billing Zip\",\n\n      // Review form\n      enter_speed: \"Please select a speed\",\n      enter_valid_speed: \"Please select a valid speed\"\n    },\n\n    fr: {\n      enter_first_name: \"Veuillez entrer un pr\u00E9nom\",\n      enter_valid_first_name: \"Veuillez entrer un pr\u00E9nom valide\",\n      enter_last_name: \"Veuillez entrer un nom de famille\",\n      enter_valid_last_name: \"Veuillez entrer un nom de famille valide\",\n      enter_company_name: \"Veuillez entrer un nom d\u2019entreprise\",\n      enter_valid_company_name: \"Veuillez entrer un nom d\u2019entreprise valide\",\n      enter_address: \"Veuillez entrer une adresse postale\",\n      enter_valid_address: \"Veuillez entrer une adresse postale valide\",\n      enter_street_address: \"Veuillez entrer une adresse postale\",\n      enter_valid_street_address: \"Veuillez entrer une adresse postale valide\",\n      use_po_box: \"Impossible de livrer \u00E0 une case postale. Veuillez fournir une adresse postale valide.\",\n      enter_email: \"Veuillez entrer une adresse courriel\",\n      enter_valid_email: \"Veuillez entrer une adresse courriel valide\",\n      enter_zip: \"Veuillez entrer un code postal\",\n      enter_valid_zip: \"Veuillez entrer un code postal valide\",\n      enter_city_state: \"Veuillez s\u00E9lectionner une municipalit\u00E9 et une province\",\n      enter_valid_city_state: \"Veuillez s\u00E9lectionner une municipalit\u00E9 et une province valides\",\n      enter_city: \"Veuillez entrer une municipalit\u00E9\",\n      enter_valid_city: \"Veuillez entrer une municipalit\u00E9 valide\",\n      enter_state: \"Veuillez s\u00E9lectionner une province\",\n      enter_valid_state: \"Veuillez s\u00E9lectionner une province\",\n      enter_phone: \"Veuillez entrer un num\u00E9ro de t\u00E9l\u00E9phone\",\n      enter_valid_phone: \"Veuillez entrer un num\u00E9ro de t\u00E9l\u00E9phone valide\"\n    }\n  }\n};\n\n;\n// --- ooma_address.js ---\n// Use to validate address\nOoma.Address.Validator = function (address) {\n\n  /*\n   * Start validate address\n   * @param {String} address\n   * @return {Boolean} result\n   */\n  // Address formats regexps\n  var regExpSpace = /^\\S*$/,\n    regExpAllNumbers = /^[\\d\\s]*$/,\n    regUsExpAllLetters = /^[a-zA-Z\\s]*$/,\n    regCaExpAllLetters = /^[a-zA-Z\u00C0-\u0178\u00E0-\u00FF\\s]*$/,\n    regUsExpAllSymbols = /^[a-zA-Z\\d\\.\\,\\s\\/\\#\\-]*$/,\n    regCaExpAllSymbols = /^[a-zA-Z\u00C0-\u0178\u00E0-\u00FF\\d\\.\\,\\s\\/\\#\\'\\-]*$/,\n    locale= 'us',\n    result = undefined;\n  // Set locale\n  try {\n    locale = LOCALE;\n  } catch (err) { }\n\n  // Address validation\n  if (address) {\n    if (havePOBoxes(address)) return \"po box\";\n    // Set regexps by locale\n    if (locale == \"us\") {\n      var acceptedSympols = regUsExpAllSymbols.test(address),\n        onlyLetters = regUsExpAllLetters.test(address);\n    } else if (locale == \"ca\") {\n      var acceptedSympols = regCaExpAllSymbols.test(address),\n        onlyLetters = regCaExpAllLetters.test(address);\n    }\n\n    // Compare address with regexps\n    result = !regExpSpace.test(address) && !regExpAllNumbers.test(address) && !onlyLetters && acceptedSympols;\n  }\n\n  return result;\n};\n\nOoma.Address2.Validator = function (address) {\n  // Address Line 2 is optional, so we ignore empty address field\n  if (!address || address.trim() === \"\") {\n    return true;\n  }\n\n  // Check for all combinations of PO Box\n  if (havePOBoxes(address)) {\n    return \"po box\";\n  }\n\n  // If not a PO Box then allow the address\n  return true;\n};\n\nfunction havePOBoxes(address) {\n  var po_box_patt = /(^|\\s)([Pp][Oo][\\s\\d\\-]*([Bb][Oo][Xx]|[Pp][Oo][Ss][Tt]))(\\s|$)/,\n    box_po_patt = /(^|\\s)([Bb][Oo][Xx])[\\s\\d\\-]*([Pp][Oo])(\\s|$)/,\n    post_office_box_patt = /(^|\\s)([Pp][Oo]([Ss][Tt])?)[\\s\\d\\-]*([Oo][Ff][Ff][Ii][Cc][Ee])[\\s\\d\\-]*([Bb][Oo][Xx])(\\s|$)/,\n    office_box_patt = /(^|\\s)((([Oo][Ff][Ff]([Ii][Cc][Ee])?)[\\s\\d\\-]*([Bb][Oo][Xx]))|(([Pp][Oo]([Ss][Tt])?)[\\s\\d\\-]*([Bb][Oo][Xx])[\\s\\d\\-]*([Oo][Ff][Ff]([Ii][Cc][Ee])?)))(\\s|$)/,\n    pob_patt = /(^|\\s)(([Pp]([\\.])?[Oo]([\\.])?)(([Bb]([\\.])?(\\s|$))|([Bb]([\\.])?[Oo][Xx])(\\s|$)))/,\n    start_with_po_box_patt = /^(([Pp]([\\.])?[Oo]([\\.])?(([Bb])|([Bb][Oo][Xx]))?)|([Bb][Oo][Xx])|([Oo][Ff][Ff]([Ii][Cc][Ee])?))(\\s|$)/,\n    start_with_post_patt = /^([Pp][Oo][Ss][Tt])[\\s\\d\\-]*/;\n    po_box_with_spaces_periods_dashes = /[Pp](?:[\\s.-]*)[Oo](?:[\\s.-]*)[Bb](?:[\\s.-]*)[Oo](?:[\\s.-]*)[Xx]/\n \n  return po_box_patt.test(address) || box_po_patt.test(address) || post_office_box_patt.test(address) || office_box_patt.test(address) || pob_patt.test(address) || start_with_po_box_patt.test(address) || start_with_post_patt.test(address)\n    || po_box_with_spaces_periods_dashes.test(address)\n};\n\n;\n// --- ooma_email.js ---\n// Use to validate email\nOoma.Email.Validator = function (email) {\n\n    /*\n     * Start validate email\n     * @param {String} email\n     * @return {Boolean} result\n     */\n    // Address formats regexps\n    var regExp = /^(?!.{65})([a-zA-Z0-9_.+-])+\\@(([a-zA-Z0-9-])+\\.)+([a-zA-Z0-9]{2,24})$/i\n        locale= 'us',\n        result = undefined;\n    // Set locale\n    try {\n        locale = LOCALE;\n    } catch (err) { }\n\n    // Email validation\n    if (email) {\n        result = regExp.test(email)\n    }\n\n    return result;\n};\n\n;\n// --- ooma_locality.js ---\n// This validators can be used for canadian locale\n// - city as municipality\n// - state as province\n\n// Use to validate city\nOoma.City.Validator = function (city, locale) {\n  /*\n   * Start validation\n   * @param {String} city\n   * @result {Boolean} result\n   * USAGE\n   * (new City.Validator).start(\"New York\")\n   */\n  // City format regexps\n  var usRegexp = /^[a-zA-Z][a-zA-Z\\.\\']+(?:[\\s-][a-zA-Z\\']+)*$/,\n    caRegexp = /^[a-zA-Z\u00C0-\u0178\u00E0-\u00FF][a-zA-Z\u00C0-\u0178\u00E0-\u00FF\\'\\.]+(?:[\\s-][a-zA-Z\u00C0-\u0178\u00E0-\u00FF\\']+)*$/,\n    locale= locale || 'us',\n    result = undefined;\n  // Set locale\n  try {\n    locale = LOCALE;\n  } catch (err) { }\n\n  // City validation\n  if (city) {\n    // Set regexp by locale\n    if (locale == \"us\") {\n      result = usRegexp.test(city);\n    } else if (locale == \"ca\") {\n      result = caRegexp.test(city);\n    }\n  }\n\n  return result;\n};\n\n// Use to validate state\nOoma.State.Validator = function (state) {\n  /*\n   * Start validation\n   * @param {String} state\n   * @result {Boolean} result\n   * USAGE\n   * (new State.Validator).start(\"NY\")\n   */\n  // State format regexps\n  var stateRegexp = /^[A-Za-z]{2}$/,\n    result = undefined;\n  // State validation\n  if (state) {\n    // Compare state with regexp\n    result = stateRegexp.test(state);\n  }\n\n  return result;\n};\n\nOoma.CityState.Validator = function (cityState, locale) {\n  /*\n   * Start validation\n   * @param {String} state\n   * @result {Boolean} result\n   * USAGE\n   * (new State.Validator).start(\"NY\")\n   */\n  // State format regexps\n  var usRegexp = /^([a-zA-Z\\.]+(?:[\\s-][a-zA-Z]+)*)[\\|]([A-Z]{2})$/,\n    caRegexp = /^([a-zA-Z\u00C0-\u0178\u00E0-\u00FF\\'\\.]+(?:[\\s-][a-zA-Z\u00C0-\u0178\u00E0-\u00FF\\']+)*)[\\|]([A-Z]{2})$/,\n    locale= locale || 'us',\n    result = undefined;\n  // Set locale\n  try {\n    locale = LOCALE;\n  } catch (err) { }\n\n  // State validation\n  if (cityState) {\n    // Set regexp by locale\n    if (locale == \"us\") {\n      result = usRegexp.test(cityState);\n    } else if (locale == \"ca\") {\n      result = caRegexp.test(cityState);\n    }\n  }\n\n  return result;\n};\n\n;\n// --- ooma_person_name.js ---\n// Use to validate first name and last name\nOoma.Name.Validator = function (name, locale) {\n  /*\n   * Start validation\n   * @param {String} name\n   * @result {Boolean} result\n   * USAGE\n   * (new Name.Validator).start(\"Ben\")\n   */\n  // Name format regexps\n  var usRegexp = /^[A-Za-z][A-Za-z\\'\\s\\.\\-]{1,30}$/,\n    caRegexp = /^[^(\\.\\.)][A-Za-z\u00C0-\u0178\u00E0-\u00FF\\'\\d\\s\\.\\-\\/]{1,31}$/,\n    locale = locale || 'us',\n    result = undefined;\n  // Set locale\n  try {\n    locale = LOCALE;\n  } catch (err) { }\n\n  // Name validation\n  if (name) {\n    // Set regexp by locale\n    if (locale == \"us\") {\n      result = usRegexp.test(name);\n    } else if (locale == \"ca\") {\n      result = caRegexp.test(name);\n    }\n  }\n\n  return result;\n};\n\n;\n// --- ooma_company_name.js ---\n// Use to validate company name\nOoma.CompanyName.Validator = function (name, locale) {\n  /*\n   * Start validation\n   * @param {String} name\n   * @result {Boolean} result\n   * USAGE\n   * (new CompanyName.Validator).start(\"Ben company ltd\")\n   */\n  // Company name format regexps\n  var usRegexp = /^[0-9a-zA-Z][0-9a-zA-Z ,.\\'\\s\\&\\-]{1,29}$/,\n    caRegexp = /^[0-9A-Za-z\u00C0-\u0178\u00E0-\u00FF][0-9A-Za-z\u00C0-\u0178\u00E0-\u00FF ,.\\'\\s\\&\\-]{1,29}$/,\n    locale = locale || 'us',\n    result = undefined;\n  // Set locale\n  try {\n    locale = LOCALE;\n  } catch (err) { }\n\n  // Name validation\n  if (name) {\n    // Set regexp by locale\n    if (locale == \"us\") {\n      result = usRegexp.test(name);\n    } else if (locale == \"ca\") {\n      result = caRegexp.test(name);\n    }\n  }\n\n  return result;\n};\n\n;\n// --- ooma_phone.js ---\n// Use to validate phone number\nOoma.Phone.Validator = function (phoneNumber) {\n  /*\n   * Start validation\n   * @param {String} phoneNumber\n   * @result {Boolean} result\n   * USAGE\n   * (new Phone.Validator).start(\"1123456789\")\n   */\n  // Phone format regexps\n  var regexp = /^([+]?1(\\s|-|.|)|)\\(?\\s?[2-9]\\d{2}[(\\s?\\)?\\s?)\\-\\.]{0,3}\\d{3}[\\s\\-\\.]{0,3}\\d{4}$/,\n      result = undefined;\n\n  // Phone validation\n  if (phoneNumber) result = regexp.test(phoneNumber);\n\n  return result;\n};\n\n;\n// --- ooma_zip_codes.js ---\n// This validators can be used for canadian locale\n// - zip as postal code\n\n// Use to validate zip code, postal code.\nOoma.Zip.Validator = function (zip, locale) {\n  /*\n   * Start validation\n   * @param {String} zip\n   * @result {Boolean} result\n   * USAGE\n   * (new Phone.Validator).start(\"12344\")\n   */\n  // Zip format regexps\n  var zipRegexp = /^\\d{5}$/,\n    postalCodeRegexp = /^[ABCEGHJKLMNPRSTVXY][\\d][ABCEGHJKLMNPRSTVWXYZ](\\s?[\\d][ABCEGHJKLMNPRSTVWXYZ][\\d])?$/,\n    locale = locale || 'us',\n    result = undefined;\n\n  // Set locale\n  try {\n    locale = LOCALE;\n  } catch (err) { }\n\n  // Code validation\n  if (zip) {\n    // Set regexp by locale\n    if (locale == \"us\") {\n      result = zipRegexp.test(zip.toUpperCase());\n    } else if (locale == \"ca\") {\n      result = postalCodeRegexp.test(zip.toUpperCase());\n    }\n  }\n\n  return result;\n};\n\n// Use to validate zip4 code\nOoma.Zip4.Validator = function (zip4) {\n  /*\n   * Start validation\n   * @param {String} zip4\n   * @result {Boolean} result\n   * USAGE\n   * (new Phone.Validator).start(\"1234\")\n   */\n  // State format regexps\n  var zip4Regexp = /^\\d{4}$/,\n    locale= 'us',\n    result = undefined;\n  // Set locale\n  try {\n    locale = LOCALE;\n  } catch (err) { }\n\n  // Zip4 validation\n  if (zip4 && locale == \"us\") {\n    // Compare zip4 with regexp\n    result = zip4Regexp.test(zip4);\n  }\n\n  return result;\n};\n\n;\n// --- ooma_cc_cvv.js ---\n// Use to validate credit card number\nOoma.CVV.Validator = function (cvv) {\n  /*\n   * Start validate cvv\n   * @param {String} cvv\n   * @return {Boolean} result\n   * USAGE\n   * (new Ooma.CVV.Validator).start(\"1234\")\n   */\n  // Address formats regexps\n  var regExp = /^[\\d]{3,4}$/,\n    result = undefined;\n\n  // Address validation\n  if (cvv) {\n    // Compare address with regexp\n    result = regExp.test(cvv.toString().replace(/\\s+/g, ''));\n  }\n\n  return result;\n};\n\n;\n// --- ooma_cc_month.js ---\n// Use to validate credit card number\nOoma.CCMonth.Validator = function (month, year) {\n  /*\n   * Start validate month\n   * @param {String} month\n   * @return {Boolean} result\n   * USAGE\n   * (new Ooma.CCMonth.Validator).start(\"09\")\n   */\n  // Month format regexps\n  var regExp = /^(([0]?[1-9]{1})|([1]?[0-2]{1}))$/,\n    todayMonth = (new Date).getMonth() + 1,\n    todayYear = (new Date).getFullYear() - 2000,\n    result = undefined;\n\n  // Address validation\n  if (month) {\n    if (year) {\n      if (parseInt(year) > todayYear) {\n        // Compare address with regexp\n        result = regExp.test(month);\n      } else if (parseInt(year) == todayYear) {\n        result = regExp.test(month) && (month > todayMonth);\n      } else {\n        result = false;\n      }\n    } else {\n      result = false;\n    }\n  }\n\n  return result;\n};\n\n;\n// --- ooma_cc_year.js ---\n// Use to validate credit card number\nOoma.CCYear.Validator = function (year, month) {\n  /*\n   * Start validate year\n   * @param {String} year\n   * @return {Boolean} result\n   * USAGE\n   * (new Ooma.CCYear.Validator).start(\"1234\")\n   */\n  // Address formats regexps\n  //var regExp      = /^20(([1][5-9])|([2-9]{1}[\\d]{1}))$/;\n  var regExp = /^(([1][5-9])|([2-9]{1}[\\d]{1}))$/,\n    todayYear = (new Date).getFullYear() - 2000,\n    todayMonth = (new Date).getMonth() + 1,\n    result = undefined;\n\n  // Address validation\n  if (year) {\n    if (month) {\n      if (parseInt(year) > todayYear) {\n        // Compare address with regexp\n        result = regExp.test(year);\n      } else if (parseInt(year) == todayYear) {\n        result = regExp.test(year) && (month > todayMonth);\n      } else {\n        result = false;\n      }\n    } else {\n      result = false;\n    }\n  }\n\n  return result;\n};\n\nOoma.CCDate.Validator = function (validator) {\n  // Values\n  var monthValue = $(\"#month\").val(),\n      yearValue = $(\"#year\").val(),\n      \n      monthRegex = /^(([0]?[1-9]{1})|([1]?[0-2]{1}))$/,\n      yearRegex = /^(([1][5-9])|([2-9]{1}[\\d]{1}))$/;\n  \n  // Match values with regexps\n  var validMonthMatchRegex = monthRegex.test(monthValue),\n      validYearMatchRegex = yearRegex.test(yearValue);\n\n  // ======================= Validation =======================\n\n  if ( (monthValue == \"\") && (yearValue == \"\") ) {\n    return undefined;\n  } else if ( ( (monthValue == \"\") && (yearValue != \"\") ) || ( (yearValue == \"\") && (monthValue != \"\") ) ) {\n    var finishedMonth = $(\"#month\").hasClass('fn'),\n        finishedYear  = $(\"#year\").hasClass('fn');\n\n    if (validator == \"cardDate\") {\n      if (monthValue != \"\") {\n        if (!validMonthMatchRegex) return false;\n\n        if (!finishedMonth) { \n          $(\"#month\").addClass('fn');\n\n          return 'not finished';\n        } else {\n          if (!finishedYear) {\n            return 'not finished';\n          } else {\n            return validMonthMatchRegex && validYearMatchRegex;\n          }\n        }\n      } else {\n        return undefined;\n      }\n    } else { // validator == \"cardDateYear\"\n      if (yearValue != \"\") {\n        if (!validYearMatchRegex) return false;\n        debugger\n        if (!finishedYear) { \n          $(\"#year\").addClass('fn');\n\n          return 'not finished';\n        } else {\n          if (!finishedMonth) {\n            return 'not finished';\n          } else {\n            return validMonthMatchRegex && validYearMatchRegex;\n          }\n        }\n      } else {\n        return undefined;\n      }\n    }\n  } else {\n    if (validMonthMatchRegex && validMonthMatchRegex) {\n      $(\"#month, #year\").addClass('fn');\n\n      var validMonth = Ooma.CCMonth.Validator(monthValue, yearValue),\n          validYear = Ooma.CCYear.Validator(yearValue, monthValue);\n\n      return validMonth && validYear;\n    } else {\n      return false;\n    }\n  }\n};\n;\n// --- ooma_cc_number.js ---\n// Use to validate credit card number\nOoma.CCNumber.Validator = function (ccnum) {\n  /*\n   * Start validate number\n   * @param {String} number\n   * @return {Boolean} result\n   * USAGE\n   * Ooma.CCNumber.Validator(\"4444123412344321\")\n   */\n\n  if ((typeof(ccnum) != \"undefined\") && (ccnum != \"\")) {\n    ccnum = ccnum.toString().replace(/[\\s+\\,\\-]/g, '');\n    var length = ccnum.length,\n        result = correctCardType(ccnum);\n\n    if (result == \"no_valid_card_ca\") {\n      return \"no_valid_card_ca\";\n    } else if (result) {\n      var checksum = 0;\n      var digit = 0;\n      var factor = (length % 2) ? 1 : 2;\n\n      for (var i = 0; i < length; i++) {\n        digit = ccnum.charAt(i);\n        if (digit * factor > 9) {\n          checksum += (digit * factor) - 9;\n        } else {\n          checksum += digit * factor;\n        }\n        factor = (factor % 2) + 1;\n      }\n      if (!((checksum % 10) == 0)) return false;\n      else return true;\n    } else {\n      return false;\n    }\n  } else {\n    return undefined;\n  }\n\n  function correctCardType(number) {\n    var americanExpress = (length == 15) && (/^(34|37)/).test(number),\n      masterCard = (length == 16) && (/^5[1-5]/).test(number),\n      visa = (length == 13 || length == 16) && (/^4/).test(number),\n      discover = (length == 16) && (/^6([045]|22)/).test(number),\n      locale = 'us';\n    // Set locale\n    try {\n      locale = LOCALE;\n    } catch (err) { }\n\n    switch(locale) {\n      case \"us\" : \n        return americanExpress || visa || masterCard || discover;\n      case \"ca\" :\n        if (discover)\n          return \"no_valid_card_ca\";\n        else\n          return (visa || masterCard || americanExpress);\n      default:\n        return \"wrong locale\"\n    }\n  }\n};\n\n;\n\n\n// Application-specific vendor libraries\n// --- vault.js ---\n/*\n * Javascript File for OOMA VAULT API\n * Methods to communicate between vault system and caller or vice versa.*\n */\n\nvar Vault = (function () {\n  var responseData\n    , callback;\n\n  var handle = function (e) {\n    console.log(\"Inside Eventer\");\n    processData(e.data);\n\n    // This should be at the end of the block\n    // Below line is changed to avoid the parsing the data which is already in JSON\n    // Vault currently is sending a response json in string format. We should request them to send it in json.\n    // If they cannot send it in JSON, we have to use the below commented line and update simulator to send json string.\n    // callback && callback(JSON.parse(e.data));\n    callback && callback(e.data);\n  };\n\n  /**\n   **\n   * Initializes Vault\n   * @param {String} vaultMainContentId - `id` of the tag in which iFrame should to be embedded.\n   * @param {String} url - Vault Request URL\n   * @callback [_callback] - This is the callback function which is implemented after the user submitted/saved the Credit Card Information\n   **\n   */\n  var init = function(vaultMainContentId, url, _callback) {\n    console.log(url);\n    callback = _callback;\n\n    prepareVaultFrame(url, vaultMainContentId);\n\n    var eventMethod = window.addEventListener ? \"addEventListener\" : \"attachEvent\";\n    var eventer = window[eventMethod];\n    var messageEvent = eventMethod == \"attachEvent\" ? \"onmessage\" : \"message\";\n\n    // Listen to message from child IFrame window\n    eventer(messageEvent, handle, false);\n  };\n\n  var prepareVaultFrame = function(url, vaultMainContentId) {\n    var vaultFrame = document.createElement(\"iframe\");\n    vaultFrame.setAttribute(\"src\", url);\n    vaultFrame.style.width = \"100%\";\n    vaultFrame.style.height = \"100%\";\n    vaultFrame.style.overflow = \"hidden\";\n    vaultFrame.frameBorder=0;\n    vaultFrame.id = \"vaultFrame\";\n    var divElem = document.getElementById(vaultMainContentId);\n    divElem.innerHTML = \"\";\n    divElem.appendChild(vaultFrame);\n  };\n\n  var processData = function(response){\n    responseData = response;\n  };\n\n  var getResponseData = function() {\n    return responseData;\n  };\n\n  return {\n    init: init,\n    prepareVaultFrame: prepareVaultFrame,\n    getResponseData: getResponseData\n  };\n})();\n\n;\n// --- chasePayment.js ---\n/*\n * Javascript File for OOMA Chase API\n * Methods to communicate between vault system and caller or vice versa.*\n */\n\nvar ChasePayment = (function () {\n  var responseData\n    , callback;\n\n  var addCallbackFn = function() {\n    window.startPayment = function () {\n      //TODO Start the loader\n      console.log(\"Payment Started\");\n    };\n\n    window.handlePaymentErrors = function (data) {\n      var errorMap = new Map();\n      errorMap.set('000', window.I18n.chase_cc_added);\n      errorMap.set('100', window.I18n.chase_generic_error);\n      errorMap.set('110', window.I18n.chase_generic_error);\n      errorMap.set('200', window.I18n.chase_generic_error);\n      errorMap.set('300', window.I18n.chase_generic_error);\n      errorMap.set('310', window.I18n.chase_verify_card_num_details);\n      errorMap.set('315', window.I18n.chase_verify_card_num_details);\n      errorMap.set('320', window.I18n.chase_generic_error);\n      errorMap.set('330', window.I18n.chase_verify_exp_date);\n      errorMap.set('340', window.I18n.chase_verify_exp_date);\n      errorMap.set('350', window.I18n.chase_verify_cvv_date);\n      errorMap.set('355', window.I18n.chase_verify_cvv_date);\n      errorMap.set('357', window.I18n.chase_verify_card_details);\n      errorMap.set('360', window.I18n.chase_payment_declined_by_bank);\n      errorMap.set('370', window.I18n.chase_verify_exp_date);\n      errorMap.set('380', window.I18n.chase_complete_challenge);\n      errorMap.set('400', window.I18n.chase_generic_error);\n      errorMap.set('500', window.I18n.chase_generic_error);\n      errorMap.set('510', window.I18n.chase_enter_city);\n      errorMap.set('520', window.I18n.chase_enter_state);\n      errorMap.set('530', window.I18n.chase_enter_zip_code);\n      errorMap.set('531', window.I18n.chase_enter_zip_code);\n      errorMap.set('550', window.I18n.chase_generic_error);\n      errorMap.set('600', window.I18n.chase_generic_error);\n      errorMap.set('610', window.I18n.chase_generic_error);\n      errorMap.set('620', window.I18n.chase_generic_error);\n      errorMap.set('630', window.I18n.chase_generic_error);\n      errorMap.set('640', window.I18n.chase_generic_error);\n      //TODO error code handling as per myooma2\n      var errorCodes = decodeURIComponent(Object.values(data)).split(',');\n      var errorMessage = errorMap.get(errorCodes[0]);\n      //For now default alert\n      var response = {\n        type: \"error\",\n        code: errorCodes[0],\n        message: errorMessage\n      }\n      if(callback) {\n        callback(response)\n      } \n      else { \n        window.alert(errorMessage);\n      }\n    };\n\n    window.completePayment = function (data) {\n      processData(data);\n      callback && callback({ type: \"success\", data: { uid: data.uID, gateway_type: 'chase', cust_type: 'buyer'}});\n    };\n    window.hpfReady = function () {\n      //TODO stop loader\n      console.log(\"Chase is ready\");\n    };\n  }\n\n  /**\n   **\n   * Initializes Vault\n   * @param {String} vaultMainContentId - `id` of the tag in which iFrame should to be embedded.\n   * @param {String} url - Vault Request URL\n   * @callback [_callback] - This is the callback function which is implemented after the user submitted/saved the Credit Card Information\n   **\n   */\n  var init = function(data, _callback) {\n    callback = _callback;\n    vaultMainContentId = data.id;\n    prepareVaultFrame(data.hostedPayment, vaultMainContentId);\n    addCallbackFn();\n  };\n\n  var prepareVaultFrame = function(data, vaultMainContentId) {\n    renderIframe(data.url, vaultMainContentId);\n    if(!document.getElementById(\"chasePaymentScriptId\")) {\n      //We can make direct include, TODO ask Mahesh\n      var script = document.createElement('script');\n      script.src = data.js_url;\n      script.async = true;\n      script.id = \"chasePaymentScriptId\";\n      document.body.appendChild(script);\n    }\n  };\n\n  var removeChase = function(vaultMainContentId) {\n    var iframeObj = document.getElementById(\"vaultFrame\");\n    if(iframeObj) {\n      var divEle = document.getElementById(vaultMainContentId);\n      divEle.removeChild(iframeObj);\n      divEle.innerHTML = \"\";\n    }\n    var scriptObj = document.getElementById(\"chasePaymentScriptId\");\n    if(scriptObj) {\n      document.body.removeChild(scriptObj);\n    }\n    window['startPayment'] = null;\n    window['handlePaymentErrors'] = null;\n    window['completePayment'] = null;\n    window['hpfReady'] = null;\n  }\n\n  var renderIframe = function(url, vaultMainContentId) {\n    var vaultFrame = document.createElement(\"iframe\");\n    vaultFrame.setAttribute(\"src\", url);\n    vaultFrame.style.width = \"100%\";\n    vaultFrame.style.height = \"100%\";\n    vaultFrame.style.overflow = \"hidden\";\n    vaultFrame.frameBorder=0;\n    vaultFrame.scrolling=\"no\";\n    vaultFrame.id = \"vaultFrame\";\n    var divElem = document.getElementById(vaultMainContentId);\n    divElem.innerHTML = \"\";\n    divElem.appendChild(vaultFrame);\n  }\n\n  var processData = function(response){\n    responseData = response;\n  };\n\n  var getResponseData = function() {\n    return responseData;\n  };\n\n  return {\n    init: init,\n    prepareVaultFrame: prepareVaultFrame,\n    getResponseData: getResponseData,\n    removeChase: removeChase\n  };\n})();\n\n;\n// --- cybersource.js ---\n/*\n * Javascript File for OOMA Cybersource API\n * Methods to communicate between vault system and caller or vice versa.*\n */\n\nvar CyberSource = (function () {\n  var callback,\n    hostedPayment;\n  \n  var formId = \"payform\";\n  var parentDivId = \"cybersourceVault\";\n  var iframeId = \"secureFrame\";\n\n  /**\n   **\n   * Initializes Vault\n   * @param {String} vaultMainContentId - `id` of the tag in which iFrame should to be embedded.\n   * @param {String} url - Vault Request URL\n   * @callback [_callback] - This is the callback function which is implemented after the user submitted/saved the Credit Card Information\n   **\n   */\n  var init = function(vaultMainContentId, _hostedPayment, _callback) {\n    callback = _callback;\n    hostedPayment = _hostedPayment;\n    prepareVaultFrame(vaultMainContentId);\n    submitForm();\n  };\n\n  var prepareForm = function() {\n    var form = document.createElement(\"form\");\n    form.setAttribute(\"method\", \"post\");\n    form.setAttribute(\"id\", formId);\n    form.setAttribute(\"bane\", formId);\n    form.setAttribute(\"action\", hostedPayment.url);\n    form.setAttribute(\"target\", \"secureFrame\");\n    return form;\n  };\n  \n  var prepareHiddenInput = function(id, value) {\n    var inputEle = document.createElement(\"input\");\n    inputEle.setAttribute(\"type\", \"hidden\");\n    inputEle.setAttribute(\"id\", id);\n    inputEle.setAttribute(\"name\", id);\n    inputEle.setAttribute(\"value\", value);\n    return inputEle;\n  }\n\n  var prepareIframe = function() {\n    var vaultFrame = document.createElement(\"iframe\");\n    vaultFrame.setAttribute(\"src\", \"about:blank\");\n    vaultFrame.style.width = \"100%\";\n    vaultFrame.style.height = \"100%\";\n    vaultFrame.style.overflow = \"hidden\";\n    vaultFrame.frameBorder=0;\n    vaultFrame.id = iframeId;\n    vaultFrame.setAttribute(\"name\", iframeId);\n    return vaultFrame;\n  }\n\n  var errorMap = new Map();\n  errorMap.set(\"400\", \"hosted_payment_bad_request\");\n  errorMap.set(\"401\", \"hosted_payment_not_authorized\");\n  errorMap.set(\"404\", \"hosted_payment_not_found\");\n  errorMap.set(\"500\", \"hosted_payment_server_error\");\n  errorMap.set(\"201\", \"hosted_payment_added_succesfully\");\n\n  var cybsResponseFunctions = {\n    'handleCybsSuccessResponse': function (msg) {\n      var jsonObj = JSON.parse(msg);\n      callback({ type: \"success\", message: errorMap.has(jsonObj.code) ? window.I18n[errorMap.get(jsonObj.code)] : jsonObj.msg }); \n    },\n    'handleCybsErrorResponse': function (msg) {\n      var jsonObj = JSON.parse(msg);\n      callback({ type: \"error\", message: errorMap.has(jsonObj.code) ? window.I18n[errorMap.get(jsonObj.code)] : jsonObj.msg }); \n    },\n  }\n  var eventListner = function (event) {\n    if (cybsResponseFunctions[event.data.func]) {\n        cybsResponseFunctions[event.data.func](event.data.message);\n    }\n  };\n\n  var prepareVaultFrame = function(vaultMainContentId) {\n    var parentDiv = document.createElement(\"div\");\n    parentDiv.setAttribute(\"id\", parentDivId);\n    parentDiv.style.height = \"100%\";\n    var form = prepareForm();\n    Object.keys(hostedPayment).forEach(key => {\n      form.appendChild(prepareHiddenInput(key, hostedPayment[key]));\n    });\n    parentDiv.appendChild(form);\n    parentDiv.appendChild(prepareIframe());\n    var divElem = document.getElementById(vaultMainContentId);\n    divElem.innerHTML = \"\";\n    divElem.appendChild(parentDiv);\n    window.addEventListener('message', eventListner);\n  };\n\n  var submitForm = function() {\n    document.forms[formId].submit();\n  }\n\n  var removeCyberSource = function(vaultMainContentId) {\n    var divElem = document.getElementById(vaultMainContentId);\n    var iframeObj = document.getElementById(parentDivId);\n    if(iframeObj) {\n      divElem.removeChild(iframeObj);\n    }\n    divElem.innerHTML = \"\";\n    window.removeEventListener('message', eventListner);\n  }\n\n  return {\n    init: init,\n    prepareVaultFrame: prepareVaultFrame,\n    removeCyberSource: removeCyberSource\n  };\n})();\n\n;\n// --- fiserv.js ---\n//= require mustache.min.js\n\n/*\n * Javascript File for OOMA Fiserv API\n */\n\nvar Fiserv = (function () {\n  var callback,\n      hostedPayment,\n      template;\n\n  var formId = \"payform\";\n  var parentDivId = \"fiservVault\";\n  var iframeId = \"secureFrame\";\n  const FISERV = \"fiserv\";\n\n  var init = function(vaultMainContentId, _hostedPayment, _callback) {\n    callback = _callback;\n    hostedPayment = _hostedPayment;\n\n    template = Mustache.render(hostedPayment.hosted_file, {\n      locale: {\n        submitBtn: I18n[FISERV]['add_card'],\n        postalCodeLbl: I18n[FISERV]['postal_code'],\n        cardHolderLbl: I18n[FISERV]['card_holder'],\n        cvvLbl: I18n[FISERV]['cvv']\n      },\n    });\n\n    prepareVaultFrame(vaultMainContentId);\n    addCssPathToIframe();\n  };\n\n  var addCssPathToIframe = function() {\n    const iframe = document.getElementById('secureFrame');\n\n    function sendMessageToIframe() {\n      const message = {\n        type: 'updateContent',\n        content: {\n          cssURL: hostedPayment.css_url\n        }\n      };\n      // Send the message to the iframe (cross-origin, so specify the target origin here if needed)\n      iframe.contentWindow.postMessage(message, '*');\n    }\n\n    function checkIframeReadiness() {\n      if (iframe.contentDocument && iframe.contentDocument.readyState === 'complete') {\n        sendMessageToIframe();\n      } else {\n        console.log('Iframe is not ready yet, retrying...');\n        setTimeout(checkIframeReadiness, 100);\n      }\n    }\n    iframe.srcdoc = template;\n    iframe.onload = function() {\n      checkIframeReadiness();\n    };\n  };\n\n  var errorMap = new Map([\n    [\"0001\",\"please_enter_card_holder_name\"],\n    [\"0002\",\"please_enter_card_details\"],\n    [\"0003\",\"please_enter_postal_code\"],\n    [\"0005\",\"please_verify_postal_code\"],\n    [\"1001\",\"please_verify_your_card_details\"],\n    [\"1002\",\"please_verify_cvv_details\"],\n    [\"1003\",\"invalid_expiry\"],\n    [\"1004\",\"credit_card_number_is_required\"],\n    [\"1005\",\"please_enter_cvv_details\"],\n    [\"1006\",\"please_enter_expiry\"],\n  ]);\n\n  function getErrorMessage(code) {\n    return errorMap.has(code) \n      ? I18n[FISERV][errorMap.get(code)]\n      : \"An error has occurred. Please verify the details and try again.\";\n  }\n\n  var fiservResponseFunctions = {\n    'handleFiservSuccess': function (data) {\n      if (!data) {\n        return;\n      }\n      try {\n        let mopData = JSON.parse(data);\n        callback({\n          type: \"success\",\n          data: {\n            gateway_type: FISERV,\n            acctHolderName: mopData.cardHolderName,\n            customerPk: mopData.customerpk,\n            acctNumber: mopData.accoutNumber,\n            expMonth: mopData.expMon,\n            expYear: mopData.expYr,\n            securityCode: mopData.cvv,\n            zip: mopData.zip,\n            mopType: mopData.mopType\n          }\n        });\n      } catch (error) {\n        console.error('Failed to parse JSON in handleFiservSuccess:', error);\n      }\n    },\n    'handleFiservError': function (data) {\n      if (!data) {\n        return;\n      }\n      try {\n        let mopData = JSON.parse(data);\n        console.log('Error handler called with data:', mopData);\n        if (mopData.code === '0004') {\n          document.getElementById(iframeId).contentWindow.location.reload();\n        } else {\n          callback({\n            type: \"error\",\n            message: getErrorMessage(mopData.code),\n          });\n        }\n      } catch (error) {\n        console.error('Failed to parse JSON in handleFiservSuccess:', error);\n      }\n    },\n  }\n\n  function messageHandler(event) {\n    if (fiservResponseFunctions[event.data.func]) {\n      // Call the function and pass the variable as an argument\n      fiservResponseFunctions[event.data.func](event.data.message);\n    }\n  }\n  window.addEventListener('message', messageHandler);\n\n  var prepareVaultFrame = function(vaultMainContentId) {\n    var iframe = prepareIframe();\n    var parentDiv = document.createElement(\"div\");\n    parentDiv.setAttribute(\"id\", parentDivId);\n    parentDiv.style.height = \"100%\";\n    parentDiv.style.width = \"100%\";\n    parentDiv.appendChild(iframe);\n    var divElem = document.getElementById(vaultMainContentId);\n    divElem.innerHTML = \"\";\n    divElem.appendChild(parentDiv);\n    window.addEventListener('message', messageHandler);\n  };\n\n  var prepareIframe = function() {\n    var vaultFrame = document.createElement(\"iframe\");\n    vaultFrame.setAttribute(\"srcdoc\", template);\n    vaultFrame.style.width = \"100%\";\n    vaultFrame.style.height = \"100%\";\n    vaultFrame.style.overflow = \"hidden\";\n    vaultFrame.frameBorder = 0;\n    vaultFrame.id = iframeId;\n    vaultFrame.setAttribute(\"name\", iframeId);\n    return vaultFrame;\n  }\n\n  var sendAddCardResponseMessageToIframe = function (msg) {\n    var iframeElem = document.getElementById(iframeId);\n    var message = {\n      type: 'addCardResponse',\n      content: msg\n    };\n    iframeElem.contentWindow.postMessage(message, '*');\n  }\n\n  var removeFiserv = function(vaultMainContentId) {\n    var divElem = document.getElementById(vaultMainContentId);\n    var iframeObj = document.getElementById(parentDivId);\n    if(iframeObj) {\n      divElem.removeChild(iframeObj);\n    }\n    divElem.innerHTML = \"\";\n    window.removeEventListener('message', messageHandler);\n  }\n\n  return {\n    init: init,\n    prepareVaultFrame: prepareVaultFrame,\n    removeFiserv: removeFiserv,\n    sendAddCardResponseMessageToIframe: sendAddCardResponseMessageToIframe\n  };\n})();\n\n;\n// --- js-cookie.js ---\n/*! js-cookie v3.0.5 | MIT */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){\"use strict\";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}var t=function t(n,o){function r(t,r,i){if(\"undefined\"!=typeof document){\"number\"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var c=\"\";for(var u in i)i[u]&&(c+=\"; \"+u,!0!==i[u]&&(c+=\"=\"+i[u].split(\";\")[0]));return document.cookie=t+\"=\"+n.write(r,t)+c}}return Object.create({set:r,get:function(e){if(\"undefined\"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split(\"; \"):[],o={},r=0;r<t.length;r++){var i=t[r].split(\"=\"),c=i.slice(1).join(\"=\");try{var u=decodeURIComponent(i[0]);if(o[u]=n.read(c,u),e===u)break}catch(e){}}return e?o[e]:o}},remove:function(t,n){r(t,\"\",e({},n,{expires:-1}))},withAttributes:function(n){return t(this.converter,e({},this.attributes,n))},withConverter:function(n){return t(e({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(n)}})}({read:function(e){return'\"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:\"/\"});return t}));\n\n;\n\n// App JS\n// --- google_tag_manager.js ---\n// Virtual Pageview for Google Tag Manager\nfunction gtmVirtualPageview(url, title){\n    dataLayer.push({\n      'event':'VirtualPageview',\n      'virtualPageURL' : url,\n      'virtualPageTitle' : title\n    });\n};\n\n;\n// --- tracker.js ---\nvar Tracker = new function() {\n\n  var self = this,\n      trackingData = {};\n\n  self.sendData = function(params){\n    var params = params || {};\n    $.ajax({\n      headers: null,\n      url: window.__APP_CONFIG__.trackingUrl + '/v1/pixel',\n      data: getData(params),\n      success: function(){\n        if (params['destroy_data']) destroyData();\n      }\n    });\n  };\n\n  self.getTrackingData = function(){\n    var trackingInfo = {},\n        keys = ['affiliate', 'google', 'marketo', 'offer', 'sfdc', 'web', 'xyz'],\n        data = getData({page: location.href});\n\n    $.each(keys, function(_k, v){\n      if (data[v]) trackingInfo[v] = data[v];\n    });\n\n    return trackingInfo;\n  };\n\n  var getData = function(params){\n    var data = trackingData;\n\n    if (data['web']) {\n      data['web']['url']  = window.location.href;\n      data['web']['page'] = params['page'];\n    }\n\n    if (typeof(ga) == 'function' && data['google']){\n      ga(function() {\n        data['google']['clientId'] = ga.getAll()[0].get('clientId');\n      });\n    }\n    return data;\n  };\n\n  self.setData = function(data){\n    setWebData(data);\n    setOfferData(data);\n    setCustomerData(data);\n    setGoogleData(data);\n    setXYZData(data);\n    setMarketoData(data);\n    setSfdcData(data);\n    setAffiliateData(data);\n    setDataToStorage();\n  };\n\n  var setDataToStorage = function(){\n    if (typeof(localStorage) != 'undefined') {\n      var web_data = trackingData['web'] || {};\n      var data = {\n        tracking_session_id: web_data['tracking_session_id'],\n        google:              trackingData['google'],\n        sfdc:                trackingData['sfdc'],\n        affiliate:           trackingData['affiliate'],\n        xyz:                 trackingData['xyz']\n      };\n      localStorage['tracking'] = JSON.stringify(data);\n    }\n  };\n\n  var getDataFromStorage = function(){\n    if (typeof(localStorage) != 'undefined' && localStorage['tracking']){\n      return JSON.parse(localStorage['tracking']);\n    } else {\n      return {};\n    }\n  };\n\n  var destroyData = function(){\n    trackingData = {};\n    if (typeof(localStorage) != 'undefined') localStorage.removeItem('tracking');\n  };\n\n  var setWebData = function(data){\n    var web_data = data['web'] || {};\n    web_data['tracking_session_id'] = getDataFromStorage()['tracking_session_id'] || generateId();\n    trackingData['web'] = web_data;\n  };\n\n  var setOfferData = function(data){\n    trackingData['offer'] = data['offer'] || {};\n  };\n\n  var setCustomerData = function(data){\n    self.setCustomerData(data);  \n  }\n\n  self.setCustomerData = function(data){\n    var customer_data   = data['customer'] || {};\n    var customer_params = trackingData['customer'] || {};\n    if (customer_data['first_name']) customer_params['first_name']                 = customer_data['first_name'];\n    if (customer_data['last_name']) customer_params['last_name']                   = customer_data['last_name'];\n    if (customer_data['email']) customer_params['email_address']                   = customer_data['email'];\n    if (customer_data['phone']) customer_params['contact_number']                  = customer_data['phone'];\n    if (customer_data['street_address']) customer_params['company_street_address'] = customer_data['street_address'];\n    if (customer_data['city']) customer_params['company_city']                     = customer_data['city'];\n    if (customer_data['state']) customer_params['company_state']                   = customer_data['state'];\n    if (customer_data['zip']) customer_params['company_zip']                       = customer_data['zip'];\n    trackingData['customer'] = customer_params;\n  };\n\n  var setGoogleData = function(data){\n    var google_data   = data['google'] || {};\n    var storage_data  = getDataFromStorage()['google'] || {};\n    var google_params = {};\n\n    if (google_data['campaign']) google_params['campaign'] = google_data['campaign'];\n    if (google_data['medium'])   google_params['medium']   = google_data['medium'];\n    if (google_data['source'])   google_params['source']   = google_data['source'];\n    if (google_data['content'])  google_params['content']  = google_data['content'];\n    if (google_data['term'])     google_params['term']     = google_data['term'];\n    if (google_data['gclid'])    google_params['gclid']    = google_data['gclid'];\n    $.extend(storage_data, google_params);\n    trackingData['google'] = storage_data;\n  };\n\n  var setXYZData = function(data){\n    var xyz_data     = data['xyz'] || {};\n    var storage_data  = getDataFromStorage()['xyz'] || {};\n    var xyz_params = {};\n\n    if (xyz_data['offer'])         xyz_params['offer']         = xyz_data['offer'];\n    if (xyz_data['purchase_code']) xyz_params['purchase_code'] = xyz_data['purchase_code'];\n    if (xyz_data['utm_source'])    xyz_params['utm_source']    = xyz_data['utm_source'];\n    if (xyz_data['utm_campaign'])  xyz_params['utm_campaign']  = xyz_data['utm_campaign'];\n    if (xyz_data['utm_medium'])    xyz_params['utm_medium']    = xyz_data['utm_medium'];\n    if (xyz_data['utm_term'])      xyz_params['utm_term']      = xyz_data['utm_term'];\n    if (xyz_data['om_phone'])      xyz_params['om_phone']      = xyz_data['om_phone'];\n    if (xyz_data['referrer'])      xyz_params['referrer']      = xyz_data['referrer'];\n    if (xyz_data['page_url'])      xyz_params['page_url']      = xyz_data['page_url'];\n    if (xyz_data['gclid'])         xyz_params['gclid']         = xyz_data['gclid'];\n    if (xyz_data['mclid'])         xyz_params['mclid']         = xyz_data['mclid'];\n    if (xyz_data['first_page_url']) xyz_params['first_page_url'] = xyz_data['first_page_url'];\n    if (xyz_data['cdate'])         xyz_params['cdate']         = xyz_data['cdate'];\n\n    $.extend(storage_data, xyz_params);\n    trackingData['xyz'] = storage_data;\n  };\n\n  var setSfdcData = function(data){\n    var sfdc_data     = data['sfdc'] || {};\n    var storage_data  = getDataFromStorage()['sfdc'] || {};\n\n    $.extend(storage_data, sfdc_data);\n    trackingData['sfdc'] = storage_data;\n  };\n\n  var setAffiliateData = function(data){\n    var affiliate_data = data['affiliate'] || {};\n    var storage_data   = getDataFromStorage()['affiliate'] || {};\n    $.extend(storage_data, affiliate_data);\n    trackingData['affiliate'] = storage_data;\n  };\n\n  var setMarketoData = function(data){\n    var marketo_data = data['marketo'] || {};\n    if (marketo_data['mkto_trk']) trackingData['marketo'] = marketo_data;\n  };\n\n  var generateId = function(){\n    var id = '';\n    var chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n    for(var i=0; i < 32; i++){\n      id += chars.charAt(Math.floor(Math.random() * chars.length));\n    }\n    return id;\n  };\n};\n\n;\n// --- vwo.js ---\nfunction vwoEvent(event, desc) {\n  if (window.__APP_CONFIG__.railsEnv === 'production') {\n    if (typeof VWO !== 'undefined') {\n      VWO.event(event, {\"description\": desc});\n      console.log(event + ' added successfully');\n    } else {\n      console.log('VWO: ' + window.__APP_CONFIG__.railsEnv);\n    }\n  }\n};\n\n;\n// --- social.js ---\n$(document).on('click', '.facebook_message_submit', function() {\n  var facebook_message = $('.facebook_message').val()\n  $(\"#facebook-share-icon\").popover('hide');\n  FB.login(function(){\n    FB.api('/me/feed', 'post', { message: facebook_message },\n      function(response) {\n        if (!response || response.error) {\n          showNotification('danger', I18n.share_on.facebook.error, '#confirm-message', $('.confirm'))\n        } \n        else {\n          showNotification('success', I18n.share_on.facebook.success, '#confirm-message', $('.confirm'))\n        }\n      }\n    );\n  }, {scope: 'publish_actions'});\n  return false;\n});\n\n$(document).on('click', 'button.close', function() {\n  $(\".facebook-popover-title\").popover('hide');\n});\n;\n// --- google_address_autocomplete.js ---\nvar GoogleAddressAutocomplete = {}\n\nGoogleAddressAutocomplete.Initialize = function() {\n  var autocomplete;\n  try {\n    autocomplete = new google.maps.places.Autocomplete(\n    (document.getElementById('street_address')),\n    { types: ['geocode'] }\n    );\n    autocomplete.addListener('place_changed', fillInDefaults);\n  } \n  catch(e) { \n    autocomplete = {};\n  }\n\n  var self = this;\n  var defaults = {\n    street_number: {\n      name: 'short_name',\n      value: \"\"\n    },\n    route: {\n      name: 'long_name',\n      value: \"\"\n    },\n    locality: {\n      name: 'long_name',\n      value: \"\"\n    },\n    administrative_area_level_1: {\n      name: 'short_name',\n      value: \"\"\n    },\n    postal_code: {\n      name:'short_name',\n      value: \"\"\n    }\n  };\n\n  this.setCityStateDefault = function(cities) {\n    $(\"#city\").val(cities[0].city).change();\n    $(\"#state\").val(cities[0].state).change();\n  };\n  this.setCityState = this.setCityStateDefault;\n  this.emptyCityState = this.setCityStateDefault;\n\n  function fillInForm(){\n    var cities = [{ \n      city: defaults.locality.value,\n      state: defaults.administrative_area_level_1.value\n    }];\n    $(\"#street_address\").val(defaults.street_number.value + \" \" + defaults.route.value).change();\n    if ($(\"#street_address\").val().length) $(\"#street_address\").valid();\n    $(\"#zip\").val(defaults.postal_code.value).change();\n    if (cities[0].city.length && cities[0].state.length) self.setCityState(cities);\n    else self.emptyCityState(cities);\n  }\n\n  function fillInDefaults() {\n    var place = autocomplete.getPlace();\n    if (place.address_components && place.address_components.length) {\n      for (var component in defaults) { \n        defaults[component].value = '';\n      }\n      for (var i = 0; i < place.address_components.length; i++) {\n        var addressType = place.address_components[i].types[0];\n        if (defaults[addressType]) defaults[addressType].value = place.address_components[i][defaults[addressType].name];\n      }\n      fillInForm();\n    }\n  }\n\n  function geolocate() {\n    if (navigator.geolocation) {\n      navigator.geolocation.getCurrentPosition(function(position) {\n        var geolocation = {\n          lat: position.coords.latitude,\n          lng: position.coords.longitude\n        };\n        var circle = new google.maps.Circle({\n          center: geolocation,\n          radius: position.coords.accuracy\n        });\n        autocomplete.setBounds(circle.getBounds());\n      });\n    }\n  }\n\n  $(document).on('focus', '#street_address', function() {\n    if (!$.isEmptyObject(autocomplete)) geolocate();\n  });\n};\n;\n// --- offers_discount.js ---\nconst EXCEED_CART_VALUE = 150.00;\n\nfunction listOffersDiscount() {\n  return ['OOMA_HOME_BASE', 'OOMA_HOME_BASE_CA'];\n}\n\nfunction offersDiscount() {\n  return {\n    \"ooma_home_base\": {\n      \"discount_0\": '99.99', \"discount_20\": '79.99', \"discount_50\": '49.99', \"discount_100\": '0.0'\n    },\n    \"ooma_home_base_ca\": {\n      \"discount_0\": '129.99', \"discount_20\": '109.99', \"discount_50\": '79.99', \"discount_100\": '29.99'\n    }\n  }\n}\n\nfunction getAccessoriesTotal($cart) {\n  var costAccessories = 0.0, price, qty;\n  var countryRegex = is_canadian_env() ? /CAD \\$/g : /\\$/g;\n  $cart.find('table.shopping-cart tr').each(function() {\n   if ($(this).data('add_accessory') == true) {\n     price = parseFloat($(this).data('price').replace(countryRegex, ''));\n     qty = parseInt($(this).find('.quantity').val());\n     costAccessories += price*qty;\n   }\n  });\n  return costAccessories.toFixed(2);\n}\n\nfunction teloDiscountForLargeOrder() {\n  var $cart = $('.cart');\n  var element = $cart.find('table.shopping-cart tr:first');\n  var discountOffers = offersDiscount();\n  var offer = element.data('type').toLowerCase(), originalPrice = discountOffers[offer].discount_0;\n  var subTotal = (parseFloat(getAccessoriesTotal($cart)) + parseFloat(originalPrice)).toFixed(2);\n  var localPrice = 0.0, cartValue = [150.00, 200.00, 300.00];\n\n  if (subTotal > parseFloat(cartValue[0]) && subTotal <= parseFloat(cartValue[1])) {\n    localPrice = discountOffers[offer].discount_20;\n  }\n  else if (subTotal > parseFloat(cartValue[1]) && subTotal <= parseFloat(cartValue[2])) {\n    localPrice = discountOffers[offer].discount_50;\n  } else if(subTotal > parseFloat(cartValue[2])) {\n    localPrice = discountOffers[offer].discount_100;\n  } else {\n    localPrice = discountOffers[offer].discount_0;\n  }\n  element.data('price', localPrice);\n  element.find('td.price').text(currencyConverter(parseFloat(localPrice)));\n  if (subTotal > parseFloat(EXCEED_CART_VALUE)) element.find('td:last-child').append('<div class=\"cross-out-price\">was ' + originalPrice + '</div>');\n}\n;\n// --- requests.js ---\nvar Requests = new function() {\n  var error_message = 'Sorry, an error occurred while trying to load the page. Please, try again later.';\n\n  this.get_form = function(success_callback) {\n    $.ajax({\n      type: \"GET\",\n      url: '/cart/get_form/',\n      dataType: \"json\",\n      success: function(response){\n        var form = (response && response['form']) || {};\n        success_callback(form);\n      },\n      error: function(){ success_callback({}); }\n    });\n  };\n\n  this.set_form = function(data, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/cart/set_form',\n      data: { form: data },\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback();\n        else error_callback(error_message);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  };\n\n  this.verify_zip = function(zip, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/cart/verify_zip/',\n      data: { zip_code: zip },\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback();\n      },\n      error: function(){ error_callback(); }\n    });\n  };\n\n  this.verify_address = function(data, error_callback, not_verify_callback, success_callback) {\n    $.ajax({\n      type: 'POST',\n      url: '/cart/verify_address',\n      data: data,\n      dataType: \"json\",\n      error: function() { error_callback( error_message ); },\n      success: function(response){\n        if( response && response.success ) {\n          success_callback( response );\n        } else {\n          not_verify_callback( response || error_message );\n        }\n      }\n    });\n  };\n\n  this.create_order = function(data, success_callback, paymethod_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/cart/order',\n      data: data,\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else if (response['paymethod_fail']) paymethod_callback();\n        else error_callback(response.error || error_message);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  };\n\n  this.display_taxes = function(data, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/tax_calculator/get_tax_info',\n      data: data,\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback(response.error || response.message || error_message);\n      },\n      error: function(response){\n        if(response.message){\n          error_callback(response.error || response.message);\n        } else {\n          error_callback(error_message);\n        }\n      }\n    });\n  };\n\n  this.check_number = function(data, success_callback, error_callback) {\n    var url = data.port_number ? '/phone_numbers/check_port_number' : '/phone_numbers/check_new_number';\n    $.ajax({\n      type: \"GET\",\n      url: url,\n      data: data,\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback(error_message);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  };\n\n  this.change_bundle = function(offer, success_callback, error_callback) {\n    $.ajax({\n      type: \"GET\",\n      url: '/cart/change_bundle?offer=' + offer,\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback(error_message);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  };\n\n  this.create_buyer = function(data, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/buyers',\n      dataType: \"json\",\n      data: data,\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback(response.error);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  }\n\n  this.set_locale = function(locale, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/buyers/set_locale',\n      dataType: \"json\",\n      data: {locale: locale},\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback(response.error);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  }\n\n  this.create_customer = function(data, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/cart/create_customer',\n      data: {form: data},\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback(response.error || error_message);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  };\n\n  this.account_provision = function(data, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/cart/account_provision',\n      data: data,\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback(response.error || error_message);\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  };\n\n  this.get_vault_url = function(success_callback, error_callback) {\n    $.ajax({\n      type: \"GET\",\n      url: '/payments/vault_url',\n      dataType: \"json\",\n      success: function(response){\n        if (response.success) success_callback(response);\n        else  error_callback({ message: response.error } || { message: error_message});\n      },\n      error: function(){ error_callback(error_message); }\n    });\n  }\n  this.complete_payment = function(data, success_callback, error_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/payments/update_hosted_payment_response',\n      dataType: \"json\",\n      data: data,\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback({ message: response.error } || { message: error_message});\n      },\n      error: function(response){\n        if(response.status == 400) {\n          error_callback({status: 400, message: window.I18n.payments.session_timed_out});\n        } \n        else {\n          error_callback(response); \n        }\n      }\n    });\n  }\n\n  this.failed_payment = function(data, complete_callback) {\n    $.ajax({\n      type: \"POST\",\n      url: '/payments/update_failed_payment',\n      dataType: \"json\",\n      data: data,\n      complete: function() { complete_callback(); }\n    });\n  }\n\n  this.apply_coupon = function(data, success_callback, error_callback) {\n    $.ajax({\n      type: \"GET\",\n      url: '/cart/apply_coupon_code/',\n      dataType: \"json\",\n      data: data,\n      success: function(response){\n        if (response.success) success_callback(response);\n        else error_callback({ message: response.error } || { message: error_message});\n      },\n      error: function(response) { error_callback(response); }\n    });\n  };\n};\n\n;\n// --- phone_numbers.js ---\n$(document).ready(function() {\n  if ($('#phone_numbers').length) new PhoneNumbers();\n});\n\nvar PhoneNumbers = function() {\n  var phone_numbers = $('#phone_numbers');\n\n  $('#check_phone_number').validate({\n    ignore: '.ignore',\n    errorElement: \"div\",\n    errorPlacement: function (error, element) {\n      phone_numbers.find('.error_block').html(error);\n    },\n    rules: {\n      area_code: {\n        required: true,\n        pattern: /^[0-9]{3}$/\n      },\n      number_prefix: {\n        required: true,\n        pattern: /^[0-9]{3}$/\n      }\n    },\n    messages: {\n      area_code: {\n        required: I18n['js']['enter_area_code'],\n        pattern:  I18n['js']['enter_area_code']\n      },\n      number_prefix: {\n        required: I18n['js']['enter_area_code_and_prefix'],\n        pattern: I18n['js']['enter_area_code_and_prefix']\n      }\n    }\n  });\n\n  $(document).off('change', '#phone_numbers input[name=check_number]').on('change', '#phone_numbers input[name=check_number]', function(){\n    clear_messages();\n    clear_containers();\n    var template1 = document.getElementById('check_new_number_block').innerHTML.trim();\n    var template2 = document.getElementById('check_port_number_block').innerHTML.trim();\n    var to_html1 = Mustache.render(template1);\n    var to_html2 = Mustache.render(template2);\n    if($(this).val() == 'new') phone_numbers.find('form').html(to_html1);\n    else phone_numbers.find('form').html(to_html2);\n  });\n\n  $(document).off('click', '#phone_numbers #check_new_number').on('click', '#phone_numbers #check_new_number', function(){\n    var area_code = phone_numbers.find('#area_code').val();\n    var data = { npa: area_code, new_number: true };\n    check_number(iframed_data(data), this);\n    return false;\n  });\n\n  $(document).off('click', '#phone_numbers #check_port_number').on('click', '#phone_numbers #check_port_number', function(){\n    var area_code = phone_numbers.find('#area_code').val();\n    var number_prefix = phone_numbers.find('#number_prefix').val();\n    var data = { npa: area_code, nxx: number_prefix, port_number: true };\n    check_number(iframed_data(data), this);\n    return false;\n  });\n\n  $(document).off('keypress', '#check_phone_number input[type=text]').on('keypress', '#check_phone_number input[type=text]', function(e){\n    if (e.keyCode == 13) {\n      phone_numbers.find('.check_button').click();\n      return false;\n    }\n  });\n\n  $(document).off('click', '#phone_numbers #check_port').on('click', '#phone_numbers #check_port', function(){\n    var area_code = phone_numbers.find('#area_code').val();\n    phone_numbers.find('#check_number_port').click();\n    phone_numbers.find('#area_code').val(area_code);\n  });\n\n  function iframed_data(data) {\n    return $(\"#iframe\").val() === 'true' ?\n      {\n        ...data,\n        language: $(\"#language\").val(),\n        iframe: 'true',\n      } : data;\n  }\n\n  function show_notification(type, message) {\n    var message_block = phone_numbers.find('#error_message');\n    var template = document.getElementById('notification').innerHTML.trim();\n    var to_html = Mustache.render(template, {type: type, message: message});\n    message_block.html(to_html);\n  }\n\n  function clear_messages() {\n    phone_numbers.find('#error_message').html('');\n  }\n\n  function clear_containers() {\n    phone_numbers.find('#message').html('');\n    phone_numbers.find('#cities_list_block').html('');\n    phone_numbers.find('#higher_rates_message').html('');\n  }\n\n  function check_number(data, button) {\n    clear_messages();\n    clear_containers();\n    if(phone_numbers.find('form').valid()){\n      button_spiner.start(button);\n      Requests.check_number(data,\n        function(response){\n          button_spiner.stop(button);\n          if(response){\n            if(response.message) phone_numbers.find('#message').html(response.message);\n            if(response.higher_rates) phone_numbers.find('#higher_rates_message').html(response.higher_rates);\n            if(response.cities && response.cities.length){\n              var template1 = document.getElementById('cities_list').innerHTML.trim();\n              var template2 = document.getElementById('cities_column').innerHTML.trim();\n              var to_html1 = Mustache.render(template1, {overlay_areas: response.overlay_areas});\n              var to_html2 = \"\";\n              phone_numbers.find('#cities_list_block').html(to_html1);\n              $.each(response.cities, function( index, cities ) {\n                to_html2 = Mustache.render(template2, {cities: cities});\n                phone_numbers.find('.cities_list').append(to_html2);\n              });\n            }\n          }\n        },\n        function(message){\n          button_spiner.stop(button);\n          show_notification('danger', message);\n        }\n      );\n    }\n    return false;\n  }\n};\n;\n// --- tax_calculator.js ---\n$(document).ready(function() {\n  if ($('#tax_calculator').length) new TaxCalculator();\n});\n\nvar TaxCalculator = function() {\n  var self = this,\n      $form = $(\"#tax_calculator_form\"),\n      $zip = $(\"#zip\"),\n      showCaTax = $zip.data(\"ca\");\n\n  self.currentResult = [];\n  self.i18n = \"\";\n  self.basePrice = null;\n  self.baseServiceName = \"\";\n\n  var set_inputmask = function (zip) {\n    if (is_canadian_env()) zip.inputmask('A9A 9A9');\n    else zip.inputmask('99999');\n  };\n\n  var is_canadian_env = function () {\n    return LOCALE == \"ca\";\n  };\n\n  if (!showCaTax) set_inputmask($zip);\n  $zip.focus();\n\n  $form.validate({\n    errorClass: 'error',\n    errorElement: 'div',\n    errorPlacement: function (error, element) {\n      $(\".tax-error-block\").append(error);\n    },\n    rules: {\n      zip: {\n        required: true,\n        pattern: /(^\\d{5}(-\\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$)/\n      }\n    },\n    messages: {\n      zip: {\n        required: I18n['tax_calculator']['please_enter_a_zip_or_postal'],\n        pattern: I18n['form']['enter_valid_zip']\n      }\n    }\n  });\n\n  function showNotification(message) {\n    var template = document.getElementById('error_notification').innerHTML.trim();\n    var to_html = Mustache.render(template, { message: message });\n    $(\"#message\").html(to_html);\n  }\n\n  function refreshValidationMessage(to, from) {\n    var currentMessages = $(\"#tax_calculator_form\").validate().settings.messages.zip,\n        $errorDiv = $(\".tax-error-block\").find(\"div\"),\n        specification = {\n          en: \"Zip\",\n          ca: \"Postal code\"\n        };\n\n    currentMessages.pattern = currentMessages.pattern.replace(specification[from], specification[to]);\n    if ($zip.val().length && $errorDiv.length) $errorDiv.html($errorDiv.html().replace(specification[from], specification[to]));\n  }\n\n  function buildCitiesSelect() {\n    var citiesList = [ {index: 0, title: \"Select a city\"} ];\n    var template = document.getElementById('tax_calculator_cities_list').innerHTML.trim();\n    var to_html = \"\";\n    $.each(self.currentResult, function( index, city ) {\n      citiesList.push( {index: (index + 1), title: city.city_alias_mixed_case} )\n    });\n    to_html = Mustache.render(template, {cities: citiesList });\n    $(\"#cities_list\").html(to_html);\n  }\n\n  function addSalesTaxNotification(text, state) {\n    var nexusUSStateList = [\"CA\", \"WA\", \"CO\", \"VA\", \"CT\", \"DC\", \"FL\", \"GA\", \"IL\", \"TX\", \"MA\", \"MI\", \"NY\", \"PA\", \"NJ\", \"AL\", \"OH\", \"WI\", \"TN\", \"OK\", \"NM\", \"NC\", \"MO\", \"RI\", \"MN\", \"ID\", \"AZ\", \"KS\", \"MD\", \"SC\", \"UT\", \"IA\", \"ME\", \"NV\"];\n    var noteMessage = I18n['tax_calculator']['note'] + state + I18n['tax_calculator']['taxes_not_shown'] + text;\n\n    return nexusUSStateList.includes(state) ? text : noteMessage;\n  }\n\n  function fillInTable(option) {\n    var data = {\n      city: self.currentResult[option],\n      currency: (is_canadian_env() ? 'CAD $' : '$'),\n      I18n: $.extend({}, self.i18n),\n      is_canadian: is_canadian_env(),\n      // WSHOP-985: base_price gates the extra service row and the headline.\n      // base_service_name only labels it and may legitimately be empty.\n      base_price: self.basePrice,\n      base_service_name: self.baseServiceName\n    };\n    var template = document.getElementById('tax_calculator_table').innerHTML.trim();\n    var partials = {\n      sure_taxes_description: document.getElementById('sure_taxes_description').innerHTML.trim(),\n      sure_taxes_amount: document.getElementById('sure_taxes_amount').innerHTML.trim()\n    };\n    var to_html = \"\";\n    if (!is_canadian_env()) {\n      data.I18n.read_full_taxes = addSalesTaxNotification(data.I18n.read_full_taxes, data.city.labels.state);\n    }\n\n    to_html = Mustache.render(template, data, partials);\n    $(\"#taxes\").html(to_html);\n  }\n\n  function showTaxes(response) {\n    self.currentResult = response.taxes;\n    self.i18n = window[response.country];\n    self.basePrice = response.base_price;\n    self.baseServiceName = response.base_service_name;\n    if (response.taxes.length > 1) buildCitiesSelect();\n    else fillInTable(0);\n  }\n\n  $(document).on('keyup focusout', '#zip', function(){\n    var currentLocale = LOCALE;\n\n    if($(this).inputmask) {\n      if ($(this).val() == '') {\n        $(this).inputmask('remove');\n      } else {\n        if(/^\\d$/.test($(this).val()[0])) {\n          LOCALE = 'en';\n        } else {\n          LOCALE = 'ca';\n        }\n\n        set_inputmask($(this));\n        if (LOCALE != currentLocale) refreshValidationMessage(LOCALE, currentLocale);\n      }\n    }\n  });\n\n  $(document).on('click', '#tax_calculator_button', function(){\n    $(\"#cities_list, #taxes, #message\").html(\"\");\n    var button = this,\n        data = {\n          zip: $zip.val().toUpperCase(),\n          locale: LOCALE\n        }\n    // WSHOP-985: resent on every submit regardless of layout, otherwise\n    // set_tax_info clears them from the session and the base row disappears.\n    if ($(\"#base_offering_pk\").length) {\n      data = {\n        ...data,\n        base_offering_pk: $(\"#base_offering_pk\").val(),\n        base_service_name: $(\"#base_service_name\").val(),\n      };\n    }\n    if ($(\"#iframe\").val() === 'true') {\n      data = {\n        ...data,\n        offering_pk: $(\"#offering_pk\").val(),\n        is_biz: $(\"#is_biz\").val(),\n        country: $(\"#country\").val(),\n        iframe: 'true',\n      };\n    }\n    if (!$(\"#iframe\").val()) data.country = is_canadian_env() ? 'ca' : 'us';\n    if ( $form.valid() ) {\n      self.currentResult = [];\n      button_spiner.start(button);\n\n      Requests.display_taxes(data,\n        function(response){\n          button_spiner.stop(button);\n          showTaxes(response);\n        },\n        function(message){\n          button_spiner.stop(button);\n          showNotification(message);\n        }\n      );\n    }\n    return false;\n  });\n\n  $(document).on('change', '#cities', function(){\n    var option = parseInt($(this).val());\n    if (option != 0) fillInTable(option-1);\n  });\n\n  $(document).on('click', '.show-tax-description', function(){\n    $(this).parent().find('.tax-description').toggle();\n  });\n\n  $(document).on('click', '.show-salt-details', function(){\n    $(this).parents('tr').find('.salt-details').toggle();\n  });\n};\n\n;\n// --- cart.js ---\n//= require vault\n//= require google_address_autocomplete\n//= require offers_discount\n//= require chasePayment\n//= require cybersource\n//= require fiserv \n//= require js-cookie \n\nconst MAX_DEVICE_LIMIT = 10;\nconst RECAPTCHA_BLOCK = 'recaptcha_block';\nconst HCAPTCHA_BLOCK  = '#h-captcha';\nconst HSITE_KEY = '6d2843d0-8400-457c-94ae-285c5db49b34';\nconst SITE_KEY = '6Le1ziITAAAAAAa3cuV_nryuavAIbVUaZQhi0XiQ';\nconst QUEBEC_PROVINCE = 'QC';\n\nfunction onloadReCaptchaCallback() {\n  if(!isRecaptchaEnabled()) return;\n\n  grecaptcha.render(RECAPTCHA_BLOCK, {\n    sitekey: SITE_KEY,\n    callback: verifyReCaptchaCallback\n  });\n}\n\nfunction verifyReCaptchaCallback() {\n  $('[data-disable-until-recaptcha=true]').attr('disabled', false);\n}\n\nfunction isRecaptchaEnabled() {\n  return !!$(\"#\" + RECAPTCHA_BLOCK).length;\n}\n\nfunction resetRecaptcha() {\n  $(\"#\" + RECAPTCHA_BLOCK).show();\n  $('[data-disable-until-recaptcha=true]').attr('disabled', true);\n  if(grecaptcha && grecaptcha.reset) grecaptcha.reset();\n}\n\nfunction onloadHCaptchaCallback() {\n  if(!isHcaptchaEnabled()) return;\n  hcaptcha.render(HCAPTCHA_BLOCK.slice(1), {\n    sitekey: HSITE_KEY,\n    callback: verifyReCaptchaCallback\n  });\n}\n\nfunction isHcaptchaEnabled() {\n  return !!$(HCAPTCHA_BLOCK).length;\n}\n\nfunction resetHcaptcha() {\n  $(HCAPTCHA_BLOCK).show();\n  $('[data-disable-until-recaptcha=true]').attr('disabled', true);\n  if(hcaptcha && hcaptcha.reset) hcaptcha.reset();\n}\n\nfunction trackVWOEvent(step, eventName, eventLabel) {\n  const key = `vwo_${step}`;\n\n  if (!sessionStorage.getItem(key)) {\n    vwoEvent(eventName, eventLabel);\n    sessionStorage.setItem(key, 'true');\n  }\n}\n\nfunction clearVWOEvents() {\n  sessionStorage.removeItem('vwo_shipping');\n  sessionStorage.removeItem('vwo_payment');\n  sessionStorage.removeItem('vwo_review');\n  sessionStorage.removeItem('vwo_purchase');\n}\n\nfunction clickSelect(customNode, disabled=false) {\n  if(customNode !== undefined) {\n    var x, i, j, l, ll, selElmnt, a, b, c;\n    /* Look for any elements with the class \"custom-select\": */\n    x = customNode; //document.getElementsByClassName(\"custom-select\");\n    l = x.length;\n    for (i = 0; i < l; i++) {\n      if(x[i].getElementsByTagName(\"select\").length == 0) continue;\n      selElmnt = x[i].getElementsByTagName(\"select\")[0];\n      ll = selElmnt.length;\n      /* For each element, create a new DIV that will act as the selected item: */\n      a = document.createElement(\"DIV\");\n      a.setAttribute(\"class\", \"select-selected\");\n      if(disabled) a.setAttribute(\"disabled\", \"true\");\n      a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML;\n      x[i].appendChild(a);\n      /* For each element, create a new DIV that will contain the option list: */\n      b = document.createElement(\"DIV\");\n      b.setAttribute(\"class\", \"select-items select-hide\");\n      for (j = 0; j < ll; j++) {\n        /* For each option in the original select element,\n        create a new DIV that will act as an option item: */\n        c = document.createElement(\"DIV\");\n        c.innerHTML = selElmnt.options[j].innerHTML;\n        c.addEventListener(\"click\", function(e) {\n            /* When an item is clicked, update the original select box,\n            and the selected item: */\n            var y, i, k, s, h, sl, yl;\n            s = this.parentNode.parentNode.getElementsByTagName(\"select\")[0];\n            sl = s.length;\n            h = this.parentNode.previousSibling;\n            for (i = 0; i < sl; i++) {\n              if (s.options[i].innerHTML == this.innerHTML) {\n                s.selectedIndex = i;\n                h.innerHTML = this.innerHTML;\n                y = this.parentNode.getElementsByClassName(\"same-as-selected\");\n                yl = y.length;\n                for (k = 0; k < yl; k++) {\n                  y[k].removeAttribute(\"class\");\n                }\n                this.setAttribute(\"class\", \"same-as-selected\");\n                break;\n              }\n            }\n            h.click();\n        });\n        b.appendChild(c);\n      }\n      x[i].appendChild(b);\n      a.addEventListener(\"click\", function(e) {\n        /* When the select box is clicked, close any other select boxes,\n        and open/close the current select box: */\n        e.stopPropagation();\n        if($(this).attr(\"disabled\") !== \"disabled\") {\n          closeAllSelect(this);\n          this.nextSibling.classList.toggle(\"select-hide\");\n          this.classList.toggle(\"select-arrow-active\");\n        }\n      });\n    }\n\n    function closeAllSelect(elmnt) {\n      /* A function that will close all select boxes in the document,\n      except the current select box: */\n      var x, y, i, xl, yl, arrNo = [];\n      x = document.getElementsByClassName(\"select-items\");\n      y = document.getElementsByClassName(\"select-selected\");\n      xl = x.length;\n      yl = y.length;\n      for (i = 0; i < yl; i++) {\n        if (elmnt == y[i]) {\n          arrNo.push(i)\n        } else {\n          y[i].classList.remove(\"select-arrow-active\");\n        }\n      }\n      for (i = 0; i < xl; i++) {\n        if (arrNo.indexOf(i)) {\n          x[i].classList.add(\"select-hide\");\n        }\n      }\n      $('.select-selected.select-arrow-active').parent().find('.quantity').val($('.select-selected.select-arrow-active').html()).change();\n    }\n\n    /* If the user clicks anywhere outside the select box,\n    then close all select boxes: */\n    document.addEventListener(\"click\", closeAllSelect);\n  }\n}\n\nfunction removeLocationHash() {\n  var noHashURL = window.location.href.replace(/#.*$/, '');\n  window.history.replaceState('', document.title, noHashURL);\n}\n\n// $(window).on('load', function () {\n//   alert(\"Window Loaded\");\n// });\n\n// A $( document ).ready() block.\n$(document).ready(function() {\n  if ($('.checkout').length == 0) removeLocationHash();\n  if ($('.checkout').length) new Shop.Checkout();\n  if ($('.cart').length) new Shop.Cart();\n\n  Requests.get_form(\n      function(form) {\n          Experiment.exp = form['exp'];\n          if (location.pathname == '/cart/confirm') Tracker.sendData({page: '/cart/confirm', destroy_data: true});\n          else if (/^\\/cart\\/*$/.test(location.pathname)) Tracker.sendData({page: '/cart'});\n      }\n  );\n});\n/* */\n$.urlParam = function(name){\n    var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);\n    if (results==null){\n       return null;\n    }\n    else{\n       return decodeURI(results[1]) || 0;\n    }\n}\n\nvar Shop = {};\nvar prohibitSteps = false;\n\nfunction setOfferCookie() {\n  Cookies.set('offer', JSON.stringify($.urlParam('offer')), { path: '/', domain: '.ooma.com' });\n}\n\nfunction isFR() {\n  return $('html').attr('lang').split('-')[0] === 'fr';\n}\n\nShop.Cart = function() {\n  var $cart = $('.cart');\n  var modalEmailAddress = $('#modal_window_cart');\n\n  // instantiate the popovers\n  if ($('.tooltip_link').length) {\n    $('.tooltip_link')\n        .popover();\n  }\n\n  function getAccessories() {\n    var qty, pk, type, title, accessories = {};\n    $cart.find('table.shopping-cart tr').each(function() {\n      if ($(this).data('add_accessory') == true) {\n        pk = parseInt($(this).data('pk'));\n        qty = parseInt($(this).find('.quantity').val());\n        type = $(this).data('type');\n        title = $(this).find('td.item-title div').text();\n        accessories[pk] = {'qty': qty, 'type': type, 'title': title};\n      }\n    });\n    return accessories;\n  }\n\n  function getProductCartCookie() {\n    if (Cookies.get('product_cart')) return JSON.parse(Cookies.get('product_cart'));\n  }\n\n  function getSubTotal() {\n    return $('span.subtotal-price').text();\n  }\n\n  function productCart() {\n    return {'offer': $.urlParam('offer'), 'accessories': getAccessories(), 'sub_total': getSubTotal()};\n  }\n\n  function updateProductCartCookie(cart) {\n    Cookies.set('product_cart', JSON.stringify(cart), { path: '/', domain: '.ooma.com' });\n  }\n\n  function updateProductQuantityCookie(pk, qty) {\n    var cartCookie = getProductCartCookie();\n    if (cartCookie && cartCookie.hasOwnProperty('accessories') && cartCookie['accessories'][pk]) {\n      cartCookie['accessories'][pk]['qty'] = qty;\n      cartCookie['sub_total'] = getSubTotal();\n      updateProductCartCookie(cartCookie);\n    }\n  }\n\n  function hideQuantityDropDown(type) {\n    return (type.match(/wireless|hm.*starter|telo.*(hd3)|battery|adapter.*(4g)/i) != null);\n  }\n\n  function isHmDevices(type) {\n    return (type.match(/hm_|battery|adapter.*(4g)|keypad/i) != null);\n  }\n\n  function add_accessory_device(button, parentTr, quantity) {\n    var type = parentTr.data('type');\n    var title = parentTr.data('title');\n    var price = parseFloat( parentTr.data('price') );\n    var pk = parentTr.data('pk');\n    var image =  parentTr.find(\".\" + type +\" img\").attr('src');\n    var tableAccessories = $cart.find('table.accessories');\n    var offer = $cart.find('table.shopping-cart tr:first').data('type');\n    // hm_starter and wireless devices shouldn't show the quantity drop down\n    var hide_quantity = hideQuantityDropDown(type);\n    var is_sensor = isHmDevices(type);\n    var is_dect = $cart.find('tr[data-dect]').data('dect')\n    var is_default_qty = !(hide_quantity);\n    var error_massage = isOfficeDevice($cart) ? window.I18n['office_dect_error'] : window.I18n['dect_error'];\n    var template_data = { type: type, title: title, pk: pk, price: currencyConverter(price), image: image, hide_quantity: hide_quantity, is_dect: is_dect, is_sensor: is_sensor, is_default_qty: is_default_qty };\n    var template = document.getElementById('accessory_device').innerHTML.trim();\n    var to_html = Mustache.render(template, template_data);\n\n    if (type != 'wireless' && !is_sensor && isMaxDevice($cart, true)){\n      showNotification('danger', error_massage, '#shopping-cart-message', $('.cart'));\n      button_spiner.stop(button);\n      return false;\n    }\n    setTimeout(function() {\n      // DIV is used in horizontal accessory layout\n      if ( parentTr[0].tagName == 'DIV') {\n        $(\"#\"+type).hide();\n      }\n      else{\n        parentTr.hide();\n      }\n\n      button_spiner.stop(button);\n      $cart.find('table.shopping-cart').append(to_html);\n      $cart.find('table.shopping-cart tr:last .quantity').val(quantity);\n      $cart.find('table.shopping-cart tr:last .quantity').trigger('change');\n      clickSelect($cart.find('table.shopping-cart tr:last .custom-select'));\n      if (/SMARTCAM/.test(offer)) tableAccessories.find('tr').hide();\n      if ( parentTr[0].tagName == 'TR' && tableAccessories.find('tr:visible').length == 0 ) $(\"#accessories\").hide();\n      updateProductCartCookie(productCart());\n    }, 200);\n  };\n\n  function parseCartCookieAsUrlParam() {\n    var cartCookie = getProductCartCookie();\n    var urlParams = '';\n\n    if (cartCookie && cartCookie.hasOwnProperty('accessories')) {\n      var skuNames = Object.keys(cartCookie['accessories']);\n      for (var i = 0; i < skuNames.length; i++) {\n        urlParams += skuNames[i] + ':' + cartCookie['accessories'][skuNames[i]]['qty'] + ';'\n      }\n    }\n    return urlParams;\n  }\n\n  // If the add_skus query param is present, add the accessory to the cart\n  function add_accessory_from_query_param(){\n    var sku_button = null;\n    var sku_tr = null;\n    var sku_array = null;\n    //var element = $('tr[data-pk=\"1915\"]');\n    //var element_button = $('tr[data-pk=\"1915 button:first\"]');\n    var add_skus = $.urlParam('add_skus');\n    var urlParams = parseCartCookieAsUrlParam();\n\n    // no param so return\n    if (add_skus == null && urlParams == null) {\n      return false;\n    }\n\n    var skus = add_skus ? add_skus.split(\";\") : urlParams.split(\";\");\n    var skus_length = skus.length;\n\n    if (skus_length == 0){\n      return false;\n    }\n\n    for (var i = 0; i < skus_length; i++) {\n      sku_array = skus[i].split(\":\");\n      sku_button = null;\n      sku_tr = null;\n\n      if (sku_array.length == 2 && $.isNumeric(sku_array[0]) && $.isNumeric(sku_array[1])){\n        sku_tr = $('tr[data-pk=\"' + sku_array[0] +'\"]');\n        sku_button = $(sku_tr).find('button:first')\n        // limit max quantity to 4\n        if (parseInt(sku_array[1]) > MAX_DEVICE_LIMIT){\n          quantity = 1\n        }\n        else{\n          quantity = sku_array[1]\n        }\n        if (sku_tr.length != 0 && sku_button.length != 0){\n          add_accessory_device(sku_button, sku_tr,quantity);\n        }\n      }\n    }\n  };\n\n  // add accessories from query param, if present\n  add_accessory_from_query_param();\n\n  function reload_bundle_device(button, parentTr, bundle, device) {\n    var $shoppingCart = $cart.find('table.shopping-cart'),\n        type = bundle.name,\n        price = bundle.price,\n        title = bundle.title,\n        image = bundle.image,\n        device = device,\n        dect = device == 'bridge';\n    var template_data = { type: type, title: title, price: currencyConverter(price), device: device, image: image, dect: dect };\n    var template = document.getElementById('bundle_device').innerHTML.trim();\n    var to_html = Mustache.render(template, template_data);\n\n    setTimeout(function() {\n      if (!dect) parentTr.hide();\n      button_spiner.stop(button);\n      disable_actions(false);\n      $shoppingCart.find('tr:first').remove();\n      $shoppingCart.prepend(to_html);\n      recalculationPrice( $cart, '#shopping-cart-message', null );\n      if ( $cart.find('table.accessories tr:visible').length == 0 ) $(\"#accessories\").hide();\n    }, 200);\n  };\n\n  function change_bundle_device(button, parentTr) {\n      var offerings = [1581, 2558, 1618]\n      var pk = parentTr.data('pk');\n      var device;\n      if (offerings.includes(pk))\n        device = 'bridge';\n      else device = 'air';\n\n    disable_actions(true);\n    Requests.change_bundle( \"STREAM_HUB_\" + device.toUpperCase(),\n      function(response){\n        reload_bundle_device(button, parentTr, response.bundle, device);\n      },\n      function(message){\n        button_spiner.stop(button);\n        disable_actions(false);\n        showNotification('danger', message, '#shopping-cart-message', $('.cart'));\n      }\n    );\n  };\n\n  function disable_actions(status) {\n    $cart.find('.btn').attr('disabled', status);\n  }\n\n  $cart.find('button.btn-add').on('click', function(){\n    var $bundleDevice = $cart.find('table.shopping-cart tr:first'),\n        parentTr = $(this).parents('tr');\n    button_spiner.start(this);\n    add_accessory_device(this, parentTr,'1');\n    // if ($bundleDevice.data(\"type\") != \"STREAM_HUB\") add_accessory_device(this, parentTr,'1');\n    // else change_bundle_device(this, parentTr);\n  });\n\n  $cart.find('.btn-add-horizontal').on('click', function(){\n    var $bundleDevice = $cart.find('table.shopping-cart tr:first'),\n    parent_div = $(this).parents('div').parents('div');\n    button_spiner.start(this);\n    add_accessory_device(this, parent_div,'1');\n    // if ($bundleDevice.data(\"type\") != \"STREAM_HUB\") add_accessory_device(this, parent_div,'1');\n    // else change_bundle_device(this, parent_div);\n  });\n\n  $(document).off('change', '.cart .quantity').on('change', '.cart .quantity', function(){\n    var pk = $(this).parents('tr').data('pk');\n    var qty = $(this).val();\n    var offer = $cart.find('table.shopping-cart tr:first').data('type');\n\n    if (listOffersDiscount().includes(offer)) teloDiscountForLargeOrder();\n    recalculationPrice( $cart, '#shopping-cart-message', this );\n    updateProductQuantityCookie(pk, qty);\n  });\n\n  $(document).off('click', '.cart .remove').on('click', '.cart .remove', function(){\n    var tableAccessories = $cart.find('table.accessories');\n    var rowAccessories = $cart.find('div.accessories_horizontal');\n    var offer = $cart.find('table.shopping-cart tr:first').data('type');\n    var parentTr = $(this).parents('tr');\n    var type = parentTr.data('type');\n    var pk = parentTr.data('pk');\n    var cartCookie = getProductCartCookie();\n    parentTr.remove();\n\n    //vertical layout of accessories\n    tableAccessories.find('tr').each(function(){\n      if ( $(this).data('type') == type ) {\n        $(this).show();\n        $(\"#accessories\").show();\n        return;\n      }\n    });\n\n    // horizontal layout of accessories\n    rowAccessories.find('div').each(function(){\n\n      if ( $(this).data('type') == type ) {\n        $(this).show();\n        $(\"#accessories\").show();\n        return;\n      }\n    });\n\n    if (/SMARTCAM/.test(offer)) tableAccessories.find('tr').show();\n\n    if (listOffersDiscount().includes(offer)) teloDiscountForLargeOrder();\n    recalculationPrice( $cart, '#shopping-cart-message', null );\n    if (cartCookie && cartCookie.hasOwnProperty('accessories') && cartCookie['accessories'][pk]) {\n      delete cartCookie['accessories'][pk];\n      cartCookie['sub_total'] = getSubTotal();\n      updateProductCartCookie(cartCookie);\n    }\n  });\n\n  $cart.find('button#checkout').on('click', function(){\n    clearVWOEvents();\n    setOfferCookie();\n    Requests.get_form(\n      function(form){\n          if (Experiment.exp == 0 || Experiment.exp == 1) {\n              if(form['email'] && form['email'].length) {\n                  Requests.set_form( { email: form['email'], accessories: get_accessories() },\n                      function(){\n                          window.location.href = '/cart/checkout';\n                      },\n                      function(message){\n                          button_spiner.stop($cart.find('button#checkout')[0]);\n                          showNotification('danger', message, $('.cart'));\n                      }\n                  );\n              } else {\n                  var template = document.getElementById('email_modal_body').innerHTML.trim();\n                  var to_html = Mustache.render(template);\n                  modalEmailAddress.find('.modal-body').html(to_html);\n                  modalEmailAddress.modal('show');\n                  gtmVirtualPageview('/cart/checkout/email', 'Checkout - Email');\n                  Tracker.sendData({page: '/cart/checkout/email'});\n                  modalEmailAddress.find('#email').focus();\n              }\n\n          } else {\n              Requests.set_form( { accessories: get_accessories() },\n                  function(){\n                      window.location.href = '/cart/checkout';\n                  },\n                  function(message){\n                      button_spiner.stop($cart.find('button#checkout')[0]);\n                      showNotification('danger', message, $('.cart'));\n                  }\n              );\n          }\n\n      }\n    );\n  });\n\n  $('body').on('keypress', '#email', function(event){\n    if (event.keyCode == 13) {\n      modalEmailAddress.find('#set_email_address').click();\n    }\n  });\n\n  function get_accessories() {\n    var qty, pk, accessories = {};\n    $cart.find('table.shopping-cart tr').each(function(){\n      if ( $(this).data('add_accessory') == true ) {\n        qty = parseInt( $(this).find('.quantity').val() );\n        pk = $(this).data('type').match(/hm.*starter/i) ? $(this).data('pk') : parseInt( $(this).data('pk') );\n        accessories[pk] = qty;\n      }\n    });\n    return accessories;\n  }\n\n  modalEmailAddress.find('#set_email_address').on('click', function(){\n    var self = this;\n    var emailError = modalEmailAddress.find('#email_error');\n    var emailInput = modalEmailAddress.find('#email');\n    var emailId = emailInput.val().replace(/^\\s+|\\s+$/gm,'');\n    var errorMsg = 'Please enter a valid email address';\n    button_spiner.start(self);\n    emailError.html('').hide();\n    emailInput.removeClass('error');\n\n    if ( emailIsValid( emailId ) ){\n      button_spiner.stop(self);\n      modalEmailAddress.modal('hide');\n      button_spiner.start($cart.find('button#checkout')[0]);\n\n      Requests.set_form( { email: emailId, accessories: get_accessories() },\n        function(){\n          window.location.href = '/cart/checkout';\n        },\n        function(message){\n          button_spiner.stop($cart.find('button#checkout')[0]);\n          showNotification('danger', message, $('.cart'));\n        }\n      );\n    } else {\n      button_spiner.stop(self);\n      emailError.html(errorMsg).show();\n      emailInput.addClass('error');\n    }\n  });\n\n  function repositionModal(){\n    var modal = $(this),\n      dialog = modal.find('.modal-dialog');\n    modal.css('display', 'block');\n    // Dividing by two centers the modal exactly, but dividing by three\n    // or four works better for larger screens.\n    dialog.css(\"margin-top\", Math.max(0, ($(window).height() - dialog.height()) / 2));\n  };\n  // Reposition when a modal is shown\n  $('.modal').on('show.bs.modal', repositionModal);\n  // Reposition when the window is resized\n  $(window).on('resize', function() {\n    $('.modal:visible').each(repositionModal);\n  });\n\n  function emailIsValid(email){\n    return email.match(/^(?!.{65})([a-zA-Z0-9_.+-])+\\@(([a-zA-Z0-9-])+\\.)+([a-zA-Z0-9]{2,24})$/i) ? true : false;\n  }\n\n};\n\nShop.Checkout = function() {\n  var checkoutPage = $('.checkout');\n  var STEPS = [ 'shipping', 'payment', 'review' ];\n\n  showCheckoutPage();\n  change_total();\n  CCmaskValue();\n  CVVmaskValue();\n\n  function showCheckoutPage(){\n    var step  = 'shipping';\n    if (window.location.hash.length==0){\n      activeStep(step);\n    } else {\n      var hashStep = window.location.hash.substr(1);\n      if ($.inArray(hashStep, STEPS) != -1) {\n        step = hashStep.replace('#', '');\n      }\n      activeStep(step);\n    }\n  }\n\n  window.addEventListener('hashchange', function() {\n    if ( prohibitSteps ) return false;\n    var step = 'shipping';\n    var hashStep = window.location.hash.substr(1);\n\n    if ( $.inArray(hashStep, STEPS) != -1 ) {\n      step = hashStep.replace('#', '');\n    }\n    activeStep(step);\n  });\n\n  $(document).off('click', '.btn-edit').on('click', '.btn-edit', function(){\n    var step = $(this).data('step');\n    var number = $(this).data('number');\n    var template = document.getElementById('default_header').innerHTML.trim();\n    var to_html = Mustache.render(template, { number: number });\n    $('.item').find(\"[data-step='\" + step + \"']\").hide().prev().show();\n    $('.header-' + step).find('.step').html(to_html);\n    activeStep(step);\n    return false;\n  });\n\n  if($('.rebranding_v2').length > 0) {\n    function repositionModal(){\n      var modal = $(this),\n        dialog = modal.find('.modal-dialog');\n      modal.css('display', 'block');\n      // Dividing by two centers the modal exactly, but dividing by three\n      // or four works better for larger screens.\n      dialog.css(\"margin-top\", Math.max(0, ($(window).height() - dialog.height()) / 2));\n    };\n    // Reposition when a modal is shown\n    $('.modal').on('show.bs.modal', repositionModal);\n    // Reposition when the window is resized\n    $(window).on('resize', function() {\n      $('.modal:visible').each(repositionModal);\n    });\n  }\n};\n\nShop.ManualEntry = false;\n\nShop.FormProcessorInitializer = {};\n\nfillInCityState = function(cities) {\n  var count_cities = cities.length;\n  if(count_cities) {\n    var options = '',\n      city,\n      state;\n    //make options for #city_state list\n    for(var i = 0; i < count_cities; i++ ) {\n      city = cities[i].city;\n      state = cities[i].state;\n      options += '<option ';\n      options += 'value=\"' + city + '|' + state + '\"';\n      if (i == 0) {// set first option to selected\n        options += 'selected=\"selected\"';\n      }\n      options += '>';\n      options += city + ', ' + state;\n      options += '</option>';\n    }\n    $('#city_state').html(options);\n    $('#city_state').change();\n  }\n};\n\ncityStateErrorCallback = function() {\n  if ($('#city_state').length) {\n    $('#city_state').html(\n      $('<option></option>')\n        .attr('value', '')\n        .text('Please select')\n    );\n    $('#city_state').change();\n  }\n};\n\n\nShop.Checkout['shipping'] = function(step) {\n  var addressAutocomlete = {};\n  gtmVirtualPageview('/cart/checkout/shipping', 'Checkout - Shipping');\n  Tracker.sendData({page: '/cart/checkout/shipping'});\n  shippingValidation();\n  var checkoutPage = $('.checkout');\n  var modal = $('#modal_window_checkout');\n  var counter = 0;\n  var message = '';\n  Shop.ManualEntry = checkoutPage.find('#city_state_block').length == 0;\n  addressAutocomlete = new GoogleAddressAutocomplete.Initialize();\n  addressAutocomlete.setCityState = fillInCityState;\n  addressAutocomlete.emptyCityState = cityStateErrorCallback;\n  setCityState();\n\n  checkoutPage.find('#first_name').focus();\n  if (is_canadian_env()) checkoutPage.find('#zip').inputmask('a9a 9a9');\n  else checkoutPage.find('#zip').inputmask('99999');\n\n  checkoutPage.find('#phone').inputmask('(999) 999-9999', { showMaskOnHover: false });\n\n  if (pci_enabled() && checkoutPage.find('#vaultFrame').length) {\n    checkoutPage.find('form#payment').show();\n    checkoutPage.find('#vaultMainContent').hide();\n  }\n\n  if(isRecaptchaEnabled()) resetRecaptcha();\n  if(isHcaptchaEnabled()) resetHcaptcha();\n  $(document).off('click', '#manual_entry_city_state')\n    .on('click', '#manual_entry_city_state', function(){\n      var state = '', city = '';\n      var cityLabel = is_canadian_env() ? 'Municipality' : 'City';\n      var stateLabel = is_canadian_env() ? 'Province' : 'State';\n      var template = document.getElementById('checkout_city_state_container').innerHTML.trim();\n      var to_html = Mustache.render(template, { cityLabel: cityLabel, stateLabel: stateLabel });\n      if ( checkoutPage.find('#city_state').length ) {\n        var city_state = checkoutPage.find('#city_state').val().split('|');\n        state = city_state[1];\n        city = city_state[0];\n      }\n      addressAutocomlete.setCityState = addressAutocomlete.setCityStateDefault;\n      addressAutocomlete.emptyCityState = addressAutocomlete.setCityStateDefault;\n      checkoutPage.find('#city_state_block').remove();\n      checkoutPage.find('#city_state_container').html(to_html);\n      checkoutPage.find('#city').val(city).change();\n      if ( state && state.length ) checkoutPage.find('#state').val(state).change();\n      else checkoutPage.find(\"#state option:first\").attr('selected','selected').change();\n      Shop.ManualEntry = true;\n      Shop.FormProcessorInitializer.init();\n    });\n\n  $(document).off('keypress input', '#zip')\n    .on('keypress input', '#zip', function () {\n      changeZip();\n  });\n\n  $(document).off('change', '#state')\n    .on('change', '#state', function() {\n      if ($(this).val() === QUEBEC_PROVINCE && isFR() && is_canadian_env()) {\n        $('#quebec_disclaimer').show();\n      } else {\n        $('#quebec_disclaimer').hide();\n      }\n  });\n\n  $(document).off('click', '#btn-shipping')\n    .on('click', '#btn-shipping', function() {\n      button_spiner.start(this);\n      ClearError(checkoutPage);\n      if (true) { //add valid form\n        var params = Experiment.params(checkoutPage);\n\n        Requests.verify_address(params,\n          function(message){\n            showNotification('danger', message, '#shipping-message', $('.checkout'));\n            button_spiner.stop(this);\n          },\n          function(response){\n            var template = document.getElementById('verify_address_template').innerHTML.trim();\n            var to_html = Mustache.render(template);\n            modal.html(to_html);\n            if (response['corrections']) {\n              addressCorrection(response['corrections']['address'], params);\n            }else{\n              message = response['error'] || window.I18n.no_verified;\n              if (counter < 1)\n                addressDefault();\n              else\n                addressProceed(params);\n              modal.find('.no_verified').html(message);\n            }\n            button_spiner.stop(this);\n          },\n          function() {\n            if (pci_enabled()) {\n              Tracker.setCustomerData({customer: params});\n              params = $.extend(params, { tracking: Tracker.getTrackingData() });\n              Requests.create_customer(params,\n                function () {\n                  $(\"#\" + RECAPTCHA_BLOCK).hide();\n                  $(HCAPTCHA_BLOCK).hide();\n                  activeStep(nextStep());\n                  button_spiner.stop(this);\n                  trackVWOEvent('shipping', 'residentialEcommShipping', 'Shipping section completed');\n                },\n                function (message) {\n                  resetRecaptcha();\n                  resetHcaptcha();\n                  showNotification('danger', message, '#shipping-message', checkoutPage);\n                  button_spiner.stop(this);\n                }\n              );\n            } else {\n              Requests.set_form(params,\n                function () {\n                  Tracker.setCustomerData({customer: params});\n                  activeStep(nextStep());\n                  button_spiner.stop(this);\n                },\n                function (message) {\n                  showNotification('danger', message, '#shipping-message', checkoutPage);\n                  button_spiner.stop(this);\n                }\n              );\n            }\n          }\n        );\n      }\n      return false;\n    });\n\n  function addressCorrection(address, params) {\n    var template = document.getElementById('correction_template').innerHTML.trim();\n    var to_html = Mustache.render(template, address);\n    modal.find('.no_verified').hide();\n    modal.find('.correction').html(to_html);\n    modal.find('.cancel').show().text(window.I18n.let_me_make_a_change);\n    modal.modal('show');\n    modal.find('.next').off('click').text(window.I18n.accept).click(function(){\n      if(address['street_address']) {\n        params['street_address'] = address['street_address'];\n      } else {\n        params['street_address'] = address['address_line1'];\n        params['street_address2'] = address['address_line2'];\n      }\n      params['zip'] = address['zip'];\n      params['state'] = address['state'];\n      params['city'] = address['city'];\n      if (checkoutPage.find('#city_state').length) {\n        checkoutPage.find('#city_state').html(\n          $(\"<option></option>\")\n            .attr('value', address['city'] + '|' + address['state'])\n            .text(address['city'] + ', ' + address['state'])\n        );\n        checkoutPage.find('#city_state').change();\n      } else {\n        checkoutPage.find('#city').val(address['city']).change();\n        checkoutPage.find('#state').val(address['state']).change();\n      }\n      checkoutPage.find('#zip').val(address['zip']);\n      if(address['street_address']) {\n        checkoutPage.find('#street_address').val(address['street_address']);\n      } else {\n        checkoutPage.find('#street_address').val(address['address_line1']);\n        checkoutPage.find('#street_address2').val(address['address_line2']);\n      }\n      counter = 0;\n      modal.modal('hide');\n      if (pci_enabled()) {\n        Tracker.setCustomerData({customer: params});\n        params = $.extend(params, { tracking: Tracker.getTrackingData() });\n        Requests.create_customer(params,\n          function () {\n            $(\"#\" + RECAPTCHA_BLOCK).hide();\n            $(HCAPTCHA_BLOCK).hide();\n            activeStep(nextStep());\n          },\n          function (message) {\n            resetRecaptcha();\n            resetHcaptcha();\n            showNotification('danger', message, '#shipping-message', checkoutPage);\n          }\n        );\n      } else {\n        Requests.set_form(params,\n          function(){\n            Tracker.setCustomerData({customer: params});\n            activeStep(nextStep());\n          },\n          function(message){\n            showNotification('danger', message, '#shipping-message', checkoutPage);\n          }\n        );\n      }\n    });\n  }\n\n  function addressDefault() {\n    modal.find('.cancel').hide();\n    modal.find('.next').text(window.I18n.let_me_make_a_change);\n    modal.modal('show');\n    counter = counter + 1;\n  }\n\n  function addressProceed(params) {\n    modal.find('.cancel').show().text(window.I18n.let_me_make_a_change);\n    modal.modal('show');\n    modal.find('.next').off('click').text(window.I18n.proceed_anyway).click(function(){\n      counter = 0;\n      if (pci_enabled()) {\n        Tracker.setCustomerData({customer: params});\n        params = $.extend(params, { tracking: Tracker.getTrackingData() });\n        Requests.create_customer(params,\n          function () {\n            $(\"#\" + RECAPTCHA_BLOCK).hide();\n            $(HCAPTCHA_BLOCK).hide();\n            Tracker.setCustomerData({customer: params});\n            activeStep(nextStep());\n          },\n          function (message) {\n            resetRecaptcha();\n            resetHcaptcha();\n            showNotification('danger', message, '#shipping-message', checkoutPage);\n            modal.modal('hide');\n          }\n        );\n      } else {\n        Requests.set_form(params,\n          function(){\n            Tracker.setCustomerData({customer: params});\n            activeStep(nextStep());\n          },\n          function(message){\n            showNotification('danger', message, '#shipping-message', checkoutPage);\n            modal.modal('hide');\n          }\n        );\n      }\n    });\n  }\n};\n\nShop.Checkout['payment'] = function(step) {\n  gtmVirtualPageview('/cart/checkout/payment', 'Checkout - Payment');\n  Tracker.sendData({page: '/cart/checkout/payment'});\n\n  if (pci_enabled()) {\n    new Shop.Checkout['vault_payment']();\n    return;\n  }\n\n  paymentValidation();\n\n  var checkoutPage = $('.checkout');\n  var zip = checkoutPage.find('#zip').val();\n  var b_zip = checkoutPage.find('#billing_zip').val();\n\n  if (zip && !b_zip) checkoutPage.find('#billing_zip').val(zip);\n\n  if (is_canadian_env()) checkoutPage.find('#billing_zip').inputmask('a9a 9a9');\n  else checkoutPage.find('#billing_zip').inputmask('99999');\n\n  formatCreditCard();\n  creditCardType();\n\n  $(document).off('blur', '#card_number').on('blur', '#card_number', function(){\n    var CCNumber = $('#card_number');\n    CCNumber.data('value', CCNumber.val());\n    CCmaskValue();\n  });\n\n  $(document).off('keypress', '#card_number').on('keypress', '#card_number', function(e){\n    if (e.keyCode == 13 && !$('#content-shipping').hasClass('disabled')) {\n      var CCNumber = $('#card_number');\n      CCNumber.data('value', CCNumber.val());\n      paymentValidation();\n    }\n  });\n\n  $(document).off('focus', '#card_number').on('focus', '#card_number', CCshowValue);\n  $(document).off('blur', '#cvv').on('blur', '#cvv', function(){\n    var CVV = $('#cvv');\n    CVV.data('value', CVV.val());\n    CVVmaskValue();\n  });\n\n  $(document).off('keypress', '#cvv').on('keypress', '#cvv', function(e){\n    if (e.keyCode == 13 && !$('#content-shipping').hasClass('disabled')) {\n      var CVV = $('#cvv');\n      CVV.data('value', CVV.val());\n      paymentValidation();\n    }\n  });\n  $(document).off('focus', '#cvv').on('focus', '#cvv', CVVshowValue);\n  $(document).on('change keyup', '.checkout #card_number', function(){\n    creditCardType();\n  });\n\n  checkoutPage.find('#card_number').focus();\n\n  $(document).off('click', '#btn-payment')\n    .one('click', '#btn-payment', function() {\n      button_spiner.start(this);\n      ClearError(checkoutPage);\n      if (true) { // add form valid\n        var params = {\n          card_number: checkoutPage.find('#card_number').data('value').replace(/\\D/g, ''),\n          card_type:   checkoutPage.find('#card_type').val(),\n          month:       checkoutPage.find('#month').val(),\n          year:        checkoutPage.find('#year').val(),\n          cvv:         checkoutPage.find('#cvv').data('value'),\n          billing_zip: checkoutPage.find('#billing_zip').val(),\n          phone:       checkoutPage.find('#phone').val()\n        };\n\n        Requests.set_form(params,\n          function () {\n            Tracker.setCustomerData({customer: params});\n            activeStep(nextStep());\n            button_spiner.stop(this);\n          },\n          function (message) {\n            showNotification('danger', message, '#shipping-message', checkoutPage);\n            button_spiner.stop(this);\n          }\n        );\n      }\n      return false;\n    });\n};\n\nShop.Checkout['vault_payment'] = function() {\n  var checkoutPage     = $('.checkout');\n  var paymentForm      = checkoutPage.find('form#payment');\n  var vaultMainContentId = 'vaultMainContent';\n  var vaultMainContent = checkoutPage.find('#' + vaultMainContentId);\n  paymentForm.hide();\n  vaultMainContent.show();\n\n  function initChasePayment(options) {\n    var onSubmitPayment = function(response) {\n      if(response.type == \"error\") {\n        Requests.failed_payment({error_code: response.code, error_message: response.message}, function() {\n          showNotification('danger', response['message'], '#payment-message', checkoutPage);\n        });\n      }\n      else if(response.type == \"success\") {\n        var successCallback = function() {\n          ClearError(checkoutPage);\n          vaultMainContent.hide();\n          activeStep(nextStep());\n          showDummyPaymentForm();\n          checkoutPage.find('form button.btn-action').hide();\n          ChasePayment.removeChase(options.id);\n          trackVWOEvent('payment', 'residentialEcommPayment', 'Payment section completed');\n        };\n        var errorCallback = function(response) {\n          showNotification('danger', response['message'], '#payment-message', checkoutPage);\n          var reloadSuccessCallback = function (response) {\n            ChasePayment.removeChase(options.id);\n            initChasePayment($.extend({}, options, { hostedPayment: response.hosted_payment } ));\n            showNotification('danger', window.I18n.payments.session_timed_out, '#payment-message', checkoutPage);\n          };\n          var reloadErrorCallback = function(response) {\n            showNotification('danger', response['message'], '#payment-message', checkoutPage);\n          };\n          Requests.get_vault_url(reloadSuccessCallback, reloadErrorCallback);\n        };\n        Requests.complete_payment(response.data, successCallback, errorCallback);\n      }\n    };\n    ChasePayment.init(options, onSubmitPayment);\n  }\n\n  function initCyberSourcePayment(options) {\n    var onSubmitPayment = function(response) {\n      if(response.type == \"error\") {\n        showNotification('danger', response['message'], '#payment-message', checkoutPage);\n      } \n      else if(response.type == \"success\") {\n        ClearError(checkoutPage);\n        vaultMainContent.hide();\n        activeStep(nextStep());\n        showDummyPaymentForm();\n        checkoutPage.find('form button.btn-action').hide();\n        CyberSource .removeCyberSource(options.id);\n        trackVWOEvent('payment', 'residentialEcommPayment', 'Payment section completed');\n      }\n    };\n    CyberSource.init(options.id, options.hostedPayment, onSubmitPayment);\n  }\n\n  function initFiservPayment(options) {\n    var onSubmitPayment = function(response) {\n      if(response.type == \"error\") {\n        showNotification('danger', response['message'], '#payment-message', checkoutPage);\n      }\n      else if(response.type == \"success\") {\n        var successCallback = function() {\n          ClearError(checkoutPage);\n          vaultMainContent.hide();\n          activeStep(nextStep());\n          showDummyPaymentForm();\n          checkoutPage.find('form button.btn-action').hide();\n          Fiserv.removeFiserv(options.id);\n          trackVWOEvent('payment', 'residentialEcommPayment', 'Payment section completed');\n        };\n        var errorCallback = function(response) {\n          showNotification('danger', response['message'], '#payment-message', checkoutPage);\n          Fiserv.sendAddCardResponseMessageToIframe('error');\n          var reloadSuccessCallback = function (response) {\n            Fiserv.removeFiserv(options.id);\n            initFiservPayment($.extend({}, options, { hostedPayment: response.hosted_payment } ));\n            showNotification('danger', window.I18n.payments.session_timed_out, '#payment-message', checkoutPage);\n          };\n          var reloadErrorCallback = function(response) {\n            showNotification('danger', response['message'], '#payment-message', checkoutPage);\n          };\n        };\n        Requests.complete_payment(response.data, successCallback, errorCallback);\n      }\n    };\n    Fiserv.init(options.id, options.hostedPayment, onSubmitPayment);\n  }\n\n  function initVault(options) {\n    var onSubmitPayment = function(response) {\n      if (response.success || response.status == 200) {\n        ClearError(checkoutPage);\n        vaultMainContent.hide();\n        activeStep(nextStep());\n        showDummyPaymentForm();\n        checkoutPage.find('form button.btn-action').hide();\n      }\n      else if(response.status === 401 || response.message.toLowerCase() === \"invalid token\") {\n        var successCallback = function (response) {\n          initVault($.extend({}, options, { url: response.hosted_payment.url }));\n          showNotification('danger', window.I18n.payments.session_timed_out, '#payment-message', checkoutPage);\n        };\n        var failureCallback = function (response) {\n          showNotification('danger', response['message'], '#payment-message', checkoutPage);\n        };\n\n        Requests.get_vault_url(successCallback, failureCallback);\n      }\n      else {\n        showNotification('danger', parseErrorMessage(response['message']), '#payment-message', checkoutPage);\n      }\n    };\n    Vault.init(options.id, options.url, onSubmitPayment);\n  }\n\n  function parseErrorMessage(message) {\n    var match = RegExp(/^\\s*\\[\\d+\\]/).exec(message);\n    if(match && match[0]) {\n      return match[0] + \" \" + window.I18n.payment_correction;\n    }\n    else {\n      return window.I18n.payment_correction\n    }\n  }\n\n  function showDummyPaymentForm() {\n    setFormValues();\n    paymentForm.show();\n    paymentForm.find('.btn-edit').show()\n  }\n\n  function setFormValues() {\n    checkoutPage.find('#card_number').val('\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022');\n    checkoutPage.find('#cvv').val('\u2022\u2022\u2022');\n    checkoutPage.find('#month').val('\u2022\u2022');\n    checkoutPage.find('#year').val('\u2022\u2022');\n    checkoutPage.find('#billing_zip').val('\u2022\u2022\u2022\u2022\u2022');\n  }\n\n  // Initialize Vault\n  if(vaultMainContent.data('vault').gateway_type == 'vault') {\n    initVault({ id: vaultMainContentId, url: vaultMainContent.data('vault').url });\n  } else if(vaultMainContent.data('vault').gateway_type == 'chase') {\n    initChasePayment({ id: vaultMainContentId, hostedPayment: vaultMainContent.data('vault')});\n  } else if(vaultMainContent.data('vault').gateway_type == 'cybs') {\n    initCyberSourcePayment({ id: vaultMainContentId, hostedPayment: vaultMainContent.data('vault') });\n  } else if(vaultMainContent.data('vault').gateway_type == 'fiserv') {\n    initFiservPayment({ id: vaultMainContentId, hostedPayment: vaultMainContent.data('vault') })\n  }\n};\n\nShop.Checkout['review'] = function(step) {\n  gtmVirtualPageview('/cart/checkout/review', 'Checkout - Review');\n  Tracker.sendData({page: '/cart/checkout/review'});\n  trackVWOEvent('review', 'residentialEcommReviewOrder', 'Order review completed');\n  var checkoutPage = $('.checkout');\n  var modal = $('#modal_window_checkout');\n  checkoutPage.find('#btn-review').focus();\n  checkoutPage.find('.previous-btn').removeClass('d-none');\n\n  checkoutPage.find('table.shopping-cart tr').each(function(){\n    if ( !$(this).data('accessories') || String($(this).data('type')) == 'wireless' ) {\n      $(this).find('.quantity').prop('disabled', true)\n    }\n  });\n\n  $(document).off('click', '#btn-review')\n    .on('click', '#btn-review', function() {\n      button_spiner.start(this);\n      ClearError(checkoutPage);\n      var qty, pk, accessories = {};\n\n      checkoutPage.find('table.shopping-cart tr').each(function(){\n        if ( $(this).find('.quantity').val() && $(this).data('accessories') ) {\n          qty = parseInt( $(this).find('.quantity').val() );\n          pk = parseInt( $(this).data('pk') );\n          accessories[pk] = qty;\n        }\n      });\n\n      var params = {\n        speed: checkoutPage.find('#speed').val(),\n        form: {\n          accessories: accessories\n        },\n        tracking: Tracker.getTrackingData()\n      };\n      if (checkoutPage.find(\"#applied_code\").val() !== \"\") {\n        params['coupon_code'] = checkoutPage.find(\"#applied_code\").val();\n      }\n\n      if (pci_enabled()) {\n        Requests.account_provision(params,\n          function (response) {\n            window.open(response['url'], '_self');\n            trackVWOEvent('purchase', 'residentialCompletedPurchase', 'Successful purchase');\n          },\n          function (message) {\n            button_spiner.stop(this);\n            showNotification('danger', message, '#review-message', checkoutPage);\n          }\n        );\n      } else {\n        Requests.create_order(params,\n          function (response) {\n            window.open(response['url'], '_self');\n          },\n          function () {\n            var template = document.getElementById('paymethod_fail_template').innerHTML.trim();\n            var to_html = Mustache.render(template);\n            button_spiner.stop(this);\n            ClearError(checkoutPage);\n            activeStep('payment');\n            modal.html(to_html);\n            modal.modal('show');\n          },\n          function (message) {\n            button_spiner.stop(this);\n            if (/credit card/.test(message)){\n              $('#payment').find('.btn-edit').click();\n              showNotification('danger', message, '#payment-message', checkoutPage);\n            } else {\n              showNotification('danger', message, '#review-message', checkoutPage);\n            }\n          }\n        );\n      }\n      return false;\n    });\n\n  $(document).off('change', '#speed')\n    .on('change', '#speed', function() {\n      change_total();\n    });\n\n  $(document).off('change', '.checkout .quantity').on('change', '.checkout .quantity', function(){\n    recalculationPrice( checkoutPage, '#review-message', this );\n    change_total();\n  });\n\n\n  $(document).off('click', '#apply_coupon')\n    .on('click', '#apply_coupon', function() {\n      var params = {\n        coupon_code: checkoutPage.find('#coupon_code').val().toUpperCase()\n      };\n      Requests.apply_coupon(params,\n        function (response) {\n          var discount_amount = parseFloat(response.message);\n          var sub_total = parseFloat(checkoutPage.find('.subtotal-price').text().replace(/[^\\.\\d]/gi, ''));\n          var speed = parseFloat(checkoutPage.find('#speed').val());\n          checkoutPage.find('#apply_coupon').prop(\"disabled\", true);\n          checkoutPage.find('#apply_coupon').html(\"Applied\");\n          checkoutPage.find('.coupon_code .info').removeClass('error');\n          checkoutPage.find('#coupon_code').removeClass('error');\n          checkoutPage.find('.coupon_code .info').html(checkoutPage.find('#coupon_code').val().toUpperCase());\n          checkoutPage.find('.coupon_code .info').append(\"<span class='pull-right'> - \" + (is_canadian_env() ? \"CAD $\" : \"$\") + response.message + \"</span>\");\n          checkoutPage.find('.subtotal-price').html(currencyConverter(sub_total - discount_amount));\n          checkoutPage.find('.total-price').html(currencyConverter(sub_total + speed - discount_amount));\n          checkoutPage.find('#applied_code').val(checkoutPage.find('#coupon_code').val().toUpperCase());\n        },\n        function (info) {\n          checkoutPage.find('#applied_code').val(\"\");\n          checkoutPage.find('.coupon_code .info').html(info.message);\n          checkoutPage.find('.coupon_code .info').addClass('error');\n          checkoutPage.find('#coupon_code').addClass('error');\n          checkoutPage.find('.code-input').addClass('info_highlight');\n        }\n      );\n    });\n\n  $('.info_close').click(function(){\n    recalculationPrice( checkoutPage, '#review-message', this );\n    change_total();\n    checkoutPage.find('#applied_code').val('');\n    checkoutPage.find('#coupon_code').val('');\n    checkoutPage.find('#coupon_code').removeClass('error');\n    checkoutPage.find('.coupon_code div.info').html('');\n    checkoutPage.find('.coupon_code div.info').removeClass('error');\n    checkoutPage.find('.code-input').removeClass('info_highlight has_value');\n    checkoutPage.find('#apply_coupon').html(\"Apply\");\n    checkoutPage.find('#apply_coupon').prop(\"disabled\", true);\n    return false;\n  });\n  $('#coupon_code').on('keyup',function(e){\n    recalculationPrice( checkoutPage, '#review-message', this );\n    change_total();\n    if($(this).val().trim().length === 0) {\n      checkoutPage.find('#apply_coupon').prop(\"disabled\", true);\n      checkoutPage.find('.code-input').removeClass('has_value');\n    } else {\n      checkoutPage.find('#apply_coupon').prop(\"disabled\", false);\n      checkoutPage.find('#apply_coupon').html(\"Apply\");\n      checkoutPage.find('#coupon_code').removeClass('error');\n      checkoutPage.find('.coupon_code div.info').html('');\n      checkoutPage.find('.coupon_code div.info').removeClass('error');\n      checkoutPage.find('.code-input').removeClass('info_highlight');\n      checkoutPage.find('.code-input').addClass('has_value');\n    }\n  });\n};\nfunction recalculationPrice( selector, error_selector, select ){\n  var error_massage = isOfficeDevice(selector) ? window.I18n['office_dect_error'] : window.I18n['dect_error'];\n  if ( isMaxDevice(selector) ){\n    if ( select ) $(select).val(1).trigger('change');\n    showNotification('danger', error_massage, error_selector, selector);\n    return false;\n  } else {\n    ClearError(selector);\n  }\n\n  var qty = 0, price = 0.0, totalPrice = 0.0, localPrice = 0.0;\n\n  selector.find('table.shopping-cart tr').each(function(){\n    price = parseFloat( $(this).data('price').toString().replace(/[^\\.\\d]/gi, '') );\n\n    if ( $(this).find('.quantity').val() ) {\n      qty = parseInt( $(this).find('.quantity').val() );\n      localPrice = price * qty;\n    }else{\n      localPrice = price;\n    }\n    totalPrice += localPrice;\n    if ($(this).data('add_accessory') == true) $(this).find('td.price').text( currencyConverter( localPrice ) );\n  });\n  selector.find('.subtotal-price').text( currencyConverter( totalPrice ) );\n  selector.find('.total-price').text( currencyConverter( totalPrice ) );\n}\n\nfunction isMaxDevice(selector, add) {\n  var countDevices = 0,\n      devicesQuantity = isOfficeDevice(selector) ? 10 : 4;\n\n  selector.find('table.shopping-cart tr').each(function(){\n    var qty = parseInt($(this).find('.quantity').val());\n    device_type = (String($(this).data('type')));\n\n    if ( ['STREAM_HUB_BRIDGE'].indexOf(String($(this).data('type'))) != -1 ){\n      countDevices = 1;\n    }\n    // wireless and home monitoring are not counted to max DECT devices\n    else if (device_type.match(/wireless|hm_|battery|adapter.*(4g)|keypad/) == null && qty ) {\n      countDevices += qty;\n    }\n  });\n\n  return add ? countDevices >= devicesQuantity : countDevices > devicesQuantity;\n}\n\nfunction isOfficeDevice(selector) {\n  var firstDeviceType = selector.find('table.shopping-cart tr:first-child').data('type');\n  return /OFFICE/.test(firstDeviceType);\n}\n\nfunction setLocationHash(step) {\n  var checkoutPage = $('.checkout');\n  var current = step || checkoutPage.find('.header .item.active').data('step');\n  prohibitSteps = true;\n\n  if (current == 'shipping') {//for shipping doesn't save hashchange to the history\n    history.replaceState(null, null, \"#\" + current);\n  } else {\n    window.location.hash = current;\n  }\n}\n\nfunction activeStep(step) {\n  var checkoutPage = $('.checkout'),\n      completed = true;\n  setLocationHash(step);\n\n  Requests.get_form(\n    function(form){\n      LOCALE = form['locale'];\n      Experiment.exp = form['exp'];\n      if (pci_enabled()) checkoutPage.find('#vaultMainContent').data('vault', form['vault']);\n\n      checkoutPage.find('.header .item').removeClass('active');\n      checkoutPage.find('.header .circle').removeClass('active');\n      checkoutPage.find('.items-content .item').addClass('disabled d-none d-md-block');\n      checkoutPage.find('.previous-btn').addClass('d-none');\n\n      checkoutPage.find('.header-' + step + ' .item').addClass('active');\n      checkoutPage.find('.'+ step + '.circle').addClass('active');\n      checkoutPage.find('.content-' + step).removeClass('disabled d-none d-md-block');\n      $('.header .item').each(function(index) {\n        if($(this).hasClass('active')) {\n          completed = false;\n        } else {\n          if(completed) {\n            $(this).addClass('completed');\n            $('.items-content .item').eq(index).addClass('completed');\n            $('.header .circle').eq(index).addClass('completed');\n          }\n        }\n      });\n      disabledBlock();\n      successBlock(form, step);\n      creditCardType();\n      CCmaskValue();\n      CVVmaskValue();\n      new Shop.Checkout[step](step);\n      prohibitSteps = false;\n    }\n  );\n}\n\nfunction disabledBlock() {\n  $('.items-content .item').each(function(i, item){\n    if ($(item).hasClass('disabled')){\n      $(item).find('input, button:not(.btn-edit), select, a').prop('disabled', true);\n    }else{\n      $(item).find('input, button:not(#apply_coupon), select, a').prop('disabled', false);\n      if ($('#city_state').length && $('#city_state').val().length == 0) {\n        $(item).find('#city_state').attr('disabled', true);\n      }\n    }\n  });\n}\n\nfunction successBlock(form, step){\n  var checkoutPage = $('.checkout');\n  checkoutPage.find('form button.btn-action').hide();\n\n  $.each(form, function(i, v){\n    if (v == true && $('.content-' + i).hasClass('disabled')){\n      var $editButton = $('.item').find(\"[data-step='\" + i + \"']\");\n      var template = document.getElementById('complete_header').innerHTML.trim();\n      var to_html = Mustache.render(template);\n      if(canShowEditButton(i)) $editButton.show();\n      $editButton.prev().hide();\n      $('.header-' + i).find('.step').html(to_html);\n    } else {\n      var number = $('.content-' + i).find('.btn-edit').data('number');\n      var template = document.getElementById('default_header').innerHTML.trim();\n      var to_html = Mustache.render(template, { number: number });\n      if (pci_enabled() && !number) number = $('.checkout').find('#vaultMainContent').data('number');\n      $('.item').find(\"[data-step='\" + step + \"']\").hide().prev().show();\n      $('.header-' + i).find('.step').html(to_html);\n    }\n  });\n}\n\nfunction canShowEditButton(tab) {\n  if(pci_enabled() && tab === 'shipping') {\n    return false;\n  }\n  return true;\n}\n\nfunction nextStep() {\n  var checkoutPage = $('.checkout');\n  var STEPS = [ 'shipping', 'payment', 'review' ];\n  var step = checkoutPage.find('.header .item.active').data('step');\n  var index = STEPS.indexOf(step);\n  return STEPS[index + 1];\n}\n\nis_canadian_env = function () {\n  return LOCALE == \"ca\";\n};\n\nfunction showNotification(type, message, id, container) {\n  var messageBlock = container.find(id);\n  var template = document.getElementById('checkout_notification').innerHTML.trim();\n  var to_html = Mustache.render(template, {type: type, message: message});\n  messageBlock.html(to_html);\n}\n\nfunction ClearError(container) {\n  container.find(\".message\").html('');\n}\n\nfunction formatCreditCard(){\n  $('input#month').payform('formatCardMonthYear');\n  $('input#year').payform('formatCardMonthYear');\n  $('input#cvv').payform('formatCardCVC');\n  $('input#card_number').payform('formatCardNumber');\n}\n\nfunction creditCardType() {\n  var card_number = $('#card_number');\n  var ccnum = card_number.data('value') || card_number.val();\n  var cctype = $('#cctype');\n  var type = $('#card_type');\n  var cardType = $.payform.parseCardType(ccnum) || '';\n  cctype.removeClass('cct-mastercard cct-amex cct-visa cct-discover');\n\n  if (cardType == 'amex') {\n    type.val('AMERICANEXPRESS');\n    cctype.addClass('cct-amex');\n  } else if (cardType == 'discover' && !is_canadian_env()) {\n    type.val( (cardType).toUpperCase() );\n    cctype.addClass('cct-' + cardType);\n  } else if (cardType.match(/^(visa|mastercard)/)) {\n    type.val( (cardType).toUpperCase() );\n    cctype.addClass('cct-' + cardType);\n  } else {\n    type.val('');\n  }\n}\n\nfunction CCshowValue(){\n  var CCNumber = $('#card_number');\n  var valNumber = CCNumber.data('value');\n  if (valNumber) {\n    CCNumber.val(valNumber);\n    creditCardType();\n  }\n}\n\nfunction CCmaskValue(){\n  var CCNumber = $('#card_number');\n  if (CCNumber.length && CCNumber.val().length > 4 && !CCNumber.hasClass('error')) {\n    CCNumber.val(new Array(CCNumber.val().toString().length - 3).join('\u2022') + CCNumber.val().substr(-4)); // change all but the last 4 digits to *\n  }\n}\n\nfunction CVVshowValue() {\n  var CVV = $('#cvv');\n  var valCVV = CVV.data('value');\n  if (valCVV) CVV.val(valCVV);\n}\n\nfunction CVVmaskValue() {\n  var CVV = $('#cvv');\n  if (CVV.length && CVV.val().length > 2 && !CVV.hasClass('error')) {\n    CVV.val(new Array(CVV.val().toString().length+1).join('\u2022')); // change all to *\n  }\n}\n\nfunction change_total(){\n  var checkoutPage = $('.checkout');\n  var speed = parseFloat(checkoutPage.find('#speed').val());\n  var total = parseFloat(checkoutPage.find('.subtotal-price').text().replace(/[^\\.\\d]/gi, ''));\n  checkoutPage.find('#shipping_price').html(currencyConverter(speed));\n  checkoutPage.find('.total-price').html(currencyConverter(speed + total));\n}\n\nfunction currencyConverter(price){\n  return is_canadian_env() ? 'CAD $' + price.toFixed(2) : '$' + price.toFixed(2);\n}\n\nfunction changeZip(default_city_state){\n  var checkoutPage = $('.checkout');\n  var zipValUpper = checkoutPage.find('#zip').val().toUpperCase();\n  var zipRx = is_canadian_env() ? /^[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1} *\\d{1}[A-Z]{1}\\d{1}$/ : /^[\\d]{5}$/;\n  if ( zipValUpper.match(zipRx) ) {\n    $(this).val(zipValUpper).change();\n    Requests.verify_zip(zipValUpper,\n      function (response) {\n        if (checkoutPage.find('#city_state').length) {\n          if (response['cities']) {\n            var options = '';\n            $.each(response['cities'], function(index, value){\n              options += '<option value=\"' + value['city'] + '|' + value['state'] + '\">';\n              options += value['city'] + ', ' + value['state'] + \"</option>\";\n              if (value['state'] == QUEBEC_PROVINCE && isFR() && is_canadian_env()) {\n                $('#quebec_disclaimer').show();\n              } else {\n                $('#quebec_disclaimer').hide();\n              }\n            });\n            checkoutPage.find('#city_state').attr('disabled', false);\n            checkoutPage.find('#city_state').html(options);\n          }\n\n          checkoutPage.find('#city_state').change();\n\n          if (default_city_state) {\n            checkoutPage.find('#city_state').attr('disabled', true);\n            checkoutPage.find('#city_state').val(default_city_state);\n          }\n        } else {\n          checkoutPage.find('#city').val(response['cities'][0]['city']).change();\n          checkoutPage.find('#state').val(response['cities'][0]['state']).change();\n        }\n        // Need for JS validation\n        checkoutPage.find('#city_state').trigger(\"blur\");\n      },\n      function () {\n        if (checkoutPage.find('#city_state').length) {\n          if (default_city_state) {\n            var city_state = default_city_state.split('|');\n            checkoutPage.find('#city_state').attr('disabled', false);\n            checkoutPage.find('#city_state').html(\n              $('<option></option>')\n                .attr('value', default_city_state)\n                .text(city_state[0] + ', ' + city_state[1])\n            );\n          } else {\n            checkoutPage.find('#city_state').attr('disabled', true);\n            checkoutPage.find('#city_state').html(\n              $('<option></option>')\n                .attr('value', '')\n                .text('Please select')\n            );\n          }\n          checkoutPage.find('#city_state').change();\n        }\n      }\n    );\n  }\n}\n\nfunction setCityState(){\n  var checkoutPage = $('.checkout');\n  if ($('.header-shipping .item').hasClass('active') && $('#zip').val() && checkoutPage.find('#city_state').length) {\n    if (checkoutPage.find('#city_state').val() == \"\") changeZip();\n  }\n}\n\nfunction paymentValidation(){\n  Shop.FormProcessorInitializer = new Ooma.Form.ProcessorInitializer({\n    form: '#payment',\n    inputsValues: {\n      inputs: {\n        cardNumber: '#card_number',\n        cardDate: '#month',\n        cardDateYear: '#year',\n        cvv: '#cvv',\n        zip: '#billing_zip',\n        phoneNumber: '#phone'\n      },\n      errorsLabels: {\n        cardNumber: 'label[for=card_number]',\n        cardDate: 'label[for=month]',\n        cardDateYear: 'label[for=month]',\n        cvv: 'label[for=cvv]',\n        zip: 'label[for=billing_zip]',\n        phoneNumber: 'label[for=phone]'\n      }\n    },\n    submitButton: \"#btn-payment\"\n  });\n  Shop.FormProcessorInitializer.init();\n}\nfunction shippingValidation(){\n  Shop.FormProcessorInitializer = new Ooma.Form.ProcessorInitializer({\n    form: '#shipping',\n    callbacks: {\n      cityTrigger: function() { return Shop.ManualEntry }, // used to check if the field should be checked\n      stateTrigger: function() { return Shop.ManualEntry }, // used to check if the field should be checked\n      cityStateTrigger: function() { return !Shop.ManualEntry } // used to check if the field should be checked\n    },\n    inputsValues: Experiment.checkoutFields(),\n    lang: $('html').attr('lang').split('-')[0],\n    submitButton: \"#btn-shipping\"\n  });\n  Shop.FormProcessorInitializer.init();\n}\n\nfunction pci_enabled() {\n  return $('.checkout').find('#vaultMainContent').length != 0;\n}\n\n;\n$(document).ready(function(){\n    if (/mozilla/.test(navigator.userAgent.toLowerCase())){\n        $('link[type*=icon]').detach().appendTo('head');\n    }\n});\n\nfunction directCheckout() {\n  if ((location.pathname == '/cart/checkout') && ($.urlParam('offer'))) {\n    var url = '/cart?offer=' + $.urlParam('offer');\n    if ($.urlParam('add_skus')) url += '&add_skus=' + $.urlParam('add_skus');\n    window.location.href = url;\n  }\n}\n\ndirectCheckout();\n\n\n// Expose globals needed by inline scripts (WSHOP-893: remove when inline scripts are eliminated)\n// Expose named symbols onto window for use by inline <script> tags in ERB templates.\n// WSHOP-893: Eliminate inline scripts so these globals can be removed.\nfunction exposeGlobals(mapping) {\n  Object.keys(mapping).forEach(function(key) {\n    window[key] = mapping[key];\n  });\n}\n\nexposeGlobals({\n  Tracker: Tracker,\n  Requests: Requests,\n  Experiment: Experiment,\n  Shop: Shop,\n  Ooma: Ooma,\n  Localize: Localize,\n  button_spiner: button_spiner,\n  Mustache: Mustache,\n  Cookies: Cookies,\n  Vault: Vault,\n  ChasePayment: ChasePayment,\n  CyberSource: CyberSource,\n  Fiserv: Fiserv,\n  Ladda: Ladda,\n  Inputmask: Inputmask,\n  GoogleAddressAutocomplete: GoogleAddressAutocomplete,\n  gtmVirtualPageview: gtmVirtualPageview,\n  vwoEvent: vwoEvent,\n  fillInCityState: fillInCityState,\n  cityStateErrorCallback: cityStateErrorCallback,\n  is_canadian_env: is_canadian_env\n});\n"],
  "mappings": "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",
  "names": ["jqueryUjsInit", "$", "undefined", "rails", "$document", "xhr", "token", "obj", "name", "data", "event", "message", "options", "element", "method", "url", "withCredentials", "dataType", "button", "settings", "status", "error", "originAnchor", "urlAnchor", "link", "href", "target", "csrfToken", "csrfParam", "form", "metadataInput", "selector", "replacement", "answer", "callback", "e", "specifiedSelector", "nonBlank", "foundInputs", "input", "valueToCheck", "radiosForNameWithNoneSelected", "radioName", "requiredInputs", "checkedRadioButtonNames", "originalOptions", "metaClick", "handleRemote", "remote", "blankRequiredInputs", "nonBlankFileInputs", "aborted", "t", "i", "n", "r", "o", "a", "s", "u", "l", "c", "p", "d", "f", "h", "tag", "tag_text", "$el", "showSpiner", "chooseTitle", "checkoutPage", "state", "city", "params", "city_state", "$hCaptchaResponse", "$gRecaptchaResponse", "getOfferCookie", "isTeloHomeOffice", "fields", "factory", "Inputmask", "alias", "resolveAlias", "pastedValue", "opts", "elems", "that", "ndx", "el", "scopedOpts", "importAttributeOptions", "maskset", "generateMaskSet", "maskScope", "noremask", "value", "metadata", "definition", "str", "specials", "isInputEventSupported", "eventName", "evName", "isSupported", "isElementTypeSupported", "elementType", "aliasStr", "aliasDefinition", "npt", "userOptions", "attrOptions", "option", "dataoptions", "optionData", "importOption", "nocache", "ms", "analyseMask", "mask", "tokenizer", "escaped", "currentToken", "MaskToken", "match", "m", "openenings", "maskTokens", "openingToken", "currentOpeningToken", "alternator", "lastMatch", "groupToken", "isGroup", "isOptional", "isQuantifier", "isAlternator", "insertTestDefinition", "mtoken", "position", "maskdef", "prevMatch", "prevalidators", "prevalidatorsL", "prevalidator", "validator", "cardinality", "verifyGroupMarker", "isOpenGroup", "maskCurrentToken", "extraCondition", "defaultCase", "mndx", "reverseTokens", "maskToken", "reverseStatic", "st", "intMatch", "qt", "quantifier", "mq", "mq0", "mq1", "matches", "generateMask", "repeatStart", "masksetDefinition", "preProcessMask", "altMask", "msk", "ua", "mobile", "iemobile", "iphone", "actionObj", "isRTL", "undoValue", "skipKeyPressEvent", "skipInputEvent", "ignorable", "maxLength", "mouseEnter", "getMaskTemplate", "baseOnInput", "minimalPos", "includeInput", "maskTemplate", "ndxIntlzr", "pos", "test", "testPos", "lvp", "getLastValidPosition", "getMaskSet", "validPos", "getPlaceholder", "getTestTemplate", "resetMaskSet", "soft", "closestTo", "strict", "validPositions", "before", "after", "valids", "posNdx", "psNdx", "setValidPosition", "validTest", "fromSetValid", "isSelection", "positionsClone", "valid", "j", "vps", "needsValidation", "posMatch", "prevPosMatch", "getTests", "seekNext", "positionCanMatchDefinition", "result", "isValid", "stripValidPositions", "start", "end", "nocheck", "IsEnclosedStatic", "nextMatch", "startPos", "isMask", "tstPs", "testPositions", "lvTest", "lvTestAltArr", "checkAlternationMatch", "getTest", "def", "tests", "tndx", "selectBestMatch", "alternateNdx", "bestMatch", "indexPos", "lmnt", "ndxPos", "ndxInitializer", "insertStop", "latestMatch", "cacheDependency", "resolveTestFromToken", "loopNdx", "quantifierRecurse", "handleMatch", "isFirstMatch", "tokenGroup", "firstMatch", "resolveNdxInitializer", "optionalToken", "alternateToken", "malternateMatches", "maltMatches", "currentMatches", "loopNdxCnt", "altIndex", "currentPos", "ndxInitializerClone", "altIndexArr", "amndx", "ntndx", "ndx1", "altMatch", "ndx2", "altMatch2", "mamatch", "alternation", "altLocArr", "alndx", "qndx", "mergeLocators", "locator", "tst", "filterTests", "temp", "previousPos", "mtndx", "getBufferTemplate", "getBuffer", "noCache", "testNdx", "refreshFromBuffer", "buffer", "casing", "elem", "posBefore", "altArr1", "altArr2", "altArrC", "isMatch", "posObj", "maskPos", "_isValid", "rslt", "loopend", "chrs", "getBufferElement", "validatedPos", "possibleModifiedBuffer", "b", "refresh", "alternate", "validPsClone", "testsClone", "lastAlt", "isValidRslt", "altPos", "lAlt", "decisionPos", "altNdxs", "decisionTaker", "validInputs", "staticInputsBeforePos", "staticInputsBeforePosAlternate", "possibilityPos", "possibilities", "dp", "targetLvp", "trackbackAlternations", "originalPos", "newPos", "vp", "targetLocator", "tll", "ps", "equality", "pndx", "testTemplate", "handleRemove", "currentPosValid", "staticChar", "nPos", "snPos", "newBlock", "maskL", "seekPrevious", "writeBuffer", "caretPos", "triggerInputEvent", "caret", "staticAlternations", "prevTest", "checkVal", "writeOut", "nptvl", "inputValue", "charCodes", "initialNdx", "isTemplateMatch", "charCodeNdx", "bufferTemplateArr", "staticInput", "charCode", "keypress", "nextTest", "keypressEvent", "unmaskedvalue", "umValue", "unmaskedValue", "bufferValue", "begin", "notranslate", "translatePosition", "bffrLght", "range", "scrollCalc", "textNode", "sel", "determineLastRequiredPosition", "returnDefinition", "bl", "positions", "lvTestAlt", "clearOptionalTail", "rl", "lmib", "isComplete", "complete", "lrp", "aml", "EventRuler", "eventHandler", "ev", "imOpts", "returnVal", "events", "evArr", "patchValueProperty", "valueGet", "valueSet", "patchValhook", "type", "valhookGet", "valhookSet", "$elem", "getter", "setter", "installNativeValueSetFallback", "$input", "object", "valueProperty", "overruleRTL", "generalize", "pend", "keydownEvent", "k", "checkval", "forwardPosition", "valResult", "self", "pasteEvent", "tempValue", "valueBeforeCaret", "valueAfterCaret", "pasteValue", "inputFallBackEvent", "inputChar", "bufferTemplate", "setValueEvent", "focusEvent", "nptValue", "mouseleaveEvent", "clickEvent", "doRadixFocus", "clickPos", "radixPos", "selectedCaret", "clickPosition", "lvclickPosition", "lastPosition", "placeholder", "dblclickEvent", "cutEvent", "clipboardData", "clipData", "blurEvent", "mouseenterEvent", "submitEvent", "resetEvent", "initialValue", "valueBuffer", "firstAlt", "fn", "nptmask", "separator", "escapedSeparator", "minyear", "maxyear", "enteredyear", "enteredyear2", "hint", "currentyear", "maxYearPrefix", "maxYearPostfix", "maxxYear", "currentYearPrefix", "currentYearAndHint", "today", "length", "pchrs", "frontValue", "dayMonthValue", "year", "yearPrefix", "tmp", "maskedValue", "autoEscape", "txt", "escapedTxt", "seps", "mod", "suffixStripped", "needsRefresh", "charAtPos", "cbuf", "bufVal", "bufValOrigin", "escapedGroupSeparator", "radixSplit", "reg", "processValue", "isNegative", "floatValue", "signedFloatValue", "radixPosition", "rpb", "matchRslt", "integerValue", "bufferChar", "decimalPart", "radix", "bufClone", "kommaMatches", "dotMatches", "valueParts", "decPart", "digitsFactor", "positionInput", "canClear", "maskList", "response", "ajaxOptions", "thrownError", "processedValue", "cbuffer", "bufferStr", "regexPart", "openGroupCount", "RegexToken", "analyseRegex", "opengroups", "quantifierToken", "validateRegexToken", "fromGroup", "isvalid", "matchToken", "crrntndx", "matchGroup", "regexPartBak", "qm", "testExp", "exp", "tl", "regexToken", "require", "module", "exports", "payform", "__indexOf", "item", "cardFromNumber", "cardFromType", "defaultFormat", "formatBackCardNumber", "formatBackExpiry", "formatCardExpiry", "formatCardNumber", "formatForwardExpiry", "formatForwardSlashAndSpace", "hasTextSelected", "luhnCheck", "reFormatMonthYear", "reFormatCVC", "reFormatCardNumber", "reFormatExpiry", "restrictMonthYear", "restrictCVC", "restrictCardNumber", "restrictExpiry", "restrictNumeric", "_eventNormalize", "_getCaretPos", "_on", "ele", "rc", "re", "listener", "num", "card", "_i", "_len", "_ref", "digit", "digits", "odd", "sum", "cursor", "value_before_format", "is_android_chrome", "upperLength", "val", "which", "month", "prefix", "currentTime", "expiry", "cvc", "groups", "mon", "parts", "sep", "global", "objectToString", "isArray", "isFunction", "typeStr", "escapeRegExp", "string", "hasProperty", "propName", "primitiveHasOwnProperty", "primitive", "regExpTest", "testRegExp", "nonSpaceRe", "isWhitespace", "entityMap", "escapeHtml", "whiteRe", "spaceRe", "equalsRe", "curlyRe", "tagRe", "parseTemplate", "template", "tags", "lineHasNonSpace", "sections", "tokens", "spaces", "hasTag", "nonSpace", "indentation", "tagIndex", "stripSpace", "openingTagRe", "closingTagRe", "closingCurlyRe", "compileTags", "tagsToCompile", "mustache", "scanner", "Scanner", "chr", "openSection", "valueLength", "nestTokens", "squashTokens", "squashedTokens", "lastToken", "numTokens", "nestedTokens", "collector", "section", "index", "Context", "view", "parentContext", "cache", "context", "intermediateValue", "names", "lookupHit", "Writer", "key", "cacheKey", "isCacheEnabled", "partials", "config", "originalTemplate", "symbol", "subRender", "partial", "filteredIndentation", "partialByNl", "indentedValue", "escape", "defaultWriter", "Mustache", "_toString", "_trim", "trim", "text", "trimLeft", "trimRight", "escapeMap", "escapeHTML", "regexCache", "Renderer", "in_recursion", "html", "line", "lines", "regex", "otag", "ctag", "pragma", "content", "renderedBefore", "renderedAfter", "renderedContent", "row", "new_regex", "tag_replace_callback", "operator", "delimiters", "dels", "is_kinda_truthy", "bool", "childValue", "path", "value_context", "needle", "haystack", "_context", "iterator", "ctx", "array", "generator", "byOtag", "byCtag", "send_fun", "renderer", "stuff", "root", "ich", "templateString", "raw", "scripts", "script", "trash", "inputs", "unfocusedFields", "fieldsAmount", "fieldValidation", "setValidator", "showError", "label", "locale", "lang", "validators", "address", "regExpSpace", "regExpAllNumbers", "regUsExpAllLetters", "regCaExpAllLetters", "regUsExpAllSymbols", "regCaExpAllSymbols", "acceptedSympols", "onlyLetters", "po_box_patt", "box_po_patt", "post_office_box_patt", "office_box_patt", "pob_patt", "start_with_po_box_patt", "start_with_post_patt", "email", "regExp", "usRegexp", "caRegexp", "stateRegexp", "cityState", "phoneNumber", "regexp", "zip", "zipRegexp", "postalCodeRegexp", "zip4", "zip4Regexp", "cvv", "todayMonth", "todayYear", "monthValue", "yearValue", "monthRegex", "yearRegex", "validMonthMatchRegex", "validYearMatchRegex", "finishedMonth", "finishedYear", "validMonth", "validYear", "ccnum", "correctCardType", "checksum", "factor", "number", "americanExpress", "masterCard", "visa", "discover", "responseData", "handle", "processData", "init", "vaultMainContentId", "_callback", "prepareVaultFrame", "eventMethod", "eventer", "messageEvent", "vaultFrame", "divElem", "getResponseData", "addCallbackFn", "errorMap", "errorCodes", "errorMessage", "renderIframe", "removeChase", "iframeObj", "divEle", "scriptObj", "hostedPayment", "formId", "parentDivId", "iframeId", "_hostedPayment", "submitForm", "prepareForm", "prepareHiddenInput", "id", "inputEle", "prepareIframe", "cybsResponseFunctions", "msg", "jsonObj", "eventListner", "parentDiv", "removeCyberSource", "FISERV", "addCssPathToIframe", "iframe", "sendMessageToIframe", "checkIframeReadiness", "getErrorMessage", "code", "fiservResponseFunctions", "mopData", "messageHandler", "sendAddCardResponseMessageToIframe", "iframeElem", "removeFiserv", "title", "trackingData", "getData", "destroyData", "trackingInfo", "keys", "_k", "v", "setWebData", "setOfferData", "setCustomerData", "setGoogleData", "setXYZData", "setMarketoData", "setSfdcData", "setAffiliateData", "setDataToStorage", "web_data", "getDataFromStorage", "generateId", "customer_data", "customer_params", "google_data", "storage_data", "google_params", "xyz_data", "xyz_params", "sfdc_data", "affiliate_data", "marketo_data", "chars", "desc", "facebook_message", "autocomplete", "fillInDefaults", "defaults", "cities", "fillInForm", "place", "component", "addressType", "geolocate", "geolocation", "circle", "$cart", "costAccessories", "price", "qty", "countryRegex", "discountOffers", "offer", "originalPrice", "subTotal", "localPrice", "cartValue", "error_message", "success_callback", "error_callback", "not_verify_callback", "paymethod_callback", "complete_callback", "phone_numbers", "clear_messages", "clear_containers", "template1", "template2", "to_html1", "to_html2", "area_code", "check_number", "iframed_data", "number_prefix", "show_notification", "message_block", "to_html", "$form", "$zip", "showCaTax", "set_inputmask", "is_canadian_env", "showNotification", "refreshValidationMessage", "to", "from", "currentMessages", "$errorDiv", "specification", "buildCitiesSelect", "citiesList", "addSalesTaxNotification", "nexusUSStateList", "noteMessage", "fillInTable", "showTaxes", "currentLocale", "step", "eventLabel", "customNode", "disabled", "closeAllSelect", "elmnt", "x", "y", "xl", "yl", "arrNo", "ll", "selElmnt", "sl", "noHashURL", "results", "modalEmailAddress", "getAccessories", "pk", "accessories", "getProductCartCookie", "getSubTotal", "productCart", "updateProductCartCookie", "cart", "updateProductQuantityCookie", "cartCookie", "hideQuantityDropDown", "isHmDevices", "add_accessory_device", "parentTr", "quantity", "image", "tableAccessories", "hide_quantity", "is_sensor", "is_dect", "is_default_qty", "error_massage", "template_data", "parseCartCookieAsUrlParam", "urlParams", "skuNames", "add_accessory_from_query_param", "sku_button", "sku_tr", "sku_array", "add_skus", "skus", "skus_length", "reload_bundle_device", "bundle", "device", "$shoppingCart", "dect", "disable_actions", "change_bundle_device", "offerings", "$bundleDevice", "parent_div", "rowAccessories", "get_accessories", "emailError", "emailInput", "emailId", "errorMsg", "emailIsValid", "repositionModal", "modal", "dialog", "STEPS", "showCheckoutPage", "hashStep", "count_cities", "addressAutocomlete", "counter", "cityLabel", "stateLabel", "addressCorrection", "addressDefault", "addressProceed", "b_zip", "CCNumber", "CVV", "paymentForm", "vaultMainContent", "initChasePayment", "onSubmitPayment", "successCallback", "showDummyPaymentForm", "errorCallback", "reloadSuccessCallback", "reloadErrorCallback", "initCyberSourcePayment", "initFiservPayment", "initVault", "failureCallback", "parseErrorMessage", "setFormValues", "discount_amount", "sub_total", "speed", "info", "error_selector", "select", "totalPrice", "add", "countDevices", "devicesQuantity", "firstDeviceType", "current", "completed", "$editButton", "tab", "container", "messageBlock", "card_number", "cctype", "cardType", "valNumber", "valCVV", "total", "default_city_state", "zipValUpper", "zipRx", "mapping"]
}
