<!--//where maskType IN (fullname,firstname,middlename,lastname,title,address,city,zip,phone,integer,decimal,email,date,login,phonemask,hex)-//-->
function allowChars(val,maskType){
	var strPass = val.value;
	var strLength = strPass.length;
	var chars = new Array(strLength);
	var s = getSelectionStart(val);
	var Xtra='';
	if (s != strLength){
	Xtra=val.value.substring(s,strLength);
	}
	var tst = "";
		if (maskType=='fullname'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,. \"\'\-]/;
			var makeCapAfter = /[, \-\']/;
		}
		else if (maskType=='firstname'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. \"\']/;
			var makeCapAfter = /[, \-\']/;
		}
		else if (maskType=='middlename'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. \"\']/;
			var makeCapAfter = /[, \-\']/;
		}
		else if (maskType=='lastname'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz., \"\'\-]/;
			var makeCapAfter = /[, \-\']/;
		}
		else if (maskType=='title'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,.##!@$%&*+?`~ \|\(\)\/\"\'\-]/;	
			var makeCapAfter = /[1234567890,.##!@$%&*+?`~ \/\'\-]/;
		}
		else if (maskType=='url'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.%&?_=:~^#!\+\/\-]/;	
			var makeCapAfter = '';
		}		
		else if (maskType=='dir'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890._:\\\-]/;	
			var makeCapAfter = '';
		}	
		else if (maskType=='alphanum'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]/;	
			var makeCapAfter = '';
		}		
		else if (maskType=='address'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789##(),. \'\-]/;
			var makeCapAfter = /[, \-\'##.()]/;
		}
		else if (maskType=='city'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,. \'\-]/;
			var makeCapAfter = /[, \-\']/;
		}
		else if (maskType=='zip'){
			var mikExp = /[1234567890\-]/;
			var makeCapAfter = '';
		}
		else if (maskType=='zipca'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 ]/;
			var makeCapAfter = '';
		}		
		else if (maskType=='phone'){
			var mikExp = /[1234567890]/;
			var makeCapAfter = '';
		}
		else if (maskType=='phone800'){
			var mikExp = /[1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ().\-]/;
			var makeCapAfter = '';
		}
		else if (maskType=='phonemask'){
			var mikExp = /[19\-.() ]/;
			var makeCapAfter = '';
		}		
		else if (maskType=='integer'){
			var mikExp = /[1234567890\-]/;
			var makeCapAfter = '';
		}
		else if (maskType=='decimal'){
			var mikExp = /[1234567890\-.]/;
			var makeCapAfter ='';
		}
		else if (maskType=='email'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.@\_\-]/;
			var makeCapAfter = '';
		}
		else if (maskType=='date'){
			var mikExp = /[0123456789\/]/;
			var makeCapAfter = '';
		}
		else if (maskType=='login'){
			var mikExp = /[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890~!##$%^_|+\-]/;
			var makeCapAfter = '';
		}
		else if (maskType=='hex'){
			var mikExp = /[0123456789abcdefABCDEF]/;
			var makeCapAfter = '';
		}				
				
	  for (var i=0 ; i<strLength ; i++){
		var lchar = val.value.charAt(i);
			chars[i] = lchar;
	  }
	  
		  if (maskType=='date'){
			 if (strLength > 10){
				strLength=10
			 }
		  }
		  if (maskType=='zip'){
			 if (strLength > 10){
				strLength=10
			 }
		  }
	  
	  for (var j=0 ; j<strLength ; ++j){
			if(chars[j].search(mikExp) == -1) {
			  tst = tst;
			  val.value=tst + Xtra;
			  val.focus(); 
			  setSelectionRange(val,s-1);
			  return false;  }
			else {
				 if (maskType=='fullname' || maskType=='firstname' || maskType=='middlename' || maskType=='lastname' || maskType=='title' || maskType=='address' || maskType=='city'){
						if (j==0){
						   chars[j]=chars[j].toUpperCase();
						}
						else {
							   if ((chars[j-1].search(makeCapAfter) > -1) || (j >= 2 && chars[j-1] == 'c' && chars[j-2]=='M')){
								 chars[j]=chars[j].toUpperCase();
							   }
							   else {
								  chars[j]=chars[j].toLowerCase();
							   }
						}
				   }
				   else if (maskType=='integer' || maskType=='decimal'){
				      if (j != 0 && chars[j]=='-'){
						  tst = tst;
						  val.value=tst + Xtra;
						  val.focus(); 
						  setSelectionRange(val,s-1);
						  return false;					  
					  }   
				   }
				   else if (maskType=='zip'){
				      if (j != 5 && chars[j]=='-'){
						  tst = tst;
						  val.value=tst + Xtra;
						  val.focus(); 
						  setSelectionRange(val,s-1);
						  return false;					  
					  }
				   }
				   else if (maskType=='date'){
				      if (j !=1 && j != 2 && j != 3 && j != 4 && j != 5 && chars[j]=='/'){
						  tst = tst;
						  val.value=tst + Xtra;
						  val.focus(); 
						  setSelectionRange(val,s-1);
						  return false;					  
					  }
					  if (j > 0 && chars[j]=='/' && chars[j-1]=='/'){
						  tst = tst;
						  val.value=tst + Xtra;
						  val.focus(); 
						  setSelectionRange(val,s-1);
						  return false;					  
					  }
				   }	
				   else if (maskType=='phone800' || maskType=='zipCA'){
					   chars[j]=chars[j].toUpperCase();
					   }
	
				   if (chars[j] == '"') {
				      chars[j]='\'';
				   } 
				   
				   if (maskType == 'city' || maskType == 'address'){
					   if (j >= 2){
						   if (chars[j] == ' ' && chars[j-1]=='S' && chars[j-2]=='\''){
							  thisLen=tst.length-1;
							  newtst='';
							  var tstChars = new Array(thisLen);
								 for (var l=0 ; l<thisLen ; ++l){
									var tmpchar = val.value.charAt(l);
									tstChars[l] = tmpchar;
									newtst=newtst + tstChars[l];
								 }
							 newtst=newtst + 's';
							 tst=newtst;
						   }  
					   }
				   }
				   if (maskType == 'hex'){chars[j]=chars[j].toUpperCase();}
			 tst = tst + chars[j];
			 }
	   }
	val.value = tst;
	setSelectionRange(val,s);
}

function getSelectionStart(o) {
	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate()
		r.moveEnd('character', o.value.length)
		if (r.text == '') return o.value.length
		return o.value.lastIndexOf(r.text)
	} else return o.selectionStart
}

function setSelectionRange(input, selectionStart) {
if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionStart);
range.moveStart('character', selectionStart);
range.select();
}
else if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(selectionStart, selectionStart);
}
}