﻿/*
* Copyright (C) 2006 Baron Schwartz <baron at xaprb dot com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, version 2.1.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
* details.
*
* $Id: html-form-input-mask.js,v 1.6 2006-11-03 04:04:29 baron Exp $
*/
var previtems = new Array();
var previtemsc = 0;

/* Set up a global Xaprb object to act as the Xaprb namespace, without colliding
* with other Xaprb scripts.
*/
if (typeof (Xaprb) === 'undefined') {
    Xaprb = new Object();
}

/* The Xaprb.InputMask object acts as the namespace for input masking
* functionality.
*/
Xaprb.InputMask = {

    /* Each mask has a format and regex property.  The format consists
    * of spaces and non-spaces.  A space is a placeholder for a value the user
    * enters.  A non-space is a literal character that gets copied to that
    * position in the value.  The regex is used to validate each character, one
    * at a time (it is not applied against the entire value in the form field,
    * just the characters the user enters).
    *
    * The way you name your masks is significant.  If you create a mask called
    * date_us, you cause it to be applied to a form field by a) adding the
    * input_mask class to that form field, which triggers this script to treat
    * it specially, and b) adding the class mask_date_us to the form field,
    * which causes this script to apply the date_us mask to it.
    */
    masks: {
        date_iso: {
            format: '    -  -  ',
            regex: /\d/
        },
        date_us: {
            format: '  /  /    ',
            regex: /\d/
        },
        time: {
            format: '  :  :  ',
            regex: /\d/
        },
        phone: {
            format: '(   )   -    ',
            regex: /\d/
        },
        money: {
            format: '           ',
            regex: /\d|(\.)/
        },
        number: {
            format: '           ',
            regex: /\d|(\.)/
        },
        zip: {
            format: '     ',
            regex: /\d/
        },
        ssn: {
            format: '   -  -    ',
            regex: /\d/
        },
        visa: {
            format: '    -    -    -    ',
            regex: /\d/
        }
    },
    resetTracking: function() {
        previtems = new Array();
        previtemsc = 0;
    }
    ,
    /* Finds every element with class input_mask and applies masks to them.
    */
    setupElementMasks: function() {
        $('.input_mask').keypress(function(event) {
            Xaprb.InputMask.applyMask(event);
        });

        /*if (document.getElementsByClassName) { // Requires the Prototype library
        var itm;
        var found = false;
        var links = document.getElementsByClassName('input_mask');
        if (BrowserDetect.browser == "Explorer") {
        links.each(function(item) {
        Event.observe(item, 'keypress', Xaprb.InputMask.applyMask.bindAsEventListener(item), true);
        });
        }
        else {
        if (links != null) {
        $(links).each(function(item) {
        Event.observe(item, 'keypress', Xaprb.InputMask.applyMask.bindAsEventListener(item), true);
        });
        }
        }
        }*/
    },

    /*
    found = false;
    alert('1');
    for (itm in previtems) {
    if (previtems[itm] == item.id) {
    found = true;
    alert('found');
    break;
    }
    }
    alert('2');
    if (!found) {
    alert('addin');
    Event.observe(item, 'keypress', Xaprb.InputMask.applyMask.bindAsEventListener(item), true);
    previtems[previtemsc] = item.id;
    previtemsc++;
    }
    */

    /* This is triggered when the key is pressed in the form input.  It is
    * bound to the element, so 'this' is the input element.
    */
    applyMask: function(event) {
        var match = /mask_(\w+)/.exec(event.target.className);
        if (match.length == 2 && Xaprb.InputMask.masks[match[1]]) {
            var mask = Xaprb.InputMask.masks[match[1]];
            var key = Xaprb.InputMask.getKey(event);

            if (Xaprb.InputMask.isPrintable(key)) {
                var ch = String.fromCharCode(key);
                var str = event.target.value + ch;
                var pos = str.length;
                if (mask.regex.test(ch) && pos <= mask.format.length) {
                    if (mask.format.charAt(pos - 1) != ' ') {
                        str = event.target.value + mask.format.charAt(pos - 1) + ch;
                    }
                    event.target.value = str;
                }
                event.preventDefault();
                //Event.stop(event);
            }
        }
    },

    /* Returns true if the key is a printable character.
    */
    isPrintable: function(key) {
        return (key >= 32 && key < 127);
    },

    /* Returns the key code associated with the event.
    */
    getKey: function(e) {
        return window.event ? window.event.keyCode
           : e ? e.which
           : 0;
    }
};
// JScript File


