﻿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)) {
		switch(key) {
            case 96:
                dFilterNum += 0;
                break;
            case 97:
                dFilterNum += 1;
                break;
            case 98:
                dFilterNum += 2;
                break;
            case 99:
                dFilterNum += 3;
                break;
            case 100:
                dFilterNum += 4;
                break;
            case 101:
                dFilterNum += 5;
                break;
            case 102:
                dFilterNum += 6;
                break;
            case 103:
                dFilterNum += 7;
                break;
            case 104:
                dFilterNum += 8;
                break;
            case 105:
                dFilterNum += 9;
                break;
            default:
                dFilterNum += String.fromCharCode(key);
                break;
		}
	}
    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); 			
		}
	}
    textbox.value = dFilterFinal;
    return false;
}

// Replaces text with by in string
function replace(fullString,text,by) {
    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;
}
