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

var mFilterStep

function mFilterStrip (mFilterTemp, mFilterMask)
{
    mFilterMask = replace(mFilterMask,'#','');
    for (mFilterStep = 0; mFilterStep < mFilterMask.length++; mFilterStep++)
		{
		    mFilterTemp = replace(mFilterTemp,mFilterMask.substring(mFilterStep,mFilterStep+1),'');
		}
		return mFilterTemp;
}

function mFilterMax (mFilterMask)
{
 		mFilterTemp = mFilterMask;
    for (mFilterStep = 0; mFilterStep < (mFilterMask.length+1); mFilterStep++)
		{
		 		if (mFilterMask.charAt(mFilterStep)!='#')
				{
		        mFilterTemp = replace(mFilterTemp,mFilterMask.charAt(mFilterStep),'');
				}
		}
		return mFilterTemp.length;
}

function mFilter (key, textbox, mFilterMask)
{
		mFilterNum = mFilterStrip(textbox.value, mFilterMask);
		
		if (key==9 || key==13 || key== 46)
		{
		    return true;
		}
		else if (key==8&&mFilterNum.length!=0)
		{
		 	 	mFilterNum = mFilterNum.substring(0,mFilterNum.length-1);
		}
 		else if ( (key>47&&key<58) && mFilterNum.length<mFilterMax(mFilterMask) )
		{
        mFilterNum=mFilterNum+String.fromCharCode(key);
		}
		else if ( (key>95&&key<106) && mFilterNum.length<mFilterMax(mFilterMask) )
		{
        mFilterNum=mFilterNum+mFilterKeyCode(key);
        }
		
		var mFilterFinal='';
    for (mFilterStep = 0; mFilterStep < mFilterMask.length; mFilterStep++)
		{
        if (mFilterMask.charAt(mFilterStep)=='#')
				{
					  if (mFilterNum.length!=0)
					  {
				        mFilterFinal = mFilterFinal + mFilterNum.charAt(0);
					      mFilterNum = mFilterNum.substring(1,mFilterNum.length);
					  }
				    else
				    {
				        mFilterFinal = mFilterFinal + "";
				    }
				}
		 		else if (mFilterMask.charAt(mFilterStep)!='#')
				{
				    mFilterFinal = mFilterFinal + mFilterMask.charAt(mFilterStep); 			
				}
//		    mFilterTemp = replace(mFilterTemp,mFilterMask.substring(mFilterStep,mFilterStep+1),'');
		}


		textbox.value = mFilterFinal;
    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;
}


// The Numeric KeyPad returns keyCodes that are not workable.
// ie: KeyPad '1' returns keyCode 97 which String.fromCharCode converts to an 'a'.
// This allows the Numeric KeyPad to be used

function mFilterKeyCode(key)
{
	switch(key)
	{
		case 96: return "0"; break;
		case 97: return "1"; break;
		case 98: return "2"; break;
		case 99: return "3"; break;
		case 100: return "4"; break;
		case 101: return "5"; break;
		case 102: return "6"; break;
		case 103: return "7"; break;
		case 104: return "8"; break;
		case 105: return "9"; break;
		default: return String.fromCharCode(key); break;
	}
}


