/**
 * Autokorrektur von Zahlenfeldern
 * 
 * (c) 2002/2004 Oliver Gr?tz
 * 
 * - 2004-05-18 Anpassung an negative Zahlen
 * 
 * @version 2004-05-18
 */

/*
 * BlockChars: Verhinderung bestimmter Zeichen in Textfeldern
 *
 * BlockChars verhindert die Eingabe von anderen Zeichen als Ziffern, Kommata und Minuszeichen.
 * Die Funktion ist ?ber dec(true,false) f?r Ganz- oder Dezimalzahl konfigurierbar, denn
 * Ganzzahlfelder verweigern auch Komma als Zeichen.
 * F?r Komma werden , und . als Taste akzeptiert.
 */ 
function blockchars(field,ev,dec)
{
	var key;
	var keychar;
	
	// Tastencode holen, bei Fehlschlag Fallback auf akzeptieren
	if (window.event)
		key = window.event.keyCode;
	else if (ev)
		key = ev.which;
	else
		return true;
	
	keychar = String.fromCharCode(key);
	
	if ((key==null)||(key==0)||(key==8)||(key==9)||(key==13)||(key==27)) // Kontrollzeichen
		return true;
	else if ((("-0123456789").indexOf(keychar) > -1)) // Ziffer
		return true;
	else if (dec&&((keychar==".")||(keychar==","))) // Dezimalpunkt
		return true;
	else
		return false;
}

/*
 * checkdec - Autokorrektur f?r Dezimalfelder
 */
function checkdec(field,digits,precision)
{
	val=field.value;
	
	regex = new RegExp("^[+-]?\\d{1,"+digits+"}([,\.]\\d{0,"+precision+"})?$");
	if(!regex.test(val))
	{
		// Zun?chst alle v?llig unerlaubten Zeichen filtern (alles au?er Ziffer,.-).
		// Solche k?nnten sich ?ber Copy and Paste eingeschlichen haben.
		val=val.replace(/[^\d,-\.]/g,"");
		
		hasdec=/.*[,\.].*/;
		if(hasdec.test(val))
		{
			// Doppelte Kommata durch einzelne ersetzen
			dd=/[,\.][,\.]/;
			while(dd.test(val)) val=val.replace(dd,".");
			
			// Nur ein Komma pro Zahl ;-)
			regb=new RegExp("(^\\d*[,\.]\\d{1,"+precision+"}).*");
			val=val.replace(regb,"$1");
		}
		
		regdigi=new RegExp("(^[+-]?\\d{"+digits+"})(\\d*)");
		val=val.replace(regdigi,"$1"); // max. 6 Ziffern am Anfang
		val=val.replace(/(^[,\.])/,"0$1"); // Null vor f?hrendes Komma
		field.value=val;
	}
}

/*
 * checknum - Autokorrektur f?r Ganzzahlfelder
 */
function checknum(field,digits)
{
	val=field.value;

	regex = new RegExp("^\\d{1,"+digits+"}$");
	if(!regex.test(val))
	{
		// Zun?chst alle v?llig unerlaubten Zeichen filtern (alles au?er Ziffer und -).
		// Solche k?nnten sich ?ber Copy and Paste eingeschlichen haben.
		val=val.replace(/\D-/g,"");

		regdigi=new RegExp("(^[+-]\\d{"+digits+"})(\\d*)");
		val=val.replace(regdigi,"$1"); // Max. digits Ziffern
		field.value=val;
	}
}

/*
 * restrict - Zahlenfeld in g?ltigen Bereich zwingen
 */
function restrict(field,min,max,trail,emptyok)
{
	val=field.value;
	if (emptyok && field.value=="") return;
	val=val.replace(/,/,".");
	if(val<min) val=min;
	else if(val>max) val=max;
	if(trail)
	{
		max=max+''; /* Typecast ;-) */
		val=val+'';
		if(val=='') val='0';
		prepend=max.length-val.length;
		for(var i=0;i<prepend;i++) val='0'+val;
	}
	field.value=val;
}

