var dFilterStep

function dFilterStrip( dFilterTemp, dFilterMask ) {

    dFilterMask = replace( dFilterMask, '#', '' );
	dFilterMask = replace( dFilterMask, '@', '' );
	dFilterMask = replace( dFilterMask, 'D', '' );
	dFilterMask = replace( dFilterMask, 'M', '' );
	dFilterMask = replace( dFilterMask, 'Y', '' );
	dFilterMask = replace( dFilterMask, 'H', '' );
	dFilterMask = replace( dFilterMask, 'm', '' );
	
    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 ) != '@' &&
			dFilterMask.charAt( dFilterStep ) != 'D' &&
			dFilterMask.charAt( dFilterStep ) != 'M' &&
			dFilterMask.charAt( dFilterStep ) != 'Y' &&
			dFilterMask.charAt( dFilterStep ) != 'H' &&
			dFilterMask.charAt( dFilterStep ) != 'm' ) {
			
			dFilterTemp = replace( dFilterTemp, dFilterMask.charAt( dFilterStep ), '' );
		}
	}
	return dFilterTemp.length;
	
}

function dFilter( key, textbox, dFilterMask ){
	dFilterNum = dFilterStrip( textbox.value, dFilterMask );

	if( key >= 96 && key <= 105 ) {
		key = key - 48;
	}
	
	if( key == 9 ) {
		return true;
	} else if( key == 8 && dFilterNum.length != 0 ) {
		dFilterNum = dFilterNum.substring( 0, dFilterNum.length - 1 );
	} else if((( key >= 48 && key <= 57 ) || ( key > 64 && key < 91 )) && dFilterNum.length < dFilterMax( dFilterMask )) {
		dFilterNum = dFilterNum + String.fromCharCode( key );
	}

	var dFilterFinal = '';
	
    for( dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++ ) {
		if( dFilterMask.charAt( dFilterStep ) == '#' || dFilterMask.charAt( dFilterStep ) == '@' ) {
			if( dFilterNum.length != 0 && dFilterFinal.length >= dFilterStep  ) {
				if(( dFilterMask.charAt( dFilterStep ) == '#' && dFilterNum.charCodeAt( 0 ) > 47 && dFilterNum.charCodeAt( 0 ) < 58 ) || ( dFilterMask.charAt( dFilterStep ) == '@' && dFilterNum.charCodeAt( 0 ) > 64 && dFilterNum.charCodeAt( 0 ) < 91 )) {
					dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
					dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
				}
			} else {
				dFilterFinal = dFilterFinal + "";
			}
		} else if( dFilterMask.charAt( dFilterStep ) == 'D' ) {
			if( dFilterNum.charCodeAt( 0 ) >= 48 && dFilterNum.charCodeAt( 0 ) <= 57 ) {
				if( dFilterNum.length != 0 && dFilterFinal.length >= dFilterStep ) {
					if( dFilterMask.charAt( dFilterStep -1 ) != 'D' ) {
						if( dFilterNum.charCodeAt( 0 ) <= 51 ) {
							dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
							dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
						}
					} else {
						if( dFilterFinal.charAt( dFilterStep -1 ) == '0' && dFilterNum.charCodeAt( 0 ) >= 49 ) {
							dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
							dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
						} else if( dFilterFinal.charAt( dFilterStep -1 ) == '3' && dFilterNum.charCodeAt( 0 ) <= 49 ) {
							dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
							dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
						}
						if( dFilterFinal.charAt( dFilterStep -1 ) == '1' || dFilterFinal.charAt( dFilterStep -1 ) == '2' ) {
							dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
							dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
						}
					}
				}
			}
		} else if( dFilterMask.charAt( dFilterStep ) == 'M' ) {
			if( dFilterNum.charCodeAt( 0 ) >= 48 && dFilterNum.charCodeAt( 0 ) <= 57 ) {
				if( dFilterNum.length != 0 && dFilterFinal.length >= dFilterStep ) {
					if( dFilterMask.charAt( dFilterStep -1 ) != "M" ) {
						if( dFilterNum.charCodeAt( 0 ) <= 49 ) {
							dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
							dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
						}
					} else {
						if( dFilterFinal.charAt( dFilterStep -1 ) == '0' && dFilterNum.charCodeAt( 0 ) >= 49 ) {
							dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
							dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
						} else if( dFilterFinal.charAt( dFilterStep -1 ) == '1' && dFilterNum.charCodeAt( 0 ) <= 50 ) {
							dFilterFinal = dFilterFinal + dFilterNum.charAt( 0 );
							dFilterNum = dFilterNum.substring( 1, dFilterNum.length );
						}
					}
				}
			}
		} else if( dFilterMask.charAt( dFilterStep ) == 'Y' ) {
			dFilterFinal = dFilterFinal + "";
		} else if( dFilterMask.charAt( dFilterStep ) == 'H' ) {
			dFilterFinal = dFilterFinal + "";
		} else if( dFilterMask.charAt( dFilterStep ) == 'm' ) {
			dFilterFinal = dFilterFinal + "";
		} else if( dFilterMask.charAt( dFilterStep ) != '#' ) {
			dFilterFinal = dFilterFinal + dFilterMask.charAt( dFilterStep );
		}
	}
	
	textbox.value = dFilterFinal;
    return false;
	
}

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

