var KeyType = {
    KEY_NAVIGATION: 0,
    KEY_NUMBER: 1,
    KEY_UNKNOWN: 2,
    KEY_EDIT: 3
};
(function($) {
	$.fn.thousand = function(sep) {
		this.keydown(function (e) {
			var type = getKeyType(e.keyCode);

			if (type == KeyType.KEY_UNKNOWN)
				e.preventDefault();
			else if ((e.shiftKey || e.ctrlKey || e.altKey) && type == KeyType.KEY_NUMBER)
				e.preventDefault();
		});
		this.keyup(function (e) {
			var type = getKeyType(e.keyCode);
			var value = $(this).val();
			
			if ((type == KeyType.KEY_EDIT || type == KeyType.KEY_NUMBER) && value.length > 0)
                setChangeValue($(this), value, sep);
		});
		this.bind("paste", function() { return false; });
        this.focus(function() {
            $.data(this, "oldValue", $(this).val());
        });
        this.blur(function () {
            if ($.data(this, "oldValue") != $(this).val())
                $(this).trigger("change");
        });

        this.each(function() {
            var value = $(this).val();

            if (value.length > 0)
                setChangeValue($(this), value, sep);
        });
	};
})(jQuery);
function setChangeValue(element, value, sep) {
    var newValue = formatNumber(value, sep);

    element.val(newValue);
}
function formatNumber(input, sep) {
	var formatStr = "";
	var c = 0;
	
	for (var i = input.length - 1; i >= 0; i--) {
		var schar = input.substring(i, i + 1);

		if (schar != sep) {
			if (c > 0 & c++ % 3 == 0)
				formatStr = sep + formatStr;

			formatStr = schar + formatStr;
		}
	}

	return formatStr;
}
function getKeyType(keyCode) {
	if (keyCode == 46 || keyCode == 8)
		return KeyType.KEY_EDIT;
    else if (keyCode == 9 || keyCode == 13 || (keyCode >= 33 && keyCode <= 39))
        return KeyType.KEY_NAVIGATION;
    else if ((keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105))
        return KeyType.KEY_NUMBER;

    return KeyType.KEY_UNKNOWN;
}
