// [dFilter] - A Numerical Input Mask for JavaScript
// Written By Dwayne Forehand - March 27th, 2003
// Please reuse & redistribute while keeping this notice.

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>95&&key<106) ) {
        dFilterNum=dFilterNum+String.fromCharCode((key-48));
      } else {
        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);
        }
//                  dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
    }

//    JRZ Changed.
//    textbox.value = dFilterFinal;
    if (dFilterFinal == replace(dFilterMask, '#', '')) {
      textbox.value = '';
    } else {
      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;
}