﻿// [dFilter] - A Numerical Input Mask for JavaScript
// Written By Dwayne Forehand - March 27th, 2003
// Please reuse & redistribute while keeping this notice.

// [dFilter] - A Numerical Input Mask for JavaScript
// Written By Dwayne Forehand - March 27th, 2003
// Please reuse & redistribute while keeping this notice.

/* -------------------- Filter Functions ----------------- */

var dFilterStep

function dFilterStrip(dFilterTemp, dFilterMask) {
    dFilterMask = replace(dFilterMask, '#', '');
    for (dFilterStep = 0; dFilterStep < dFilterMask.length++; dFilterStep++) {
        dFilterTemp = replace(dFilterTemp, dFilterMask.substring(dFilterStep, dFilterStep + 1), '');
    }
    return dFilterTemp;
}

function dFilterMax(dFilterMask) {
    dFilterTemp = dFilterMask;
    for (dFilterStep = 0; dFilterStep < (dFilterMask.length + 1); dFilterStep++) {
        if (dFilterMask.charAt(dFilterStep) != '#') {
            dFilterTemp = replace(dFilterTemp, dFilterMask.charAt(dFilterStep), '');
        }
    }
    return dFilterTemp.length;
}

function dFilter(key, textbox, dFilterMask) {
    dFilterNum = dFilterStrip(textbox.value, dFilterMask);

    if (key == 9) {
        return true;
    }
    else if (key == 8 && dFilterNum.length != 0) {
        dFilterNum = dFilterNum.substring(0, dFilterNum.length - 1);
    }
    else if (((key > 47 && key < 58) || (key > 95 && key < 106)) && dFilterNum.length < dFilterMax(dFilterMask)) {
        if (key >= 96 && key <= 105) { key = key - 48; }
        dFilterNum = dFilterNum + String.fromCharCode(key);
    }

    var dFilterFinal = '';
    for (dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++) {
        if (dFilterMask.charAt(dFilterStep) == '#') {
            if (dFilterNum.length != 0) {
                dFilterFinal = dFilterFinal + dFilterNum.charAt(0);
                dFilterNum = dFilterNum.substring(1, dFilterNum.length);
            }
            else {
                dFilterFinal = dFilterFinal + "";
            }
        }
        else if (dFilterMask.charAt(dFilterStep) != '#') {
            dFilterFinal = dFilterFinal + dFilterMask.charAt(dFilterStep);
        }
    }


    textbox.value = dFilterFinal;
    return false;
}

function replace(fullString, text, by) {
    // Replaces text with by in string
    var strLength = fullString.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return fullString;

    var i = fullString.indexOf(text);
    if ((!i) && (text != fullString.substring(0, txtLength))) return fullString;
    if (i == -1) return fullString;

    var newstr = fullString.substring(0, i) + by;

    if (i + txtLength < strLength)
        newstr += replace(fullString.substring(i + txtLength, strLength), text, by);

    return newstr;
}

/* -------------------- Autotab Functions ----------------- */

var isNN = (navigator.appName.indexOf("Netscape") != -1);
function autoTab(input, len, e) {
    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0, 8, 9] : [0, 8, 9, 16, 17, 18, 37, 38, 39, 40, 46];
    if (input.value.length >= len && !containsElement(filter, keyCode)) {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input) + 1) % input.form.length].focus();
    }
    function containsElement(arr, ele) {
        var found = false, index = 0;
        while (!found && index < arr.length)
            if (arr[index] == ele)
            found = true;
        else
            index++;
        return found;
    }
    function getIndex(input) {
        var index = -1, i = 0, found = false;
        while (i < input.form.length && index == -1)
            if (input.form[i] == input) index = i;
        else i++;
        return index;
    }
    return true;
}

/* -------------------- Autotab Functions ----------------- */

var isNN = (navigator.appName.indexOf("Netscape") != -1);
function autoTab(input, len, e) {
    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0, 8, 9] : [0, 8, 9, 16, 17, 18, 37, 38, 39, 40, 46];
    if (input.value.length >= len && !containsElement(filter, keyCode)) {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input) + 1) % input.form.length].focus();
    }
    function containsElement(arr, ele) {
        var found = false, index = 0;
        while (!found && index < arr.length)
            if (arr[index] == ele)
            found = true;
        else
            index++;
        return found;
    }
    function getIndex(input) {
        var index = -1, i = 0, found = false;
        while (i < input.form.length && index == -1)
            if (input.form[i] == input) index = i;
        else i++;
        return index;
    }
    return true;
}


