// [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,'#','');
	dFilterMask = replace(dFilterMask,'A','');
	dFilterMask = replace(dFilterMask,'X','');
	
	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)!='#' && dFilterMask.charAt(dFilterStep)!='A' && dFilterMask.charAt(dFilterStep)!='X')
				{
		        	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 >= 65 && key <= 90)
		{
			dFilterNum=dFilterNum+String.fromCharCode(key);
		}
		
		else if ( ((key>47&&key<58)||(key>95&&key<106)) && dFilterNum.length<dFilterMax(dFilterMask) ) 
	    { 
			if(key>95&&key<106)
			{
				key-=48;
			}
			  
		    dFilterNum=dFilterNum+String.fromCharCode(key); 
	    } 

      	var dFilterFinal=''; 
		
		//window.status = 'Key: ' + key + "/" + dFilterMask + "/" + dFilterNum;
	
	
	for (dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++)
	{
		var charCode = dFilterNum.charCodeAt(0);
		
        if (dFilterMask.charAt(dFilterStep)=='#')
		{						
			if(charCode>47 && charCode < 58)
			{
				if (dFilterNum.length!=0)
				{
					dFilterFinal = dFilterFinal + dFilterNum.charAt(0);
															
				}
				else
				{
					dFilterFinal = dFilterFinal + "";
				}
			}
			
			if(dFilterNum.length!=0)
			{
				dFilterNum = dFilterNum.substring(1,dFilterNum.length);
			}
		}
		else if(dFilterMask.charAt(dFilterStep)=='A')
		{
			if(charCode>=65 && charCode <= 90)			
			{
				if (dFilterNum.length!=0)
				{
					dFilterFinal = dFilterFinal + dFilterNum.charAt(0);					
				}
				else
				{
					dFilterFinal = dFilterFinal + "";
				}
			}
			
			if(dFilterNum.length!=0)
			{
				dFilterNum = dFilterNum.substring(1,dFilterNum.length);
			}
		}
		else if(dFilterMask.charAt(dFilterStep)=='X')
		{
			if((charCode>47 && charCode < 58) || (charCode>=65 && charCode <= 90))
			{
				if (dFilterNum.length!=0)
				{
					dFilterFinal = dFilterFinal + dFilterNum.charAt(0);					
				}
				else
				{
					dFilterFinal = dFilterFinal + "";
				}
			}
			
			if(dFilterNum.length!=0)
			{
				dFilterNum = dFilterNum.substring(1,dFilterNum.length);
			}
		}
		else if (dFilterMask.charAt(dFilterStep)!='#')
		{
		    dFilterFinal = dFilterFinal + dFilterMask.charAt(dFilterStep); 			
		}
//		    dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
	}


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

