﻿$.fn.numericUpDown = function(options) {
    $(this).each(function() {
        var elem = $(this);
        var upBtn = elem.find('.UpButton input');
        var downBtn = elem.find('.DownButton input');
        var input = elem.find('input[type=text]');

        var min = elem.attr('min');
        var max = elem.attr('max');

        input
            .attr('maxlength', max.length)
            .attr('autocomplete', 'off')
            .unbind('click').unbind('keypress').unbind('keyup')
            .click(function() {
                $(this).select();
            })
            .keypress(function(e) {
                var charCode = (e.which) ? e.which : e.keyCode;
                if (charCode != 8 && (charCode > 31 && (charCode < 48 || charCode > 57)))
                    return false;
                return true;
            })
            .keyup(function(e) {
                var value = Number($(this).val());
                if (value < min)
                    $(this).val(min);
                else if (value > max)
                    $(this).val(max);
            });

        upBtn.unbind('click').click(function() {
            if (input.val() == "")
                input.val(min);
            else {
                var value = Number(input.val());
                if (value + 1 <= max)
                    input.val(value + 1);
            }
        });
        downBtn.unbind('click').click(function() {
            if (input.val() == "")
                input.val(min);
            else {
                var value = Number(input.val());
                if (value - 1 >= min)
                    input.val(value - 1);
            }
        });
    });
};