function SearchCol(lf)
{
n=lf.selectedIndex;
if (n<=0) return;

nome=lf.options[n].text;
campo=lf.options[n].value;
if (campo=='All') 
	{ 
	src=''; updateTable();	
	return;
	}

err="";
re = /^ +| +$/g;  // cerco spazi bianchi ad inizio o a fine riga;
msg="Cosa cerchi nel campo "+nome+"?";
switch (fldType[nome])	
	{
	case "string" : 
	case "blob" : 
		msg+=""; break;
	case "date" : 
	case "datetime" :
	case "timestamp" :
		msg+="\n(digitare una data, o un periodo nella forma 'da GG-MM-AA a GG-MM-AA')"; break;
	case "set" : 
		msg+="\n(separare i valori da cercare con virgola)"; break;
	case "Y-N" : case "1-0" :
		msg="Ricerca logica su "+nome+":\nOk per cercare valori veri, Annulla per valori falsi";
		break;
	default: 
		msg+="\n(digitare un numero, o un intervallo nella forma 'da nnnn a nnnn')"; break;
//	default : msg+="\n(usare solo il punto decimale)";
	}	

if (fldType[nome]!='Y-N' && fldType[nome]!='1-0') 
	{
	valore=prompt(msg,"");

	if (valore)
		{
		valore=valore.toUpperCase();
		valore=valore.replace(re, "");
		switch (fldType[nome]) 
			{
			case "string" : 
			case "blob" :
				var re=/['"]/;
				if (valore.match(re)) err+="Non usare virgolette o apici\n"; 
				else valore=campo+" LIKE '%"+valore+"%'"; 
				break;
			case "date" :
			case "datetime" : 
			case "timestamp" :
				re = /(DA )?(\d+)-(\d+)-(\d+)(( A )(\d+)-(\d+)-(\d+))?/;
				tokens=valore.match(re);
				if (!tokens || tokens.length!=10) { err+="Richiesta errata o incompleta."; break; }
				if (tokens[9]) valore = "DATE(" + campo + ")>=DATE('" + tokens[4]+"-"+tokens[3]+"-"+tokens[2] + 
						"') AND DATE(" + campo + ")<=DATE('" +tokens[9]+"-"+tokens[8]+"-"+tokens[7] + "')";
				else valore = "DATE(" + campo + ")=DATE('" + tokens[4]+"-"+tokens[3]+"-"+tokens[2]+"')";
				break;	
			case "set" :
				tokens=valore.split(",");
				valore="";
				for (s=0; s<tokens.length; s++) valore += campo + " LIKE '%" + tokens[s] +"%' OR ";
				valore=valore.substring(0,valore.length-4); 
				break;	
//	    default: valore=campo+'>='+valore;			
			default:
				valore=valore.replace(/,/g, '.');
				re = /(DA )?(-?\d+)(\.\d+)?( A )?(-?\d+)?(\.\d+)?/;
				tokens=valore.match(re);
				if (!tokens || tokens.length!=7) { err+="Richiesta errata o incompleta."; break; }
				if (tokens[5]) valore = campo + " BETWEEN " + tokens[2] + (tokens[3]? tokens[3] : "") + 
					" AND " + tokens[5] + (tokens[6]? tokens[6] : "");
				else valore = campo + "=" + tokens[2]+(tokens[3]? tokens[3] : "");
			}			
		}
	}
else
	{
	valore=confirm(msg);
	switch (fldType[nome]) {
		case 'Y-N': valore=(valore)? "='Y'" : "='N'"; break;
		case '1-0': valore=(valore)? "!=0" : "=0";
		}
	valore = campo + valore;	
	}

if (err) {alert(err); lf.selectedIndex=0;	}
else if(valore)
	{
	if (src) valore=src+" AND "+valore;
	src=valore; nS=1; fOrd=campo; cOrd='ASC';
	updateTable(); 
	}
}
