﻿function dwz_MaskedField(fieldName,mask,restrict,el){
	var v = el.value;
	var e = window.event.keyCode;
	if(e==8 || e==9 || e==0 || e==46){return};
	if(v.length<1){return};
	var len = v.length;
	if(restrict=="-1"){
		esci = false;
	}else{
		esci = true;
	};
	while(!esci){
		if(len<1){
			esci = true;
		};
		var regExp = dwz_CreateRegExt(mask.substr(0, len));
		var test = new RegExp('^' + regExp + '$');
		if (v.match(test)) { 
			break;
		};
		len -= 1;
		v = v.substring(0,len);
	};
	v = dwz_CompleteMask(v,mask);
	if(v!=el.value){
		el.value = v;
	}	;
};

function dwz_CompleteMask(txt,mask){
	exit = false;
	while(!exit){
		if(txt.length>=mask.length){
			break;
		};
		myChar = txt.length;
		switch(mask.charAt(myChar)){
		case "?":;
		case "W":;
		case "A":;
		case "0":;
			exit = true;
			break;
		default:;
			txt += mask.charAt(myChar);
			break;
		};
	};
	return txt;
}

function dwz_CreateRegExt(testo){
	/*separatore*/;
	testo = testo.replace(/([-\/\[\]()\*\+\\])/g, '\\$1');
	/*Caratteri numerici*/;
	testo = testo.replace(/0/g, '\\d');
	/*Carattere yolly*/
	testo = testo.replace(/\?/g, '.');
	/*caratteri alfanumerici*/
	testo = testo.replace(/W/g, '[0-9\u0040-\u005A\u0061-\u007A\u0100-\u017E\u0180-\u0233\u0391-\u03CE\u0410-\u044F\u05D0-\u05EA\u0621-\u063A\u0641-\u064A\u0661-\u06D3\u06F1-\u06FE]');
	/*caratteri alfabetici*/
	testo = testo.replace(/A/g, '[\u0040-\u005A\u0061-\u007A\u0100-\u017E\u0180-\u0233\u0391-\u03CE\u0410-\u044F\u05D0-\u05EA\u0621-\u063A\u0641-\u064A\u0661-\u06D3\u06F1-\u06FE]');
	return testo;
}
