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;
}
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 dFilterStrip (dFilterTemp, dFilterMask,maskChar)
{
    dFilterMask = replace(dFilterMask,'#','');
    for (dFilterStep = 0; dFilterStep < dFilterMask.length++; dFilterStep++)
		{
		    dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
		}
		dFilterTemp = replace(dFilterTemp,maskChar,'');
		return dFilterTemp;
}
function setSelectionRange(input, selectionStart, selectionEnd)
{
	if (input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionStart);
	} else if (input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	}
}
function getCaretPos(el) {
	var rng, ii=-1;
	if(typeof el.selectionStart=="number") {
		ii=el.selectionStart;
	} else if (document.selection && el.createTextRange){
		rng=document.selection.createRange();
		rng.collapse(true);
		rng.moveStart("character", -el.value.length);
		ii=rng.text.length;
	}
	return ii;
}
function getCaretRange(el) {
	var rng, ii=-1;
	if(typeof el.selectionStart=="number") {
		ii=el.selectionStart;
	} else if (document.selection && el.createTextRange){
		rng=document.selection.createRange();
		rng.collapse(true);
		rng.moveStart("character", -el.value.length);
		alert("rng.text "+rng.text);
		ii=rng.text.length;
	}
	return ii;
}
function mask(textbox,key,dFilterMask,maskChar) {
	var ph = Trim(textbox.value);
	var curposVal = 0;
	var resStr = "";
	curposVal = getCaretPos(textbox);
	if ((key>47&&key<58) || ( key>95&&key<106 )) {
		if ( key>95&&key<106 ) {
			key = key - 48;
		}
		var ch = String.fromCharCode(key) ;
		for (var j=curposVal; j <=dFilterMask.length ;j++ )
		{
			if (dFilterMask.charAt(j) == '#' )
			{
				ph=ph.substring(0,j)+ch+ph.substring(j+1,ph.length);
				break;
			}
			
		}
		textbox.value = ph;
		textbox.focus();
		setSelectionRange(textbox,j+1,j+1);
		return false;
	} else if (key==8 && ph.length!=0) {//BackSpace
		for (var j=curposVal; j >0 ;j-- ) {
			if ( dFilterMask.charAt(j-1) == '#') {
				ph=ph.substring(0,j-1)+maskChar+ph.substring(j,ph.length);
				textbox.value = ph;
				textbox.focus();
				setSelectionRange(textbox,j-1,j-1);
				break;
			}
		}
		return false;
	}
	else if (key==46 ) {//Delete
		return true;
	}
	else if(key == 9)
	{
		if(curposVal <=3)
		{
			textbox.value=ph;
			textbox.focus();
			setSelectionRange(textbox,4,4);
			return false;
		}
		else if(curposVal > 3 && curposVal <= 7)
		{
			textbox.value=ph;
			textbox.focus();
			setSelectionRange(textbox,8,8);
			return false;
		}
		else if(curposVal > 8 && curposVal <= 11)
		{
			return true;
		}

	}
	else {
		return false;
	}
}
function maskDeleteMulti (textbox,key,dFilterMask,maskChar) {
	var ph = Trim(textbox.value);
	var curposVal = 0;
	var resStr = "";
	curposVal = getCaretPos(textbox);
	if (key==46 ) {//Delete
		for (var j=curposVal; j <=dFilterMask.length ;j++ )
		{
			if	(dFilterMask.charAt(j) == '#' ) {
				ph=ph.substring(0,j)+maskChar+ph.substring(j,ph.length);
			} else {
				ph=ph.substring(0,j)+dFilterMask.charAt(j)+ph.substring(j+1,ph.length);
			}
			if ( ph.length < dFilterMask.length) {
				continue;
			} else {
				break;
			}
		}
		textbox.value = ph;
		textbox.focus();
		setSelectionRange(textbox,curposVal,curposVal);
		return false;
	} else {
		return true;
	} 
}