diff --git a/lib/react-currency-input.cjs.js b/lib/react-currency-input.cjs.js
index 735ce0e..0d50c26 100644
--- a/lib/react-currency-input.cjs.js
+++ b/lib/react-currency-input.cjs.js
@@ -128,6 +128,7 @@ var CurrencyInput = (function (Component$$1) {
         this.prepareProps = this.prepareProps.bind(this);
         this.handleChange = this.handleChange.bind(this);
         this.handleFocus = this.handleFocus.bind(this);
+        this.setSelectionRange = this.setSelectionRange.bind(this);
         this.state = this.prepareProps(this.props);
 
         this.inputSelectionStart = 1;
@@ -238,18 +239,14 @@ var CurrencyInput = (function (Component$$1) {
      */
     CurrencyInput.prototype.componentDidMount = function componentDidMount (){
         var node = ReactDOM.findDOMNode(this.theInput);
-        var selectionStart, selectionEnd;
-
         if (this.props.autoFocus) {
             this.theInput.focus();
-            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;
-            selectionStart = selectionEnd;
+            
         } else {
-            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);
-            selectionStart = Math.min(node.selectionStart, selectionEnd);
+            
         }
 
-        node.setSelectionRange(selectionStart, selectionEnd);
+        // this.setSelectionRange(node, selectionStart, selectionEnd);
     };
 
 
@@ -302,11 +299,23 @@ var CurrencyInput = (function (Component$$1) {
             selectionStart = selectionEnd;
         }
 
-        node.setSelectionRange(selectionStart, selectionEnd);
+        // this.setSelectionRange(node, selectionStart, selectionEnd);
         this.inputSelectionStart = selectionStart;
         this.inputSelectionEnd = selectionEnd;
     };
 
+    /**
+     * Set selection range only if input is in focused state
+     * @param node DOMElement
+     * @param start number
+     * @param end number
+     */
+    CurrencyInput.prototype.setSelectionRange = function setSelectionRange (node, start, end) {
+      if (document.activeElement === node) {
+        node.setSelectionRange(start, end);
+      }
+    };
+
 
     /**
      * onChange Event Handler
diff --git a/lib/react-currency-input.cjs.js.map b/lib/react-currency-input.cjs.js.map
index 16522e4..a293ce1 100644
--- a/lib/react-currency-input.cjs.js.map
+++ b/lib/react-currency-input.cjs.js.map
@@ -1 +1 @@
-{"version":3,"file":"react-currency-input.cjs.js","sources":["../src/object-assign-polyfill.js","../src/mask.js","../src/index.js"],"sourcesContent":["Object.assign = Object.assign ||\n  function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n","\nexport default function mask(value, precision = 2, decimalSeparator = '.', thousandSeparator = ',', allowNegative = false, prefix = '', suffix = ''){\n    // provide some default values and arg validation.\n    if (precision < 0) { precision = 0; } // precision cannot be negative\n    if (precision > 20) { precision = 20; } // precision cannot be greater than 20\n    \n    if (value === null || value===undefined) {\n          return {\n              value: 0,\n              maskedValue: ''\n          };\n     }\n  \n    value = String(value); //if the given value is a Number, let's convert into String to manipulate that\n\n    if (value.length == 0) {\n        return {\n            value: 0,\n            maskedValue: ''\n        };\n    }\n\n\n    // extract digits. if no digits, fill in a zero.\n    let digits = value.match(/\\d/g) || ['0'];\n    \n    let numberIsNegative = false;\n    if (allowNegative) {\n        let negativeSignCount = (value.match(/-/g) || []).length;\n        // number will be negative if we have an odd number of \"-\"\n        // ideally, we should only ever have 0, 1 or 2 (positive number, making a number negative\n        // and making a negative number positive, respectively)\n        numberIsNegative = negativeSignCount % 2 === 1;\n        \n        // if every digit in the array is '0', then the number should never be negative\n        let allDigitsAreZero = true;\n        for (let idx=0; idx < digits.length; idx += 1) {\n            if(digits[idx] !== '0') {\n                allDigitsAreZero = false;\n                break;\n            }\n        }\n        if (allDigitsAreZero) {\n            numberIsNegative = false;\n        }\n    }\n\n    // zero-pad a input\n    while (digits.length <= precision) { digits.unshift('0'); }\n\n    if (precision > 0) {\n        // add the decimal separator\n        digits.splice(digits.length - precision, 0, \".\");\n    }\n\n    // clean up extraneous digits like leading zeros.\n    digits = Number(digits.join('')).toFixed(precision).split('');\n    let raw = Number(digits.join(''));\n\n    let decimalpos = digits.length - precision - 1;  // -1 needed to position the decimal separator before the digits.\n    if (precision > 0) {\n        // set the final decimal separator\n        digits[decimalpos] = decimalSeparator;\n    } else {\n        // when precision is 0, there is no decimal separator.\n        decimalpos = digits.length;\n    }\n\n    // add in any thousand separators\n    for (let x=decimalpos - 3; x > 0; x = x - 3) {\n        digits.splice(x, 0, thousandSeparator);\n    }\n\n    // if we have a prefix or suffix, add them in.\n    if (prefix.length > 0) { digits.unshift(prefix); }\n    if (suffix.length > 0) { digits.push(suffix); }\n\n    // if the number is negative, insert a \"-\" to\n    // the front of the array and negate the raw value\n    if (allowNegative && numberIsNegative) {\n        digits.unshift('-');\n        raw = -raw;\n    }\n\n    return {\n        value: raw,\n        maskedValue: digits.join('').trim()\n    };\n}\n","import './object-assign-polyfill';\n\nimport PropTypes from 'prop-types';\nimport React, { Component }  from 'react'\nimport ReactDOM from 'react-dom'\nimport mask from './mask.js'\n\n// IE* parseFloat polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat#Polyfill\nNumber.parseFloat = parseFloat;\n\nclass CurrencyInput extends Component {\n    constructor(props) {\n        super(props);\n        this.prepareProps = this.prepareProps.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.handleFocus = this.handleFocus.bind(this);\n        this.state = this.prepareProps(this.props);\n\n        this.inputSelectionStart = 1;\n        this.inputSelectionEnd = 1;\n    }\n\n\n    /**\n     * Exposes the current masked value.\n     *\n     * @returns {String}\n     */\n    getMaskedValue() {\n        return this.state.maskedValue;\n    }\n\n\n    /**\n     * General function used to cleanup and define the final props used for rendering\n     * @returns {{ maskedValue: {String}, value: {Number}, customProps: {Object} }}\n     */\n    prepareProps(props) {\n        let customProps = {...props}; // babeljs converts to Object.assign, then polyfills.\n        delete customProps.onChange;\n        delete customProps.onChangeEvent;\n        delete customProps.value;\n        delete customProps.decimalSeparator;\n        delete customProps.thousandSeparator;\n        delete customProps.precision;\n        delete customProps.inputType;\n        delete customProps.allowNegative;\n        delete customProps.allowEmpty;\n        delete customProps.prefix;\n        delete customProps.suffix;\n        delete customProps.selectAllOnFocus;\n        delete customProps.autoFocus;\n\n        let initialValue = props.value;\n        if (initialValue === null) {\n            initialValue = props.allowEmpty? null : '';\n        }else{\n\n            if (typeof initialValue == 'string') {\n                // Some people, when confronted with a problem, think \"I know, I'll use regular expressions.\"\n                // Now they have two problems.\n\n                // Strip out thousand separators, prefix, and suffix, etc.\n                if (props.thousandSeparator === \".\"){\n                    // special handle the . thousand separator\n                    initialValue = initialValue.replace(/\\./g, '');\n                }\n\n                if (props.decimalSeparator != \".\"){\n                    // fix the decimal separator\n                    initialValue = initialValue.replace(new RegExp(props.decimalSeparator, 'g'), '.');\n                }\n\n                //Strip out anything that is not a digit, -, or decimal separator\n                initialValue = initialValue.replace(/[^0-9-.]/g, '');\n\n                // now we can parse.\n                initialValue = Number.parseFloat(initialValue);\n            }\n            initialValue = Number(initialValue).toLocaleString(undefined, {\n                style                : 'decimal',\n                minimumFractionDigits: props.precision,\n                maximumFractionDigits: props.precision\n            })\n\n        }\n\n        const { maskedValue, value } = mask(\n            initialValue,\n            props.precision,\n            props.decimalSeparator,\n            props.thousandSeparator,\n            props.allowNegative,\n            props.prefix,\n            props.suffix\n        );\n\n        return { maskedValue, value, customProps };\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * Invoked when a component is receiving new props. This method is not called for the initial render.\n     *\n     * @param nextProps\n     * @see https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops\n     */\n    componentWillReceiveProps(nextProps) {\n        this.setState(this.prepareProps(nextProps));\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidmount\n     */\n    componentDidMount(){\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let selectionStart, selectionEnd;\n\n        if (this.props.autoFocus) {\n            this.theInput.focus();\n            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        } else {\n            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);\n            selectionStart = Math.min(node.selectionStart, selectionEnd);\n        }\n\n        node.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n\n    /**\n     * Component lifecycle function\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentwillupdate\n     */\n    componentWillUpdate() {\n        let node = ReactDOM.findDOMNode(this.theInput);\n        this.inputSelectionStart = node.selectionStart;\n        this.inputSelectionEnd = node.selectionEnd;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidupdate\n     */\n    componentDidUpdate(prevProps, prevState){\n        const { decimalSeparator } = this.props;\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let minPos = this.props.prefix.length + (isNegative ? 1 : 0);\n        let selectionEnd = Math.max(minPos, Math.min(this.inputSelectionEnd, this.theInput.value.length - this.props.suffix.length));\n        let selectionStart = Math.max(minPos, Math.min(this.inputSelectionEnd, selectionEnd));\n\n        let regexEscapeRegex = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\n        let separatorsRegex = new RegExp(decimalSeparator.replace(regexEscapeRegex, '\\\\$&') + '|' + this.props.thousandSeparator.replace(regexEscapeRegex, '\\\\$&'), 'g');\n        let currSeparatorCount = (this.state.maskedValue.match(separatorsRegex) || []).length;\n        let prevSeparatorCount = (prevState.maskedValue.match(separatorsRegex) || []).length;\n        let adjustment = Math.max(currSeparatorCount - prevSeparatorCount, 0);\n\n        selectionEnd = selectionEnd + adjustment;\n        selectionStart = selectionStart + adjustment;\n\n        const precision = Number(this.props.precision);\n\n        let baselength = this.props.suffix.length\n            + this.props.prefix.length\n            + (precision > 0 ? decimalSeparator.length : 0) // if precision is 0 there will be no decimal part\n            + precision\n            + 1; // This is to account for the default '0' value that comes before the decimal separator\n\n        if (this.state.maskedValue.length == baselength){\n            // if we are already at base length, position the cursor at the end.\n            selectionEnd = this.theInput.value.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        }\n\n        node.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    /**\n     * onChange Event Handler\n     * @param event\n     */\n    handleChange(event) {\n        event.preventDefault();\n        let { maskedValue, value } = mask(\n            event.target.value,\n            this.props.precision,\n            this.props.decimalSeparator,\n            this.props.thousandSeparator,\n            this.props.allowNegative,\n            this.props.prefix,\n            this.props.suffix\n        );\n\n        event.persist();  // fixes issue #23\n\n        this.setState({ maskedValue, value }, () => {\n            this.props.onChange(maskedValue, value, event);\n            this.props.onChangeEvent(event, maskedValue, value);\n        });\n    }\n\n\n    /**\n     * onFocus Event Handler\n     * @param event\n     */\n    handleFocus(event) {\n        if (!this.theInput) return;\n\n        //Whenever we receive focus check to see if the position is before the suffix, if not, move it.\n        let selectionEnd = this.theInput.value.length - this.props.suffix.length;\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let selectionStart = this.props.prefix.length + (isNegative ? 1 : 0);\n        this.props.selectAllOnFocus && event.target.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    handleBlur(event) {\n        this.inputSelectionStart = 0;\n        this.inputSelectionEnd = 0;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/component-specs.html#render\n     */\n    render() {\n        return (\n            <input\n                ref={(input) => { this.theInput = input; }}\n                type={this.props.inputType}\n                value={this.state.maskedValue}\n                onChange={this.handleChange}\n                onFocus={this.handleFocus}\n                onMouseUp={this.handleFocus}\n                {...this.state.customProps}\n            />\n        )\n    }\n}\n\n\n\n/**\n * Prop validation.\n * @see https://facebook.github.io/react/docs/component-specs.html#proptypes\n */\n\nCurrencyInput.propTypes = {\n    onChange: PropTypes.func,\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    decimalSeparator: PropTypes.string,\n    thousandSeparator: PropTypes.string,\n    precision: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    inputType: PropTypes.string,\n    allowNegative: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    prefix: PropTypes.string,\n    suffix: PropTypes.string,\n    selectAllOnFocus: PropTypes.bool\n};\n\n\nCurrencyInput.defaultProps = {\n    onChange: function(maskValue, value, event) {/*no-op*/},\n    onChangeEvent: function(event, maskValue, value) {/*no-op*/},\n    autoFocus: false,\n    value: '0',\n    decimalSeparator: '.',\n    thousandSeparator: ',',\n    precision: '2',\n    inputType: 'text',\n    allowNegative: false,\n    prefix: '',\n    suffix: '',\n    selectAllOnFocus: false\n};\n\n\nexport default CurrencyInput\n"],"names":["arguments","let","super","const","this","React","Component"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"react-currency-input.cjs.js","sources":["../src/object-assign-polyfill.js","../src/mask.js","../src/index.js"],"sourcesContent":["Object.assign = Object.assign ||\n  function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n","\nexport default function mask(value, precision = 2, decimalSeparator = '.', thousandSeparator = ',', allowNegative = false, prefix = '', suffix = ''){\n    // provide some default values and arg validation.\n    if (precision < 0) { precision = 0; } // precision cannot be negative\n    if (precision > 20) { precision = 20; } // precision cannot be greater than 20\n    \n    if (value === null || value===undefined) {\n          return {\n              value: 0,\n              maskedValue: ''\n          };\n     }\n  \n    value = String(value); //if the given value is a Number, let's convert into String to manipulate that\n\n    if (value.length == 0) {\n        return {\n            value: 0,\n            maskedValue: ''\n        };\n    }\n\n\n    // extract digits. if no digits, fill in a zero.\n    let digits = value.match(/\\d/g) || ['0'];\n    \n    let numberIsNegative = false;\n    if (allowNegative) {\n        let negativeSignCount = (value.match(/-/g) || []).length;\n        // number will be negative if we have an odd number of \"-\"\n        // ideally, we should only ever have 0, 1 or 2 (positive number, making a number negative\n        // and making a negative number positive, respectively)\n        numberIsNegative = negativeSignCount % 2 === 1;\n        \n        // if every digit in the array is '0', then the number should never be negative\n        let allDigitsAreZero = true;\n        for (let idx=0; idx < digits.length; idx += 1) {\n            if(digits[idx] !== '0') {\n                allDigitsAreZero = false;\n                break;\n            }\n        }\n        if (allDigitsAreZero) {\n            numberIsNegative = false;\n        }\n    }\n\n    // zero-pad a input\n    while (digits.length <= precision) { digits.unshift('0'); }\n\n    if (precision > 0) {\n        // add the decimal separator\n        digits.splice(digits.length - precision, 0, \".\");\n    }\n\n    // clean up extraneous digits like leading zeros.\n    digits = Number(digits.join('')).toFixed(precision).split('');\n    let raw = Number(digits.join(''));\n\n    let decimalpos = digits.length - precision - 1;  // -1 needed to position the decimal separator before the digits.\n    if (precision > 0) {\n        // set the final decimal separator\n        digits[decimalpos] = decimalSeparator;\n    } else {\n        // when precision is 0, there is no decimal separator.\n        decimalpos = digits.length;\n    }\n\n    // add in any thousand separators\n    for (let x=decimalpos - 3; x > 0; x = x - 3) {\n        digits.splice(x, 0, thousandSeparator);\n    }\n\n    // if we have a prefix or suffix, add them in.\n    if (prefix.length > 0) { digits.unshift(prefix); }\n    if (suffix.length > 0) { digits.push(suffix); }\n\n    // if the number is negative, insert a \"-\" to\n    // the front of the array and negate the raw value\n    if (allowNegative && numberIsNegative) {\n        digits.unshift('-');\n        raw = -raw;\n    }\n\n    return {\n        value: raw,\n        maskedValue: digits.join('').trim()\n    };\n}\n","import './object-assign-polyfill';\n\nimport PropTypes from 'prop-types';\nimport React, { Component }  from 'react'\nimport ReactDOM from 'react-dom'\nimport mask from './mask.js'\n\n// IE* parseFloat polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat#Polyfill\nNumber.parseFloat = parseFloat;\n\nclass CurrencyInput extends Component {\n    constructor(props) {\n        super(props);\n        this.prepareProps = this.prepareProps.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.handleFocus = this.handleFocus.bind(this);\n        this.setSelectionRange = this.setSelectionRange.bind(this);\n        this.state = this.prepareProps(this.props);\n\n        this.inputSelectionStart = 1;\n        this.inputSelectionEnd = 1;\n    }\n\n\n    /**\n     * Exposes the current masked value.\n     *\n     * @returns {String}\n     */\n    getMaskedValue() {\n        return this.state.maskedValue;\n    }\n\n\n    /**\n     * General function used to cleanup and define the final props used for rendering\n     * @returns {{ maskedValue: {String}, value: {Number}, customProps: {Object} }}\n     */\n    prepareProps(props) {\n        let customProps = {...props}; // babeljs converts to Object.assign, then polyfills.\n        delete customProps.onChange;\n        delete customProps.onChangeEvent;\n        delete customProps.value;\n        delete customProps.decimalSeparator;\n        delete customProps.thousandSeparator;\n        delete customProps.precision;\n        delete customProps.inputType;\n        delete customProps.allowNegative;\n        delete customProps.allowEmpty;\n        delete customProps.prefix;\n        delete customProps.suffix;\n        delete customProps.selectAllOnFocus;\n        delete customProps.autoFocus;\n\n        let initialValue = props.value;\n        if (initialValue === null) {\n            initialValue = props.allowEmpty? null : '';\n        }else{\n\n            if (typeof initialValue == 'string') {\n                // Some people, when confronted with a problem, think \"I know, I'll use regular expressions.\"\n                // Now they have two problems.\n\n                // Strip out thousand separators, prefix, and suffix, etc.\n                if (props.thousandSeparator === \".\"){\n                    // special handle the . thousand separator\n                    initialValue = initialValue.replace(/\\./g, '');\n                }\n\n                if (props.decimalSeparator != \".\"){\n                    // fix the decimal separator\n                    initialValue = initialValue.replace(new RegExp(props.decimalSeparator, 'g'), '.');\n                }\n\n                //Strip out anything that is not a digit, -, or decimal separator\n                initialValue = initialValue.replace(/[^0-9-.]/g, '');\n\n                // now we can parse.\n                initialValue = Number.parseFloat(initialValue);\n            }\n            initialValue = Number(initialValue).toLocaleString(undefined, {\n                style                : 'decimal',\n                minimumFractionDigits: props.precision,\n                maximumFractionDigits: props.precision\n            })\n\n        }\n\n        const { maskedValue, value } = mask(\n            initialValue,\n            props.precision,\n            props.decimalSeparator,\n            props.thousandSeparator,\n            props.allowNegative,\n            props.prefix,\n            props.suffix\n        );\n\n        return { maskedValue, value, customProps };\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * Invoked when a component is receiving new props. This method is not called for the initial render.\n     *\n     * @param nextProps\n     * @see https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops\n     */\n    componentWillReceiveProps(nextProps) {\n        this.setState(this.prepareProps(nextProps));\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidmount\n     */\n    componentDidMount(){\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let selectionStart, selectionEnd;\n\n        if (this.props.autoFocus) {\n            this.theInput.focus();\n            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        } else {\n            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);\n            selectionStart = Math.min(node.selectionStart, selectionEnd);\n        }\n\n        // this.setSelectionRange(node, selectionStart, selectionEnd);\n    }\n\n\n    /**\n     * Component lifecycle function\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentwillupdate\n     */\n    componentWillUpdate() {\n        let node = ReactDOM.findDOMNode(this.theInput);\n        this.inputSelectionStart = node.selectionStart;\n        this.inputSelectionEnd = node.selectionEnd;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidupdate\n     */\n    componentDidUpdate(prevProps, prevState){\n        const { decimalSeparator } = this.props;\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let minPos = this.props.prefix.length + (isNegative ? 1 : 0);\n        let selectionEnd = Math.max(minPos, Math.min(this.inputSelectionEnd, this.theInput.value.length - this.props.suffix.length));\n        let selectionStart = Math.max(minPos, Math.min(this.inputSelectionEnd, selectionEnd));\n\n        let regexEscapeRegex = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\n        let separatorsRegex = new RegExp(decimalSeparator.replace(regexEscapeRegex, '\\\\$&') + '|' + this.props.thousandSeparator.replace(regexEscapeRegex, '\\\\$&'), 'g');\n        let currSeparatorCount = (this.state.maskedValue.match(separatorsRegex) || []).length;\n        let prevSeparatorCount = (prevState.maskedValue.match(separatorsRegex) || []).length;\n        let adjustment = Math.max(currSeparatorCount - prevSeparatorCount, 0);\n\n        selectionEnd = selectionEnd + adjustment;\n        selectionStart = selectionStart + adjustment;\n\n        const precision = Number(this.props.precision);\n\n        let baselength = this.props.suffix.length\n            + this.props.prefix.length\n            + (precision > 0 ? decimalSeparator.length : 0) // if precision is 0 there will be no decimal part\n            + precision\n            + 1; // This is to account for the default '0' value that comes before the decimal separator\n\n        if (this.state.maskedValue.length == baselength){\n            // if we are already at base length, position the cursor at the end.\n            selectionEnd = this.theInput.value.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        }\n\n        // this.setSelectionRange(node, selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n    /**\n     * Set selection range only if input is in focused state\n     * @param node DOMElement\n     * @param start number\n     * @param end number\n     */\n    setSelectionRange(node, start, end) {\n      if (document.activeElement === node) {\n        node.setSelectionRange(start, end);\n      }\n    }\n\n\n    /**\n     * onChange Event Handler\n     * @param event\n     */\n    handleChange(event) {\n        event.preventDefault();\n        let { maskedValue, value } = mask(\n            event.target.value,\n            this.props.precision,\n            this.props.decimalSeparator,\n            this.props.thousandSeparator,\n            this.props.allowNegative,\n            this.props.prefix,\n            this.props.suffix\n        );\n\n        event.persist();  // fixes issue #23\n\n        this.setState({ maskedValue, value }, () => {\n            this.props.onChange(maskedValue, value, event);\n            this.props.onChangeEvent(event, maskedValue, value);\n        });\n    }\n\n\n    /**\n     * onFocus Event Handler\n     * @param event\n     */\n    handleFocus(event) {\n        if (!this.theInput) return;\n\n        //Whenever we receive focus check to see if the position is before the suffix, if not, move it.\n        let selectionEnd = this.theInput.value.length - this.props.suffix.length;\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let selectionStart = this.props.prefix.length + (isNegative ? 1 : 0);\n        this.props.selectAllOnFocus && event.target.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    handleBlur(event) {\n        this.inputSelectionStart = 0;\n        this.inputSelectionEnd = 0;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/component-specs.html#render\n     */\n    render() {\n        return (\n            <input\n                ref={(input) => { this.theInput = input; }}\n                type={this.props.inputType}\n                value={this.state.maskedValue}\n                onChange={this.handleChange}\n                onFocus={this.handleFocus}\n                onMouseUp={this.handleFocus}\n                {...this.state.customProps}\n            />\n        )\n    }\n}\n\n\n\n/**\n * Prop validation.\n * @see https://facebook.github.io/react/docs/component-specs.html#proptypes\n */\n\nCurrencyInput.propTypes = {\n    onChange: PropTypes.func,\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    decimalSeparator: PropTypes.string,\n    thousandSeparator: PropTypes.string,\n    precision: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    inputType: PropTypes.string,\n    allowNegative: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    prefix: PropTypes.string,\n    suffix: PropTypes.string,\n    selectAllOnFocus: PropTypes.bool\n};\n\n\nCurrencyInput.defaultProps = {\n    onChange: function(maskValue, value, event) {/*no-op*/},\n    onChangeEvent: function(event, maskValue, value) {/*no-op*/},\n    autoFocus: false,\n    value: '0',\n    decimalSeparator: '.',\n    thousandSeparator: ',',\n    precision: '2',\n    inputType: 'text',\n    allowNegative: false,\n    prefix: '',\n    suffix: '',\n    selectAllOnFocus: false\n};\n\n\nexport default CurrencyInput\n"],"names":["arguments","let","super","const","this","React","Component"],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/react-currency-input.es.js b/lib/react-currency-input.es.js
index 1aa64b3..d11f701 100644
--- a/lib/react-currency-input.es.js
+++ b/lib/react-currency-input.es.js
@@ -123,6 +123,7 @@ var CurrencyInput = (function (Component$$1) {
         this.prepareProps = this.prepareProps.bind(this);
         this.handleChange = this.handleChange.bind(this);
         this.handleFocus = this.handleFocus.bind(this);
+        this.setSelectionRange = this.setSelectionRange.bind(this);
         this.state = this.prepareProps(this.props);
 
         this.inputSelectionStart = 1;
@@ -233,18 +234,14 @@ var CurrencyInput = (function (Component$$1) {
      */
     CurrencyInput.prototype.componentDidMount = function componentDidMount (){
         var node = ReactDOM.findDOMNode(this.theInput);
-        var selectionStart, selectionEnd;
-
         if (this.props.autoFocus) {
             this.theInput.focus();
-            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;
-            selectionStart = selectionEnd;
+            
         } else {
-            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);
-            selectionStart = Math.min(node.selectionStart, selectionEnd);
+            
         }
 
-        node.setSelectionRange(selectionStart, selectionEnd);
+        // this.setSelectionRange(node, selectionStart, selectionEnd);
     };
 
 
@@ -297,11 +294,23 @@ var CurrencyInput = (function (Component$$1) {
             selectionStart = selectionEnd;
         }
 
-        node.setSelectionRange(selectionStart, selectionEnd);
+        // this.setSelectionRange(node, selectionStart, selectionEnd);
         this.inputSelectionStart = selectionStart;
         this.inputSelectionEnd = selectionEnd;
     };
 
+    /**
+     * Set selection range only if input is in focused state
+     * @param node DOMElement
+     * @param start number
+     * @param end number
+     */
+    CurrencyInput.prototype.setSelectionRange = function setSelectionRange (node, start, end) {
+      if (document.activeElement === node) {
+        node.setSelectionRange(start, end);
+      }
+    };
+
 
     /**
      * onChange Event Handler
diff --git a/lib/react-currency-input.es.js.map b/lib/react-currency-input.es.js.map
index aef02bc..d343f95 100644
--- a/lib/react-currency-input.es.js.map
+++ b/lib/react-currency-input.es.js.map
@@ -1 +1 @@
-{"version":3,"file":"react-currency-input.es.js","sources":["../src/object-assign-polyfill.js","../src/mask.js","../src/index.js"],"sourcesContent":["Object.assign = Object.assign ||\n  function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n","\nexport default function mask(value, precision = 2, decimalSeparator = '.', thousandSeparator = ',', allowNegative = false, prefix = '', suffix = ''){\n    // provide some default values and arg validation.\n    if (precision < 0) { precision = 0; } // precision cannot be negative\n    if (precision > 20) { precision = 20; } // precision cannot be greater than 20\n    \n    if (value === null || value===undefined) {\n          return {\n              value: 0,\n              maskedValue: ''\n          };\n     }\n  \n    value = String(value); //if the given value is a Number, let's convert into String to manipulate that\n\n    if (value.length == 0) {\n        return {\n            value: 0,\n            maskedValue: ''\n        };\n    }\n\n\n    // extract digits. if no digits, fill in a zero.\n    let digits = value.match(/\\d/g) || ['0'];\n    \n    let numberIsNegative = false;\n    if (allowNegative) {\n        let negativeSignCount = (value.match(/-/g) || []).length;\n        // number will be negative if we have an odd number of \"-\"\n        // ideally, we should only ever have 0, 1 or 2 (positive number, making a number negative\n        // and making a negative number positive, respectively)\n        numberIsNegative = negativeSignCount % 2 === 1;\n        \n        // if every digit in the array is '0', then the number should never be negative\n        let allDigitsAreZero = true;\n        for (let idx=0; idx < digits.length; idx += 1) {\n            if(digits[idx] !== '0') {\n                allDigitsAreZero = false;\n                break;\n            }\n        }\n        if (allDigitsAreZero) {\n            numberIsNegative = false;\n        }\n    }\n\n    // zero-pad a input\n    while (digits.length <= precision) { digits.unshift('0'); }\n\n    if (precision > 0) {\n        // add the decimal separator\n        digits.splice(digits.length - precision, 0, \".\");\n    }\n\n    // clean up extraneous digits like leading zeros.\n    digits = Number(digits.join('')).toFixed(precision).split('');\n    let raw = Number(digits.join(''));\n\n    let decimalpos = digits.length - precision - 1;  // -1 needed to position the decimal separator before the digits.\n    if (precision > 0) {\n        // set the final decimal separator\n        digits[decimalpos] = decimalSeparator;\n    } else {\n        // when precision is 0, there is no decimal separator.\n        decimalpos = digits.length;\n    }\n\n    // add in any thousand separators\n    for (let x=decimalpos - 3; x > 0; x = x - 3) {\n        digits.splice(x, 0, thousandSeparator);\n    }\n\n    // if we have a prefix or suffix, add them in.\n    if (prefix.length > 0) { digits.unshift(prefix); }\n    if (suffix.length > 0) { digits.push(suffix); }\n\n    // if the number is negative, insert a \"-\" to\n    // the front of the array and negate the raw value\n    if (allowNegative && numberIsNegative) {\n        digits.unshift('-');\n        raw = -raw;\n    }\n\n    return {\n        value: raw,\n        maskedValue: digits.join('').trim()\n    };\n}\n","import './object-assign-polyfill';\n\nimport PropTypes from 'prop-types';\nimport React, { Component }  from 'react'\nimport ReactDOM from 'react-dom'\nimport mask from './mask.js'\n\n// IE* parseFloat polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat#Polyfill\nNumber.parseFloat = parseFloat;\n\nclass CurrencyInput extends Component {\n    constructor(props) {\n        super(props);\n        this.prepareProps = this.prepareProps.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.handleFocus = this.handleFocus.bind(this);\n        this.state = this.prepareProps(this.props);\n\n        this.inputSelectionStart = 1;\n        this.inputSelectionEnd = 1;\n    }\n\n\n    /**\n     * Exposes the current masked value.\n     *\n     * @returns {String}\n     */\n    getMaskedValue() {\n        return this.state.maskedValue;\n    }\n\n\n    /**\n     * General function used to cleanup and define the final props used for rendering\n     * @returns {{ maskedValue: {String}, value: {Number}, customProps: {Object} }}\n     */\n    prepareProps(props) {\n        let customProps = {...props}; // babeljs converts to Object.assign, then polyfills.\n        delete customProps.onChange;\n        delete customProps.onChangeEvent;\n        delete customProps.value;\n        delete customProps.decimalSeparator;\n        delete customProps.thousandSeparator;\n        delete customProps.precision;\n        delete customProps.inputType;\n        delete customProps.allowNegative;\n        delete customProps.allowEmpty;\n        delete customProps.prefix;\n        delete customProps.suffix;\n        delete customProps.selectAllOnFocus;\n        delete customProps.autoFocus;\n\n        let initialValue = props.value;\n        if (initialValue === null) {\n            initialValue = props.allowEmpty? null : '';\n        }else{\n\n            if (typeof initialValue == 'string') {\n                // Some people, when confronted with a problem, think \"I know, I'll use regular expressions.\"\n                // Now they have two problems.\n\n                // Strip out thousand separators, prefix, and suffix, etc.\n                if (props.thousandSeparator === \".\"){\n                    // special handle the . thousand separator\n                    initialValue = initialValue.replace(/\\./g, '');\n                }\n\n                if (props.decimalSeparator != \".\"){\n                    // fix the decimal separator\n                    initialValue = initialValue.replace(new RegExp(props.decimalSeparator, 'g'), '.');\n                }\n\n                //Strip out anything that is not a digit, -, or decimal separator\n                initialValue = initialValue.replace(/[^0-9-.]/g, '');\n\n                // now we can parse.\n                initialValue = Number.parseFloat(initialValue);\n            }\n            initialValue = Number(initialValue).toLocaleString(undefined, {\n                style                : 'decimal',\n                minimumFractionDigits: props.precision,\n                maximumFractionDigits: props.precision\n            })\n\n        }\n\n        const { maskedValue, value } = mask(\n            initialValue,\n            props.precision,\n            props.decimalSeparator,\n            props.thousandSeparator,\n            props.allowNegative,\n            props.prefix,\n            props.suffix\n        );\n\n        return { maskedValue, value, customProps };\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * Invoked when a component is receiving new props. This method is not called for the initial render.\n     *\n     * @param nextProps\n     * @see https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops\n     */\n    componentWillReceiveProps(nextProps) {\n        this.setState(this.prepareProps(nextProps));\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidmount\n     */\n    componentDidMount(){\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let selectionStart, selectionEnd;\n\n        if (this.props.autoFocus) {\n            this.theInput.focus();\n            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        } else {\n            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);\n            selectionStart = Math.min(node.selectionStart, selectionEnd);\n        }\n\n        node.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n\n    /**\n     * Component lifecycle function\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentwillupdate\n     */\n    componentWillUpdate() {\n        let node = ReactDOM.findDOMNode(this.theInput);\n        this.inputSelectionStart = node.selectionStart;\n        this.inputSelectionEnd = node.selectionEnd;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidupdate\n     */\n    componentDidUpdate(prevProps, prevState){\n        const { decimalSeparator } = this.props;\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let minPos = this.props.prefix.length + (isNegative ? 1 : 0);\n        let selectionEnd = Math.max(minPos, Math.min(this.inputSelectionEnd, this.theInput.value.length - this.props.suffix.length));\n        let selectionStart = Math.max(minPos, Math.min(this.inputSelectionEnd, selectionEnd));\n\n        let regexEscapeRegex = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\n        let separatorsRegex = new RegExp(decimalSeparator.replace(regexEscapeRegex, '\\\\$&') + '|' + this.props.thousandSeparator.replace(regexEscapeRegex, '\\\\$&'), 'g');\n        let currSeparatorCount = (this.state.maskedValue.match(separatorsRegex) || []).length;\n        let prevSeparatorCount = (prevState.maskedValue.match(separatorsRegex) || []).length;\n        let adjustment = Math.max(currSeparatorCount - prevSeparatorCount, 0);\n\n        selectionEnd = selectionEnd + adjustment;\n        selectionStart = selectionStart + adjustment;\n\n        const precision = Number(this.props.precision);\n\n        let baselength = this.props.suffix.length\n            + this.props.prefix.length\n            + (precision > 0 ? decimalSeparator.length : 0) // if precision is 0 there will be no decimal part\n            + precision\n            + 1; // This is to account for the default '0' value that comes before the decimal separator\n\n        if (this.state.maskedValue.length == baselength){\n            // if we are already at base length, position the cursor at the end.\n            selectionEnd = this.theInput.value.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        }\n\n        node.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    /**\n     * onChange Event Handler\n     * @param event\n     */\n    handleChange(event) {\n        event.preventDefault();\n        let { maskedValue, value } = mask(\n            event.target.value,\n            this.props.precision,\n            this.props.decimalSeparator,\n            this.props.thousandSeparator,\n            this.props.allowNegative,\n            this.props.prefix,\n            this.props.suffix\n        );\n\n        event.persist();  // fixes issue #23\n\n        this.setState({ maskedValue, value }, () => {\n            this.props.onChange(maskedValue, value, event);\n            this.props.onChangeEvent(event, maskedValue, value);\n        });\n    }\n\n\n    /**\n     * onFocus Event Handler\n     * @param event\n     */\n    handleFocus(event) {\n        if (!this.theInput) return;\n\n        //Whenever we receive focus check to see if the position is before the suffix, if not, move it.\n        let selectionEnd = this.theInput.value.length - this.props.suffix.length;\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let selectionStart = this.props.prefix.length + (isNegative ? 1 : 0);\n        this.props.selectAllOnFocus && event.target.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    handleBlur(event) {\n        this.inputSelectionStart = 0;\n        this.inputSelectionEnd = 0;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/component-specs.html#render\n     */\n    render() {\n        return (\n            <input\n                ref={(input) => { this.theInput = input; }}\n                type={this.props.inputType}\n                value={this.state.maskedValue}\n                onChange={this.handleChange}\n                onFocus={this.handleFocus}\n                onMouseUp={this.handleFocus}\n                {...this.state.customProps}\n            />\n        )\n    }\n}\n\n\n\n/**\n * Prop validation.\n * @see https://facebook.github.io/react/docs/component-specs.html#proptypes\n */\n\nCurrencyInput.propTypes = {\n    onChange: PropTypes.func,\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    decimalSeparator: PropTypes.string,\n    thousandSeparator: PropTypes.string,\n    precision: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    inputType: PropTypes.string,\n    allowNegative: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    prefix: PropTypes.string,\n    suffix: PropTypes.string,\n    selectAllOnFocus: PropTypes.bool\n};\n\n\nCurrencyInput.defaultProps = {\n    onChange: function(maskValue, value, event) {/*no-op*/},\n    onChangeEvent: function(event, maskValue, value) {/*no-op*/},\n    autoFocus: false,\n    value: '0',\n    decimalSeparator: '.',\n    thousandSeparator: ',',\n    precision: '2',\n    inputType: 'text',\n    allowNegative: false,\n    prefix: '',\n    suffix: '',\n    selectAllOnFocus: false\n};\n\n\nexport default CurrencyInput\n"],"names":["arguments","let","super","const","this"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"react-currency-input.es.js","sources":["../src/object-assign-polyfill.js","../src/mask.js","../src/index.js"],"sourcesContent":["Object.assign = Object.assign ||\n  function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n","\nexport default function mask(value, precision = 2, decimalSeparator = '.', thousandSeparator = ',', allowNegative = false, prefix = '', suffix = ''){\n    // provide some default values and arg validation.\n    if (precision < 0) { precision = 0; } // precision cannot be negative\n    if (precision > 20) { precision = 20; } // precision cannot be greater than 20\n    \n    if (value === null || value===undefined) {\n          return {\n              value: 0,\n              maskedValue: ''\n          };\n     }\n  \n    value = String(value); //if the given value is a Number, let's convert into String to manipulate that\n\n    if (value.length == 0) {\n        return {\n            value: 0,\n            maskedValue: ''\n        };\n    }\n\n\n    // extract digits. if no digits, fill in a zero.\n    let digits = value.match(/\\d/g) || ['0'];\n    \n    let numberIsNegative = false;\n    if (allowNegative) {\n        let negativeSignCount = (value.match(/-/g) || []).length;\n        // number will be negative if we have an odd number of \"-\"\n        // ideally, we should only ever have 0, 1 or 2 (positive number, making a number negative\n        // and making a negative number positive, respectively)\n        numberIsNegative = negativeSignCount % 2 === 1;\n        \n        // if every digit in the array is '0', then the number should never be negative\n        let allDigitsAreZero = true;\n        for (let idx=0; idx < digits.length; idx += 1) {\n            if(digits[idx] !== '0') {\n                allDigitsAreZero = false;\n                break;\n            }\n        }\n        if (allDigitsAreZero) {\n            numberIsNegative = false;\n        }\n    }\n\n    // zero-pad a input\n    while (digits.length <= precision) { digits.unshift('0'); }\n\n    if (precision > 0) {\n        // add the decimal separator\n        digits.splice(digits.length - precision, 0, \".\");\n    }\n\n    // clean up extraneous digits like leading zeros.\n    digits = Number(digits.join('')).toFixed(precision).split('');\n    let raw = Number(digits.join(''));\n\n    let decimalpos = digits.length - precision - 1;  // -1 needed to position the decimal separator before the digits.\n    if (precision > 0) {\n        // set the final decimal separator\n        digits[decimalpos] = decimalSeparator;\n    } else {\n        // when precision is 0, there is no decimal separator.\n        decimalpos = digits.length;\n    }\n\n    // add in any thousand separators\n    for (let x=decimalpos - 3; x > 0; x = x - 3) {\n        digits.splice(x, 0, thousandSeparator);\n    }\n\n    // if we have a prefix or suffix, add them in.\n    if (prefix.length > 0) { digits.unshift(prefix); }\n    if (suffix.length > 0) { digits.push(suffix); }\n\n    // if the number is negative, insert a \"-\" to\n    // the front of the array and negate the raw value\n    if (allowNegative && numberIsNegative) {\n        digits.unshift('-');\n        raw = -raw;\n    }\n\n    return {\n        value: raw,\n        maskedValue: digits.join('').trim()\n    };\n}\n","import './object-assign-polyfill';\n\nimport PropTypes from 'prop-types';\nimport React, { Component }  from 'react'\nimport ReactDOM from 'react-dom'\nimport mask from './mask.js'\n\n// IE* parseFloat polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat#Polyfill\nNumber.parseFloat = parseFloat;\n\nclass CurrencyInput extends Component {\n    constructor(props) {\n        super(props);\n        this.prepareProps = this.prepareProps.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.handleFocus = this.handleFocus.bind(this);\n        this.setSelectionRange = this.setSelectionRange.bind(this);\n        this.state = this.prepareProps(this.props);\n\n        this.inputSelectionStart = 1;\n        this.inputSelectionEnd = 1;\n    }\n\n\n    /**\n     * Exposes the current masked value.\n     *\n     * @returns {String}\n     */\n    getMaskedValue() {\n        return this.state.maskedValue;\n    }\n\n\n    /**\n     * General function used to cleanup and define the final props used for rendering\n     * @returns {{ maskedValue: {String}, value: {Number}, customProps: {Object} }}\n     */\n    prepareProps(props) {\n        let customProps = {...props}; // babeljs converts to Object.assign, then polyfills.\n        delete customProps.onChange;\n        delete customProps.onChangeEvent;\n        delete customProps.value;\n        delete customProps.decimalSeparator;\n        delete customProps.thousandSeparator;\n        delete customProps.precision;\n        delete customProps.inputType;\n        delete customProps.allowNegative;\n        delete customProps.allowEmpty;\n        delete customProps.prefix;\n        delete customProps.suffix;\n        delete customProps.selectAllOnFocus;\n        delete customProps.autoFocus;\n\n        let initialValue = props.value;\n        if (initialValue === null) {\n            initialValue = props.allowEmpty? null : '';\n        }else{\n\n            if (typeof initialValue == 'string') {\n                // Some people, when confronted with a problem, think \"I know, I'll use regular expressions.\"\n                // Now they have two problems.\n\n                // Strip out thousand separators, prefix, and suffix, etc.\n                if (props.thousandSeparator === \".\"){\n                    // special handle the . thousand separator\n                    initialValue = initialValue.replace(/\\./g, '');\n                }\n\n                if (props.decimalSeparator != \".\"){\n                    // fix the decimal separator\n                    initialValue = initialValue.replace(new RegExp(props.decimalSeparator, 'g'), '.');\n                }\n\n                //Strip out anything that is not a digit, -, or decimal separator\n                initialValue = initialValue.replace(/[^0-9-.]/g, '');\n\n                // now we can parse.\n                initialValue = Number.parseFloat(initialValue);\n            }\n            initialValue = Number(initialValue).toLocaleString(undefined, {\n                style                : 'decimal',\n                minimumFractionDigits: props.precision,\n                maximumFractionDigits: props.precision\n            })\n\n        }\n\n        const { maskedValue, value } = mask(\n            initialValue,\n            props.precision,\n            props.decimalSeparator,\n            props.thousandSeparator,\n            props.allowNegative,\n            props.prefix,\n            props.suffix\n        );\n\n        return { maskedValue, value, customProps };\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * Invoked when a component is receiving new props. This method is not called for the initial render.\n     *\n     * @param nextProps\n     * @see https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops\n     */\n    componentWillReceiveProps(nextProps) {\n        this.setState(this.prepareProps(nextProps));\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidmount\n     */\n    componentDidMount(){\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let selectionStart, selectionEnd;\n\n        if (this.props.autoFocus) {\n            this.theInput.focus();\n            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        } else {\n            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);\n            selectionStart = Math.min(node.selectionStart, selectionEnd);\n        }\n\n        // this.setSelectionRange(node, selectionStart, selectionEnd);\n    }\n\n\n    /**\n     * Component lifecycle function\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentwillupdate\n     */\n    componentWillUpdate() {\n        let node = ReactDOM.findDOMNode(this.theInput);\n        this.inputSelectionStart = node.selectionStart;\n        this.inputSelectionEnd = node.selectionEnd;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidupdate\n     */\n    componentDidUpdate(prevProps, prevState){\n        const { decimalSeparator } = this.props;\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let minPos = this.props.prefix.length + (isNegative ? 1 : 0);\n        let selectionEnd = Math.max(minPos, Math.min(this.inputSelectionEnd, this.theInput.value.length - this.props.suffix.length));\n        let selectionStart = Math.max(minPos, Math.min(this.inputSelectionEnd, selectionEnd));\n\n        let regexEscapeRegex = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\n        let separatorsRegex = new RegExp(decimalSeparator.replace(regexEscapeRegex, '\\\\$&') + '|' + this.props.thousandSeparator.replace(regexEscapeRegex, '\\\\$&'), 'g');\n        let currSeparatorCount = (this.state.maskedValue.match(separatorsRegex) || []).length;\n        let prevSeparatorCount = (prevState.maskedValue.match(separatorsRegex) || []).length;\n        let adjustment = Math.max(currSeparatorCount - prevSeparatorCount, 0);\n\n        selectionEnd = selectionEnd + adjustment;\n        selectionStart = selectionStart + adjustment;\n\n        const precision = Number(this.props.precision);\n\n        let baselength = this.props.suffix.length\n            + this.props.prefix.length\n            + (precision > 0 ? decimalSeparator.length : 0) // if precision is 0 there will be no decimal part\n            + precision\n            + 1; // This is to account for the default '0' value that comes before the decimal separator\n\n        if (this.state.maskedValue.length == baselength){\n            // if we are already at base length, position the cursor at the end.\n            selectionEnd = this.theInput.value.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        }\n\n        // this.setSelectionRange(node, selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n    /**\n     * Set selection range only if input is in focused state\n     * @param node DOMElement\n     * @param start number\n     * @param end number\n     */\n    setSelectionRange(node, start, end) {\n      if (document.activeElement === node) {\n        node.setSelectionRange(start, end);\n      }\n    }\n\n\n    /**\n     * onChange Event Handler\n     * @param event\n     */\n    handleChange(event) {\n        event.preventDefault();\n        let { maskedValue, value } = mask(\n            event.target.value,\n            this.props.precision,\n            this.props.decimalSeparator,\n            this.props.thousandSeparator,\n            this.props.allowNegative,\n            this.props.prefix,\n            this.props.suffix\n        );\n\n        event.persist();  // fixes issue #23\n\n        this.setState({ maskedValue, value }, () => {\n            this.props.onChange(maskedValue, value, event);\n            this.props.onChangeEvent(event, maskedValue, value);\n        });\n    }\n\n\n    /**\n     * onFocus Event Handler\n     * @param event\n     */\n    handleFocus(event) {\n        if (!this.theInput) return;\n\n        //Whenever we receive focus check to see if the position is before the suffix, if not, move it.\n        let selectionEnd = this.theInput.value.length - this.props.suffix.length;\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let selectionStart = this.props.prefix.length + (isNegative ? 1 : 0);\n        this.props.selectAllOnFocus && event.target.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    handleBlur(event) {\n        this.inputSelectionStart = 0;\n        this.inputSelectionEnd = 0;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/component-specs.html#render\n     */\n    render() {\n        return (\n            <input\n                ref={(input) => { this.theInput = input; }}\n                type={this.props.inputType}\n                value={this.state.maskedValue}\n                onChange={this.handleChange}\n                onFocus={this.handleFocus}\n                onMouseUp={this.handleFocus}\n                {...this.state.customProps}\n            />\n        )\n    }\n}\n\n\n\n/**\n * Prop validation.\n * @see https://facebook.github.io/react/docs/component-specs.html#proptypes\n */\n\nCurrencyInput.propTypes = {\n    onChange: PropTypes.func,\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    decimalSeparator: PropTypes.string,\n    thousandSeparator: PropTypes.string,\n    precision: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    inputType: PropTypes.string,\n    allowNegative: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    prefix: PropTypes.string,\n    suffix: PropTypes.string,\n    selectAllOnFocus: PropTypes.bool\n};\n\n\nCurrencyInput.defaultProps = {\n    onChange: function(maskValue, value, event) {/*no-op*/},\n    onChangeEvent: function(event, maskValue, value) {/*no-op*/},\n    autoFocus: false,\n    value: '0',\n    decimalSeparator: '.',\n    thousandSeparator: ',',\n    precision: '2',\n    inputType: 'text',\n    allowNegative: false,\n    prefix: '',\n    suffix: '',\n    selectAllOnFocus: false\n};\n\n\nexport default CurrencyInput\n"],"names":["arguments","let","super","const","this"],"mappings":"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"}
\ No newline at end of file
diff --git a/lib/react-currency-input.min.js b/lib/react-currency-input.min.js
index fdf6f8d..6ee1234 100644
--- a/lib/react-currency-input.min.js
+++ b/lib/react-currency-input.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("prop-types"),require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["prop-types","react","react-dom"],t):e["react-currency-input"]=t(e.PropTypes,e.React,e.ReactDOM)}(this,function(e,t,g){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n="default"in t?t.default:t;function o(e,t,n,i,a,o,s){if(void 0===t&&(t=2),void 0===n&&(n="."),void 0===i&&(i=","),void 0===a&&(a=!1),void 0===o&&(o=""),void 0===s&&(s=""),t<0&&(t=0),20<t&&(t=20),null==e)return{value:0,maskedValue:""};if(0==(e=String(e)).length)return{value:0,maskedValue:""};var r=e.match(/\d/g)||["0"],p=!1;if(a){p=(e.match(/-/g)||[]).length%2==1;for(var l=!0,u=0;u<r.length;u+=1)if("0"!==r[u]){l=!1;break}l&&(p=!1)}for(;r.length<=t;)r.unshift("0");0<t&&r.splice(r.length-t,0,"."),r=Number(r.join("")).toFixed(t).split("");var h=Number(r.join("")),c=r.length-t-1;0<t?r[c]=n:c=r.length;for(var d=c-3;0<d;d-=3)r.splice(d,0,i);return 0<o.length&&r.unshift(o),0<s.length&&r.push(s),a&&p&&(r.unshift("-"),h=-h),{value:h,maskedValue:r.join("").trim()}}g=g&&g.hasOwnProperty("default")?g.default:g,Object.assign=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var i=t[n];for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(e[a]=i[a])}return e},Number.parseFloat=parseFloat;var i=function(t){function e(e){t.call(this,e),this.prepareProps=this.prepareProps.bind(this),this.handleChange=this.handleChange.bind(this),this.handleFocus=this.handleFocus.bind(this),this.state=this.prepareProps(this.props),this.inputSelectionStart=1,this.inputSelectionEnd=1}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.getMaskedValue=function(){return this.state.maskedValue},e.prototype.prepareProps=function(e){var t=Object.assign({},e);delete t.onChange,delete t.onChangeEvent,delete t.value,delete t.decimalSeparator,delete t.thousandSeparator,delete t.precision,delete t.inputType,delete t.allowNegative,delete t.allowEmpty,delete t.prefix,delete t.suffix,delete t.selectAllOnFocus,delete t.autoFocus;var n=e.value;null===n?n=e.allowEmpty?null:"":("string"==typeof n&&("."===e.thousandSeparator&&(n=n.replace(/\./g,"")),"."!=e.decimalSeparator&&(n=n.replace(new RegExp(e.decimalSeparator,"g"),".")),n=n.replace(/[^0-9-.]/g,""),n=Number.parseFloat(n)),n=Number(n).toLocaleString(void 0,{style:"decimal",minimumFractionDigits:e.precision,maximumFractionDigits:e.precision}));var i=o(n,e.precision,e.decimalSeparator,e.thousandSeparator,e.allowNegative,e.prefix,e.suffix);return{maskedValue:i.maskedValue,value:i.value,customProps:t}},e.prototype.componentWillReceiveProps=function(e){this.setState(this.prepareProps(e))},e.prototype.componentDidMount=function(){var e,t,n=g.findDOMNode(this.theInput);this.props.autoFocus?(this.theInput.focus(),e=t=this.state.maskedValue.length-this.props.suffix.length):(t=Math.min(n.selectionEnd,this.theInput.value.length-this.props.suffix.length),e=Math.min(n.selectionStart,t)),n.setSelectionRange(e,t)},e.prototype.componentWillUpdate=function(){var e=g.findDOMNode(this.theInput);this.inputSelectionStart=e.selectionStart,this.inputSelectionEnd=e.selectionEnd},e.prototype.componentDidUpdate=function(e,t){var n=this.props.decimalSeparator,i=g.findDOMNode(this.theInput),a=(this.theInput.value.match(/-/g)||[]).length%2==1,o=this.props.prefix.length+(a?1:0),s=Math.max(o,Math.min(this.inputSelectionEnd,this.theInput.value.length-this.props.suffix.length)),r=Math.max(o,Math.min(this.inputSelectionEnd,s)),p=/[-[\]{}()*+?.,\\^$|#\s]/g,l=new RegExp(n.replace(p,"\\$&")+"|"+this.props.thousandSeparator.replace(p,"\\$&"),"g"),u=(this.state.maskedValue.match(l)||[]).length,h=(t.maskedValue.match(l)||[]).length,c=Math.max(u-h,0);s+=c,r+=c;var d=Number(this.props.precision),f=this.props.suffix.length+this.props.prefix.length+(0<d?n.length:0)+d+1;this.state.maskedValue.length==f&&(r=s=this.theInput.value.length-this.props.suffix.length),i.setSelectionRange(r,s),this.inputSelectionStart=r,this.inputSelectionEnd=s},e.prototype.handleChange=function(e){var t=this;e.preventDefault();var n=o(e.target.value,this.props.precision,this.props.decimalSeparator,this.props.thousandSeparator,this.props.allowNegative,this.props.prefix,this.props.suffix),i=n.maskedValue,a=n.value;e.persist(),this.setState({maskedValue:i,value:a},function(){t.props.onChange(i,a,e),t.props.onChangeEvent(e,i,a)})},e.prototype.handleFocus=function(e){if(this.theInput){var t=this.theInput.value.length-this.props.suffix.length,n=(this.theInput.value.match(/-/g)||[]).length%2==1,i=this.props.prefix.length+(n?1:0);this.props.selectAllOnFocus&&e.target.setSelectionRange(i,t),this.inputSelectionStart=i,this.inputSelectionEnd=t}},e.prototype.handleBlur=function(e){this.inputSelectionStart=0,this.inputSelectionEnd=0},e.prototype.render=function(){var t=this;return n.createElement("input",Object.assign({},{ref:function(e){t.theInput=e},type:this.props.inputType,value:this.state.maskedValue,onChange:this.handleChange,onFocus:this.handleFocus,onMouseUp:this.handleFocus},this.state.customProps))},e}(t.Component);return i.propTypes={onChange:e.func,value:e.oneOfType([e.number,e.string]),decimalSeparator:e.string,thousandSeparator:e.string,precision:e.oneOfType([e.number,e.string]),inputType:e.string,allowNegative:e.bool,allowEmpty:e.bool,prefix:e.string,suffix:e.string,selectAllOnFocus:e.bool},i.defaultProps={onChange:function(e,t,n){},onChangeEvent:function(e,t,n){},autoFocus:!1,value:"0",decimalSeparator:".",thousandSeparator:",",precision:"2",inputType:"text",allowNegative:!1,prefix:"",suffix:"",selectAllOnFocus:!1},i});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("prop-types"),require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["prop-types","react","react-dom"],t):e["react-currency-input"]=t(e.PropTypes,e.React,e.ReactDOM)}(this,function(e,t,f){"use strict";e=e&&e.hasOwnProperty("default")?e.default:e;var n="default"in t?t.default:t;function a(e,t,n,i,o,a,s){if(void 0===t&&(t=2),void 0===n&&(n="."),void 0===i&&(i=","),void 0===o&&(o=!1),void 0===a&&(a=""),void 0===s&&(s=""),t<0&&(t=0),20<t&&(t=20),null==e)return{value:0,maskedValue:""};if(0==(e=String(e)).length)return{value:0,maskedValue:""};var r=e.match(/\d/g)||["0"],p=!1;if(o){p=(e.match(/-/g)||[]).length%2==1;for(var l=!0,u=0;u<r.length;u+=1)if("0"!==r[u]){l=!1;break}l&&(p=!1)}for(;r.length<=t;)r.unshift("0");0<t&&r.splice(r.length-t,0,"."),r=Number(r.join("")).toFixed(t).split("");var h=Number(r.join("")),c=r.length-t-1;0<t?r[c]=n:c=r.length;for(var d=c-3;0<d;d-=3)r.splice(d,0,i);return 0<a.length&&r.unshift(a),0<s.length&&r.push(s),o&&p&&(r.unshift("-"),h=-h),{value:h,maskedValue:r.join("").trim()}}f=f&&f.hasOwnProperty("default")?f.default:f,Object.assign=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var i=t[n];for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(e[o]=i[o])}return e},Number.parseFloat=parseFloat;var i=function(t){function e(e){t.call(this,e),this.prepareProps=this.prepareProps.bind(this),this.handleChange=this.handleChange.bind(this),this.handleFocus=this.handleFocus.bind(this),this.setSelectionRange=this.setSelectionRange.bind(this),this.state=this.prepareProps(this.props),this.inputSelectionStart=1,this.inputSelectionEnd=1}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.getMaskedValue=function(){return this.state.maskedValue},e.prototype.prepareProps=function(e){var t=Object.assign({},e);delete t.onChange,delete t.onChangeEvent,delete t.value,delete t.decimalSeparator,delete t.thousandSeparator,delete t.precision,delete t.inputType,delete t.allowNegative,delete t.allowEmpty,delete t.prefix,delete t.suffix,delete t.selectAllOnFocus,delete t.autoFocus;var n=e.value;null===n?n=e.allowEmpty?null:"":("string"==typeof n&&("."===e.thousandSeparator&&(n=n.replace(/\./g,"")),"."!=e.decimalSeparator&&(n=n.replace(new RegExp(e.decimalSeparator,"g"),".")),n=n.replace(/[^0-9-.]/g,""),n=Number.parseFloat(n)),n=Number(n).toLocaleString(void 0,{style:"decimal",minimumFractionDigits:e.precision,maximumFractionDigits:e.precision}));var i=a(n,e.precision,e.decimalSeparator,e.thousandSeparator,e.allowNegative,e.prefix,e.suffix);return{maskedValue:i.maskedValue,value:i.value,customProps:t}},e.prototype.componentWillReceiveProps=function(e){this.setState(this.prepareProps(e))},e.prototype.componentDidMount=function(){f.findDOMNode(this.theInput);this.props.autoFocus&&this.theInput.focus()},e.prototype.componentWillUpdate=function(){var e=f.findDOMNode(this.theInput);this.inputSelectionStart=e.selectionStart,this.inputSelectionEnd=e.selectionEnd},e.prototype.componentDidUpdate=function(e,t){var n=this.props.decimalSeparator,i=(f.findDOMNode(this.theInput),(this.theInput.value.match(/-/g)||[]).length%2==1),o=this.props.prefix.length+(i?1:0),a=Math.max(o,Math.min(this.inputSelectionEnd,this.theInput.value.length-this.props.suffix.length)),s=Math.max(o,Math.min(this.inputSelectionEnd,a)),r=/[-[\]{}()*+?.,\\^$|#\s]/g,p=new RegExp(n.replace(r,"\\$&")+"|"+this.props.thousandSeparator.replace(r,"\\$&"),"g"),l=(this.state.maskedValue.match(p)||[]).length,u=(t.maskedValue.match(p)||[]).length,h=Math.max(l-u,0);a+=h,s+=h;var c=Number(this.props.precision),d=this.props.suffix.length+this.props.prefix.length+(0<c?n.length:0)+c+1;this.state.maskedValue.length==d&&(s=a=this.theInput.value.length-this.props.suffix.length),this.inputSelectionStart=s,this.inputSelectionEnd=a},e.prototype.setSelectionRange=function(e,t,n){document.activeElement===e&&e.setSelectionRange(t,n)},e.prototype.handleChange=function(e){var t=this;e.preventDefault();var n=a(e.target.value,this.props.precision,this.props.decimalSeparator,this.props.thousandSeparator,this.props.allowNegative,this.props.prefix,this.props.suffix),i=n.maskedValue,o=n.value;e.persist(),this.setState({maskedValue:i,value:o},function(){t.props.onChange(i,o,e),t.props.onChangeEvent(e,i,o)})},e.prototype.handleFocus=function(e){if(this.theInput){var t=this.theInput.value.length-this.props.suffix.length,n=(this.theInput.value.match(/-/g)||[]).length%2==1,i=this.props.prefix.length+(n?1:0);this.props.selectAllOnFocus&&e.target.setSelectionRange(i,t),this.inputSelectionStart=i,this.inputSelectionEnd=t}},e.prototype.handleBlur=function(e){this.inputSelectionStart=0,this.inputSelectionEnd=0},e.prototype.render=function(){var t=this;return n.createElement("input",Object.assign({},{ref:function(e){t.theInput=e},type:this.props.inputType,value:this.state.maskedValue,onChange:this.handleChange,onFocus:this.handleFocus,onMouseUp:this.handleFocus},this.state.customProps))},e}(t.Component);return i.propTypes={onChange:e.func,value:e.oneOfType([e.number,e.string]),decimalSeparator:e.string,thousandSeparator:e.string,precision:e.oneOfType([e.number,e.string]),inputType:e.string,allowNegative:e.bool,allowEmpty:e.bool,prefix:e.string,suffix:e.string,selectAllOnFocus:e.bool},i.defaultProps={onChange:function(e,t,n){},onChangeEvent:function(e,t,n){},autoFocus:!1,value:"0",decimalSeparator:".",thousandSeparator:",",precision:"2",inputType:"text",allowNegative:!1,prefix:"",suffix:"",selectAllOnFocus:!1},i});
 //# sourceMappingURL=react-currency-input.min.js.map
diff --git a/lib/react-currency-input.min.js.map b/lib/react-currency-input.min.js.map
index d43e920..1951b08 100644
--- a/lib/react-currency-input.min.js.map
+++ b/lib/react-currency-input.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"react-currency-input.min.js","sources":["../src/mask.js","../src/object-assign-polyfill.js","../src/index.js"],"sourcesContent":["\nexport default function mask(value, precision = 2, decimalSeparator = '.', thousandSeparator = ',', allowNegative = false, prefix = '', suffix = ''){\n    // provide some default values and arg validation.\n    if (precision < 0) { precision = 0; } // precision cannot be negative\n    if (precision > 20) { precision = 20; } // precision cannot be greater than 20\n    \n    if (value === null || value===undefined) {\n          return {\n              value: 0,\n              maskedValue: ''\n          };\n     }\n  \n    value = String(value); //if the given value is a Number, let's convert into String to manipulate that\n\n    if (value.length == 0) {\n        return {\n            value: 0,\n            maskedValue: ''\n        };\n    }\n\n\n    // extract digits. if no digits, fill in a zero.\n    let digits = value.match(/\\d/g) || ['0'];\n    \n    let numberIsNegative = false;\n    if (allowNegative) {\n        let negativeSignCount = (value.match(/-/g) || []).length;\n        // number will be negative if we have an odd number of \"-\"\n        // ideally, we should only ever have 0, 1 or 2 (positive number, making a number negative\n        // and making a negative number positive, respectively)\n        numberIsNegative = negativeSignCount % 2 === 1;\n        \n        // if every digit in the array is '0', then the number should never be negative\n        let allDigitsAreZero = true;\n        for (let idx=0; idx < digits.length; idx += 1) {\n            if(digits[idx] !== '0') {\n                allDigitsAreZero = false;\n                break;\n            }\n        }\n        if (allDigitsAreZero) {\n            numberIsNegative = false;\n        }\n    }\n\n    // zero-pad a input\n    while (digits.length <= precision) { digits.unshift('0'); }\n\n    if (precision > 0) {\n        // add the decimal separator\n        digits.splice(digits.length - precision, 0, \".\");\n    }\n\n    // clean up extraneous digits like leading zeros.\n    digits = Number(digits.join('')).toFixed(precision).split('');\n    let raw = Number(digits.join(''));\n\n    let decimalpos = digits.length - precision - 1;  // -1 needed to position the decimal separator before the digits.\n    if (precision > 0) {\n        // set the final decimal separator\n        digits[decimalpos] = decimalSeparator;\n    } else {\n        // when precision is 0, there is no decimal separator.\n        decimalpos = digits.length;\n    }\n\n    // add in any thousand separators\n    for (let x=decimalpos - 3; x > 0; x = x - 3) {\n        digits.splice(x, 0, thousandSeparator);\n    }\n\n    // if we have a prefix or suffix, add them in.\n    if (prefix.length > 0) { digits.unshift(prefix); }\n    if (suffix.length > 0) { digits.push(suffix); }\n\n    // if the number is negative, insert a \"-\" to\n    // the front of the array and negate the raw value\n    if (allowNegative && numberIsNegative) {\n        digits.unshift('-');\n        raw = -raw;\n    }\n\n    return {\n        value: raw,\n        maskedValue: digits.join('').trim()\n    };\n}\n","Object.assign = Object.assign ||\n  function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n","import './object-assign-polyfill';\n\nimport PropTypes from 'prop-types';\nimport React, { Component }  from 'react'\nimport ReactDOM from 'react-dom'\nimport mask from './mask.js'\n\n// IE* parseFloat polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat#Polyfill\nNumber.parseFloat = parseFloat;\n\nclass CurrencyInput extends Component {\n    constructor(props) {\n        super(props);\n        this.prepareProps = this.prepareProps.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.handleFocus = this.handleFocus.bind(this);\n        this.state = this.prepareProps(this.props);\n\n        this.inputSelectionStart = 1;\n        this.inputSelectionEnd = 1;\n    }\n\n\n    /**\n     * Exposes the current masked value.\n     *\n     * @returns {String}\n     */\n    getMaskedValue() {\n        return this.state.maskedValue;\n    }\n\n\n    /**\n     * General function used to cleanup and define the final props used for rendering\n     * @returns {{ maskedValue: {String}, value: {Number}, customProps: {Object} }}\n     */\n    prepareProps(props) {\n        let customProps = {...props}; // babeljs converts to Object.assign, then polyfills.\n        delete customProps.onChange;\n        delete customProps.onChangeEvent;\n        delete customProps.value;\n        delete customProps.decimalSeparator;\n        delete customProps.thousandSeparator;\n        delete customProps.precision;\n        delete customProps.inputType;\n        delete customProps.allowNegative;\n        delete customProps.allowEmpty;\n        delete customProps.prefix;\n        delete customProps.suffix;\n        delete customProps.selectAllOnFocus;\n        delete customProps.autoFocus;\n\n        let initialValue = props.value;\n        if (initialValue === null) {\n            initialValue = props.allowEmpty? null : '';\n        }else{\n\n            if (typeof initialValue == 'string') {\n                // Some people, when confronted with a problem, think \"I know, I'll use regular expressions.\"\n                // Now they have two problems.\n\n                // Strip out thousand separators, prefix, and suffix, etc.\n                if (props.thousandSeparator === \".\"){\n                    // special handle the . thousand separator\n                    initialValue = initialValue.replace(/\\./g, '');\n                }\n\n                if (props.decimalSeparator != \".\"){\n                    // fix the decimal separator\n                    initialValue = initialValue.replace(new RegExp(props.decimalSeparator, 'g'), '.');\n                }\n\n                //Strip out anything that is not a digit, -, or decimal separator\n                initialValue = initialValue.replace(/[^0-9-.]/g, '');\n\n                // now we can parse.\n                initialValue = Number.parseFloat(initialValue);\n            }\n            initialValue = Number(initialValue).toLocaleString(undefined, {\n                style                : 'decimal',\n                minimumFractionDigits: props.precision,\n                maximumFractionDigits: props.precision\n            })\n\n        }\n\n        const { maskedValue, value } = mask(\n            initialValue,\n            props.precision,\n            props.decimalSeparator,\n            props.thousandSeparator,\n            props.allowNegative,\n            props.prefix,\n            props.suffix\n        );\n\n        return { maskedValue, value, customProps };\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * Invoked when a component is receiving new props. This method is not called for the initial render.\n     *\n     * @param nextProps\n     * @see https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops\n     */\n    componentWillReceiveProps(nextProps) {\n        this.setState(this.prepareProps(nextProps));\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidmount\n     */\n    componentDidMount(){\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let selectionStart, selectionEnd;\n\n        if (this.props.autoFocus) {\n            this.theInput.focus();\n            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        } else {\n            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);\n            selectionStart = Math.min(node.selectionStart, selectionEnd);\n        }\n\n        node.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n\n    /**\n     * Component lifecycle function\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentwillupdate\n     */\n    componentWillUpdate() {\n        let node = ReactDOM.findDOMNode(this.theInput);\n        this.inputSelectionStart = node.selectionStart;\n        this.inputSelectionEnd = node.selectionEnd;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidupdate\n     */\n    componentDidUpdate(prevProps, prevState){\n        const { decimalSeparator } = this.props;\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let minPos = this.props.prefix.length + (isNegative ? 1 : 0);\n        let selectionEnd = Math.max(minPos, Math.min(this.inputSelectionEnd, this.theInput.value.length - this.props.suffix.length));\n        let selectionStart = Math.max(minPos, Math.min(this.inputSelectionEnd, selectionEnd));\n\n        let regexEscapeRegex = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\n        let separatorsRegex = new RegExp(decimalSeparator.replace(regexEscapeRegex, '\\\\$&') + '|' + this.props.thousandSeparator.replace(regexEscapeRegex, '\\\\$&'), 'g');\n        let currSeparatorCount = (this.state.maskedValue.match(separatorsRegex) || []).length;\n        let prevSeparatorCount = (prevState.maskedValue.match(separatorsRegex) || []).length;\n        let adjustment = Math.max(currSeparatorCount - prevSeparatorCount, 0);\n\n        selectionEnd = selectionEnd + adjustment;\n        selectionStart = selectionStart + adjustment;\n\n        const precision = Number(this.props.precision);\n\n        let baselength = this.props.suffix.length\n            + this.props.prefix.length\n            + (precision > 0 ? decimalSeparator.length : 0) // if precision is 0 there will be no decimal part\n            + precision\n            + 1; // This is to account for the default '0' value that comes before the decimal separator\n\n        if (this.state.maskedValue.length == baselength){\n            // if we are already at base length, position the cursor at the end.\n            selectionEnd = this.theInput.value.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        }\n\n        node.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    /**\n     * onChange Event Handler\n     * @param event\n     */\n    handleChange(event) {\n        event.preventDefault();\n        let { maskedValue, value } = mask(\n            event.target.value,\n            this.props.precision,\n            this.props.decimalSeparator,\n            this.props.thousandSeparator,\n            this.props.allowNegative,\n            this.props.prefix,\n            this.props.suffix\n        );\n\n        event.persist();  // fixes issue #23\n\n        this.setState({ maskedValue, value }, () => {\n            this.props.onChange(maskedValue, value, event);\n            this.props.onChangeEvent(event, maskedValue, value);\n        });\n    }\n\n\n    /**\n     * onFocus Event Handler\n     * @param event\n     */\n    handleFocus(event) {\n        if (!this.theInput) return;\n\n        //Whenever we receive focus check to see if the position is before the suffix, if not, move it.\n        let selectionEnd = this.theInput.value.length - this.props.suffix.length;\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let selectionStart = this.props.prefix.length + (isNegative ? 1 : 0);\n        this.props.selectAllOnFocus && event.target.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    handleBlur(event) {\n        this.inputSelectionStart = 0;\n        this.inputSelectionEnd = 0;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/component-specs.html#render\n     */\n    render() {\n        return (\n            <input\n                ref={(input) => { this.theInput = input; }}\n                type={this.props.inputType}\n                value={this.state.maskedValue}\n                onChange={this.handleChange}\n                onFocus={this.handleFocus}\n                onMouseUp={this.handleFocus}\n                {...this.state.customProps}\n            />\n        )\n    }\n}\n\n\n\n/**\n * Prop validation.\n * @see https://facebook.github.io/react/docs/component-specs.html#proptypes\n */\n\nCurrencyInput.propTypes = {\n    onChange: PropTypes.func,\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    decimalSeparator: PropTypes.string,\n    thousandSeparator: PropTypes.string,\n    precision: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    inputType: PropTypes.string,\n    allowNegative: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    prefix: PropTypes.string,\n    suffix: PropTypes.string,\n    selectAllOnFocus: PropTypes.bool\n};\n\n\nCurrencyInput.defaultProps = {\n    onChange: function(maskValue, value, event) {/*no-op*/},\n    onChangeEvent: function(event, maskValue, value) {/*no-op*/},\n    autoFocus: false,\n    value: '0',\n    decimalSeparator: '.',\n    thousandSeparator: ',',\n    precision: '2',\n    inputType: 'text',\n    allowNegative: false,\n    prefix: '',\n    suffix: '',\n    selectAllOnFocus: false\n};\n\n\nexport default CurrencyInput\n"],"names":["mask","value","precision","decimalSeparator","thousandSeparator","allowNegative","prefix","suffix","maskedValue","String","length","let","digits","match","numberIsNegative","allDigitsAreZero","idx","unshift","splice","Number","join","toFixed","split","raw","decimalpos","x","push","trim","Object","assign","target","i","arguments","source","key","prototype","hasOwnProperty","call","parseFloat","CurrencyInput","props","super","this","prepareProps","bind","handleChange","handleFocus","state","inputSelectionStart","inputSelectionEnd","getMaskedValue","customProps","onChange","onChangeEvent","inputType","allowEmpty","selectAllOnFocus","autoFocus","initialValue","replace","RegExp","toLocaleString","undefined","style","minimumFractionDigits","maximumFractionDigits","componentWillReceiveProps","nextProps","setState","componentDidMount","selectionStart","selectionEnd","node","ReactDOM","findDOMNode","theInput","focus","Math","min","setSelectionRange","componentWillUpdate","componentDidUpdate","prevProps","prevState","isNegative","minPos","max","regexEscapeRegex","separatorsRegex","currSeparatorCount","prevSeparatorCount","adjustment","const","baselength","event","preventDefault","persist","handleBlur","render","React","ref","input","type","onFocus","onMouseUp","Component","propTypes","PropTypes","func","oneOfType","number","string","bool","defaultProps","maskValue"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"react-currency-input.min.js","sources":["../src/mask.js","../src/object-assign-polyfill.js","../src/index.js"],"sourcesContent":["\nexport default function mask(value, precision = 2, decimalSeparator = '.', thousandSeparator = ',', allowNegative = false, prefix = '', suffix = ''){\n    // provide some default values and arg validation.\n    if (precision < 0) { precision = 0; } // precision cannot be negative\n    if (precision > 20) { precision = 20; } // precision cannot be greater than 20\n    \n    if (value === null || value===undefined) {\n          return {\n              value: 0,\n              maskedValue: ''\n          };\n     }\n  \n    value = String(value); //if the given value is a Number, let's convert into String to manipulate that\n\n    if (value.length == 0) {\n        return {\n            value: 0,\n            maskedValue: ''\n        };\n    }\n\n\n    // extract digits. if no digits, fill in a zero.\n    let digits = value.match(/\\d/g) || ['0'];\n    \n    let numberIsNegative = false;\n    if (allowNegative) {\n        let negativeSignCount = (value.match(/-/g) || []).length;\n        // number will be negative if we have an odd number of \"-\"\n        // ideally, we should only ever have 0, 1 or 2 (positive number, making a number negative\n        // and making a negative number positive, respectively)\n        numberIsNegative = negativeSignCount % 2 === 1;\n        \n        // if every digit in the array is '0', then the number should never be negative\n        let allDigitsAreZero = true;\n        for (let idx=0; idx < digits.length; idx += 1) {\n            if(digits[idx] !== '0') {\n                allDigitsAreZero = false;\n                break;\n            }\n        }\n        if (allDigitsAreZero) {\n            numberIsNegative = false;\n        }\n    }\n\n    // zero-pad a input\n    while (digits.length <= precision) { digits.unshift('0'); }\n\n    if (precision > 0) {\n        // add the decimal separator\n        digits.splice(digits.length - precision, 0, \".\");\n    }\n\n    // clean up extraneous digits like leading zeros.\n    digits = Number(digits.join('')).toFixed(precision).split('');\n    let raw = Number(digits.join(''));\n\n    let decimalpos = digits.length - precision - 1;  // -1 needed to position the decimal separator before the digits.\n    if (precision > 0) {\n        // set the final decimal separator\n        digits[decimalpos] = decimalSeparator;\n    } else {\n        // when precision is 0, there is no decimal separator.\n        decimalpos = digits.length;\n    }\n\n    // add in any thousand separators\n    for (let x=decimalpos - 3; x > 0; x = x - 3) {\n        digits.splice(x, 0, thousandSeparator);\n    }\n\n    // if we have a prefix or suffix, add them in.\n    if (prefix.length > 0) { digits.unshift(prefix); }\n    if (suffix.length > 0) { digits.push(suffix); }\n\n    // if the number is negative, insert a \"-\" to\n    // the front of the array and negate the raw value\n    if (allowNegative && numberIsNegative) {\n        digits.unshift('-');\n        raw = -raw;\n    }\n\n    return {\n        value: raw,\n        maskedValue: digits.join('').trim()\n    };\n}\n","Object.assign = Object.assign ||\n  function(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n","import './object-assign-polyfill';\n\nimport PropTypes from 'prop-types';\nimport React, { Component }  from 'react'\nimport ReactDOM from 'react-dom'\nimport mask from './mask.js'\n\n// IE* parseFloat polyfill\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat#Polyfill\nNumber.parseFloat = parseFloat;\n\nclass CurrencyInput extends Component {\n    constructor(props) {\n        super(props);\n        this.prepareProps = this.prepareProps.bind(this);\n        this.handleChange = this.handleChange.bind(this);\n        this.handleFocus = this.handleFocus.bind(this);\n        this.setSelectionRange = this.setSelectionRange.bind(this);\n        this.state = this.prepareProps(this.props);\n\n        this.inputSelectionStart = 1;\n        this.inputSelectionEnd = 1;\n    }\n\n\n    /**\n     * Exposes the current masked value.\n     *\n     * @returns {String}\n     */\n    getMaskedValue() {\n        return this.state.maskedValue;\n    }\n\n\n    /**\n     * General function used to cleanup and define the final props used for rendering\n     * @returns {{ maskedValue: {String}, value: {Number}, customProps: {Object} }}\n     */\n    prepareProps(props) {\n        let customProps = {...props}; // babeljs converts to Object.assign, then polyfills.\n        delete customProps.onChange;\n        delete customProps.onChangeEvent;\n        delete customProps.value;\n        delete customProps.decimalSeparator;\n        delete customProps.thousandSeparator;\n        delete customProps.precision;\n        delete customProps.inputType;\n        delete customProps.allowNegative;\n        delete customProps.allowEmpty;\n        delete customProps.prefix;\n        delete customProps.suffix;\n        delete customProps.selectAllOnFocus;\n        delete customProps.autoFocus;\n\n        let initialValue = props.value;\n        if (initialValue === null) {\n            initialValue = props.allowEmpty? null : '';\n        }else{\n\n            if (typeof initialValue == 'string') {\n                // Some people, when confronted with a problem, think \"I know, I'll use regular expressions.\"\n                // Now they have two problems.\n\n                // Strip out thousand separators, prefix, and suffix, etc.\n                if (props.thousandSeparator === \".\"){\n                    // special handle the . thousand separator\n                    initialValue = initialValue.replace(/\\./g, '');\n                }\n\n                if (props.decimalSeparator != \".\"){\n                    // fix the decimal separator\n                    initialValue = initialValue.replace(new RegExp(props.decimalSeparator, 'g'), '.');\n                }\n\n                //Strip out anything that is not a digit, -, or decimal separator\n                initialValue = initialValue.replace(/[^0-9-.]/g, '');\n\n                // now we can parse.\n                initialValue = Number.parseFloat(initialValue);\n            }\n            initialValue = Number(initialValue).toLocaleString(undefined, {\n                style                : 'decimal',\n                minimumFractionDigits: props.precision,\n                maximumFractionDigits: props.precision\n            })\n\n        }\n\n        const { maskedValue, value } = mask(\n            initialValue,\n            props.precision,\n            props.decimalSeparator,\n            props.thousandSeparator,\n            props.allowNegative,\n            props.prefix,\n            props.suffix\n        );\n\n        return { maskedValue, value, customProps };\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * Invoked when a component is receiving new props. This method is not called for the initial render.\n     *\n     * @param nextProps\n     * @see https://facebook.github.io/react/docs/component-specs.html#updating-componentwillreceiveprops\n     */\n    componentWillReceiveProps(nextProps) {\n        this.setState(this.prepareProps(nextProps));\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidmount\n     */\n    componentDidMount(){\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let selectionStart, selectionEnd;\n\n        if (this.props.autoFocus) {\n            this.theInput.focus();\n            selectionEnd = this.state.maskedValue.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        } else {\n            selectionEnd = Math.min(node.selectionEnd, this.theInput.value.length - this.props.suffix.length);\n            selectionStart = Math.min(node.selectionStart, selectionEnd);\n        }\n\n        // this.setSelectionRange(node, selectionStart, selectionEnd);\n    }\n\n\n    /**\n     * Component lifecycle function\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentwillupdate\n     */\n    componentWillUpdate() {\n        let node = ReactDOM.findDOMNode(this.theInput);\n        this.inputSelectionStart = node.selectionStart;\n        this.inputSelectionEnd = node.selectionEnd;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/react-component.html#componentdidupdate\n     */\n    componentDidUpdate(prevProps, prevState){\n        const { decimalSeparator } = this.props;\n        let node = ReactDOM.findDOMNode(this.theInput);\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let minPos = this.props.prefix.length + (isNegative ? 1 : 0);\n        let selectionEnd = Math.max(minPos, Math.min(this.inputSelectionEnd, this.theInput.value.length - this.props.suffix.length));\n        let selectionStart = Math.max(minPos, Math.min(this.inputSelectionEnd, selectionEnd));\n\n        let regexEscapeRegex = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\n        let separatorsRegex = new RegExp(decimalSeparator.replace(regexEscapeRegex, '\\\\$&') + '|' + this.props.thousandSeparator.replace(regexEscapeRegex, '\\\\$&'), 'g');\n        let currSeparatorCount = (this.state.maskedValue.match(separatorsRegex) || []).length;\n        let prevSeparatorCount = (prevState.maskedValue.match(separatorsRegex) || []).length;\n        let adjustment = Math.max(currSeparatorCount - prevSeparatorCount, 0);\n\n        selectionEnd = selectionEnd + adjustment;\n        selectionStart = selectionStart + adjustment;\n\n        const precision = Number(this.props.precision);\n\n        let baselength = this.props.suffix.length\n            + this.props.prefix.length\n            + (precision > 0 ? decimalSeparator.length : 0) // if precision is 0 there will be no decimal part\n            + precision\n            + 1; // This is to account for the default '0' value that comes before the decimal separator\n\n        if (this.state.maskedValue.length == baselength){\n            // if we are already at base length, position the cursor at the end.\n            selectionEnd = this.theInput.value.length - this.props.suffix.length;\n            selectionStart = selectionEnd;\n        }\n\n        // this.setSelectionRange(node, selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n    /**\n     * Set selection range only if input is in focused state\n     * @param node DOMElement\n     * @param start number\n     * @param end number\n     */\n    setSelectionRange(node, start, end) {\n      if (document.activeElement === node) {\n        node.setSelectionRange(start, end);\n      }\n    }\n\n\n    /**\n     * onChange Event Handler\n     * @param event\n     */\n    handleChange(event) {\n        event.preventDefault();\n        let { maskedValue, value } = mask(\n            event.target.value,\n            this.props.precision,\n            this.props.decimalSeparator,\n            this.props.thousandSeparator,\n            this.props.allowNegative,\n            this.props.prefix,\n            this.props.suffix\n        );\n\n        event.persist();  // fixes issue #23\n\n        this.setState({ maskedValue, value }, () => {\n            this.props.onChange(maskedValue, value, event);\n            this.props.onChangeEvent(event, maskedValue, value);\n        });\n    }\n\n\n    /**\n     * onFocus Event Handler\n     * @param event\n     */\n    handleFocus(event) {\n        if (!this.theInput) return;\n\n        //Whenever we receive focus check to see if the position is before the suffix, if not, move it.\n        let selectionEnd = this.theInput.value.length - this.props.suffix.length;\n        let isNegative = (this.theInput.value.match(/-/g) || []).length % 2 === 1;\n        let selectionStart = this.props.prefix.length + (isNegative ? 1 : 0);\n        this.props.selectAllOnFocus && event.target.setSelectionRange(selectionStart, selectionEnd);\n        this.inputSelectionStart = selectionStart;\n        this.inputSelectionEnd = selectionEnd;\n    }\n\n\n    handleBlur(event) {\n        this.inputSelectionStart = 0;\n        this.inputSelectionEnd = 0;\n    }\n\n\n    /**\n     * Component lifecycle function.\n     * @returns {XML}\n     * @see https://facebook.github.io/react/docs/component-specs.html#render\n     */\n    render() {\n        return (\n            <input\n                ref={(input) => { this.theInput = input; }}\n                type={this.props.inputType}\n                value={this.state.maskedValue}\n                onChange={this.handleChange}\n                onFocus={this.handleFocus}\n                onMouseUp={this.handleFocus}\n                {...this.state.customProps}\n            />\n        )\n    }\n}\n\n\n\n/**\n * Prop validation.\n * @see https://facebook.github.io/react/docs/component-specs.html#proptypes\n */\n\nCurrencyInput.propTypes = {\n    onChange: PropTypes.func,\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    decimalSeparator: PropTypes.string,\n    thousandSeparator: PropTypes.string,\n    precision: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n    inputType: PropTypes.string,\n    allowNegative: PropTypes.bool,\n    allowEmpty: PropTypes.bool,\n    prefix: PropTypes.string,\n    suffix: PropTypes.string,\n    selectAllOnFocus: PropTypes.bool\n};\n\n\nCurrencyInput.defaultProps = {\n    onChange: function(maskValue, value, event) {/*no-op*/},\n    onChangeEvent: function(event, maskValue, value) {/*no-op*/},\n    autoFocus: false,\n    value: '0',\n    decimalSeparator: '.',\n    thousandSeparator: ',',\n    precision: '2',\n    inputType: 'text',\n    allowNegative: false,\n    prefix: '',\n    suffix: '',\n    selectAllOnFocus: false\n};\n\n\nexport default CurrencyInput\n"],"names":["mask","value","precision","decimalSeparator","thousandSeparator","allowNegative","prefix","suffix","maskedValue","String","length","let","digits","match","numberIsNegative","allDigitsAreZero","idx","unshift","splice","Number","join","toFixed","split","raw","decimalpos","x","push","trim","Object","assign","target","i","arguments","source","key","prototype","hasOwnProperty","call","parseFloat","CurrencyInput","props","super","this","prepareProps","bind","handleChange","handleFocus","setSelectionRange","state","inputSelectionStart","inputSelectionEnd","getMaskedValue","customProps","onChange","onChangeEvent","inputType","allowEmpty","selectAllOnFocus","autoFocus","initialValue","replace","RegExp","toLocaleString","undefined","style","minimumFractionDigits","maximumFractionDigits","componentWillReceiveProps","nextProps","setState","componentDidMount","ReactDOM","findDOMNode","theInput","focus","componentWillUpdate","node","selectionStart","selectionEnd","componentDidUpdate","prevProps","prevState","isNegative","minPos","Math","max","min","regexEscapeRegex","separatorsRegex","currSeparatorCount","prevSeparatorCount","adjustment","const","baselength","start","end","document","activeElement","event","preventDefault","persist","handleBlur","render","React","ref","input","type","onFocus","onMouseUp","Component","propTypes","PropTypes","func","oneOfType","number","string","bool","defaultProps","maskValue"],"mappings":"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"}
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index fa27abf..7e82df8 100644
--- a/src/index.js
+++ b/src/index.js
@@ -131,7 +131,7 @@ class CurrencyInput extends Component {
             selectionStart = Math.min(node.selectionStart, selectionEnd);
         }
 
-        this.setSelectionRange(node, selectionStart, selectionEnd);
+        // this.setSelectionRange(node, selectionStart, selectionEnd);
     }
 
 
@@ -183,7 +183,7 @@ class CurrencyInput extends Component {
             selectionStart = selectionEnd;
         }
 
-        this.setSelectionRange(node, selectionStart, selectionEnd);
+        // this.setSelectionRange(node, selectionStart, selectionEnd);
         this.inputSelectionStart = selectionStart;
         this.inputSelectionEnd = selectionEnd;
     }