// [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 (keyEvent, textbox, dFilterMask)
{
	var key = keyEvent.keyCode;
	var specialKey = keyEvent.ctrlKey || keyEvent.altKey;
	var keysWeWantToIgnore = ((key==46)||(key==9)||(key==8)||(key==35)||(key==36)||(key==37)||(key==39));
	
	if (!specialKey && !keysWeWantToIgnore){ 
	        //if (key == 16|| key==45 || (key>32&&key <41))
	        if (! ((key>47&&key<58) || (key>95&&key<106))) //||(key==46)||(key==9)||(key==8)||(key==35)||(key==36)||(key==37)||(key==39)) )
	        {
	        // ignore any keys except Numerics, bkpc, tab, delete, home, end, arrow left, arrow right
	        return false;
	        }
	        
			dFilterNum = dFilterStrip(textbox.value, dFilterMask);
			
			if (key==9) //tab; process normally
			{
			    return true;
			}
			if(key==46) //delete; process normally
			{
			return true;
			}
			
			if(key==8)  //bkspc; process normally
			{
			return true;
			}
			
			if(key==35 || key == 36)  //home and end; process normally
			{
			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) )
			{
	        		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),'');
			}
	
	
			textbox.value = dFilterFinal;
	    return false;
	}
	return true;
}

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;
}
