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

// 01/22/2007 Bit corrected by Petr Voinov [mailto:pDOTvoinovATgmailDOTcom]

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, minval, maxval)
{
	dFilterNum = dFilterStrip(textbox.value, dFilterMask);
	if ((key==9)||(key==13)){
		return true;
	}else if (key==8&&dFilterNum.length!=0){
		dFilterNum = dFilterNum.substring(0,dFilterNum.length-1);
	}else if (key==46){
		dFilterNum = '';
	}else if ( ((key>47&&key<58)||(key>95&&key<106)) && dFilterNum.length<dFilterMax(dFilterMask) ){
		SymbolAdd = true;
		if (key>95&&key<106) key=key-48;
		if (!isNaN(parseFloat(minval))){
			if (parseFloat(minval)<=parseFloat(dFilterNum+String.fromCharCode(key))){
			} else {
				//alert('Value shoul not be less than '+parseFloat(minval));
				SymbolAdd = false;
			}
		}
		if (!isNaN(parseFloat(maxval))){
			if (parseFloat(maxval)>=parseFloat(dFilterNum+String.fromCharCode(key))){
			} else {
				//alert('Value shoul not exceed '+parseFloat(maxval));
				SymbolAdd = false;
			}
		}
		if (SymbolAdd){
			dFilterNum=dFilterNum+String.fromCharCode(key);
		} else {
			return false;
		}
	};
	var dFilterFinal='';
	if (dFilterNum.length>0){
		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;
}

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