// ------------------------------------------------------------------------------------------------------
//
// checkform.js
//
// Version 1.0 (23.6.2002)
//
// (c) 2002 bergfex.at
//
// Aufruf:
// <script src="checkform.js" type="text/javascript"></script>
// <form name="formname" method="post" action=<filename> onSubmit="javascript:checkform(this);">
//
// Prüft Formular auf gültige Werte
// ------------------------------------------------------------------------------------------------------



// ----------------------------------------
// function checkinput(fname,fvalue)
// fieldname ... field name
// fieldvalue .. field value
//
// verifies if value matches to field type.
// field type is part of the field name
// ----------------------------------------

var showUploadMessage = false;
var WaitingWindow = null;

function waiting()
{
	WaitingWindow = window.open("/include/fileupload/","UploadWindow","width=300,height=170,dependent=yes,resizeable=no");
}

function checkinput(field)
{
	var FieldName = field.name;
	var FieldValue = field.value;
	var FieldCaption = field.alt;

	// Aufbau des Namens: <Feldname>[.Typ][.Regel][.Regel]...

	var returnvalue = true; // true - Wert ist ok. false - Wert ist fehlerhaft
	var msg = '';
	var filter;

	var FieldRules = FieldName.split("|");

        if (!FieldCaption)
        	FieldCaption = FieldRules[0];

	if (FieldRules.length < 2) return(''); // keine Regeln vorhanden

	for (var Eigenschaft in FieldRules) {

		switch (FieldRules[Eigenschaft]) {

		case 'int','integer':
			if ((FieldValue.length != 0) && (isNaN(parseInt(FieldValue)))) {
				returnvalue = false;
				msg = 'muss eine Zahl sein.';
			}
			break;

		case 'float':
			// todo: , in . konvertieren
			if ((FieldValue.length != 0) && isNaN(parseFloat(FieldValue))) {
				returnvalue = false;
				msg = 'muss eine Zahl sein.';
			}
			break;

		case 'email':
			filter  = new RegExp("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$");
			if ((FieldValue.length != 0) && (filter.test(FieldValue) == false)) {
				returnvalue = false;
				msg = 'ist keine gültige eMail-Adresse.';
			}
			break;

		case 'url': // todo: TLD und Parameter checken?

		  	scheme = "(http:\\/\\/)";  // scheme HTTP is: http://(host):(port)/(path)?(searchpart)
    			machine = "[A-Za-z0-9]+((\\.|(\\-)+)[A-Za-z0-9]+)*";
    			domain = "[A-Za-z]{2,3}"

    			var filter =  /^(http:\/\/){0,1}([a-zA-Z0-9\-])+\./;
			//new RegExp("^" + scheme + "?" + machine + "\." + domain	);
			if ((FieldValue.length != 0) && (filter.test(FieldValue) == false))
			{
				returnvalue = false;
				msg = 'ist keine gültige WWW-Adresse.';
			}
			break;

		case 'date': // akzeptiert: m(m).t(t).yy(yy)
			filter = new RegExp("^(3[01]|0[1-9]|[1-9]|[12][0-9])\.(0[1-9]|[1-9]|1[012])\.([0-9]{2,4})+$");
			if ((FieldValue.length != 0) && (filter.test(FieldValue) == false)) {
				returnvalue = false;
				msg = 'ist kein gültiges Datum.';
			}
			break;

		case 'time':
			filter = new RegExp("^(1[0-9]|2[0-3]|0[0-9]|[0-9])\:([0-5][0-9])+$");
			if ((FieldValue.length != 0) && (filter.test(FieldValue) == false)) {
				returnvalue = false;
				msg = 'ist keine gültige Uhrzeit.';
			}
			break;


		case 'maxlength': // syntax: .maxlength.<value>
			if ((FieldValue.length != 0) && (parseInt(FieldValue.length) > parseInt(FieldRules[Eigenschaft+1]))) {
				returnvalue = false;
				msg = 'darf höchstens '+FieldRules[Eigenschaft+1]+' Zeichen lang sein.';
			}
			break;

		case 'length': // syntax: .length.<value>
			if ((FieldValue.length != 0) && (FieldValue.length != FieldRules[Eigenschaft+1])) {
				returnvalue = false;
				msg = 'muss genau '+FieldRules[Eigenschaft+1]+' Zeichen lang sein.';
			}
			break;

		case 'required':
			if ((FieldValue == null) || (FieldValue.length == 0)) {
				returnvalue = false;
				msg = 'muss unbedingt angegeben werden.';
			}
			break;

		case 'notzero':
			if (isNaN(parseInt(FieldValue)) || parseFloat(FieldValue)==0) {
				returnvalue = false;
				msg = 'darf nicht Null sein.';
			}
			break;

		case 'positive':
			if ((FieldValue.length != 0) && ((isNaN(parseInt(FieldValue)) || parseFloat(FieldValue)<0))) {
				returnvalue = false;
				msg = 'muss positiv sein.';
			}
			break;
                case 'upload':
                	if (FieldValue.length != 0)
                        	showUploadMessage = true;
                     break;

		}
	}
	if (returnvalue == false) {
		return('"'+FieldCaption+'" '+msg);
	} else {
		return('');
	}
}



// ----------------------------------------
// function checkform(formname)
// fname ... field name
// fvalue .. field value
//
// get all elements of a form. check values
// and does error handling.
// ----------------------------------------
function checkform(myForm,nextpage)
{

	var isSubmit = true;

	if (myForm.askSubmit) {
		isSubmit = confirm("Wollen Sie diese Werte abspeichern?");
		myForm.askSubmit.value = isSubmit;
	}

	var returnvalue = true;

	if (isSubmit == true) {
		var countElements = myForm.length;
		for (i=0;i<countElements;i++) { // for(..in..) funktioniert hier mit IE nicht
			res = checkinput(myForm[i]);
			if (res != '') {
				alert(res + ' Bitte geben Sie einen gültigen Wert ein.');

				// (todo: feld löschen?)
				myForm[i].focus()
				myForm[i].style.background="#FFB452";

				if (nextpage) {
					return void(0);
				} else {
					return false;
				}
				break;
			} else {
				myForm[i].style.background="#ffffff";
			}
		}

	        if (showUploadMessage == true)
        		waiting();
	}


	// 2. parameter -> checkform wurde über tab aufgerufen
        if (nextpage)
		if (nextpage.length > 0) {
			myForm.next.value = nextpage;
			myForm.submit();
			return;
	}
}
