var kkey = new Array();
kkey[48]="0";
kkey[49]="1";
kkey[50]="2";
kkey[51]="3";
kkey[52]="4";
kkey[53]="5";
kkey[54]="6";
kkey[55]="7";
kkey[56]="8";
kkey[57]="9";
kkey[65]='A';
kkey[66]='B';
kkey[67]='C';
kkey[68]='D';
kkey[69]='E';
kkey[70]='F';
kkey[71]='G';
kkey[72]='H';
kkey[73]='I';
kkey[74]='J';
kkey[75]='K';
kkey[76]='L';
kkey[77]='M';
kkey[78]='N';
kkey[79]='O';
kkey[80]='P';
kkey[81]='Q';
kkey[82]='R';
kkey[83]='S';
kkey[84]='T';
kkey[85]='U';
kkey[86]='V';
kkey[87]='W';
kkey[88]='X';
kkey[89]='Y';
kkey[90]='Z';
kkey[96]="0";
kkey[97]="1";
kkey[98]="2";
kkey[99]="3";
kkey[100]="4";
kkey[101]="5";
kkey[102]="6";
kkey[103]="7";
kkey[104]="8";
kkey[105]="9";

var KEY_BACKSPACE = 8;
var KEY_TAB = 9;

function MaskPosition(sCurrent, sMask) {
	 	dFilterTemp = 0;
    for (dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++)
		{
		 		if (dFilterMask.charAt(dFilterStep)=='_')
					dFilterTemp++;
		}
		return dFilterTemp+1;
}

var goMaskCtrl;
var gsMask;

function SetMask(oCtrl, sMask, bIE) {
	gsMask = sMask;
	goMaskCtrl = oCtrl;
	

	if(bIE) {
		oCtrl.onkeydown = IEMask;
		oCtrl.onkeypress = IEKeyPress;
	} else {
		oCtrl.onkeypress = NetscapeMask;
	}
}

function IEKeyPress() {
	return false;
}

function ClearMask() {
	goMaskCtrl = null;
	gsMask = "";
}

function NetscapeMask(oKey) {
	return Mask(goMaskCtrl, oKey.which, gsMask);
}

function IEMask() {
	return Mask(goMaskCtrl, event.keyCode, gsMask);
}

function Mask(oCtrl, key, sMask) {
		if(oCtrl == null || sMask == "") return true;

		var textbox = oCtrl;
		
		var sCurrent = textbox.value;
		var sFiltered = "";
		var iPos;
		
target:
		for(iPos=0; iPos < sCurrent.length; ++iPos ) {
			switch(sMask.charAt(iPos)) {
				case '#':
				case 'A':
					if(sCurrent.charAt(iPos) != "_") {
						sFiltered += sCurrent.charAt(iPos);
					} else {
						break target;										
					}
					break;
				default:
			}
		}		
				
		if (key == KEY_TAB ) {
		  return true;
		}	else if ( key == KEY_BACKSPACE && sFiltered.length != 0) {
			sFiltered = sFiltered.substring(0, sFiltered.length - 1);
		} else if ( CheckMask(sMask, iPos, kkey[key]) ) { 
			sFiltered += kkey[key];
		}
		//alert(sFiltered);
		
		sCurrent = "";
		var iInputPos = 0;
		
		for(iPos=0; iPos < sMask.length; ++iPos ) {
			switch(sMask.charAt(iPos)) {
				case '#':
				case 'A':
					if(iInputPos < sFiltered.length) {
						sCurrent += sFiltered.charAt(iInputPos++);
					} else {
						sCurrent += "_";
					}
					break;										
				default:
					sCurrent += sMask.charAt(iPos)
			}				
		}
		//alert(sCurrent);
		textbox.value = sCurrent;
		
    return false;
}

function CheckMask(sMask, iPos, key) {
	//alert("sMask = " + sMask + ", iPos =" + iPos + ", key=" + key);
	if(iPos < sMask.length) {
		switch(sMask.charAt(iPos)) {
			case 'A':
				return ( ('a' <= key && key <= 'z') || ('A' <= key && key <= 'Z') )
			case '#':
				return ('0' <= key && key <= '9') 
			default:
				return false;			
		}
	} else {
		return false;
	}
}