﻿/// <reference path="scripts.htm" />
//-----------------------------------------------------------------------
// orderbot.validations.js
// Copyright (c) 2008 Nearsoft, Inc. All rights reserved.
//-----------------------------------------------------------------------
Object.createNamespace('orderbot.validations');
//-----------------------------------------------------------------------
// initAbsIntValidators()        //add numeric/int/abs validators
// initAbsDecimalValidators()    //add numeric/decimal/abs validators
// initMaxLengthValidators()     //add max length validators to textareas (using attr maxLength)
//-----------------------------------------------------------------------/
Object.extend(orderbot.validations, {

    init: function(container) {
        this.initAbsIntValidators(container);
        this.initAbsDecimalValidators(container);
        this.initMaxLengthValidators(container);
    },

    initAbsIntValidators: function(container) {
        var inputs; var selector = 'input[validation="AbsInt"]';
        if (container) { inputs = container.select(selector); }
        else { inputs = $$(selector); }
        inputs.each(function(item) {
            $(item).observe('keypress', function(event) {
                var key = event.charCode !== undefined ? event.charCode : event.keyCode;
                var reg = new RegExp("\\W|[\-|a-zA-Z]+"); //non-alphanumeric or a-z or A-Z characters
                if (key > 31 && reg.test(String.fromCharCode(key))) {
                    event.stop();
                }
            });
        });
    },

    initAbsDecimalValidators: function(container) {
        var inputs; var selector = 'input[validation="AbsDecimal"]';
        if (container) { inputs = container.select(selector); }
        else { inputs = $$(selector); }
        inputs.each(function(item) {
            $(item).observe('keypress', function(event) {

                var key = event.charCode !== undefined ? event.charCode : event.keyCode;
                var reg = new RegExp("\\W|[\-|a-zA-Z]"); //non-alphanumeric or a-z or A-Z characters
                if ((key == 46 && item.value.indexOf(".") != -1) ||
                (key != 46 && key > 31 && reg.test(String.fromCharCode(key)))) {
                    event.stop();
                }
            });
        });
    },

    initMaxLengthValidators: function(container) {
        var inputs; var selector = 'textarea[maxLength]';
        if (container) { inputs = container.select(selector); }
        else { inputs = $$(selector); }
        inputs.each(function(input) {
            var maxLength = input.readAttribute('maxLength');
            maxLength = parseInt(maxLength, 10);
            input.observe('keypress', function(e) {
                if (maxLength <= input.value.length) { e.stop(); }
            });
            input.observe('change', function(e) {
                //
                if (maxLength <= input.value.length) {
                    input.value = input.value.substr(0, maxLength);
                }
            });

            input.observe('paste', function(e) {
                window.setTimeout(function() {
                    if (maxLength <= input.value.length) {
                        input.value = input.value.substr(0, maxLength);
                    }
                }, 500);
            });
        });
    }
});
//-----------------------------------------------------------------------/
