{"version":3,"sources":["jquery.mousewheel.js","autoNumeric.js","jquery.inputmask-2.5.9.js"],"names":["factory","define","amd","exports","module","jQuery","$","nullLowestDeltaTimeout","lowestDelta","toFix","toBind","document","documentMode","slice","Array","prototype","event","fixHooks","i","length","mouseHooks","special","mousewheel","version","setup","this","addEventListener","handler","onmousewheel","data","getLineHeight","getPageHeight","teardown","removeEventListener","elem","parseInt","fn","css","height","settings","adjustOldDeltas","absDelta","pageHeight","orgEvent","window","args","call","arguments","delta","deltaX","deltaY","fix","type","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","lineHeight","Math","max","abs","shouldAdjustOldDeltas","deltaFactor","unshift","clearTimeout","setTimeout","nullLowestDelta","dispatch","handle","apply","extend","bind","trigger","unmousewheel","unbind","require","setElementSelection","that","start","end","r","undefined","selectionStart","focus","createTextRange","collapse","moveEnd","moveStart","select","selectionEnd","convertKeyToNumber","key","autoCode","$this","each","k","val","autoNumeric","tagList","vmax","vMax","toString","split","vmin","vMin","mDec","mRound","allowLeading","aNeg","replace","mInt","vminLength","vmaxLength","altDec","aDec","aSep","aNegReg","aNegRegAutoStrip","skipFirstAutoStrip","RegExp","skipLastAutoStrip","allowed","aNum","allowedAutoStrip","numRegAutoStrip","autoStrip","s","strip_zero","aSign","indexOf","parts","m","match","join","lZero","nSign","charAt","strip_reg","negativeBracket","brackets","pSign","nBracket","hasFocus","removeBrackets","checkValue","value","checkSmall","substring","fixNumber","presentNumber","checkEmpty","iv","signOnEmpty","wEmpty","autoGroup","testNeg","empty","digitalGroup","dGroup","ivSplit","test","has_aNeg","autoRound","round","truncateZeros","ivRounded","regex","rDec","aPad","dPos","lastIndexOf","vdPos","cDec","zeros","rLength","tRound","ivArray","odd","onePass","truncateDecimal","paste","autoCheck","AutoNumericHolder","$that","formatted","settingsClone","autoGet","obj","getHolder","update","holder","get","init","e","position","ctrlKey","cmdKey","metaKey","shiftKey","selection","createRange","text","kdCode","keyCode","which","processed","setSelection","setReal","min","setPosition","pos","getBeforeAfter","getBeforeAfterStriped","normalizeParts","left","right","new_value","setValueParts","signPosition","aSignLen","valueLen","expandSelectionOnSign","sign_position","checkPaste","oldParts","valuePartsBeforePaste","substr","skipAllways","processAllways","processKeypress","cCode","String","fromCharCode","formatQuick","leftLength","subParts","left_ar","leftReg","newLeft","methods","options","tagData","$input","is","defaults","runOnce","error","prop","toLowerCase","inArray","aForm","setValue","anDefault","on","readOnly","preventDefault","skip","checkVal","$settings","inVal","onEmpty","origValue","groupedValue","change","destroy","off","removeData","strip","set","valueIn","testValue","attr","isNumeric","setEvent","getValue","eq","getString","isAutoNumeric","formParts","serialize","formIndex","index","allFormElements","aiIndex","scIndex","rsubmitterTypes","rsubmittable","rcheckableType","rnonAutoNumericTypes","count","field","name","localName","disabled","checked","push","miniParts","scElement","getArray","formFields","serializeArray","getSettings","method","sNumber","isInputEventSupported","eventName","el","createElement","isSupported","setAttribute","resolveAlias","aliasStr","opts","aliasDefinition","aliases","alias","generateMaskSets","ms","genmasks","getMaskTemplate","mask","numericInput","reverse","escaped","outCount","greedy","repeat","placeholder","singleMask","map","element","outElem","escapeChar","optionalmarker","maskdef","definitions","cardinality","repeatedMask","concat","getTestingChain","isOptional","newBlockMarker","prevalidators","prevalidatorsL","prevalidator","validator","optionality","offset","casing","def","markOptional","maskPart","splitFirstOptionalStartPart","mpl","maskParts","generateMask","maskPrefix","metadata","newMask","maskTemplate","optionalStartMarkers","optionalEndMarkers","splitFirstOptionalEndPart","masks","_buffer","buffer","tests","lastValidPosition","isFunction","isArray","ndx","msk","sort","a","b","maskScope","masksets","activeMasksetIndex","actionObj","$el","skipDatepickerCheck","isRTL","valueOnFocus","getActiveBuffer","skipKeyPressEvent","skipInputEvent","ignorable","getActiveMaskSet","getActiveTests","getActiveBufferTemplate","isValid","c","strict","_isValid","activeMaskset","testPos","determineTestPosition","loopend","chrs","getBufferElement","skipOptionalPartCharacter","refresh","result","maskForwards","results","lowestPos","lowestIndex","hasValidActual","currentActiveMasksetIndex","actualBuffer","actualLVP","seekPrevious","rsltValid","maskPos","lvp","setBufferElement","newValidPosition","isMask","maxForward","seekNext","fw","getMaskLength","rslt","determineActiveMasksetIndex","currentMasksetIndex","highestValid","next","clearBuffer","currentBuffer","calculatedLength","maskL","autoPrepare","prepareBuffer","toUpperCase","j","writeBuffer","input","caretPos","_valueSet","caret","stripNomasks","setReTargetPlaceHolder","getPlaceHolder","writeOut","nptvl","intelliCheck","inputValue","truncateInput","_valueGet","charCode","p","keypressEvent","charCodeAt","escapeRegex","str","inputmask","clearOptionalTail","tmpBuffer","pop","TranslatePosition","begin","range","npt","jquery","setSelectionRange","duplicate","scrollLeft","scrollWidth","insertMode","isComplete","complete","highestValidPosition","aml","msComplete","patchValueProperty","valueProperty","valueGet","valueSet","Object","getOwnPropertyDescriptor","defineProperty","$self","inputData","autoUnmask","triggerHandler","__lookupGetter__","__lookupSetter__","__defineGetter__","__defineSetter__","valHooks","inputmaskpatch","$elem","shiftL","maskJumps","trbuffer","bl","shiftR","t","lengthBefore","HandleRemove","BACKSPACE","DELETE","pend","isSelection","posBegin","radixPoint","ml","isNaN","newpos","firstMaskPos","keydownEvent","iphone","showTooltip","END","PAGE_DOWN","HOME","PAGE_UP","ESCAPE","click","INSERT","RIGHT","LEFT","currentCaretPos","onKeyDown","ignorables","checkval","initialIndex","minimalForwardPosition","self","altKey","pcaret","isSlctn","lmnt","radixPosition","np","lastUnmaskedPosition","bfrClone","nlvp","nextPos","onKeyValidation","newCaretPosition","returnValue","keyupEvent","onKeyUp","TAB","showMaskOnFocus","hasClass","pasteEvent","pasteValue","onBeforePaste","mobileInputEvent","currentValue","maxLength","dir","rightAlignNumerics","removeAttr","removeClass","closest","showMaskOnHover","nptValue","clearMaskOnLostFocus","clearIncomplete","addClass","clickPosition","selectedCaret","lastPosition","skipRadixDance","PasteEventType","oncomplete","onincomplete","oncleared","android","androidfirefox","androidchrome","kindle","msie1x","initialValue","onBeforeMask","activeElement","events","_data","eventType","eventHandlers","eventHandler","namespace","umValue","unmaskedValue","onUnMask","valueBuffer","ua","ScriptEngineMajorVersion","Function","navigator","userAgent","quantifiermarker","groupmarker","noop","9","definitionSymbol","*","ALT","CAPS_LOCK","COMMA","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","CONTROL","DOWN","ENTER","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PERIOD","SHIFT","SPACE","UP","WINDOWS","format","action","attrOptions","dataoptions","parseJSON","ex"],"mappings":"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","file":"../client-angular-strap.min.js","sourcesContent":["/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh)\n * Licensed under the MIT License (LICENSE.txt).\n *\n * Version: 3.1.9\n *\n * Requires: jQuery 1.2.2+\n */\n\n(function (factory) {\n    if ( typeof define === 'function' && define.amd ) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.9',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n        },\n\n        getLineHeight: function(elem) {\n            return parseInt($(elem)['offsetParent' in $.fn ? 'offsetParent' : 'parent']().css('fontSize'), 10);\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n","/**\n * autoNumeric.js\n * @author: Bob Knothe\n * @author: Sokolov Yura\n * @version: 1.9.43 - 2015-12-19 GMT 4:00 PM / 16:00\n *\n * Created by Robert J. Knothe on 2010-10-25. Please report any bugs to https://github.com/BobKnothe/autoNumeric\n * Contributor by Sokolov Yura on 2010-11-07\n *\n * Copyright (c) 2011 Robert J. Knothe http://www.decorplanit.com/plugin/\n *\n * The MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n */\n(function (factory) {\n    if (typeof define === \"function\" && define.amd) {\n        /** AMD. Register as an anonymous module. */\n        define([\"jquery\"], factory);\n    } else if (typeof module === \"object\" && module.exports) {\n        /** Node/CommonJS */\n        module.exports = factory(require(\"jquery\"));\n    } else {\n        /** Browser globals */\n        factory(window.jQuery);\n    }\n}(function ($) {\n    \"use strict\";\n    /*jslint browser: true*/\n    /*global jQuery: false*/\n    /*Cross browser routine for getting selected range/cursor position\n     */\n\n    /**\n     * Cross browser routine for getting selected range/cursor position\n     */\n\n    function getElementSelection(that) {\n        var position = {};\n        if (that.selectionStart === undefined) {\n            that.focus();\n            var select = document.selection.createRange();\n            position.length = select.text.length;\n            select.moveStart('character', -that.value.length);\n            position.end = select.text.length;\n            position.start = position.end - position.length;\n        } else {\n            position.start = that.selectionStart;\n            position.end = that.selectionEnd;\n            position.length = position.end - position.start;\n        }\n        return position;\n    }\n\n    /**\n     * Cross browser routine for setting selected range/cursor position\n     */\n\n    function setElementSelection(that, start, end) {\n        if (that.selectionStart === undefined) {\n            that.focus();\n            var r = that.createTextRange();\n            r.collapse(true);\n            r.moveEnd('character', end);\n            r.moveStart('character', start);\n            r.select();\n        } else {\n            that.selectionStart = start;\n            that.selectionEnd = end;\n        }\n    }\n\n    /**\n     * run callbacks in parameters if any\n     * any parameter could be a callback:\n     * - a function, which invoked with jQuery element, parameters and this parameter name and returns parameter value\n     * - a name of function, attached to $(selector).autoNumeric.functionName(){} - which was called previously\n     */\n\n    function runCallbacks($this, settings) {\n        /**\n         * loops through the settings object (option array) to find the following\n         * k = option name example k=aNum\n         * val = option value example val=0123456789\n         */\n        $.each(settings, function (k, val) {\n            if (typeof val === 'function') {\n                settings[k] = val($this, settings, k);\n            } else if (typeof $this.autoNumeric[val] === 'function') {\n                /**\n                 * calls the attached function from the html5 data example: data-a-sign=\"functionName\"\n                 */\n                settings[k] = $this.autoNumeric[val]($this, settings, k);\n            }\n        });\n    }\n\n    /**\n     * Converts the vMin, vMax & mDec string to numeric value\n     */\n\n    function convertKeyToNumber(settings, key) {\n        if (typeof(settings[key]) === 'string') {\n            settings[key] *= 1;\n        }\n    }\n\n    /**\n     * Preparing user defined options for further usage\n     * merge them with defaults appropriately\n     */\n\n    function autoCode($this, settings) {\n        runCallbacks($this, settings);\n        settings.tagList = ['b', 'caption', 'cite', 'code', 'dd', 'del', 'div', 'dfn', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ins', 'kdb', 'label', 'li', 'output', 'p', 'q', 's', 'sample', 'span', 'strong', 'td', 'th', 'u', 'var'];\n        var vmax = settings.vMax.toString().split('.'),\n            vmin = (!settings.vMin && settings.vMin !== 0) ? [] : settings.vMin.toString().split('.');\n        convertKeyToNumber(settings, 'vMax');\n        convertKeyToNumber(settings, 'vMin');\n        convertKeyToNumber(settings, 'mDec'); /** set mDec if not defined by user */\n        settings.mDec = (settings.mRound === 'CHF') ? '2' : settings.mDec;\n        settings.allowLeading = true;\n        settings.aNeg = settings.vMin < 0 ? '-' : '';\n        vmax[0] = vmax[0].replace('-', '');\n        vmin[0] = vmin[0].replace('-', '');\n        settings.mInt = Math.max(vmax[0].length, vmin[0].length, 1);\n        if (settings.mDec === null) {\n            var vmaxLength = 0,\n                vminLength = 0;\n            if (vmax[1]) {\n                vmaxLength = vmax[1].length;\n            }\n            if (vmin[1]) {\n                vminLength = vmin[1].length;\n            }\n            settings.mDec = Math.max(vmaxLength, vminLength);\n        } /** set alternative decimal separator key */\n        if (settings.altDec === null && settings.mDec > 0) {\n            if (settings.aDec === '.' && settings.aSep !== ',') {\n                settings.altDec = ',';\n            } else if (settings.aDec === ',' && settings.aSep !== '.') {\n                settings.altDec = '.';\n            }\n        }\n        /** cache regexps for autoStrip */\n        var aNegReg = settings.aNeg ? '([-\\\\' + settings.aNeg + ']?)' : '(-?)';\n        settings.aNegRegAutoStrip = aNegReg;\n        settings.skipFirstAutoStrip = new RegExp(aNegReg + '[^-' + (settings.aNeg ? '\\\\' + settings.aNeg : '') + '\\\\' + settings.aDec + '\\\\d]' + '.*?(\\\\d|\\\\' + settings.aDec + '\\\\d)');\n        settings.skipLastAutoStrip = new RegExp('(\\\\d\\\\' + settings.aDec + '?)[^\\\\' + settings.aDec + '\\\\d]\\\\D*$');\n        var allowed = '-' + settings.aNum + '\\\\' + settings.aDec;\n        settings.allowedAutoStrip = new RegExp('[^' + allowed + ']', 'gi');\n        settings.numRegAutoStrip = new RegExp(aNegReg + '(?:\\\\' + settings.aDec + '?(\\\\d+\\\\' + settings.aDec + '\\\\d+)|(\\\\d*(?:\\\\' + settings.aDec + '\\\\d*)?))');\n        return settings;\n    }\n\n    /**\n     * strips all unwanted characters and leave only a number alert\n     */\n\n    function autoStrip(s, settings, strip_zero) {\n        if (settings.aSign) { /** remove currency sign */\n            while (s.indexOf(settings.aSign) > -1) {\n                s = s.replace(settings.aSign, '');\n            }\n        }\n        s = s.replace(settings.skipFirstAutoStrip, '$1$2'); /** first replace anything before digits */\n        s = s.replace(settings.skipLastAutoStrip, '$1'); /** then replace anything after digits */\n        s = s.replace(settings.allowedAutoStrip, ''); /** then remove any uninterested characters */\n        if (settings.altDec) {\n            s = s.replace(settings.altDec, settings.aDec);\n        } /** get only number string */\n        var m = s.match(settings.numRegAutoStrip);\n        s = m ? [m[1], m[2], m[3]].join('') : '';\n        if ((settings.lZero === 'allow' || settings.lZero === 'keep') && strip_zero !== 'strip') {\n            var parts = [],\n                nSign = '';\n            parts = s.split(settings.aDec);\n            if (parts[0].indexOf('-') !== -1) {\n                nSign = '-';\n                parts[0] = parts[0].replace('-', '');\n            }\n            if (parts[0].length > settings.mInt && parts[0].charAt(0) === '0') { /** strip leading zero if need */\n                parts[0] = parts[0].slice(1);\n            }\n            s = nSign + parts.join(settings.aDec);\n        }\n        if ((strip_zero && settings.lZero === 'deny') || (strip_zero && settings.lZero === 'allow' && settings.allowLeading === false)) {\n            var strip_reg = '^' + settings.aNegRegAutoStrip + '0*(\\\\d' + (strip_zero === 'leading' ? ')' : '|$)');\n            strip_reg = new RegExp(strip_reg);\n            s = s.replace(strip_reg, '$1$2');\n        }\n        return s;\n    }\n\n    /**\n     * places or removes brackets on negative values\n     * works only when with pSign: 'p'\n     */\n\n    function negativeBracket(s, settings) {\n        if (settings.pSign === 'p') {\n            var brackets = settings.nBracket.split(',');\n            if (!settings.hasFocus && !settings.removeBrackets) {\n                s = s.replace(settings.aNeg, '');\n                s = brackets[0] + s + brackets[1];\n            } else if ((settings.hasFocus && s.charAt(0) === brackets[0]) || (settings.removeBrackets && s.charAt(0) === brackets[0])) {\n                s = s.replace(brackets[0], settings.aNeg);\n                s = s.replace(brackets[1], '');\n            }\n        }\n        return s;\n    }\n\n    /**\n     * function to handle numbers less than 0 that are stored in Exponential notation ex: .0000001 stored as 1e-7\n     */\n\n    function checkValue(value, settings) {\n        if (value) {\n            var checkSmall = +value;\n            if (checkSmall < 0.000001 && checkSmall > -1) {\n                value = +value;\n                if (value < 0.000001 && value > 0) {\n                    value = (value + 10).toString();\n                    value = value.substring(1);\n                }\n                if (value < 0 && value > -1) {\n                    value = (value - 10).toString();\n                    value = '-' + value.substring(2);\n                }\n                value = value.toString();\n            } else {\n                var parts = value.split('.');\n                if (parts[1] !== undefined) {\n                    if (+parts[1] === 0) {\n                        value = parts[0];\n                    } else {\n                        parts[1] = parts[1].replace(/0*$/, '');\n                        value = parts.join('.');\n                    }\n                }\n            }\n        }\n        return (settings.lZero === 'keep') ? value : value.replace(/^0*(\\d)/, '$1');\n    }\n\n    /**\n     * prepare number string to be converted to real number\n     */\n\n    function fixNumber(s, aDec, aNeg) {\n        if (aDec && aDec !== '.') {\n            s = s.replace(aDec, '.');\n        }\n        if (aNeg && aNeg !== '-') {\n            s = s.replace(aNeg, '-');\n        }\n        if (!s.match(/\\d/)) {\n            s += '0';\n        }\n        return s;\n    }\n\n    /**\n     * prepare real number to be converted to our format\n     */\n\n    function presentNumber(s, aDec, aNeg) {\n        if (aNeg && aNeg !== '-') {\n            s = s.replace('-', aNeg);\n        }\n        if (aDec && aDec !== '.') {\n            s = s.replace('.', aDec);\n        }\n        return s;\n    }\n\n    /**\n     * private function to check for empty value\n     */\n\n    function checkEmpty(iv, settings, signOnEmpty) {\n        if (iv === '' || iv === settings.aNeg) {\n            if (settings.wEmpty === 'zero') {\n                return iv + '0';\n            }\n            if (settings.wEmpty === 'sign' || signOnEmpty) {\n                return iv + settings.aSign;\n            }\n            return iv;\n        }\n        return null;\n    }\n\n    /**\n     * private function that formats our number\n     */\n\n    function autoGroup(iv, settings) {\n        iv = autoStrip(iv, settings);\n        var testNeg = iv.replace(',', '.'),\n            empty = checkEmpty(iv, settings, true);\n        if (empty !== null) {\n            return empty;\n        }\n        var digitalGroup = '';\n        if (settings.dGroup === 2) {\n            digitalGroup = /(\\d)((\\d)(\\d{2}?)+)$/;\n        } else if (settings.dGroup === 4) {\n            digitalGroup = /(\\d)((\\d{4}?)+)$/;\n        } else {\n            digitalGroup = /(\\d)((\\d{3}?)+)$/;\n        } /** splits the string at the decimal string */\n        var ivSplit = iv.split(settings.aDec);\n        if (settings.altDec && ivSplit.length === 1) {\n            ivSplit = iv.split(settings.altDec);\n        } /** assigns the whole number to the a variable (s) */\n        var s = ivSplit[0];\n        if (settings.aSep) {\n            while (digitalGroup.test(s)) { /** re-inserts the thousand separator via a regular expression */\n                s = s.replace(digitalGroup, '$1' + settings.aSep + '$2');\n            }\n        }\n        if (settings.mDec !== 0 && ivSplit.length > 1) {\n            if (ivSplit[1].length > settings.mDec) {\n                ivSplit[1] = ivSplit[1].substring(0, settings.mDec);\n            } /** joins the whole number with the decimal value */\n            iv = s + settings.aDec + ivSplit[1];\n        } else { /** if whole numbers only */\n            iv = s;\n        }\n        if (settings.aSign) {\n            var has_aNeg = iv.indexOf(settings.aNeg) !== -1;\n            iv = iv.replace(settings.aNeg, '');\n            iv = settings.pSign === 'p' ? settings.aSign + iv : iv + settings.aSign;\n            if (has_aNeg) {\n                iv = settings.aNeg + iv;\n            }\n        }\n        if (testNeg < 0 && settings.nBracket !== null) { /** removes the negative sign and places brackets */\n            iv = negativeBracket(iv, settings);\n        }\n        return iv;\n    }\n\n    /**\n     * round number after setting by pasting or $().autoNumericSet()\n     * private function for round the number\n     * please note this handled as text - JavaScript math function can return inaccurate values\n     * also this offers multiple rounding methods that are not easily accomplished in JavaScript\n     */\n\n    function autoRound(iv, settings) { /** value to string */\n        iv = (iv === '') ? '0' : iv.toString();\n        convertKeyToNumber(settings, 'mDec'); /** set mDec to number needed when mDec set by 'update method */\n        if (settings.mRound === 'CHF') {\n            iv = (Math.round(iv * 20) / 20).toString();\n        }\n        var ivRounded = '',\n            i = 0,\n            nSign = '',\n            rDec = (typeof(settings.aPad) === 'boolean' || settings.aPad === null) ? (settings.aPad ? settings.mDec : 0) : +settings.aPad;\n        var truncateZeros = function (ivRounded) { /** truncate not needed zeros */\n            var regex = (rDec === 0) ? (/(\\.(?:\\d*[1-9])?)0*$/) : rDec === 1 ? (/(\\.\\d(?:\\d*[1-9])?)0*$/) : new RegExp('(\\\\.\\\\d{' + rDec + '}(?:\\\\d*[1-9])?)0*$');\n            ivRounded = ivRounded.replace(regex, '$1'); /** If there are no decimal places, we don't need a decimal point at the end */\n            if (rDec === 0) {\n                ivRounded = ivRounded.replace(/\\.$/, '');\n            }\n            return ivRounded;\n        };\n        if (iv.charAt(0) === '-') { /** Checks if the iv (input Value)is a negative value */\n            nSign = '-';\n            iv = iv.replace('-', ''); /** removes the negative sign will be added back later if required */\n        }\n        if (!iv.match(/^\\d/)) { /** append a zero if first character is not a digit (then it is likely to be a dot)*/\n            iv = '0' + iv;\n        }\n        if (nSign === '-' && +iv === 0) { /** determines if the value is zero - if zero no negative sign */\n            nSign = '';\n        }\n        if ((+iv > 0 && settings.lZero !== 'keep') || (iv.length > 0 && settings.lZero === 'allow')) { /** trims leading zero's if needed */\n            iv = iv.replace(/^0*(\\d)/, '$1');\n        }\n        var dPos = iv.lastIndexOf('.'),\n            /** virtual decimal position */\n            vdPos = (dPos === -1) ? iv.length - 1 : dPos,\n            /** checks decimal places to determine if rounding is required */\n            cDec = (iv.length - 1) - vdPos; /** check if no rounding is required */\n        if (cDec <= settings.mDec) {\n            ivRounded = iv; /** check if we need to pad with zeros */\n            if (cDec < rDec) {\n                if (dPos === -1) {\n                    ivRounded += settings.aDec;\n                }\n                var zeros = '000000';\n                while (cDec < rDec) {\n                    zeros = zeros.substring(0, rDec - cDec);\n                    ivRounded += zeros;\n                    cDec += zeros.length;\n                }\n            } else if (cDec > rDec) {\n                ivRounded = truncateZeros(ivRounded);\n            } else if (cDec === 0 && rDec === 0) {\n                ivRounded = ivRounded.replace(/\\.$/, '');\n            }\n            if (settings.mRound !== 'CHF') {\n                return (+ivRounded === 0) ? ivRounded : nSign + ivRounded;\n            }\n            if (settings.mRound === 'CHF') {\n                dPos = ivRounded.lastIndexOf('.');\n                iv = ivRounded;\n            }\n\n        } /** rounded length of the string after rounding */\n        var rLength = dPos + settings.mDec,\n            tRound = +iv.charAt(rLength + 1),\n            ivArray = iv.substring(0, rLength + 1).split(''),\n            odd = (iv.charAt(rLength) === '.') ? (iv.charAt(rLength - 1) % 2) : (iv.charAt(rLength) % 2),\n            onePass = true;\n        if (odd !== 1) {\n            odd = (odd === 0 && (iv.substring(rLength + 2, iv.length) > 0)) ? 1 : 0;\n        }\n        /*jslint white: true*/\n        if ((tRound > 4 && settings.mRound === 'S') || /**                      Round half up symmetric */\n            (tRound > 4 && settings.mRound === 'A' && nSign === '') || /**      Round half up asymmetric positive values */\n            (tRound > 5 && settings.mRound === 'A' && nSign === '-') || /**     Round half up asymmetric negative values */\n            (tRound > 5 && settings.mRound === 's') || /**                      Round half down symmetric */\n            (tRound > 5 && settings.mRound === 'a' && nSign === '') || /**      Round half down asymmetric positive values */\n            (tRound > 4 && settings.mRound === 'a' && nSign === '-') || /**     Round half down asymmetric negative values */\n            (tRound > 5 && settings.mRound === 'B') || /**                      Round half even \"Banker's Rounding\" */\n            (tRound === 5 && settings.mRound === 'B' && odd === 1) || /**       Round half even \"Banker's Rounding\" */\n            (tRound > 0 && settings.mRound === 'C' && nSign === '') || /**      Round to ceiling toward positive infinite */\n            (tRound > 0 && settings.mRound === 'F' && nSign === '-') || /**     Round to floor toward negative infinite */\n            (tRound > 0 && settings.mRound === 'U') || /**                      round up away from zero */\n            (settings.mRound === 'CHF')) { /**                                  Round Swiss FRanc */\n            /*jslint white: false*/\n            for (i = (ivArray.length - 1); i >= 0; i -= 1) { /** Round up the last digit if required, and continue until no more 9's are found */\n                if (ivArray[i] !== '.') {\n                    if (settings.mRound === 'CHF' && ivArray[i] <= 2 && onePass) {\n                        ivArray[i] = 0;\n                        onePass = false;\n                        break;\n                    }\n                    if (settings.mRound === 'CHF' && ivArray[i] <= 7 && onePass) {\n                        ivArray[i] = 5;\n                        onePass = false;\n                        break;\n                    }\n                    if (settings.mRound === 'CHF' && onePass) {\n                        ivArray[i] = 10;\n                        onePass = false;\n                    } else {\n                        ivArray[i] = +ivArray[i] + 1;\n                    }\n                    if (ivArray[i] < 10) {\n                        break;\n                    }\n                    if (i > 0) {\n                        ivArray[i] = '0';\n                    }\n                }\n            }\n        }\n        ivArray = ivArray.slice(0, rLength + 1); /** Reconstruct the string, converting any 10's to 0's */\n        ivRounded = truncateZeros(ivArray.join('')); /** return rounded value */\n        return (+ivRounded === 0) ? ivRounded : nSign + ivRounded;\n    }\n\n    /**\n     * truncate decimal part of a number\n     */\n\n    function truncateDecimal(s, settings, paste) {\n        var aDec = settings.aDec,\n            mDec = settings.mDec;\n        s = (paste === 'paste') ? autoRound(s, settings) : s;\n        if (aDec && mDec) {\n            var parts = s.split(aDec);\n            /** truncate decimal part to satisfying length\n             * cause we would round it anyway */\n            if (parts[1] && parts[1].length > mDec) {\n                if (mDec > 0) {\n                    parts[1] = parts[1].substring(0, mDec);\n                    s = parts.join(aDec);\n                } else {\n                    s = parts[0];\n                }\n            }\n        }\n        return s;\n    }\n\n    /**\n     * checking that number satisfy format conditions\n     * and lays between settings.vMin and settings.vMax\n     * and the string length does not exceed the digits in settings.vMin and settings.vMax\n     */\n\n    function autoCheck(s, settings) {\n        s = autoStrip(s, settings);\n        s = truncateDecimal(s, settings);\n        s = fixNumber(s, settings.aDec, settings.aNeg);\n        var value = +s;\n        return value >= settings.vMin && value <= settings.vMax;\n    }\n\n    /**\n     * Holder object for field properties\n     */\n\n    function AutoNumericHolder(that, settings) {\n        this.settings = settings;\n        this.that = that;\n        this.$that = $(that);\n        this.formatted = false;\n        this.settingsClone = autoCode(this.$that, this.settings);\n        this.value = that.value;\n    }\n    AutoNumericHolder.prototype = {\n        init: function (e) {\n            this.value = this.that.value;\n            this.settingsClone = autoCode(this.$that, this.settings);\n            this.ctrlKey = e.ctrlKey;\n            this.cmdKey = e.metaKey;\n            this.shiftKey = e.shiftKey;\n            this.selection = getElementSelection(this.that); /** keypress event overwrites meaningful value of e.keyCode */\n            if (e.type === 'keydown' || e.type === 'keyup') {\n                this.kdCode = e.keyCode;\n            }\n            this.which = e.which;\n            this.processed = false;\n            this.formatted = false;\n        },\n        setSelection: function (start, end, setReal) {\n            start = Math.max(start, 0);\n            end = Math.min(end, this.that.value.length);\n            this.selection = {\n                start: start,\n                end: end,\n                length: end - start\n            };\n            if (setReal === undefined || setReal) {\n                setElementSelection(this.that, start, end);\n            }\n        },\n        setPosition: function (pos, setReal) {\n            this.setSelection(pos, pos, setReal);\n        },\n        getBeforeAfter: function () {\n            var value = this.value,\n                left = value.substring(0, this.selection.start),\n                right = value.substring(this.selection.end, value.length);\n            return [left, right];\n        },\n        getBeforeAfterStriped: function () {\n            var parts = this.getBeforeAfter();\n            parts[0] = autoStrip(parts[0], this.settingsClone);\n            parts[1] = autoStrip(parts[1], this.settingsClone);\n            return parts;\n        },\n\n        /**\n         * strip parts from excess characters and leading zeroes\n         */\n        normalizeParts: function (left, right) {\n            var settingsClone = this.settingsClone;\n            right = autoStrip(right, settingsClone); /** if right is not empty and first character is not aDec, */\n            /** we could strip all zeros, otherwise only leading */\n            var strip = right.match(/^\\d/) ? true : 'leading';\n            left = autoStrip(left, settingsClone, strip); /** prevents multiple leading zeros from being entered */\n            if ((left === '' || left === settingsClone.aNeg) && settingsClone.lZero === 'deny') {\n                if (right > '') {\n                    right = right.replace(/^0*(\\d)/, '$1');\n                }\n            }\n            var new_value = left + right; /** insert zero if has leading dot */\n            if (settingsClone.aDec) {\n                var m = new_value.match(new RegExp('^' + settingsClone.aNegRegAutoStrip + '\\\\' + settingsClone.aDec));\n                if (m) {\n                    left = left.replace(m[1], m[1] + '0');\n                    new_value = left + right;\n                }\n            } /** insert zero if number is empty and io.wEmpty == 'zero' */\n            if (settingsClone.wEmpty === 'zero' && (new_value === settingsClone.aNeg || new_value === '')) {\n                left += '0';\n            }\n            return [left, right];\n        },\n\n        /**\n         * set part of number to value keeping position of cursor\n         */\n        setValueParts: function (left, right, paste) {\n            var settingsClone = this.settingsClone,\n                parts = this.normalizeParts(left, right),\n                new_value = parts.join(''),\n                position = parts[0].length;\n            if (autoCheck(new_value, settingsClone)) {\n                new_value = truncateDecimal(new_value, settingsClone, paste);\n                if (position > new_value.length) {\n                    position = new_value.length;\n                }\n                this.value = new_value;\n                this.setPosition(position, false);\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * helper function for expandSelectionOnSign\n         * returns sign position of a formatted value\n         */\n        signPosition: function () {\n            var settingsClone = this.settingsClone,\n                aSign = settingsClone.aSign,\n                that = this.that;\n            if (aSign) {\n                var aSignLen = aSign.length;\n                if (settingsClone.pSign === 'p') {\n                    var hasNeg = settingsClone.aNeg && that.value && that.value.charAt(0) === settingsClone.aNeg;\n                    return hasNeg ? [1, aSignLen + 1] : [0, aSignLen];\n                }\n                var valueLen = that.value.length;\n                return [valueLen - aSignLen, valueLen];\n            }\n            return [1000, -1];\n        },\n\n        /**\n         * expands selection to cover whole sign\n         * prevents partial deletion/copying/overwriting of a sign\n         */\n        expandSelectionOnSign: function (setReal) {\n            var sign_position = this.signPosition(),\n                selection = this.selection;\n            if (selection.start < sign_position[1] && selection.end > sign_position[0]) { /** if selection catches something except sign and catches only space from sign */\n                if ((selection.start < sign_position[0] || selection.end > sign_position[1]) && this.value.substring(Math.max(selection.start, sign_position[0]), Math.min(selection.end, sign_position[1])).match(/^\\s*$/)) { /** then select without empty space */\n                    if (selection.start < sign_position[0]) {\n                        this.setSelection(selection.start, sign_position[0], setReal);\n                    } else {\n                        this.setSelection(sign_position[1], selection.end, setReal);\n                    }\n                } else { /** else select with whole sign */\n                    this.setSelection(Math.min(selection.start, sign_position[0]), Math.max(selection.end, sign_position[1]), setReal);\n                }\n            }\n        },\n\n        /**\n         * try to strip pasted value to digits\n         */\n        checkPaste: function () {\n            if (this.valuePartsBeforePaste !== undefined) {\n                var parts = this.getBeforeAfter(),\n\n                    oldParts = this.valuePartsBeforePaste;\n                delete this.valuePartsBeforePaste; /** try to strip pasted value first */\n                parts[0] = parts[0].substr(0, oldParts[0].length) + autoStrip(parts[0].substr(oldParts[0].length), this.settingsClone);\n                if (!this.setValueParts(parts[0], parts[1], 'paste')) {\n                    this.value = oldParts.join('');\n                    this.setPosition(oldParts[0].length, false);\n                }\n            }\n        },\n\n        /**\n         * process pasting, cursor moving and skipping of not interesting keys\n         * if returns true, further processing is not performed\n         */\n        skipAllways: function (e) {\n            var kdCode = this.kdCode,\n                which = this.which,\n                ctrlKey = this.ctrlKey,\n                cmdKey = this.cmdKey,\n                shiftKey = this.shiftKey; /** catch the ctrl up on ctrl-v */\n            if (((ctrlKey || cmdKey) && e.type === 'keyup' && this.valuePartsBeforePaste !== undefined) || (shiftKey && kdCode === 45)) {\n                this.checkPaste();\n                return false;\n            }\n            /** codes are taken from http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx\n             * skip Fx keys, windows keys, other special keys\n             * Thanks Ney Estrabelli for the FF for Mac meta key support \"keycode 224\"\n             */\n            if ((kdCode >= 112 && kdCode <= 123) || (kdCode >= 91 && kdCode <= 93) || (kdCode >= 9 && kdCode <= 31) || (kdCode < 8 && (which === 0 || which === kdCode)) || kdCode === 144 || kdCode === 145 || kdCode === 45 || kdCode === 224) {\n                return true;\n            }\n            if ((ctrlKey || cmdKey) && kdCode === 65) { /** if select all (a=65)*/\n                return true;\n            }\n            if ((ctrlKey || cmdKey) && (kdCode === 67 || kdCode === 86 || kdCode === 88)) { /** if copy (c=67) paste (v=86) or cut (x=88) */\n                if (e.type === 'keydown') {\n                    this.expandSelectionOnSign();\n                }\n                if (kdCode === 86 || kdCode === 45) { /** try to prevent wrong paste */\n                    if (e.type === 'keydown' || e.type === 'keypress') {\n                        if (this.valuePartsBeforePaste === undefined) {\n                            this.valuePartsBeforePaste = this.getBeforeAfter();\n                        }\n                    } else {\n                        this.checkPaste();\n                    }\n                }\n                return e.type === 'keydown' || e.type === 'keypress' || kdCode === 67;\n            }\n            if (ctrlKey || cmdKey) {\n                return true;\n            }\n            if (kdCode === 37 || kdCode === 39) { /** jump over thousand separator */\n                var aSep = this.settingsClone.aSep,\n                    start = this.selection.start,\n                    value = this.that.value;\n                if (e.type === 'keydown' && aSep && !this.shiftKey) {\n                    if (kdCode === 37 && value.charAt(start - 2) === aSep) {\n                        this.setPosition(start - 1);\n                    } else if (kdCode === 39 && value.charAt(start + 1) === aSep) {\n                        this.setPosition(start + 1);\n                    }\n                }\n                return true;\n            }\n            if (kdCode >= 34 && kdCode <= 40) {\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * process deletion of characters\n         * returns true if processing performed\n         */\n        processAllways: function () {\n            var parts; /** process backspace or delete */\n            if (this.kdCode === 8 || this.kdCode === 46) {\n                if (!this.selection.length) {\n                    parts = this.getBeforeAfterStriped();\n                    if (this.kdCode === 8) {\n                        parts[0] = parts[0].substring(0, parts[0].length - 1);\n                    } else {\n                        parts[1] = parts[1].substring(1, parts[1].length);\n                    }\n                    this.setValueParts(parts[0], parts[1]);\n                } else {\n                    this.expandSelectionOnSign(false);\n                    parts = this.getBeforeAfterStriped();\n                    this.setValueParts(parts[0], parts[1]);\n                }\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * process insertion of characters\n         * returns true if processing performed\n         */\n        processKeypress: function () {\n            var settingsClone = this.settingsClone,\n                cCode = String.fromCharCode(this.which),\n                parts = this.getBeforeAfterStriped(),\n                left = parts[0],\n                right = parts[1]; /** start rules when the decimal character key is pressed */\n            /** always use numeric pad dot to insert decimal separator */\n            if (cCode === settingsClone.aDec || (settingsClone.altDec && cCode === settingsClone.altDec) || ((cCode === '.' || cCode === ',') && this.kdCode === 110)) { /** do not allow decimal character if no decimal part allowed */\n                if (!settingsClone.mDec || !settingsClone.aDec) {\n                    return true;\n                } /** do not allow decimal character before aNeg character */\n                if (settingsClone.aNeg && right.indexOf(settingsClone.aNeg) > -1) {\n                    return true;\n                } /** do not allow decimal character if other decimal character present */\n                if (left.indexOf(settingsClone.aDec) > -1) {\n                    return true;\n                }\n                if (right.indexOf(settingsClone.aDec) > 0) {\n                    return true;\n                }\n                if (right.indexOf(settingsClone.aDec) === 0) {\n                    right = right.substr(1);\n                }\n                this.setValueParts(left + settingsClone.aDec, right);\n                return true;\n            }\n            /**\n             * start rule on negative sign & prevent minus if not allowed\n             */\n            if (cCode === '-' || cCode === '+') {\n                if (!settingsClone.aNeg) {\n                    return true;\n                } /** caret is always after minus */\n                if (left === '' && right.indexOf(settingsClone.aNeg) > -1) {\n                    left = settingsClone.aNeg;\n                    right = right.substring(1, right.length);\n                } /** change sign of number, remove part if should */\n                if (left.charAt(0) === settingsClone.aNeg) {\n                    left = left.substring(1, left.length);\n                } else {\n                    left = (cCode === '-') ? settingsClone.aNeg + left : left;\n                }\n                this.setValueParts(left, right);\n                return true;\n            } /** digits */\n            if (cCode >= '0' && cCode <= '9') { /** if try to insert digit before minus */\n                if (settingsClone.aNeg && left === '' && right.indexOf(settingsClone.aNeg) > -1) {\n                    left = settingsClone.aNeg;\n                    right = right.substring(1, right.length);\n                }\n                if (settingsClone.vMax <= 0 && settingsClone.vMin < settingsClone.vMax && this.value.indexOf(settingsClone.aNeg) === -1 && cCode !== '0') {\n                    left = settingsClone.aNeg + left;\n                }\n                this.setValueParts(left + cCode, right);\n                return true;\n            } /** prevent any other character */\n            return true;\n        },\n\n        /**\n         * formatting of just processed value with keeping of cursor position\n         */\n        formatQuick: function () {\n            var settingsClone = this.settingsClone,\n                parts = this.getBeforeAfterStriped(),\n                leftLength = this.value;\n            if ((settingsClone.aSep === '' || (settingsClone.aSep !== '' && leftLength.indexOf(settingsClone.aSep) === -1)) && (settingsClone.aSign === '' || (settingsClone.aSign !== '' && leftLength.indexOf(settingsClone.aSign) === -1))) {\n                var subParts = [],\n                    nSign = '';\n                subParts = leftLength.split(settingsClone.aDec);\n                if (subParts[0].indexOf('-') > -1) {\n                    nSign = '-';\n                    subParts[0] = subParts[0].replace('-', '');\n                    parts[0] = parts[0].replace('-', '');\n                }\n                if (subParts[0].length > settingsClone.mInt && parts[0].charAt(0) === '0') { /** strip leading zero if need */\n                    parts[0] = parts[0].slice(1);\n                }\n                parts[0] = nSign + parts[0];\n            }\n            var value = autoGroup(this.value, this.settingsClone),\n                position = value.length;\n            if (value) {\n                /** prepare regexp which searches for cursor position from unformatted left part */\n                var left_ar = parts[0].split(''),\n                    i = 0;\n                for (i; i < left_ar.length; i += 1) { /** thanks Peter Kovari */\n                    if (!left_ar[i].match('\\\\d')) {\n                        left_ar[i] = '\\\\' + left_ar[i];\n                    }\n                }\n                var leftReg = new RegExp('^.*?' + left_ar.join('.*?'));\n                /** search cursor position in formatted value */\n                var newLeft = value.match(leftReg);\n                if (newLeft) {\n                    position = newLeft[0].length;\n                    /** if we are just before sign which is in prefix position */\n                    if (((position === 0 && value.charAt(0) !== settingsClone.aNeg) || (position === 1 && value.charAt(0) === settingsClone.aNeg)) && settingsClone.aSign && settingsClone.pSign === 'p') {\n                        /** place caret after prefix sign */\n                        position = this.settingsClone.aSign.length + (value.charAt(0) === '-' ? 1 : 0);\n                    }\n                } else if (settingsClone.aSign && settingsClone.pSign === 's') {\n                    /** if we could not find a place for cursor and have a sign as a suffix */\n                    /** place carret before suffix currency sign */\n                    position -= settingsClone.aSign.length;\n                }\n            }\n            this.that.value = value;\n            this.setPosition(position);\n            this.formatted = true;\n        }\n    };\n\n    /**\n     * thanks to Anthony & Evan C\n     */\n\n    function autoGet(obj) {\n        if (typeof obj === 'string') {\n            obj = obj.replace(/\\[/g, \"\\\\[\").replace(/\\]/g, \"\\\\]\");\n            obj = '#' + obj.replace(/(:|\\.)/g, '\\\\$1');\n            /** obj = '#' + obj.replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1'); */\n            /** possible modification to replace the above 2 lines */\n        }\n        return $(obj);\n    }\n\n    /**\n     * function to attach data to the element\n     * and imitate the holder\n     */\n\n    function getHolder($that, settings, update) {\n        var data = $that.data('autoNumeric');\n        if (!data) {\n            data = {};\n            $that.data('autoNumeric', data);\n        }\n        var holder = data.holder;\n        if ((holder === undefined && settings) || update) {\n            holder = new AutoNumericHolder($that.get(0), settings);\n            data.holder = holder;\n        }\n        return holder;\n    }\n\n    var methods = {\n\n        /**\n         * Method to initiate autoNumeric and attached the settings (default and options passed as a parameter\n         * $(someSelector).autoNumeric('init'); // initiate autoNumeric with defaults\n         * $(someSelector).autoNumeric('init', {option}); // initiate autoNumeric with options\n         * $(someSelector).autoNumeric(); // initiate autoNumeric with defaults\n         * $(someSelector).autoNumeric({option}); // initiate autoNumeric with options\n         * options passes as a parameter example '{aSep: '.', aDec: ',', aSign: '€ '}\n         */\n        init: function (options) {\n            return this.each(function () {\n                var $this = $(this),\n                    settings = $this.data('autoNumeric'),\n                    /** attempt to grab 'autoNumeric' settings, if they don't exist returns \"undefined\". */\n                    tagData = $this.data(),\n                    /** attempt to grab HTML5 data, if they don't exist we'll get \"undefined\".*/\n                    $input = $this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])');\n                if (typeof settings !== 'object') { /** If we couldn't grab settings, create them from defaults and passed options. */\n                    settings = $.extend({}, $.fn.autoNumeric.defaults, tagData, options, {\n                        aNum: '0123456789',\n                        hasFocus: false,\n                        removeBrackets: false,\n                        runOnce: false,\n                        tagList: ['b', 'caption', 'cite', 'code', 'dd', 'del', 'div', 'dfn', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ins', 'kdb', 'label', 'li', 'output', 'p', 'q', 's', 'sample', 'span', 'strong', 'td', 'th', 'u', 'var']\n                    }); /** Merge defaults, tagData and options */\n                    if (settings.aDec === settings.aSep) {\n                        $.error(\"autoNumeric will not function properly when the decimal character aDec: '\" + settings.aDec + \"' and thousand separator aSep: '\" + settings.aSep + \"' are the same character\");\n                    }\n                    $this.data('autoNumeric', settings); /** Save our new settings */\n                } else {\n                    return this;\n                }\n                var holder = getHolder($this, settings);\n                if (!$input && $this.prop('tagName').toLowerCase() === 'input') { /** checks for non-supported input types */\n                    $.error('The input type \"' + $this.prop('type') + '\" is not supported by autoNumeric()');\n\n                }\n                if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) === -1 && $this.prop('tagName').toLowerCase() !== 'input') {\n                    $.error(\"The <\" + $this.prop('tagName').toLowerCase() + \"> is not supported by autoNumeric()\");\n\n                }\n                if (settings.runOnce === false && settings.aForm) { /** routine to format default value on page load */\n                    if ($input) {\n                        var setValue = true;\n                        if ($this[0].value === '' && settings.wEmpty === 'empty') {\n                            $this[0].value = '';\n                            setValue = false;\n                        }\n                        if ($this[0].value === '' && settings.wEmpty === 'sign') {\n                            $this[0].value = settings.aSign;\n                            setValue = false;\n                        }\n                        /** checks for page reload from back button\n                         * also checks for ASP.net form post back\n                         * the following HTML data attribute is REQUIRED (data-an-default=\"same value as the value attribute\")\n                         * example: <asp:TextBox runat=\"server\" id=\"someID\" value=\"1234.56\" data-an-default=\"1234.56\">\n                         */\n                        if (setValue && $this.val() !== '' && ((settings.anDefault === null && $this[0].value === $this.prop('defaultValue')) || (settings.anDefault !== null && settings.anDefault.toString() === $this.val()))) {\n                            $this.autoNumeric('set', $this.val());\n                        }\n                    }\n                    if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) !== -1 && $this.text() !== '') {\n                        $this.autoNumeric('set', $this.text());\n                    }\n                }\n                settings.runOnce = true;\n                if ($this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])')) { /**added hidden type */\n                    $this.on('keydown.autoNumeric', function (e) {\n                        holder = getHolder($this);\n                        if (holder.settings.aDec === holder.settings.aSep) {\n                            $.error(\"autoNumeric will not function properly when the decimal character aDec: '\" + holder.settings.aDec + \"' and thousand separator aSep: '\" + holder.settings.aSep + \"' are the same character\");\n                        }\n                        if (holder.that.readOnly) {\n                            holder.processed = true;\n                            return true;\n                        }\n                        /** The below streamed code / comment allows the \"enter\" keydown to throw a change() event */\n                        /** if (e.keyCode === 13 && holder.inVal !== $this.val()){\n                            $this.change();\n                            holder.inVal = $this.val();\n                        }*/\n                        holder.init(e);\n                        if (holder.skipAllways(e)) {\n                            holder.processed = true;\n                            return true;\n                        }\n                        if (holder.processAllways()) {\n                            holder.processed = true;\n                            holder.formatQuick();\n                            e.preventDefault();\n                            return false;\n                        }\n                        holder.formatted = false;\n                        return true;\n                    });\n                    $this.on('keypress.autoNumeric', function (e) {\n                        holder = getHolder($this);\n                        var processed = holder.processed;\n                        holder.init(e);\n                        if (holder.skipAllways(e)) {\n                            return true;\n                        }\n                        if (processed) {\n                            e.preventDefault();\n                            return false;\n                        }\n                        if (holder.processAllways() || holder.processKeypress()) {\n                            holder.formatQuick();\n                            e.preventDefault();\n                            return false;\n                        }\n                        holder.formatted = false;\n                    });\n                    $this.on('keyup.autoNumeric', function (e) {\n                        holder = getHolder($this);\n                        holder.init(e);\n                        var skip = holder.skipAllways(e);\n                        holder.kdCode = 0;\n                        delete holder.valuePartsBeforePaste;\n                        if ($this[0].value === holder.settings.aSign) { /** added to properly place the caret when only the currency is present */\n                            if (holder.settings.pSign === 's') {\n                                setElementSelection(this, 0, 0);\n                            } else {\n                                setElementSelection(this, holder.settings.aSign.length, holder.settings.aSign.length);\n                            }\n                        }\n                        if (skip) {\n                            return true;\n                        }\n                        if (this.value === '') {\n                            return true;\n                        }\n                        if (!holder.formatted) {\n                            holder.formatQuick();\n                        }\n                    });\n                    $this.on('focusin.autoNumeric', function () {\n                        holder = getHolder($this);\n                        var $settings = holder.settingsClone;\n                        $settings.hasFocus = true;\n                        if ($settings.nBracket !== null) {\n                            var checkVal = $this.val();\n                            $this.val(negativeBracket(checkVal, $settings));\n                        }\n                        holder.inVal = $this.val();\n                        var onEmpty = checkEmpty(holder.inVal, $settings, true);\n                        if (onEmpty !== null && onEmpty !== '') {\n                            $this.val(onEmpty);\n                        }\n                    });\n                    $this.on('focusout.autoNumeric', function () {\n                        holder = getHolder($this);\n                        var $settings = holder.settingsClone,\n                            value = $this.val(),\n                            origValue = value;\n                        $settings.hasFocus = false;\n                        var strip_zero = ''; /** added to control leading zero */\n                        if ($settings.lZero === 'allow') { /** added to control leading zero */\n                            $settings.allowLeading = false;\n                            strip_zero = 'leading';\n                        }\n                        if (value !== '') {\n                            value = autoStrip(value, $settings, strip_zero);\n                            if (checkEmpty(value, $settings) === null && autoCheck(value, $settings, $this[0])) {\n                                value = fixNumber(value, $settings.aDec, $settings.aNeg);\n                                value = autoRound(value, $settings);\n                                value = presentNumber(value, $settings.aDec, $settings.aNeg);\n                            } else {\n                                value = '';\n                            }\n                        }\n                        var groupedValue = checkEmpty(value, $settings, false);\n                        if (groupedValue === null) {\n                            groupedValue = autoGroup(value, $settings);\n                        }\n                        if (groupedValue !== holder.inVal || groupedValue !== origValue) {\n                            $this.val(groupedValue);\n                            $this.change();\n                            delete holder.inVal;\n                        }\n                    });\n                }\n            });\n        },\n\n        /**\n         * method to remove settings and stop autoNumeric() - does not remove the formatting\n         * $(someSelector).autoNumeric('destroy'); // destroy autoNumeric\n         * no parameters accepted\n         */\n        destroy: function () {\n            return $(this).each(function () {\n                var $this = $(this);\n                $this.off('.autoNumeric');\n                $this.removeData('autoNumeric');\n            });\n        },\n\n        /**\n         * method to update settings - can be call as many times\n         * $(someSelector).autoNumeric('update', {options}); // updates the settings\n         * options passes as a parameter example '{aSep: '.', aDec: ',', aSign: '€ '}\n         */\n        update: function (options) {\n            return $(this).each(function () {\n                var $this = autoGet($(this)),\n                    settings = $this.data('autoNumeric');\n                if (typeof settings !== 'object') {\n                    $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'update' method\");\n                }\n                var strip = $this.autoNumeric('get');\n                settings = $.extend(settings, options);\n                getHolder($this, settings, true);\n                if (settings.aDec === settings.aSep) {\n                    $.error(\"autoNumeric will not function properly when the decimal character aDec: '\" + settings.aDec + \"' and thousand separator aSep: '\" + settings.aSep + \"' are the same character\");\n                }\n                $this.data('autoNumeric', settings);\n                if ($this.val() !== '' || $this.text() !== '') {\n                    return $this.autoNumeric('set', strip);\n                }\n                return;\n            });\n        },\n\n        /**\n         * method to format value sent as a parameter \"\"\n         * $(someSelector).autoNumeric('set', 'value'}); // formats the value being passed\n         * value passed as a string - can be a integer '1234' or double '1234.56789'\n         * must contain only numbers and one decimal (period) character\n         */\n        set: function (valueIn) {\n            if (valueIn === null) {\n                return;\n            }\n            return $(this).each(function () {\n                var $this = autoGet($(this)),\n                    settings = $this.data('autoNumeric'),\n                    value = valueIn.toString(),\n                    testValue = valueIn.toString(),\n                    $input = $this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])');\n                if (typeof settings !== 'object') {\n                    $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'set' method\");\n                }\n                /** allows locale decimal separator to be a comma */\n                if ((testValue === $this.attr('value') || testValue === $this.text()) && settings.runOnce === false) {\n                    value = value.replace(',', '.');\n                }\n                if (!$.isNumeric(+value)) {\n                    $.error(\"The value (\" + value + \") being 'set' is not numeric and has caused a error to be thrown\");\n                }\n                value = checkValue(value, settings);\n                settings.setEvent = true;\n                value.toString();\n                if (value !== '') {\n                    value = autoRound(value, settings);\n                }\n                value = presentNumber(value, settings.aDec, settings.aNeg);\n                if (!autoCheck(value, settings)) {\n                    value = autoRound('', settings);\n                }\n                value = autoGroup(value, settings);\n                if ($input) {\n                    return $this.val(value);\n                }\n                if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) !== -1) {\n                    return $this.text(value);\n                }\n                return false;\n            });\n        },\n\n        /**\n         * method to get the unformatted that accepts up to one parameter\n         * $(someSelector).autoNumeric('get'); no parameters accepted\n         * values returned as ISO numeric string \"1234.56\" where the decimal character is a period\n         * only the first element in the selector is returned\n         */\n        get: function () {\n            var $this = autoGet($(this)),\n                settings = $this.data('autoNumeric');\n            if (typeof settings !== 'object') {\n                $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'get' method\");\n            }\n            var getValue = '';\n            /** determine the element type then use .eq(0) selector to grab the value of the first element in selector */\n            if ($this.is('input[type=text], input[type=hidden], input[type=tel], input:not([type])')) { /**added hidden type */\n                getValue = $this.eq(0).val();\n            } else if ($.inArray($this.prop('tagName').toLowerCase(), settings.tagList) !== -1) {\n                getValue = $this.eq(0).text();\n            } else {\n                $.error(\"The <\" + $this.prop('tagName').toLowerCase() + \"> is not supported by autoNumeric()\");\n            }\n            if ((getValue === '' && settings.wEmpty === 'empty') || (getValue === settings.aSign && (settings.wEmpty === 'sign' || settings.wEmpty === 'empty'))) {\n                return '';\n            }\n            if (getValue !== '' && settings.nBracket !== null) {\n                settings.removeBrackets = true;\n                getValue = negativeBracket(getValue, settings);\n                settings.removeBrackets = false;\n            }\n            if (settings.runOnce || settings.aForm === false) {\n                getValue = autoStrip(getValue, settings);\n            }\n            getValue = fixNumber(getValue, settings.aDec, settings.aNeg);\n            if (+getValue === 0 && settings.lZero !== 'keep') {\n                getValue = '0';\n            }\n            if (settings.lZero === 'keep') {\n                return getValue;\n            }\n            getValue = checkValue(getValue, settings);\n            return getValue; /** returned Numeric String */\n        },\n\n        /**\n         * The 'getString' method used jQuerys .serialize() method that creates a text string in standard URL-encoded notation\n         * it then loops through the string and un-formats the inputs with autoNumeric\n         * $(someSelector).autoNumeric('getString'); no parameter accepted\n         * values returned as ISO numeric string \"1234.56\" where the decimal character is a period\n         */\n        getString: function () {\n            var isAutoNumeric = false,\n                $this = autoGet($(this)),\n                formFields = $this.serialize(),\n                formParts = formFields.split('&'),\n                formIndex = $('form').index($this),\n                allFormElements = $('form:eq(' + formIndex + ')'),\n                aiIndex = [],\n                /* all input index */\n                scIndex = [],\n                /* successful control index */\n                rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n                /* from jQuery serialize method */\n                rsubmittable = /^(?:input|select|textarea|keygen)/i,\n                /* from jQuery serialize method */\n                rcheckableType = /^(?:checkbox|radio)$/i,\n                rnonAutoNumericTypes = /^(?:button|checkbox|color|date|datetime|datetime-local|email|file|image|month|number|password|radio|range|reset|search|submit|time|url|week)/i,\n                count = 0;\n            /*jslint unparam: true*/\n            /* index of successful elements */\n            $.each(allFormElements[0], function (i, field) {\n                if (field.name !== '' && rsubmittable.test(field.localName) && !rsubmitterTypes.test(field.type) && !field.disabled && (field.checked || !rcheckableType.test(field.type))) {\n                    scIndex.push(count);\n                    count = count + 1;\n                } else {\n                    scIndex.push(-1);\n                }\n            });\n            /* index of all inputs tags except checkbox */\n            count = 0;\n            $.each(allFormElements[0], function (i, field) {\n                if (field.localName === 'input' && (field.type === '' || field.type === 'text' || field.type === 'hidden' || field.type === 'tel')) {\n                    aiIndex.push(count);\n                    count = count + 1;\n                } else {\n                    aiIndex.push(-1);\n                    if (field.localName === 'input' && rnonAutoNumericTypes.test(field.type)) {\n                        count = count + 1;\n                    }\n                }\n            });\n            $.each(formParts, function (i, miniParts) {\n                miniParts = formParts[i].split('=');\n                var scElement = $.inArray(i, scIndex);\n                if (scElement > -1 && aiIndex[scElement] > -1) {\n                    var testInput = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')'),\n                        settings = testInput.data('autoNumeric');\n                    if (typeof settings === 'object') {\n                        if (miniParts[1] !== null) {\n                            miniParts[1] = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')').autoNumeric('get').toString();\n                            formParts[i] = miniParts.join('=');\n                            isAutoNumeric = true;\n                        }\n                    }\n                }\n            });\n            /*jslint unparam: false*/\n            if (!isAutoNumeric) {\n                $.error(\"You must initialize autoNumeric('init', {options}) prior to calling the 'getString' method\");\n            }\n            return formParts.join('&');\n        },\n\n        /**\n         * The 'getString' method used jQuerys .serializeArray() method that creates array or objects that can be encoded as a JSON string\n         * it then loops through the string and un-formats the inputs with autoNumeric\n         * $(someSelector).autoNumeric('getArray'); no parameter accepted\n         * values returned as ISO numeric string \"1234.56\" where the decimal character is a period\n         */\n        getArray: function () {\n            var isAutoNumeric = false,\n                $this = autoGet($(this)),\n                formFields = $this.serializeArray(),\n                formIndex = $('form').index($this),\n                allFormElements = $('form:eq(' + formIndex + ')'),\n                aiIndex = [],\n                /* all input index */\n                scIndex = [],\n                /* successful control index */\n                rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n                /* from jQuery serialize method */\n                rsubmittable = /^(?:input|select|textarea|keygen)/i,\n                /* from jQuery serialize method */\n                rcheckableType = /^(?:checkbox|radio)$/i,\n                rnonAutoNumericTypes = /^(?:button|checkbox|color|date|datetime|datetime-local|email|file|image|month|number|password|radio|range|reset|search|submit|time|url|week)/i,\n                count = 0;\n            /*jslint unparam: true*/\n            /* index of successful elements */\n            $.each(allFormElements[0], function (i, field) {\n                if (field.name !== '' && rsubmittable.test(field.localName) && !rsubmitterTypes.test(field.type) && !field.disabled && (field.checked || !rcheckableType.test(field.type))) {\n                    scIndex.push(count);\n                    count = count + 1;\n                } else {\n                    scIndex.push(-1);\n                }\n            });\n            /* index of all inputs tags */\n            count = 0;\n            $.each(allFormElements[0], function (i, field) {\n                if (field.localName === 'input' && (field.type === '' || field.type === 'text' || field.type === 'hidden' || field.type === 'tel')) {\n                    aiIndex.push(count);\n                    count = count + 1;\n                } else {\n                    aiIndex.push(-1);\n                    if (field.localName === 'input' && rnonAutoNumericTypes.test(field.type)) {\n                        count = count + 1;\n                    }\n                }\n            });\n            $.each(formFields, function (i, field) {\n                var scElement = $.inArray(i, scIndex);\n                if (scElement > -1 && aiIndex[scElement] > -1) {\n                    var testInput = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')'),\n                        settings = testInput.data('autoNumeric');\n                    if (typeof settings === 'object') {\n                        field.value = $('form:eq(' + formIndex + ') input:eq(' + aiIndex[scElement] + ')').autoNumeric('get').toString();\n                        isAutoNumeric = true;\n                    }\n                }\n            });\n            /*jslint unparam: false*/\n            if (!isAutoNumeric) {\n                $.error(\"None of the successful form inputs are initialized by autoNumeric.\");\n            }\n            return formFields;\n        },\n\n        /**\n         * The 'getSteetings returns the object with autoNumeric settings for those who need to look under the hood\n         * $(someSelector).autoNumeric('getSettings'); // no parameters accepted\n         * $(someSelector).autoNumeric('getSettings').aDec; // return the aDec setting as a string - ant valid setting can be used\n         */\n        getSettings: function () {\n            var $this = autoGet($(this));\n            return $this.eq(0).data('autoNumeric');\n        }\n    };\n\n    /**\n     * autoNumeric function\n     */\n    $.fn.autoNumeric = function (method) {\n        if (methods[method]) {\n            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n        }\n        if (typeof method === 'object' || !method) {\n            return methods.init.apply(this, arguments);\n        }\n        $.error('Method \"' + method + '\" is not supported by autoNumeric()');\n    };\n\n    /**\n     * Defaults are public - these can be overridden by the following:\n     * HTML5 data attributes\n     * Options passed by the 'init' or 'update' methods\n     * Use jQuery's $.extend method - great way to pass ASP.NET current culture settings\n     */\n    $.fn.autoNumeric.defaults = {\n        /** allowed thousand separator characters\n         * comma = ','\n         * period \"full stop\" = '.'\n         * apostrophe is escaped = '\\''\n         * space = ' '\n         * none = ''\n         * NOTE: do not use numeric characters\n         */\n        aSep: ',',\n        /** digital grouping for the thousand separator used in Format\n         * dGroup: '2', results in 99,99,99,999 common in India for values less than 1 billion and greater than -1 billion\n         * dGroup: '3', results in 999,999,999 default\n         * dGroup: '4', results in 9999,9999,9999 used in some Asian countries\n         */\n        dGroup: '3',\n        /** allowed decimal separator characters\n         * period \"full stop\" = '.'\n         * comma = ','\n         */\n        aDec: '.',\n        /** allow to declare alternative decimal separator which is automatically replaced by aDec\n         * developed for countries the use a comma ',' as the decimal character\n         * and have keyboards\\numeric pads that have a period 'full stop' as the decimal characters (Spain is an example)\n         */\n        altDec: null,\n        /** allowed currency symbol\n         * Must be in quotes aSign: '$', a space is allowed aSign: '$ '\n         */\n        aSign: '',\n        /** placement of currency sign\n         * for prefix pSign: 'p',\n         * for suffix pSign: 's',\n         */\n        pSign: 'p',\n        /** maximum possible value\n         * value must be enclosed in quotes and use the period for the decimal point\n         * value must be larger than vMin\n         */\n        vMax: '9999999999999.99',\n        /** minimum possible value\n         * value must be enclosed in quotes and use the period for the decimal point\n         * value must be smaller than vMax\n         */\n        vMin: '-9999999999999.99',\n        /** max number of decimal places = used to override decimal places set by the vMin & vMax values\n         * value must be enclosed in quotes example mDec: '3',\n         * This can also set the value via a call back function mDec: 'css:#\n         */\n        mDec: null,\n        /** method used for rounding\n         * mRound: 'S', Round-Half-Up Symmetric (default)\n         * mRound: 'A', Round-Half-Up Asymmetric\n         * mRound: 's', Round-Half-Down Symmetric (lower case s)\n         * mRound: 'a', Round-Half-Down Asymmetric (lower case a)\n         * mRound: 'B', Round-Half-Even \"Bankers Rounding\"\n         * mRound: 'U', Round Up \"Round-Away-From-Zero\"\n         * mRound: 'D', Round Down \"Round-Toward-Zero\" - same as truncate\n         * mRound: 'C', Round to Ceiling \"Toward Positive Infinity\"\n         * mRound: 'F', Round to Floor \"Toward Negative Infinity\"\n         */\n        mRound: 'S',\n        /** controls decimal padding\n         * aPad: true - always Pad decimals with zeros\n         * aPad: false - does not pad with zeros.\n         * aPad: `some number` - pad decimals with zero to number different from mDec\n         * thanks to Jonas Johansson for the suggestion\n         */\n        aPad: true,\n        /** places brackets on negative value -$ 999.99 to (999.99)\n         * visible only when the field does NOT have focus the left and right symbols should be enclosed in quotes and seperated by a comma\n         * nBracket: null, nBracket: '(,)', nBracket: '[,]', nBracket: '<,>' or nBracket: '{,}'\n         */\n        nBracket: null,\n        /** Displayed on empty string\n         * wEmpty: 'empty', - input can be blank\n         * wEmpty: 'zero', - displays zero\n         * wEmpty: 'sign', - displays the currency sign\n         */\n        wEmpty: 'empty',\n        /** controls leading zero behavior\n         * lZero: 'allow', - allows leading zeros to be entered. Zeros will be truncated when entering additional digits. On focusout zeros will be deleted.\n         * lZero: 'deny', - allows only one leading zero on values less than one\n         * lZero: 'keep', - allows leading zeros to be entered. on fousout zeros will be retained.\n         */\n        lZero: 'allow',\n        /** determine if the select all keyboard command will select\n         * the complete input text or only the input numeric value\n         * if the currency symbol is between the numeric value and the negative sign only the numeric value will sellected\n         */\n        sNumber: true,\n        /** determine if the default value will be formatted on page ready.\n         * true = automatically formats the default value on page ready\n         * false = will not format the default value\n         */\n        aForm: true,\n        /** helper option for ASP.NET postback\n         * should be the value of the unformatted default value\n         * examples:\n         * no default value='' {anDefault: ''}\n         * value=1234.56 {anDefault: '1234.56'}\n         */\n        anDefault: null\n    };\n}));","/**\n* @license Input Mask plugin for jquery\n* http://github.com/RobinHerbots/jquery.inputmask\n* Copyright (c) 2010 - 2014 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 2.5.9\n*/\n\n(function ($) {\n    if ($.fn.inputmask === undefined) {\n        //helper functions    \n        function isInputEventSupported(eventName) {\n            var el = document.createElement('input'),\n            eventName = 'on' + eventName,\n            isSupported = (eventName in el);\n            if (!isSupported) {\n                el.setAttribute(eventName, 'return;');\n                isSupported = typeof el[eventName] == 'function';\n            }\n            el = null;\n            return isSupported;\n        }\n        function resolveAlias(aliasStr, options, opts) {\n            var aliasDefinition = opts.aliases[aliasStr];\n            if (aliasDefinition) {\n                if (aliasDefinition.alias) resolveAlias(aliasDefinition.alias, undefined, opts); //alias is another alias\n                $.extend(true, opts, aliasDefinition);  //merge alias definition in the options\n                $.extend(true, opts, options);  //reapply extra given options\n                return true;\n            }\n            return false;\n        }\n        function generateMaskSets(opts) {\n            var ms = [];\n            var genmasks = []; //used to keep track of the masks that where processed, to avoid duplicates\n            function getMaskTemplate(mask) {\n                if (opts.numericInput) {\n                    mask = mask.split('').reverse().join('');\n                }\n                var escaped = false, outCount = 0, greedy = opts.greedy, repeat = opts.repeat;\n                if (repeat == \"*\") greedy = false;\n                //if (greedy == true && opts.placeholder == \"\") opts.placeholder = \" \";\n                if (mask.length == 1 && greedy == false && repeat != 0) { opts.placeholder = \"\"; } //hide placeholder with single non-greedy mask\n                var singleMask = $.map(mask.split(\"\"), function (element, index) {\n                    var outElem = [];\n                    if (element == opts.escapeChar) {\n                        escaped = true;\n                    }\n                    else if ((element != opts.optionalmarker.start && element != opts.optionalmarker.end) || escaped) {\n                        var maskdef = opts.definitions[element];\n                        if (maskdef && !escaped) {\n                            for (var i = 0; i < maskdef.cardinality; i++) {\n                                outElem.push(opts.placeholder.charAt((outCount + i) % opts.placeholder.length));\n                            }\n                        } else {\n                            outElem.push(element);\n                            escaped = false;\n                        }\n                        outCount += outElem.length;\n                        return outElem;\n                    }\n                });\n\n                //allocate repetitions\n                var repeatedMask = singleMask.slice();\n                for (var i = 1; i < repeat && greedy; i++) {\n                    repeatedMask = repeatedMask.concat(singleMask.slice());\n                }\n\n                return { \"mask\": repeatedMask, \"repeat\": repeat, \"greedy\": greedy };\n            }\n            //test definition => {fn: RegExp/function, cardinality: int, optionality: bool, newBlockMarker: bool, offset: int, casing: null/upper/lower, def: definitionSymbol}\n            function getTestingChain(mask) {\n                if (opts.numericInput) {\n                    mask = mask.split('').reverse().join('');\n                }\n                var isOptional = false, escaped = false;\n                var newBlockMarker = false; //indicates wheter the begin/ending of a block should be indicated\n\n                return $.map(mask.split(\"\"), function (element, index) {\n                    var outElem = [];\n\n                    if (element == opts.escapeChar) {\n                        escaped = true;\n                    } else if (element == opts.optionalmarker.start && !escaped) {\n                        isOptional = true;\n                        newBlockMarker = true;\n                    }\n                    else if (element == opts.optionalmarker.end && !escaped) {\n                        isOptional = false;\n                        newBlockMarker = true;\n                    }\n                    else {\n                        var maskdef = opts.definitions[element];\n                        if (maskdef && !escaped) {\n                            var prevalidators = maskdef[\"prevalidator\"], prevalidatorsL = prevalidators ? prevalidators.length : 0;\n                            for (var i = 1; i < maskdef.cardinality; i++) {\n                                var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator[\"validator\"], cardinality = prevalidator[\"cardinality\"];\n                                outElem.push({ fn: validator ? typeof validator == 'string' ? new RegExp(validator) : new function () { this.test = validator; } : new RegExp(\".\"), cardinality: cardinality ? cardinality : 1, optionality: isOptional, newBlockMarker: isOptional == true ? newBlockMarker : false, offset: 0, casing: maskdef[\"casing\"], def: maskdef[\"definitionSymbol\"] || element });\n                                if (isOptional == true) //reset newBlockMarker\n                                    newBlockMarker = false;\n                            }\n                            outElem.push({ fn: maskdef.validator ? typeof maskdef.validator == 'string' ? new RegExp(maskdef.validator) : new function () { this.test = maskdef.validator; } : new RegExp(\".\"), cardinality: maskdef.cardinality, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: maskdef[\"casing\"], def: maskdef[\"definitionSymbol\"] || element });\n                        } else {\n                            outElem.push({ fn: null, cardinality: 0, optionality: isOptional, newBlockMarker: newBlockMarker, offset: 0, casing: null, def: element });\n                            escaped = false;\n                        }\n                        //reset newBlockMarker\n                        newBlockMarker = false;\n                        return outElem;\n                    }\n                });\n            }\n            function markOptional(maskPart) { //needed for the clearOptionalTail functionality\n                return opts.optionalmarker.start + maskPart + opts.optionalmarker.end;\n            }\n            function splitFirstOptionalEndPart(maskPart) {\n                var optionalStartMarkers = 0, optionalEndMarkers = 0, mpl = maskPart.length;\n                for (var i = 0; i < mpl; i++) {\n                    if (maskPart.charAt(i) == opts.optionalmarker.start) {\n                        optionalStartMarkers++;\n                    }\n                    if (maskPart.charAt(i) == opts.optionalmarker.end) {\n                        optionalEndMarkers++;\n                    }\n                    if (optionalStartMarkers > 0 && optionalStartMarkers == optionalEndMarkers)\n                        break;\n                }\n                var maskParts = [maskPart.substring(0, i)];\n                if (i < mpl) {\n                    maskParts.push(maskPart.substring(i + 1, mpl));\n                }\n                return maskParts;\n            }\n            function splitFirstOptionalStartPart(maskPart) {\n                var mpl = maskPart.length;\n                for (var i = 0; i < mpl; i++) {\n                    if (maskPart.charAt(i) == opts.optionalmarker.start) {\n                        break;\n                    }\n                }\n                var maskParts = [maskPart.substring(0, i)];\n                if (i < mpl) {\n                    maskParts.push(maskPart.substring(i + 1, mpl));\n                }\n                return maskParts;\n            }\n            function generateMask(maskPrefix, maskPart, metadata) {\n                var maskParts = splitFirstOptionalEndPart(maskPart);\n                var newMask, maskTemplate;\n\n                var masks = splitFirstOptionalStartPart(maskParts[0]);\n                if (masks.length > 1) {\n                    newMask = maskPrefix + masks[0] + markOptional(masks[1]) + (maskParts.length > 1 ? maskParts[1] : \"\");\n                    if ($.inArray(newMask, genmasks) == -1 && newMask != \"\") {\n                        genmasks.push(newMask);\n                        maskTemplate = getMaskTemplate(newMask);\n                        ms.push({\n                            \"mask\": newMask,\n                            \"_buffer\": maskTemplate[\"mask\"],\n                            \"buffer\": maskTemplate[\"mask\"].slice(),\n                            \"tests\": getTestingChain(newMask),\n                            \"lastValidPosition\": -1,\n                            \"greedy\": maskTemplate[\"greedy\"],\n                            \"repeat\": maskTemplate[\"repeat\"],\n                            \"metadata\": metadata\n                        });\n                    }\n                    newMask = maskPrefix + masks[0] + (maskParts.length > 1 ? maskParts[1] : \"\");\n                    if ($.inArray(newMask, genmasks) == -1 && newMask != \"\") {\n                        genmasks.push(newMask);\n                        maskTemplate = getMaskTemplate(newMask);\n                        ms.push({\n                            \"mask\": newMask,\n                            \"_buffer\": maskTemplate[\"mask\"],\n                            \"buffer\": maskTemplate[\"mask\"].slice(),\n                            \"tests\": getTestingChain(newMask),\n                            \"lastValidPosition\": -1,\n                            \"greedy\": maskTemplate[\"greedy\"],\n                            \"repeat\": maskTemplate[\"repeat\"],\n                            \"metadata\": metadata\n                        });\n                    }\n                    if (splitFirstOptionalStartPart(masks[1]).length > 1) { //optional contains another optional\n                        generateMask(maskPrefix + masks[0], masks[1] + maskParts[1], metadata);\n                    }\n                    if (maskParts.length > 1 && splitFirstOptionalStartPart(maskParts[1]).length > 1) {\n                        generateMask(maskPrefix + masks[0] + markOptional(masks[1]), maskParts[1], metadata);\n                        generateMask(maskPrefix + masks[0], maskParts[1], metadata);\n                    }\n                }\n                else {\n                    newMask = maskPrefix + maskParts;\n                    if ($.inArray(newMask, genmasks) == -1 && newMask != \"\") {\n                        genmasks.push(newMask);\n                        maskTemplate = getMaskTemplate(newMask);\n                        ms.push({\n                            \"mask\": newMask,\n                            \"_buffer\": maskTemplate[\"mask\"],\n                            \"buffer\": maskTemplate[\"mask\"].slice(),\n                            \"tests\": getTestingChain(newMask),\n                            \"lastValidPosition\": -1,\n                            \"greedy\": maskTemplate[\"greedy\"],\n                            \"repeat\": maskTemplate[\"repeat\"],\n                            \"metadata\": metadata\n                        });\n                    }\n                }\n\n            }\n\n            if ($.isFunction(opts.mask)) { //allow mask to be a preprocessing fn - should return a valid mask\n                opts.mask = opts.mask.call(this, opts);\n            }\n            if ($.isArray(opts.mask)) {\n                $.each(opts.mask, function (ndx, msk) {\n                    if (msk[\"mask\"] != undefined) {\n                        generateMask(\"\", msk[\"mask\"].toString(), msk);\n                    } else\n                        generateMask(\"\", msk.toString());\n                });\n            } else generateMask(\"\", opts.mask.toString());\n\n            return opts.greedy ? ms : ms.sort(function (a, b) { return a[\"mask\"].length - b[\"mask\"].length; });\n        }\n\n        var msie1x = typeof ScriptEngineMajorVersion === \"function\"\n                        ? ScriptEngineMajorVersion() //IE11 detection\n                        : new Function(\"/*@cc_on return @_jscript_version; @*/\")() >= 10, //conditional compilation from mickeysoft trick\n                        ua = navigator.userAgent,\n            iphone = ua.match(new RegExp(\"iphone\", \"i\")) !== null,\n            android = ua.match(new RegExp(\"android.*safari.*\", \"i\")) !== null,\n            androidchrome = ua.match(new RegExp(\"android.*chrome.*\", \"i\")) !== null,\n            androidfirefox = ua.match(new RegExp(\"android.*firefox.*\", \"i\")) !== null,\n            kindle = /Kindle/i.test(ua) || /Silk/i.test(ua) || /KFTT/i.test(ua) || /KFOT/i.test(ua) || /KFJWA/i.test(ua) || /KFJWI/i.test(ua) || /KFSOWI/i.test(ua) || /KFTHWA/i.test(ua) || /KFTHWI/i.test(ua) || /KFAPWA/i.test(ua) || /KFAPWI/i.test(ua),\n            PasteEventType = isInputEventSupported('paste') ? 'paste' : isInputEventSupported('input') ? 'input' : \"propertychange\";\n\n        //if (androidchrome) {\n        //    var browser = navigator.userAgent.match(new RegExp(\"chrome.*\", \"i\")),\n        //        version = parseInt(new RegExp(/[0-9]+/).exec(browser));\n        //    androidchrome32 = (version == 32);\n        //}\n\n        //masking scope\n        //actionObj definition see below\n        function maskScope(masksets, activeMasksetIndex, opts, actionObj) {\n            var isRTL = false,\n                valueOnFocus = getActiveBuffer().join(''),\n                $el,\n                skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround\n                skipInputEvent = false, //skip when triggered from within inputmask\n                ignorable = false;\n\n\n            //maskset helperfunctions\n\n            function getActiveMaskSet() {\n                return masksets[activeMasksetIndex];\n            }\n\n            function getActiveTests() {\n                return getActiveMaskSet()['tests'];\n            }\n\n            function getActiveBufferTemplate() {\n                return getActiveMaskSet()['_buffer'];\n            }\n\n            function getActiveBuffer() {\n                return getActiveMaskSet()['buffer'];\n            }\n\n            function isValid(pos, c, strict) { //strict true ~ no correction or autofill\n                strict = strict === true; //always set a value to strict to prevent possible strange behavior in the extensions \n\n                function _isValid(position, activeMaskset, c, strict) {\n                    var testPos = determineTestPosition(position), loopend = c ? 1 : 0, chrs = '', buffer = activeMaskset[\"buffer\"];\n                    for (var i = activeMaskset['tests'][testPos].cardinality; i > loopend; i--) {\n                        chrs += getBufferElement(buffer, testPos - (i - 1));\n                    }\n\n                    if (c) {\n                        chrs += c;\n                    }\n\n                    //return is false or a json object => { pos: ??, c: ??} or true\n                    return activeMaskset['tests'][testPos].fn != null ?\n                        activeMaskset['tests'][testPos].fn.test(chrs, buffer, position, strict, opts)\n                        : (c == getBufferElement(activeMaskset['_buffer'].slice(), position, true) || c == opts.skipOptionalPartCharacter) ?\n                            { \"refresh\": true, c: getBufferElement(activeMaskset['_buffer'].slice(), position, true), pos: position }\n                            : false;\n                }\n\n                function PostProcessResults(maskForwards, results) {\n                    var hasValidActual = false;\n                    $.each(results, function (ndx, rslt) {\n                        hasValidActual = $.inArray(rslt[\"activeMasksetIndex\"], maskForwards) == -1 && rslt[\"result\"] !== false;\n                        if (hasValidActual) return false;\n                    });\n                    if (hasValidActual) { //strip maskforwards\n                        results = $.map(results, function (rslt, ndx) {\n                            if ($.inArray(rslt[\"activeMasksetIndex\"], maskForwards) == -1) {\n                                return rslt;\n                            } else {\n                                masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = actualLVP;\n                            }\n                        });\n                    } else { //keep maskforwards with the least forward\n                        var lowestPos = -1, lowestIndex = -1, rsltValid;\n                        $.each(results, function (ndx, rslt) {\n                            if ($.inArray(rslt[\"activeMasksetIndex\"], maskForwards) != -1 && rslt[\"result\"] !== false & (lowestPos == -1 || lowestPos > rslt[\"result\"][\"pos\"])) {\n                                lowestPos = rslt[\"result\"][\"pos\"];\n                                lowestIndex = rslt[\"activeMasksetIndex\"];\n                            }\n                        });\n                        results = $.map(results, function (rslt, ndx) {\n                            if ($.inArray(rslt[\"activeMasksetIndex\"], maskForwards) != -1) {\n                                if (rslt[\"result\"][\"pos\"] == lowestPos) {\n                                    return rslt;\n                                } else if (rslt[\"result\"] !== false) {\n                                    for (var i = pos; i < lowestPos; i++) {\n                                        rsltValid = _isValid(i, masksets[rslt[\"activeMasksetIndex\"]], masksets[lowestIndex][\"buffer\"][i], true);\n                                        if (rsltValid === false) {\n                                            masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = lowestPos - 1;\n                                            break;\n                                        } else {\n                                            setBufferElement(masksets[rslt[\"activeMasksetIndex\"]][\"buffer\"], i, masksets[lowestIndex][\"buffer\"][i], true);\n                                            masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = i;\n                                        }\n                                    }\n                                    //also check check for the lowestpos with the new input\n                                    rsltValid = _isValid(lowestPos, masksets[rslt[\"activeMasksetIndex\"]], c, true);\n                                    if (rsltValid !== false) {\n                                        setBufferElement(masksets[rslt[\"activeMasksetIndex\"]][\"buffer\"], lowestPos, c, true);\n                                        masksets[rslt[\"activeMasksetIndex\"]][\"lastValidPosition\"] = lowestPos;\n                                    }\n                                    //console.log(\"ndx \" + rslt[\"activeMasksetIndex\"] + \" validate \" + masksets[rslt[\"activeMasksetIndex\"]][\"buffer\"].join('') + \" lv \" + masksets[rslt[\"activeMasksetIndex\"]]['lastValidPosition']);\n                                    return rslt;\n                                }\n                            }\n                        });\n                    }\n                    return results;\n                }\n\n                if (strict) {\n                    var result = _isValid(pos, getActiveMaskSet(), c, strict); //only check validity in current mask when validating strict\n                    if (result === true) {\n                        result = { \"pos\": pos }; //always take a possible corrected maskposition into account\n                    }\n                    return result;\n                }\n\n                var results = [], result = false, currentActiveMasksetIndex = activeMasksetIndex,\n                    actualBuffer = getActiveBuffer().slice(), actualLVP = getActiveMaskSet()[\"lastValidPosition\"],\n                    actualPrevious = seekPrevious(pos),\n                    maskForwards = [];\n                $.each(masksets, function (index, value) {\n                    if (typeof (value) == \"object\") {\n                        activeMasksetIndex = index;\n\n                        var maskPos = pos;\n                        var lvp = getActiveMaskSet()['lastValidPosition'],\n                            rsltValid;\n                        if (lvp == actualLVP) {\n                            if ((maskPos - actualLVP) > 1) {\n                                for (var i = lvp == -1 ? 0 : lvp; i < maskPos; i++) {\n                                    rsltValid = _isValid(i, getActiveMaskSet(), actualBuffer[i], true);\n                                    if (rsltValid === false) {\n                                        break;\n                                    } else {\n                                        setBufferElement(getActiveBuffer(), i, actualBuffer[i], true);\n                                        if (rsltValid === true) {\n                                            rsltValid = { \"pos\": i }; //always take a possible corrected maskposition into account\n                                        }\n                                        var newValidPosition = rsltValid.pos || i;\n                                        if (getActiveMaskSet()['lastValidPosition'] < newValidPosition)\n                                            getActiveMaskSet()['lastValidPosition'] = newValidPosition; //set new position from isValid\n                                    }\n                                }\n                            }\n                            //does the input match on a further position?\n                            if (!isMask(maskPos) && !_isValid(maskPos, getActiveMaskSet(), c, strict)) {\n                                var maxForward = seekNext(maskPos) - maskPos;\n                                for (var fw = 0; fw < maxForward; fw++) {\n                                    if (_isValid(++maskPos, getActiveMaskSet(), c, strict) !== false)\n                                        break;\n                                }\n                                maskForwards.push(activeMasksetIndex);\n                                //console.log('maskforward ' + activeMasksetIndex + \" pos \" + pos + \" maskPos \" + maskPos);\n                            }\n                        }\n\n                        if (getActiveMaskSet()['lastValidPosition'] >= actualLVP || activeMasksetIndex == currentActiveMasksetIndex) {\n                            if (maskPos >= 0 && maskPos < getMaskLength()) {\n                                result = _isValid(maskPos, getActiveMaskSet(), c, strict);\n                                if (result !== false) {\n                                    if (result === true) {\n                                        result = { \"pos\": maskPos }; //always take a possible corrected maskposition into account\n                                    }\n                                    var newValidPosition = result.pos || maskPos;\n                                    if (getActiveMaskSet()['lastValidPosition'] < newValidPosition)\n                                        getActiveMaskSet()['lastValidPosition'] = newValidPosition; //set new position from isValid\n                                }\n                                //console.log(\"pos \" + pos + \" ndx \" + activeMasksetIndex + \" validate \" + getActiveBuffer().join('') + \" lv \" + getActiveMaskSet()['lastValidPosition']);\n                                results.push({ \"activeMasksetIndex\": index, \"result\": result });\n                            }\n                        }\n                    }\n                });\n                activeMasksetIndex = currentActiveMasksetIndex; //reset activeMasksetIndex\n\n                return PostProcessResults(maskForwards, results); //return results of the multiple mask validations\n            }\n\n            function determineActiveMasksetIndex() {\n                var currentMasksetIndex = activeMasksetIndex,\n                    highestValid = { \"activeMasksetIndex\": 0, \"lastValidPosition\": -1, \"next\": -1 };\n                $.each(masksets, function (index, value) {\n                    if (typeof (value) == \"object\") {\n                        activeMasksetIndex = index;\n                        if (getActiveMaskSet()['lastValidPosition'] > highestValid['lastValidPosition']) {\n                            highestValid[\"activeMasksetIndex\"] = index;\n                            highestValid[\"lastValidPosition\"] = getActiveMaskSet()['lastValidPosition'];\n                            highestValid[\"next\"] = seekNext(getActiveMaskSet()['lastValidPosition']);\n                        } else if (getActiveMaskSet()['lastValidPosition'] == highestValid['lastValidPosition'] &&\n                            (highestValid['next'] == -1 || highestValid['next'] > seekNext(getActiveMaskSet()['lastValidPosition']))) {\n                            highestValid[\"activeMasksetIndex\"] = index;\n                            highestValid[\"lastValidPosition\"] = getActiveMaskSet()['lastValidPosition'];\n                            highestValid[\"next\"] = seekNext(getActiveMaskSet()['lastValidPosition']);\n                        }\n                    }\n                });\n\n                activeMasksetIndex = highestValid[\"lastValidPosition\"] != -1 && masksets[currentMasksetIndex][\"lastValidPosition\"] == highestValid[\"lastValidPosition\"] ? currentMasksetIndex : highestValid[\"activeMasksetIndex\"];\n                if (currentMasksetIndex != activeMasksetIndex) {\n                    clearBuffer(getActiveBuffer(), seekNext(highestValid[\"lastValidPosition\"]), getMaskLength());\n                    getActiveMaskSet()[\"writeOutBuffer\"] = true;\n                }\n                $el.data('_inputmask')['activeMasksetIndex'] = activeMasksetIndex; //store the activeMasksetIndex\n            }\n\n            function isMask(pos) {\n                var testPos = determineTestPosition(pos);\n                var test = getActiveTests()[testPos];\n\n                return test != undefined ? test.fn : false;\n            }\n\n            function determineTestPosition(pos) {\n                return pos % getActiveTests().length;\n            }\n\n            function getMaskLength() {\n\t\t\t\tvar buffer=getActiveBufferTemplate(), greedy=getActiveMaskSet()['greedy'], repeat=getActiveMaskSet()['repeat'], currentBuffer=getActiveBuffer();\n\n\t\tif($.isFunction(opts.getMaskLength)) return opts.getMaskLength(buffer, greedy, repeat, currentBuffer, opts);\n\n\t\t    var calculatedLength = buffer.length;\n                    if (!greedy) {\n                        if (repeat == \"*\") {\n                            calculatedLength = currentBuffer.length + 1;\n                        } else if (repeat > 1) {\n                            calculatedLength += (buffer.length * (repeat - 1));\n                        }\n                    }\n                    return calculatedLength;\n            }\n\n            //pos: from position\n\n            function seekNext(pos) {\n                var maskL = getMaskLength();\n                if (pos >= maskL) return maskL;\n                var position = pos;\n                while (++position < maskL && !isMask(position)) {\n                }\n                return position;\n            }\n\n            //pos: from position\n\n            function seekPrevious(pos) {\n                var position = pos;\n                if (position <= 0) return 0;\n\n                while (--position > 0 && !isMask(position)) {\n                }\n                ;\n                return position;\n            }\n\n            function setBufferElement(buffer, position, element, autoPrepare) {\n                if (autoPrepare) position = prepareBuffer(buffer, position);\n\n                var test = getActiveTests()[determineTestPosition(position)];\n                var elem = element;\n                if (elem != undefined && test != undefined) {\n                    switch (test.casing) {\n                        case \"upper\":\n                            elem = element.toUpperCase();\n                            break;\n                        case \"lower\":\n                            elem = element.toLowerCase();\n                            break;\n                    }\n                }\n\n                buffer[position] = elem;\n            }\n\n            function getBufferElement(buffer, position, autoPrepare) {\n                if (autoPrepare) position = prepareBuffer(buffer, position);\n                return buffer[position];\n            }\n\n            //needed to handle the non-greedy mask repetitions\n\n            function prepareBuffer(buffer, position) {\n                var j;\n                while (buffer[position] == undefined && buffer.length < getMaskLength()) {\n                    j = 0;\n                    while (getActiveBufferTemplate()[j] !== undefined) { //add a new buffer\n                        buffer.push(getActiveBufferTemplate()[j++]);\n                    }\n                }\n\n                return position;\n            }\n\n            function writeBuffer(input, buffer, caretPos) {\n                input._valueSet(buffer.join(''));\n                if (caretPos != undefined) {\n                    caret(input, caretPos);\n                }\n            }\n\n            function clearBuffer(buffer, start, end, stripNomasks) {\n                for (var i = start, maskL = getMaskLength() ; i < end && i < maskL; i++) {\n                    if (stripNomasks === true) {\n                        if (!isMask(i))\n                            setBufferElement(buffer, i, \"\");\n                    } else\n                        setBufferElement(buffer, i, getBufferElement(getActiveBufferTemplate().slice(), i, true));\n                }\n            }\n\n            function setReTargetPlaceHolder(buffer, pos) {\n                var testPos = determineTestPosition(pos);\n                setBufferElement(buffer, pos, getBufferElement(getActiveBufferTemplate(), testPos));\n            }\n\n            function getPlaceHolder(pos) {\n                return opts.placeholder.charAt(pos % opts.placeholder.length);\n            }\n\n            function checkVal(input, writeOut, strict, nptvl, intelliCheck) {\n                var inputValue = nptvl != undefined ? nptvl.slice() : truncateInput(input._valueGet()).split('');\n\n                $.each(masksets, function (ndx, ms) {\n                    if (typeof (ms) == \"object\") {\n                        ms[\"buffer\"] = ms[\"_buffer\"].slice();\n                        ms[\"lastValidPosition\"] = -1;\n                        ms[\"p\"] = -1;\n                    }\n                });\n                if (strict !== true) activeMasksetIndex = 0;\n                if (writeOut) input._valueSet(\"\"); //initial clear\n                var ml = getMaskLength();\n                $.each(inputValue, function (ndx, charCode) {\n                    if (intelliCheck === true) {\n                        var p = getActiveMaskSet()[\"p\"], lvp = p == -1 ? p : seekPrevious(p),\n                            pos = lvp == -1 ? ndx : seekNext(lvp);\n                        if ($.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1) {\n                            keypressEvent.call(input, undefined, true, charCode.charCodeAt(0), writeOut, strict, ndx);\n                        }\n                    } else {\n                        keypressEvent.call(input, undefined, true, charCode.charCodeAt(0), writeOut, strict, ndx);\n                        strict = strict || (ndx > 0 && ndx > getActiveMaskSet()[\"p\"]);\n                    }\n                });\n\n                if (strict === true && getActiveMaskSet()[\"p\"] != -1) {\n                    getActiveMaskSet()[\"lastValidPosition\"] = seekPrevious(getActiveMaskSet()[\"p\"]);\n                }\n            }\n\n            function escapeRegex(str) {\n                return $.inputmask.escapeRegex.call(this, str);\n            }\n\n            function truncateInput(inputValue) {\n                return inputValue.replace(new RegExp(\"(\" + escapeRegex(getActiveBufferTemplate().join('')) + \")*$\"), \"\");\n            }\n\n            function clearOptionalTail(input) {\n                var buffer = getActiveBuffer(), tmpBuffer = buffer.slice(), testPos, pos;\n                for (var pos = tmpBuffer.length - 1; pos >= 0; pos--) {\n                    var testPos = determineTestPosition(pos);\n                    if (getActiveTests()[testPos].optionality) {\n                        if (!isMask(pos) || !isValid(pos, buffer[pos], true))\n                            tmpBuffer.pop();\n                        else break;\n                    } else break;\n                }\n                writeBuffer(input, tmpBuffer);\n            }\n\n            function unmaskedvalue($input, skipDatepickerCheck) {\n                if (getActiveTests() && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {\n                    var umValue = $.map(getActiveBuffer(), function (element, index) {\n                        return isMask(index) && isValid(index, element, true) ? element : null;\n                    });\n                    var unmaskedValue = (isRTL ? umValue.reverse() : umValue).join('');\n                    return $.isFunction(opts.onUnMask) ? opts.onUnMask.call($input, getActiveBuffer().join(''), unmaskedValue, opts) : unmaskedValue;\n                } else {\n                    return $input[0]._valueGet();\n                }\n            }\n\n            function TranslatePosition(pos) {\n                if (isRTL && typeof pos == 'number' && (!opts.greedy || opts.placeholder != \"\")) {\n                    var bffrLght = getActiveBuffer().length;\n                    pos = bffrLght - pos;\n                }\n                return pos;\n            }\n\n            function caret(input, begin, end) {\n                var npt = input.jquery && input.length > 0 ? input[0] : input, range;\n                if (typeof begin == 'number') {\n                    begin = TranslatePosition(begin);\n                    end = TranslatePosition(end);\n                    if (!$(npt).is(':visible')) {\n                        return;\n                    }\n                    end = (typeof end == 'number') ? end : begin;\n                    npt.scrollLeft = npt.scrollWidth;\n                    if (opts.insertMode == false && begin == end) end++; //set visualization for insert/overwrite mode\n                    if (npt.setSelectionRange) {\n                        npt.selectionStart = begin;\n                        npt.selectionEnd = end;\n\n                    } else if (npt.createTextRange) {\n                        range = npt.createTextRange();\n                        range.collapse(true);\n                        range.moveEnd('character', end);\n                        range.moveStart('character', begin);\n                        range.select();\n                    }\n                } else {\n                    if (!$(input).is(':visible')) {\n                        return { \"begin\": 0, \"end\": 0 };\n                    }\n                    if (npt.setSelectionRange) {\n                        begin = npt.selectionStart;\n                        end = npt.selectionEnd;\n                    } else if (document.selection && document.selection.createRange) {\n                        range = document.selection.createRange();\n                        begin = 0 - range.duplicate().moveStart('character', -100000);\n                        end = begin + range.text.length;\n                    }\n                    begin = TranslatePosition(begin);\n                    end = TranslatePosition(end);\n                    return { \"begin\": begin, \"end\": end };\n                }\n            }\n\n            function isComplete(buffer) { //return true / false / undefined (repeat *)\n\t\tif($.isFunction(opts.isComplete)) return opts.isComplete.call($el, buffer, opts);\n                if (opts.repeat == \"*\") return undefined;\n                var complete = false, highestValidPosition = 0, currentActiveMasksetIndex = activeMasksetIndex;\n                $.each(masksets, function (ndx, ms) {\n                    if (typeof (ms) == \"object\") {\n                        activeMasksetIndex = ndx;\n                        var aml = seekPrevious(getMaskLength());\n                        if (ms[\"lastValidPosition\"] >= highestValidPosition && ms[\"lastValidPosition\"] == aml) {\n                            var msComplete = true;\n                            for (var i = 0; i <= aml; i++) {\n                                var mask = isMask(i), testPos = determineTestPosition(i);\n                                if ((mask && (buffer[i] == undefined || buffer[i] == getPlaceHolder(i))) || (!mask && buffer[i] != getActiveBufferTemplate()[testPos])) {\n                                    msComplete = false;\n                                    break;\n                                }\n                            }\n                            complete = complete || msComplete;\n                            if (complete) //break loop\n                                return false;\n                        }\n                        highestValidPosition = ms[\"lastValidPosition\"];\n                    }\n                });\n                activeMasksetIndex = currentActiveMasksetIndex; //reset activeMaskset\n                return complete;\n            }\n\n            function isSelection(begin, end) {\n                return isRTL ? (begin - end) > 1 || ((begin - end) == 1 && opts.insertMode) :\n                    (end - begin) > 1 || ((end - begin) == 1 && opts.insertMode);\n            }\n\n\n            //private functions\n            function installEventRuler(npt) {\n                var events = $._data(npt).events;\n\n                $.each(events, function (eventType, eventHandlers) {\n                    $.each(eventHandlers, function (ndx, eventHandler) {\n                        if (eventHandler.namespace == \"inputmask\") {\n                            if (eventHandler.type != \"setvalue\") {\n                                var handler = eventHandler.handler;\n                                eventHandler.handler = function (e) {\n                                    if (this.readOnly || this.disabled)\n                                        e.preventDefault;\n                                    else\n                                        return handler.apply(this, arguments);\n                                };\n                            }\n                        }\n                    });\n                });\n            }\n\n            function patchValueProperty(npt) {\n                function PatchValhook(type) {\n                    if ($.valHooks[type] == undefined || $.valHooks[type].inputmaskpatch != true) {\n                        var valueGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function (elem) { return elem.value; };\n                        var valueSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function (elem, value) {\n                            elem.value = value;\n                            return elem;\n                        };\n\n                        $.valHooks[type] = {\n                            get: function (elem) {\n                                var $elem = $(elem);\n                                if ($elem.data('_inputmask')) {\n                                    if ($elem.data('_inputmask')['opts'].autoUnmask)\n                                        return $elem.inputmask('unmaskedvalue');\n                                    else {\n                                        var result = valueGet(elem),\n                                            inputData = $elem.data('_inputmask'), masksets = inputData['masksets'],\n                                            activeMasksetIndex = inputData['activeMasksetIndex'];\n                                        return result != masksets[activeMasksetIndex]['_buffer'].join('') ? result : '';\n                                    }\n                                } else return valueGet(elem);\n                            },\n                            set: function (elem, value) {\n                                var $elem = $(elem);\n                                var result = valueSet(elem, value);\n                                if ($elem.data('_inputmask')) $elem.triggerHandler('setvalue.inputmask');\n                                return result;\n                            },\n                            inputmaskpatch: true\n                        };\n                    }\n                }\n                var valueProperty;\n                if (Object.getOwnPropertyDescriptor)\n                    valueProperty = Object.getOwnPropertyDescriptor(npt, \"value\");\n                if (valueProperty && valueProperty.get) {\n                    if (!npt._valueGet) {\n                        var valueGet = valueProperty.get;\n                        var valueSet = valueProperty.set;\n                        npt._valueGet = function () {\n                            return isRTL ? valueGet.call(this).split('').reverse().join('') : valueGet.call(this);\n                        };\n                        npt._valueSet = function (value) {\n                            valueSet.call(this, isRTL ? value.split('').reverse().join('') : value);\n                        };\n\n                        Object.defineProperty(npt, \"value\", {\n                            get: function () {\n                                var $self = $(this), inputData = $(this).data('_inputmask'), masksets = inputData['masksets'],\n                                    activeMasksetIndex = inputData['activeMasksetIndex'];\n                                return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : valueGet.call(this) != masksets[activeMasksetIndex]['_buffer'].join('') ? valueGet.call(this) : '';\n                            },\n                            set: function (value) {\n                                valueSet.call(this, value);\n                                $(this).triggerHandler('setvalue.inputmask');\n                            }\n                        });\n                    }\n                } else if (document.__lookupGetter__ && npt.__lookupGetter__(\"value\")) {\n                    if (!npt._valueGet) {\n                        var valueGet = npt.__lookupGetter__(\"value\");\n                        var valueSet = npt.__lookupSetter__(\"value\");\n                        npt._valueGet = function () {\n                            return isRTL ? valueGet.call(this).split('').reverse().join('') : valueGet.call(this);\n                        };\n                        npt._valueSet = function (value) {\n                            valueSet.call(this, isRTL ? value.split('').reverse().join('') : value);\n                        };\n\n                        npt.__defineGetter__(\"value\", function () {\n                            var $self = $(this), inputData = $(this).data('_inputmask'), masksets = inputData['masksets'],\n                                activeMasksetIndex = inputData['activeMasksetIndex'];\n                            return inputData && inputData['opts'].autoUnmask ? $self.inputmask('unmaskedvalue') : valueGet.call(this) != masksets[activeMasksetIndex]['_buffer'].join('') ? valueGet.call(this) : '';\n                        });\n                        npt.__defineSetter__(\"value\", function (value) {\n                            valueSet.call(this, value);\n                            $(this).triggerHandler('setvalue.inputmask');\n                        });\n                    }\n                } else {\n                    if (!npt._valueGet) {\n                        npt._valueGet = function () { return isRTL ? this.value.split('').reverse().join('') : this.value; };\n                        npt._valueSet = function (value) { this.value = isRTL ? value.split('').reverse().join('') : value; };\n                    }\n                    PatchValhook(npt.type);\n                }\n            }\n\n            //shift chars to left from start to end and put c at end position if defined\n            function shiftL(start, end, c, maskJumps) {\n                var buffer = getActiveBuffer();\n                if (maskJumps !== false) //jumping over nonmask position\n                    while (!isMask(start) && start - 1 >= 0) start--;\n                for (var i = start; i < end && i < getMaskLength() ; i++) {\n                    if (isMask(i)) {\n                        setReTargetPlaceHolder(buffer, i);\n                        var j = seekNext(i);\n                        var p = getBufferElement(buffer, j);\n                        if (p != getPlaceHolder(j)) {\n                            if (j < getMaskLength() && isValid(i, p, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {\n                                setBufferElement(buffer, i, p, true);\n                            } else {\n                                if (isMask(i))\n                                    break;\n                            }\n                        }\n                    } else {\n                        setReTargetPlaceHolder(buffer, i);\n                    }\n                }\n                if (c != undefined)\n                    setBufferElement(buffer, seekPrevious(end), c);\n\n                if (getActiveMaskSet()[\"greedy\"] == false) {\n                    var trbuffer = truncateInput(buffer.join('')).split('');\n                    buffer.length = trbuffer.length;\n                    for (var i = 0, bl = buffer.length; i < bl; i++) {\n                        buffer[i] = trbuffer[i];\n                    }\n                    if (buffer.length == 0) getActiveMaskSet()[\"buffer\"] = getActiveBufferTemplate().slice();\n                }\n                return start; //return the used start position\n            }\n\n            function shiftR(start, end, c) {\n                var buffer = getActiveBuffer();\n                if (getBufferElement(buffer, start, true) != getPlaceHolder(start)) {\n                    for (var i = seekPrevious(end) ; i > start && i >= 0; i--) {\n                        if (isMask(i)) {\n                            var j = seekPrevious(i);\n                            var t = getBufferElement(buffer, j);\n                            if (t != getPlaceHolder(j)) {\n                                if (isValid(i, t, true) !== false && getActiveTests()[determineTestPosition(i)].def == getActiveTests()[determineTestPosition(j)].def) {\n                                    setBufferElement(buffer, i, t, true);\n                                    setReTargetPlaceHolder(buffer, j);\n                                } //else break;\n                            }\n                        } else\n                            setReTargetPlaceHolder(buffer, i);\n                    }\n                }\n                if (c != undefined && getBufferElement(buffer, start) == getPlaceHolder(start))\n                    setBufferElement(buffer, start, c);\n                var lengthBefore = buffer.length;\n                if (getActiveMaskSet()[\"greedy\"] == false) {\n                    var trbuffer = truncateInput(buffer.join('')).split('');\n                    buffer.length = trbuffer.length;\n                    for (var i = 0, bl = buffer.length; i < bl; i++) {\n                        buffer[i] = trbuffer[i];\n                    }\n                    if (buffer.length == 0) getActiveMaskSet()[\"buffer\"] = getActiveBufferTemplate().slice();\n                }\n                return end - (lengthBefore - buffer.length); //return new start position\n            }\n\n            ;\n\n\n            function HandleRemove(input, k, pos) {\n                if (opts.numericInput || isRTL) {\n                    switch (k) {\n                        case opts.keyCode.BACKSPACE:\n                            k = opts.keyCode.DELETE;\n                            break;\n                        case opts.keyCode.DELETE:\n                            k = opts.keyCode.BACKSPACE;\n                            break;\n                    }\n                    if (isRTL) {\n                        var pend = pos.end;\n                        pos.end = pos.begin;\n                        pos.begin = pend;\n                    }\n                }\n\n                var isSelection = true;\n                if (pos.begin == pos.end) {\n                    var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;\n                    if (opts.isNumeric && opts.radixPoint != \"\" && getActiveBuffer()[posBegin] == opts.radixPoint) {\n                        pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);\n                        pos.end = pos.begin;\n                    }\n                    isSelection = false;\n                    if (k == opts.keyCode.BACKSPACE)\n                        pos.begin--;\n                    else if (k == opts.keyCode.DELETE)\n                        pos.end++;\n                } else if (pos.end - pos.begin == 1 && !opts.insertMode) {\n                    isSelection = false;\n                    if (k == opts.keyCode.BACKSPACE)\n                        pos.begin--;\n                }\n\n                clearBuffer(getActiveBuffer(), pos.begin, pos.end);\n\n                var ml = getMaskLength();\n                if (opts.greedy == false && (isNaN(opts.repeat) || opts.repeat > 0)) {\n                    shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));\n                } else {\n                    var newpos = pos.begin;\n                    for (var i = pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection\n                        if (isMask(i) || !isSelection)\n                            newpos = shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));\n                    }\n                    if (!isSelection) pos.begin = newpos;\n                }\n                var firstMaskPos = seekNext(-1);\n                clearBuffer(getActiveBuffer(), pos.begin, pos.end, true);\n                checkVal(input, false, false, getActiveBuffer());\n                if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {\n                    getActiveMaskSet()[\"lastValidPosition\"] = -1;\n                    getActiveMaskSet()[\"p\"] = firstMaskPos;\n                } else {\n                    getActiveMaskSet()[\"p\"] = pos.begin;\n                }\n            }\n\n            function keydownEvent(e) {\n                //Safari 5.1.x - modal dialog fires keypress twice workaround\n                skipKeyPressEvent = false;\n                var input = this, $input = $(input), k = e.keyCode, pos = caret(input);\n\n                //backspace, delete, and escape get special treatment\n                if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || e.ctrlKey && k == 88) { //backspace/delete\n                    e.preventDefault(); //stop default action but allow propagation\n                    if (k == 88) valueOnFocus = getActiveBuffer().join('');\n                    HandleRemove(input, k, pos);\n                    determineActiveMasksetIndex();\n                    writeBuffer(input, getActiveBuffer(), getActiveMaskSet()[\"p\"]);\n                    if (input._valueGet() == getActiveBufferTemplate().join(''))\n                        $input.trigger('cleared');\n\n                    if (opts.showTooltip) { //update tooltip\n                        $input.prop(\"title\", getActiveMaskSet()[\"mask\"]);\n                    }\n                } else if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch\n                    setTimeout(function () {\n                        var caretPos = seekNext(getActiveMaskSet()[\"lastValidPosition\"]);\n                        if (!opts.insertMode && caretPos == getMaskLength() && !e.shiftKey) caretPos--;\n                        caret(input, e.shiftKey ? pos.begin : caretPos, caretPos);\n                    }, 0);\n                } else if ((k == opts.keyCode.HOME && !e.shiftKey) || k == opts.keyCode.PAGE_UP) { //Home or page_up\n                    caret(input, 0, e.shiftKey ? pos.begin : 0);\n                } else if (k == opts.keyCode.ESCAPE || (k == 90 && e.ctrlKey)) { //escape && undo\n                    checkVal(input, true, false, valueOnFocus.split(''));\n                    $input.click();\n                } else if (k == opts.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) { //insert\n                    opts.insertMode = !opts.insertMode;\n                    caret(input, !opts.insertMode && pos.begin == getMaskLength() ? pos.begin - 1 : pos.begin);\n                } else if (opts.insertMode == false && !e.shiftKey) {\n                    if (k == opts.keyCode.RIGHT) {\n                        setTimeout(function () {\n                            var caretPos = caret(input);\n                            caret(input, caretPos.begin);\n                        }, 0);\n                    } else if (k == opts.keyCode.LEFT) {\n                        setTimeout(function () {\n                            var caretPos = caret(input);\n                            caret(input, caretPos.begin - 1);\n                        }, 0);\n                    }\n                }\n\n                var currentCaretPos = caret(input);\n                if (opts.onKeyDown.call(this, e, getActiveBuffer(), opts) === true) //extra stuff to execute on keydown\n                    caret(input, currentCaretPos.begin, currentCaretPos.end);\n                ignorable = $.inArray(k, opts.ignorables) != -1;\n            }\n\n\n            function keypressEvent(e, checkval, k, writeOut, strict, ndx) {\n                //Safari 5.1.x - modal dialog fires keypress twice workaround\n                if (k == undefined && skipKeyPressEvent) return false;\n                skipKeyPressEvent = true;\n\n                var input = this, $input = $(input);\n\n                e = e || window.event;\n                var k = checkval ? k : (e.which || e.charCode || e.keyCode);\n\n                if (checkval !== true && (!(e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable))) {\n                    return true;\n                } else {\n                    if (k) {\n                        //special treat the decimal separator\n                        if (checkval !== true && k == 46 && e.shiftKey == false && opts.radixPoint == \",\") k = 44;\n\n                        var pos, results, result, c = String.fromCharCode(k);\n                        if (checkval) {\n                            var pcaret = strict ? ndx : getActiveMaskSet()[\"lastValidPosition\"] + 1;\n                            pos = { begin: pcaret, end: pcaret };\n                        } else {\n                            pos = caret(input);\n                        }\n\n                        //should we clear a possible selection??\n                        var isSlctn = isSelection(pos.begin, pos.end),\n                            initialIndex = activeMasksetIndex;\n                        if (isSlctn) {\n                            $.each(masksets, function (ndx, lmnt) { //init undobuffer for recovery when not valid\n                                if (typeof (lmnt) == \"object\") {\n                                    activeMasksetIndex = ndx;\n                                    getActiveMaskSet()[\"undoBuffer\"] = getActiveBuffer().join('');\n                                }\n                            });\n                            activeMasksetIndex = initialIndex; //restore index\n                            HandleRemove(input, opts.keyCode.DELETE, pos);\n                            if (!opts.insertMode) { //preserve some space\n                                $.each(masksets, function (ndx, lmnt) {\n                                    if (typeof (lmnt) == \"object\") {\n                                        activeMasksetIndex = ndx;\n                                        shiftR(pos.begin, getMaskLength());\n                                        getActiveMaskSet()[\"lastValidPosition\"] = seekNext(getActiveMaskSet()[\"lastValidPosition\"]);\n                                    }\n                                });\n                            }\n                            activeMasksetIndex = initialIndex; //restore index\n                        }\n\n                        var radixPosition = getActiveBuffer().join('').indexOf(opts.radixPoint);\n                        if (opts.isNumeric && checkval !== true && radixPosition != -1) {\n                            if (opts.greedy && pos.begin <= radixPosition) {\n                                pos.begin = seekPrevious(pos.begin);\n                                pos.end = pos.begin;\n                            } else if (c == opts.radixPoint) {\n                                pos.begin = radixPosition;\n                                pos.end = pos.begin;\n                            }\n                        }\n\n\n                        var p = pos.begin;\n                        results = isValid(p, c, strict);\n                        if (strict === true) results = [{ \"activeMasksetIndex\": activeMasksetIndex, \"result\": results }];\n                        var minimalForwardPosition = -1;\n                        $.each(results, function (index, result) {\n                            activeMasksetIndex = result[\"activeMasksetIndex\"];\n                            getActiveMaskSet()[\"writeOutBuffer\"] = true;\n                            var np = result[\"result\"];\n                            if (np !== false) {\n                                var refresh = false, buffer = getActiveBuffer();\n                                if (np !== true) {\n                                    refresh = np[\"refresh\"]; //only rewrite buffer from isValid\n                                    p = np.pos != undefined ? np.pos : p; //set new position from isValid\n                                    c = np.c != undefined ? np.c : c; //set new char from isValid\n                                }\n                                if (refresh !== true) {\n                                    if (opts.insertMode == true) {\n                                        var lastUnmaskedPosition = getMaskLength();\n                                        var bfrClone = buffer.slice();\n                                        while (getBufferElement(bfrClone, lastUnmaskedPosition, true) != getPlaceHolder(lastUnmaskedPosition) && lastUnmaskedPosition >= p) {\n                                            lastUnmaskedPosition = lastUnmaskedPosition == 0 ? -1 : seekPrevious(lastUnmaskedPosition);\n                                        }\n                                        if (lastUnmaskedPosition >= p) {\n                                            shiftR(p, getMaskLength(), c);\n                                            //shift the lvp if needed\n                                            var lvp = getActiveMaskSet()[\"lastValidPosition\"], nlvp = seekNext(lvp);\n                                            if (nlvp != getMaskLength() && lvp >= p && (getBufferElement(getActiveBuffer().slice(), nlvp, true) != getPlaceHolder(nlvp))) {\n                                                getActiveMaskSet()[\"lastValidPosition\"] = nlvp;\n                                            }\n                                        } else getActiveMaskSet()[\"writeOutBuffer\"] = false;\n                                    } else setBufferElement(buffer, p, c, true);\n                                    if (minimalForwardPosition == -1 || minimalForwardPosition > seekNext(p)) {\n                                        minimalForwardPosition = seekNext(p);\n                                    }\n                                } else if (!strict) {\n                                    var nextPos = p < getMaskLength() ? p + 1 : p;\n                                    if (minimalForwardPosition == -1 || minimalForwardPosition > nextPos) {\n                                        minimalForwardPosition = nextPos;\n                                    }\n                                }\n                                if (minimalForwardPosition > getActiveMaskSet()[\"p\"])\n                                    getActiveMaskSet()[\"p\"] = minimalForwardPosition; //needed for checkval strict \n                            }\n                        });\n\n                        if (strict !== true) {\n                            activeMasksetIndex = initialIndex;\n                            determineActiveMasksetIndex();\n                        }\n                        if (writeOut !== false) {\n                            $.each(results, function (ndx, rslt) {\n                                if (rslt[\"activeMasksetIndex\"] == activeMasksetIndex) {\n                                    result = rslt;\n                                    return false;\n                                }\n                            });\n                            if (result != undefined) {\n                                var self = this;\n                                setTimeout(function () { opts.onKeyValidation.call(self, result[\"result\"], opts); }, 0);\n                                if (getActiveMaskSet()[\"writeOutBuffer\"] && result[\"result\"] !== false) {\n                                    var buffer = getActiveBuffer();\n\n                                    var newCaretPosition;\n                                    if (checkval) {\n                                        newCaretPosition = undefined;\n                                    } else if (opts.numericInput) {\n                                        if (p > radixPosition) {\n                                            newCaretPosition = seekPrevious(minimalForwardPosition);\n                                        } else if (c == opts.radixPoint) {\n                                            newCaretPosition = minimalForwardPosition - 1;\n                                        } else newCaretPosition = seekPrevious(minimalForwardPosition - 1);\n                                    } else {\n                                        newCaretPosition = minimalForwardPosition;\n                                    }\n\n                                    writeBuffer(input, buffer, newCaretPosition);\n                                    if (checkval !== true) {\n                                        setTimeout(function () { //timeout needed for IE\n                                            if (isComplete(buffer) === true)\n                                                $input.trigger(\"complete\");\n                                            skipInputEvent = true;\n                                            $input.trigger(\"input\");\n                                        }, 0);\n                                    }\n                                } else if (isSlctn) {\n                                    getActiveMaskSet()[\"buffer\"] = getActiveMaskSet()[\"undoBuffer\"].split('');\n                                }\n                            } else if (isSlctn) {\n                                getActiveMaskSet()[\"buffer\"] = getActiveMaskSet()[\"undoBuffer\"].split('');\n                            }\n                        }\n\n                        if (opts.showTooltip) { //update tooltip\n                            $input.prop(\"title\", getActiveMaskSet()[\"mask\"]);\n                        }\n\n                        //needed for IE8 and below\n                        if (e) e.preventDefault ? e.preventDefault() : e.returnValue = false;\n                    }\n                }\n            }\n\n            function keyupEvent(e) {\n                var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer();\n\n                opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup\n                if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {\n                    if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {\n                        buffer = getActiveBufferTemplate().slice();\n                        writeBuffer(input, buffer);\n                        caret(input, 0);\n                        valueOnFocus = getActiveBuffer().join('');\n                    } else {\n                        writeBuffer(input, buffer);\n                        if (buffer.join('') == getActiveBufferTemplate().join('') && $.inArray(opts.radixPoint, buffer) != -1) {\n                            caret(input, TranslatePosition(0));\n                            $input.click();\n                        } else\n                            caret(input, TranslatePosition(0), TranslatePosition(getMaskLength()));\n                    }\n                }\n            }\n\n            function pasteEvent(e) {\n                if (skipInputEvent === true && e.type == \"input\") {\n                    skipInputEvent = false;\n                    return true;\n                }\n\n                var input = this, $input = $(input);\n                //paste event for IE8 and lower I guess ;-)\n                if (e.type == \"propertychange\" && input._valueGet().length <= getMaskLength()) {\n                    return true;\n                }\n                setTimeout(function () {\n                    var pasteValue = $.isFunction(opts.onBeforePaste) ? opts.onBeforePaste.call(input, input._valueGet(), opts) : input._valueGet();\n                    checkVal(input, false, false, pasteValue.split(''), true);\n                    writeBuffer(input, getActiveBuffer());\n                    if (isComplete(getActiveBuffer()) === true)\n                        $input.trigger(\"complete\");\n                    $input.click();\n                }, 0);\n            }\n\n            //not used - attempt to support android \n            function mobileInputEvent(e) {\n                var input = this, $input = $(input);\n\n                //backspace in chrome32 only fires input event - detect & treat\n                var caretPos = caret(input),\n                    currentValue = input._valueGet();\n\n                currentValue = currentValue.replace(new RegExp(\"(\" + escapeRegex(getActiveBufferTemplate().join('')) + \")*\"), \"\");\n                //correct caretposition for chrome\n                if (caretPos.begin > currentValue.length) {\n                    caret(input, currentValue.length);\n                    caretPos = caret(input);\n                }\n                if ((getActiveBuffer().length - currentValue.length) == 1 && currentValue.charAt(caretPos.begin) != getActiveBuffer()[caretPos.begin]\n                    && currentValue.charAt(caretPos.begin + 1) != getActiveBuffer()[caretPos.begin]\n                    && !isMask(caretPos.begin)) {\n                    e.keyCode = opts.keyCode.BACKSPACE;\n                    keydownEvent.call(input, e);\n                } else { //nonnumerics don't fire keypress \n                    checkVal(input, false, false, currentValue.split(''));\n                    writeBuffer(input, getActiveBuffer());\n                    if (isComplete(getActiveBuffer()) === true)\n                        $input.trigger(\"complete\");\n                    $input.click();\n                }\n                e.preventDefault();\n            }\n\n            function mask(el) {\n                $el = $(el);\n                if ($el.is(\":input\")) {\n                    //store tests & original buffer in the input element - used to get the unmasked value\n                    $el.data('_inputmask', {\n                        'masksets': masksets,\n                        'activeMasksetIndex': activeMasksetIndex,\n                        'opts': opts,\n                        'isRTL': false\n                    });\n\n                    //show tooltip\n                    if (opts.showTooltip) {\n                        $el.prop(\"title\", getActiveMaskSet()[\"mask\"]);\n                    }\n\n                    //correct greedy setting if needed\n                    getActiveMaskSet()['greedy'] = getActiveMaskSet()['greedy'] ? getActiveMaskSet()['greedy'] : getActiveMaskSet()['repeat'] == 0;\n\n                    //handle maxlength attribute\n                    if ($el.attr(\"maxLength\") != null) //only when the attribute is set\n                    {\n                        var maxLength = $el.prop('maxLength');\n                        if (maxLength > -1) { //handle *-repeat\n                            $.each(masksets, function (ndx, ms) {\n                                if (typeof (ms) == \"object\") {\n                                    if (ms[\"repeat\"] == \"*\") {\n                                        ms[\"repeat\"] = maxLength;\n                                    }\n                                }\n                            });\n                        }\n                        if (getMaskLength() >= maxLength && maxLength > -1) { //FF sets no defined max length to -1 \n                            if (maxLength < getActiveBufferTemplate().length) getActiveBufferTemplate().length = maxLength;\n                            if (getActiveMaskSet()['greedy'] == false) {\n                                getActiveMaskSet()['repeat'] = Math.round(maxLength / getActiveBufferTemplate().length);\n                            }\n                            $el.prop('maxLength', getMaskLength() * 2);\n                        }\n                    }\n\n                    patchValueProperty(el);\n\n                    if (opts.numericInput) opts.isNumeric = opts.numericInput;\n                    if (el.dir == \"rtl\" || (opts.numericInput && opts.rightAlignNumerics) || (opts.isNumeric && opts.rightAlignNumerics))\n                        $el.css(\"text-align\", \"right\");\n\n                    if (el.dir == \"rtl\" || opts.numericInput) {\n                        el.dir = \"ltr\";\n                        $el.removeAttr(\"dir\");\n                        var inputData = $el.data('_inputmask');\n                        inputData['isRTL'] = true;\n                        $el.data('_inputmask', inputData);\n                        isRTL = true;\n                    }\n\n                    //unbind all events - to make sure that no other mask will interfere when re-masking\n                    $el.unbind(\".inputmask\");\n                    $el.removeClass('focus.inputmask');\n                    //bind events\n                    $el.closest('form').bind(\"submit\", function () { //trigger change on submit if any\n                        if (valueOnFocus != getActiveBuffer().join('')) {\n                            $el.change();\n                        }\n                    }).bind('reset', function () {\n                        setTimeout(function () {\n                            $el.trigger(\"setvalue\");\n                        }, 0);\n                    });\n                    $el.bind(\"mouseenter.inputmask\", function () {\n                        var $input = $(this), input = this;\n                        if (!$input.hasClass('focus.inputmask') && opts.showMaskOnHover) {\n                            if (input._valueGet() != getActiveBuffer().join('')) {\n                                writeBuffer(input, getActiveBuffer());\n                            }\n                        }\n                    }).bind(\"blur.inputmask\", function () {\n                        var $input = $(this), input = this, nptValue = input._valueGet(), buffer = getActiveBuffer();\n                        $input.removeClass('focus.inputmask');\n                        if (valueOnFocus != getActiveBuffer().join('')) {\n                            $input.change();\n                        }\n                        if (opts.clearMaskOnLostFocus && nptValue != '') {\n                            if (nptValue == getActiveBufferTemplate().join(''))\n                                input._valueSet('');\n                            else { //clearout optional tail of the mask\n                                clearOptionalTail(input);\n                            }\n                        }\n                        if (isComplete(buffer) === false) {\n                            $input.trigger(\"incomplete\");\n                            if (opts.clearIncomplete) {\n                                $.each(masksets, function (ndx, ms) {\n                                    if (typeof (ms) == \"object\") {\n                                        ms[\"buffer\"] = ms[\"_buffer\"].slice();\n                                        ms[\"lastValidPosition\"] = -1;\n                                    }\n                                });\n                                activeMasksetIndex = 0;\n                                if (opts.clearMaskOnLostFocus)\n                                    input._valueSet('');\n                                else {\n                                    buffer = getActiveBufferTemplate().slice();\n                                    writeBuffer(input, buffer);\n                                }\n                            }\n                        }\n                    }).bind(\"focus.inputmask\", function () {\n                        var $input = $(this), input = this, nptValue = input._valueGet();\n                        if (opts.showMaskOnFocus && !$input.hasClass('focus.inputmask') && (!opts.showMaskOnHover || (opts.showMaskOnHover && nptValue == ''))) {\n                            if (input._valueGet() != getActiveBuffer().join('')) {\n                                writeBuffer(input, getActiveBuffer(), seekNext(getActiveMaskSet()[\"lastValidPosition\"]));\n                            }\n                        }\n                        $input.addClass('focus.inputmask');\n                        valueOnFocus = getActiveBuffer().join('');\n                    }).bind(\"mouseleave.inputmask\", function () {\n                        var $input = $(this), input = this;\n                        if (opts.clearMaskOnLostFocus) {\n                            if (!$input.hasClass('focus.inputmask') && input._valueGet() != $input.attr(\"placeholder\")) {\n                                if (input._valueGet() == getActiveBufferTemplate().join('') || input._valueGet() == '')\n                                    input._valueSet('');\n                                else { //clearout optional tail of the mask\n                                    clearOptionalTail(input);\n                                }\n                            }\n                        }\n                    }).bind(\"click.inputmask\", function () {\n                        var input = this;\n                        setTimeout(function () {\n                            var selectedCaret = caret(input), buffer = getActiveBuffer();\n                            if (selectedCaret.begin == selectedCaret.end) {\n                                var clickPosition = isRTL ? TranslatePosition(selectedCaret.begin) : selectedCaret.begin,\n                                    lvp = getActiveMaskSet()[\"lastValidPosition\"],\n                                    lastPosition;\n                                if (opts.isNumeric) {\n                                    lastPosition = opts.skipRadixDance === false && opts.radixPoint != \"\" && $.inArray(opts.radixPoint, buffer) != -1 ?\n                                        (opts.numericInput ? seekNext($.inArray(opts.radixPoint, buffer)) : $.inArray(opts.radixPoint, buffer)) :\n                                        seekNext(lvp);\n                                } else {\n                                    lastPosition = seekNext(lvp);\n                                }\n                                if (clickPosition < lastPosition) {\n                                    if (isMask(clickPosition))\n                                        caret(input, clickPosition);\n                                    else caret(input, seekNext(clickPosition));\n                                } else\n                                    caret(input, lastPosition);\n                            }\n                        }, 0);\n                    }).bind('dblclick.inputmask', function () {\n                        var input = this;\n                        setTimeout(function () {\n                            caret(input, 0, seekNext(getActiveMaskSet()[\"lastValidPosition\"]));\n                        }, 0);\n                    }).bind(PasteEventType + \".inputmask dragdrop.inputmask drop.inputmask\", pasteEvent\n                    ).bind('setvalue.inputmask', function () {\n                        var input = this;\n                        checkVal(input, true);\n                        valueOnFocus = getActiveBuffer().join('');\n                        if (input._valueGet() == getActiveBufferTemplate().join(''))\n                            input._valueSet('');\n                    }).bind('complete.inputmask', opts.oncomplete\n                    ).bind('incomplete.inputmask', opts.onincomplete\n                    ).bind('cleared.inputmask', opts.oncleared);\n\n                    $el.bind(\"keydown.inputmask\", keydownEvent\n                         ).bind(\"keypress.inputmask\", keypressEvent\n                         ).bind(\"keyup.inputmask\", keyupEvent);\n\n                    // as the other inputevents aren't reliable for the moment we only base on the input event\n                    // needs follow-up\n                    if (android || androidfirefox || androidchrome || kindle) {\n                        $el.attr(\"autocomplete\", \"off\")\n                        .attr(\"autocorrect\", \"off\")\n                        .attr(\"autocapitalize\", \"off\")\n                        .attr(\"spellcheck\", false);\n\n                        if (androidfirefox || kindle) {\n                            $el.unbind(\"keydown.inputmask\", keydownEvent\n                                ).unbind(\"keypress.inputmask\", keypressEvent\n                                ).unbind(\"keyup.inputmask\", keyupEvent);\n                            if (PasteEventType == \"input\") {\n                                $el.unbind(PasteEventType + \".inputmask\");\n                            }\n                            $el.bind(\"input.inputmask\", mobileInputEvent);\n                        }\n                    }\n\n                    if (msie1x)\n                        $el.bind(\"input.inputmask\", pasteEvent);\n\n                    //apply mask\n                    var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(el, el._valueGet(), opts) : el._valueGet();\n                    checkVal(el, true, false, initialValue.split(''));\n                    valueOnFocus = getActiveBuffer().join('');\n                    // 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                    var activeElement;\n                    try {\n                        activeElement = document.activeElement;\n                    } catch (e) {\n                    }\n                    if (activeElement === el) { //position the caret when in focus\n                        $el.addClass('focus.inputmask');\n                        caret(el, seekNext(getActiveMaskSet()[\"lastValidPosition\"]));\n                    } else if (opts.clearMaskOnLostFocus) {\n                        if (getActiveBuffer().join('') == getActiveBufferTemplate().join('')) {\n                            el._valueSet('');\n                        } else {\n                            clearOptionalTail(el);\n                        }\n                    } else {\n                        writeBuffer(el, getActiveBuffer());\n                    }\n\n                    installEventRuler(el);\n                }\n            }\n\n            //action object\n            if (actionObj != undefined) {\n                switch (actionObj[\"action\"]) {\n                    case \"isComplete\":\n                        return isComplete(actionObj[\"buffer\"]);\n                    case \"unmaskedvalue\":\n                        isRTL = actionObj[\"$input\"].data('_inputmask')['isRTL'];\n                        return unmaskedvalue(actionObj[\"$input\"], actionObj[\"skipDatepickerCheck\"]);\n                    case \"mask\":\n                        mask(actionObj[\"el\"]);\n                        break;\n                    case \"format\":\n                        $el = $({});\n                        $el.data('_inputmask', {\n                            'masksets': masksets,\n                            'activeMasksetIndex': activeMasksetIndex,\n                            'opts': opts,\n                            'isRTL': opts.numericInput\n                        });\n                        if (opts.numericInput) {\n                            opts.isNumeric = opts.numericInput;\n                            isRTL = true;\n                        }\n\n                    \tvar valueBuffer = actionObj[\"value\"].split('');\n                        checkVal($el, false, false, isRTL ? valueBuffer.reverse() : valueBuffer, true);\n                        return isRTL ? getActiveBuffer().reverse().join('') : getActiveBuffer().join('');\n                    case \"isValid\":\n                        $el = $({});\n                        $el.data('_inputmask', {\n                            'masksets': masksets,\n                            'activeMasksetIndex': activeMasksetIndex,\n                            'opts': opts,\n                            'isRTL': opts.numericInput\n                        });\n                        if (opts.numericInput) {\n                            opts.isNumeric = opts.numericInput;\n                            isRTL = true;\n                        }\n\n\t\t\t\t\t\tvar valueBuffer = actionObj[\"value\"].split('');\n                        checkVal($el, false, true, isRTL ? valueBuffer.reverse() : valueBuffer);\n                        return isComplete(getActiveBuffer());\n                }\n            }\n        };\n\n        $.inputmask = {\n            //options default\n            defaults: {\n                placeholder: \"_\",\n                optionalmarker: { start: \"[\", end: \"]\" },\n                quantifiermarker: { start: \"{\", end: \"}\" },\n                groupmarker: { start: \"(\", end: \")\" },\n                escapeChar: \"\\\\\",\n                mask: null,\n                oncomplete: $.noop, //executes when the mask is complete\n                onincomplete: $.noop, //executes when the mask is incomplete and focus is lost\n                oncleared: $.noop, //executes when the mask is cleared\n                repeat: 0, //repetitions of the mask: * ~ forever, otherwise specify an integer\n                greedy: true, //true: allocated buffer for the mask and repetitions - false: allocate only if needed\n                autoUnmask: false, //automatically unmask when retrieving the value with $.fn.val or value if the browser supports __lookupGetter__ or getOwnPropertyDescriptor\n                clearMaskOnLostFocus: true,\n                insertMode: true, //insert the input or overwrite the input\n                clearIncomplete: false, //clear the incomplete input on blur\n                aliases: {}, //aliases definitions => see jquery.inputmask.extensions.js\n                onKeyUp: $.noop, //override to implement autocomplete on certain keys for example\n                onKeyDown: $.noop, //override to implement autocomplete on certain keys for example\n                onBeforeMask: undefined, //executes before masking the initial value to allow preprocessing of the initial value.  args => initialValue, opts => return processedValue\n                onBeforePaste: undefined, //executes before masking the pasted value to allow preprocessing of the pasted value.  args => pastedValue, opts => return processedValue\n                onUnMask: undefined, //executes after unmasking to allow postprocessing of the unmaskedvalue.  args => maskedValue, unmaskedValue, opts\n                showMaskOnFocus: true, //show the mask-placeholder when the input has focus\n                showMaskOnHover: true, //show the mask-placeholder when hovering the empty input\n                onKeyValidation: $.noop, //executes on every key-press with the result of isValid. Params: result, opts\n                skipOptionalPartCharacter: \" \", //a character which can be used to skip an optional part of a mask\n                showTooltip: false, //show the activemask as tooltip\n                numericInput: false, //numericInput input direction style (input shifts to the left while holding the caret position)\n                //numeric basic properties\n                isNumeric: false, //enable numeric features\n                radixPoint: \"\", //\".\", // | \",\"\n                skipRadixDance: false, //disable radixpoint caret positioning\n                rightAlignNumerics: true, //align numerics to the right\n                //numeric basic properties\n                definitions: {\n                    '9': {\n                        validator: \"[0-9]\",\n                        cardinality: 1,\n                        definitionSymbol: \"*\"\n                    },\n                    'a': {\n                        validator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u0451]\",\n                        cardinality: 1,\n                        definitionSymbol: \"*\"\n                    },\n                    '*': {\n                        validator: \"[A-Za-z\\u0410-\\u044F\\u0401\\u04510-9]\",\n                        cardinality: 1\n                    }\n                },\n                keyCode: {\n                    ALT: 18, BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, COMMAND: 91, COMMAND_LEFT: 91, COMMAND_RIGHT: 93, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, MENU: 93, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108,\n                    NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38, WINDOWS: 91\n                },\n                //specify keycodes which should not be considered in the keypress event, otherwise the preventDefault will stop their default behavior especially in FF\n                ignorables: [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                getMaskLength: undefined, //override for getMaskLength - args => buffer, greedy, repeat, currentBuffer, opts - return length\n\t\tisComplete: undefined //override for isComplete - args => buffer, opts - return true || false\n            },\n            escapeRegex: function (str) {\n                var specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n                return str.replace(new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'gim'), '\\\\$1');\n            },\n            format: function (value, options) {\n                var opts = $.extend(true, {}, $.inputmask.defaults, options);\n                resolveAlias(opts.alias, options, opts);\n                return maskScope(generateMaskSets(opts), 0, opts, { \"action\": \"format\", \"value\": value });\n            },\n            isValid: function (value, options) {\n                var opts = $.extend(true, {}, $.inputmask.defaults, options);\n                resolveAlias(opts.alias, options, opts);\n                return maskScope(generateMaskSets(opts), 0, opts, { \"action\": \"isValid\", \"value\": value });\n            }\n        };\n\n        $.fn.inputmask = function (fn, options) {\n            var opts = $.extend(true, {}, $.inputmask.defaults, options),\n                masksets,\n                activeMasksetIndex = 0;\n\n            if (typeof fn === \"string\") {\n                switch (fn) {\n                    case \"mask\":\n                        //resolve possible aliases given by options\n                        resolveAlias(opts.alias, options, opts);\n                        masksets = generateMaskSets(opts);\n                        if (masksets.length == 0) { return this; }\n\n                        return this.each(function () {\n                            maskScope($.extend(true, {}, masksets), 0, opts, { \"action\": \"mask\", \"el\": this });\n                        });\n                    case \"unmaskedvalue\":\n                        var $input = $(this), input = this;\n                        if ($input.data('_inputmask')) {\n                            masksets = $input.data('_inputmask')['masksets'];\n                            activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];\n                            opts = $input.data('_inputmask')['opts'];\n                            return maskScope(masksets, activeMasksetIndex, opts, { \"action\": \"unmaskedvalue\", \"$input\": $input });\n                        } else return $input.val();\n                    case \"remove\":\n                        return this.each(function () {\n                            var $input = $(this), input = this;\n                            if ($input.data('_inputmask')) {\n                                masksets = $input.data('_inputmask')['masksets'];\n                                activeMasksetIndex = $input.data('_inputmask')['activeMasksetIndex'];\n                                opts = $input.data('_inputmask')['opts'];\n                                //writeout the unmaskedvalue\n                                input._valueSet(maskScope(masksets, activeMasksetIndex, opts, { \"action\": \"unmaskedvalue\", \"$input\": $input, \"skipDatepickerCheck\": true }));\n                                //clear data\n                                $input.removeData('_inputmask');\n                                //unbind all events\n                                $input.unbind(\".inputmask\");\n                                $input.removeClass('focus.inputmask');\n                                //restore the value property\n                                var valueProperty;\n                                if (Object.getOwnPropertyDescriptor)\n                                    valueProperty = Object.getOwnPropertyDescriptor(input, \"value\");\n                                if (valueProperty && valueProperty.get) {\n                                    if (input._valueGet) {\n                                        Object.defineProperty(input, \"value\", {\n                                            get: input._valueGet,\n                                            set: input._valueSet\n                                        });\n                                    }\n                                } else if (document.__lookupGetter__ && input.__lookupGetter__(\"value\")) {\n                                    if (input._valueGet) {\n                                        input.__defineGetter__(\"value\", input._valueGet);\n                                        input.__defineSetter__(\"value\", input._valueSet);\n                                    }\n                                }\n                                try { //try catch needed for IE7 as it does not supports deleting fns\n                                    delete input._valueGet;\n                                    delete input._valueSet;\n                                } catch (e) {\n                                    input._valueGet = undefined;\n                                    input._valueSet = undefined;\n\n                                }\n                            }\n                        });\n                        break;\n                    case \"getemptymask\": //return the default (empty) mask value, usefull for setting the default value in validation\n                        if (this.data('_inputmask')) {\n                            masksets = this.data('_inputmask')['masksets'];\n                            activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];\n                            return masksets[activeMasksetIndex]['_buffer'].join('');\n                        }\n                        else return \"\";\n                    case \"hasMaskedValue\": //check wheter the returned value is masked or not; currently only works reliable when using jquery.val fn to retrieve the value \n                        return this.data('_inputmask') ? !this.data('_inputmask')['opts'].autoUnmask : false;\n                    case \"isComplete\":\n\t\t\t\t\t\tif (this.data('_inputmask')) {\n\t\t\t\t\t\t\tmasksets = this.data('_inputmask')['masksets'];\n\t\t\t\t\t\t\tactiveMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];\n\t\t\t\t\t\t\topts = this.data('_inputmask')['opts'];\n\t\t\t\t\t\t\treturn maskScope(masksets, activeMasksetIndex, opts, { \"action\": \"isComplete\", \"buffer\": this[0]._valueGet().split('') });\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse return true;\n                    case \"getmetadata\": //return mask metadata if exists\n                        if (this.data('_inputmask')) {\n                            masksets = this.data('_inputmask')['masksets'];\n                            activeMasksetIndex = this.data('_inputmask')['activeMasksetIndex'];\n                            return masksets[activeMasksetIndex]['metadata'];\n                        }\n                        else return undefined;\n                    default:\n                        //check if the fn is an alias\n                        if (!resolveAlias(fn, options, opts)) {\n                            //maybe fn is a mask so we try\n                            //set mask\n                            opts.mask = fn;\n                        }\n                        masksets = generateMaskSets(opts);\n                        if (masksets.length == 0) { return this; }\n                        return this.each(function () {\n                            maskScope($.extend(true, {}, masksets), activeMasksetIndex, opts, { \"action\": \"mask\", \"el\": this });\n                        });\n\n                        break;\n                }\n            } else if (typeof fn == \"object\") {\n                opts = $.extend(true, {}, $.inputmask.defaults, fn);\n\n                resolveAlias(opts.alias, fn, opts); //resolve aliases\n                masksets = generateMaskSets(opts);\n                if (masksets.length == 0) { return this; }\n                return this.each(function () {\n                    maskScope($.extend(true, {}, masksets), activeMasksetIndex, opts, { \"action\": \"mask\", \"el\": this });\n                });\n            } else if (fn == undefined) {\n                //look for data-inputmask atribute - the attribute should only contain optipns\n                return this.each(function () {\n                    var attrOptions = $(this).attr(\"data-inputmask\");\n                    if (attrOptions && attrOptions != \"\") {\n                        try {\n                            attrOptions = attrOptions.replace(new RegExp(\"'\", \"g\"), '\"');\n                            var dataoptions = $.parseJSON(\"{\" + attrOptions + \"}\");\n                            $.extend(true, dataoptions, options);\n                            opts = $.extend(true, {}, $.inputmask.defaults, dataoptions);\n                            resolveAlias(opts.alias, dataoptions, opts);\n                            opts.alias = undefined;\n                            $(this).inputmask(opts);\n                        } catch (ex) { } //need a more relax parseJSON\n                    }\n                });\n            }\n        };\n    }\n})(jQuery);\n"]}