// <![CDATA[

//nur Zahlen, Buchstaben und die Zeichen @ _ und .
var checkString = /[^\w\.\@]/;

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}


function isDate(dateStr, format, nullAllowed) {
	var datePat = "";
	var sMsg = "";

	//Verarbeitung abbrechen wenn Datum leer ist und nullAllowed TRUE ist
	if (dateStr=='' && nullAllowed==true) {
		return true;
	}
	switch(format) {
		case "Date":
			datePat = /^(\d{2})\.(\d{2})\.(\d{4})$/;
			sMsg = "Das Datum muss im Format TT.MM.YYYY eingegeben werden";
			break;

		case "DateTime":
			datePat = /^(\d{2})\.(\d{2})\.(\d{4}) ([0-23]{2}(\:)[0-59]{2}(\:)[0-59]{2})$/;
			sMsg = "Das Datum und Zeit muss im Format TT.MM.YYYY HH:MM:SS eingegeben werden\n";
			sMsg = sMsg + "Der Bereich liegt zwischen 00:00:00 und 23:59:59";
			break;
	}

	var matchArray = dateStr.match(datePat);
	if (matchArray == null) {
		alert(sMsg);
		return false;
	}

	day = matchArray[1];
	month = matchArray[2];
	year = matchArray[3];
	overall = month + day + year;

	if ((day < 1 || day > 31) && !(nullAllowed == true && overall==0)) {
		alert("Der Tag muss zwischen 1 und 31 liegen");
		return false;
	}

	if ((month < 1 || month > 12) && !(nullAllowed == true && overall==0)) { // check month range
		alert("Der Monat muss zwischen 1 und 12 liegen!");
		return false;
	}

	if (((month==4 || month==6 || month==9 || month==11) && day==31) && !(nullAllowed == true && overall==0)) {
		alert("Der Monat "+month+" hat nicht 31 Tage!")
		return false;
	}

	if ((year < 1900 || year > 2500) && !(nullAllowed == true && overall==0)) {
		var part = (year>2500?'\nWASSSS- wir haben schon '+year+'!?!?':'')
		alert("Ein gültiges Jahr zwischen 1900 und 2500 wählen"+part);
		return false;
	}

	if (month == 2 && !(nullAllowed == true && overall==0)) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) {
			alert("Der Februar " + year + " hat nicht " + day + " Tage!");
			return false;
		}
	}
	return true; // date is valid
}


// Prüft ob gültiger Benutzername oder Passwort
function isUserOrPwd(str, UserOrPwd, doAlert) {
/*
	str					:	der zu prüfende Wert
	UserOrPwd		: uid = Benutzername, pwd = Passwort
	doAlert			: True = Alert wird durch Funktion ausgegeben, False = es wird nur das Ergebnis zurück gegeben
*/
	var sReplace = (UserOrPwd=='uid'?'Der Benutzername':'Das Passwort');

	check = /[^\w\.\@]/;
	if(check.test(str)==true) {
		if(doAlert==true) alert(sReplace+' enthaelt ungueltige Zeichen!');
		return false;
	}
	check = /.{4,32}/;
	if(check.test(str)==false) {
		if(doAlert==true) alert(sReplace+' muss min. 4 und max. 32 Zeichen lang sein!');
		return false;
	}
	return true; // UserOrPwd is valid
}

// Prüft ob gültiges Keyword (nur a-z, A-Z, 0-9 und _)
function isKeyWord(str, doAlert) {
/*
	str					:	der zu prüfende Wert
	doAlert			: True = Alert wird durch Funktion ausgegeben, False = es wird nur das Ergebnis zurück gegeben
*/
	check = /[^\w\.\@]/;
	if(check.test(str)==true || str.length==0) {
		if(doAlert==true) alert('Das Keyword enthaelt ungueltige Zeichen!\noder ist leer');
		return false;
	}

	return true;
}

// Prüft ob Telefonnummer korrekt ist
function isPhonnumber(number, doAlert, nullAllowed) {
/*
	number			:	der zu prüfende Wert
	doAlert			: True = Alert wird durch Funktion ausgegeben, False = es wird nur das Ergebnis zurück gegeben
	nullAllowed	: True = Leerwert wird als gültig gewertet, False = Wert wird ausgewertet, das Ergebnis zurück gegeben
*/
	if(nullAllowed==true && number.length==0) return true;

	check = /[^\d \+]/;
	if(check.test(number)==true) {
		if(doAlert==true) alert('Nummer enthaelt ungueltige Zeichen!');
		return false;
	}
	check = /(^(0\d{1,2}) (\d{3}) \d{2} \d{2}$)|(^\+[\d ])/;
	if(check.test(number)==false) {
		if(doAlert==true) alert('Nummer muss das Format 000 000 00 00 (CH) oder +00...... besitzen');
		return false;
	}
	var matchArray = number.match(check);
	if(matchArray[2]<1) {
		if(doAlert==true) alert('Nummer muss gültige Vorwahl haben');
		return false;
	}
	return true;
}


// Prüft ob eMailadresse korrekt ist
function isEmail(email, doAlert, nullAllowed) {
/*
	email				:	der zu prüfende Wert
	doAlert			: True = Alert wird durch Funktion ausgegeben, False = es wird nur das Ergebnis zurück gegeben
	nullAllowed	: True = Leerwert wird als gültig gewertet, False = Wert wird ausgewertet, das Ergebnis zurück gegeben
*/
	if(nullAllowed==true && email.length==0) return true;

  var proto  = '(mailto:)?';
  var usr    = '([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")';
  var domain = '([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}';
  var reg		 = '^' + proto + '?' + usr + '\@' + domain + '$';

  var rgx    = new RegExp(reg);

	var valid = rgx.exec(email) ? true : false;

	if (doAlert==true && valid==false) {
		alert('Diese eMailadresse ist nicht korrekt');
	}
  return valid;
}


var hex = '0123456789ABCDEF';
function HexDezConvertTo(type, value) {

	switch(type) {
		case 'int':
			val = parseInt(value, 16);
	    if(isNaN(val)) {
	      val = 0;
	    }
			return val;
			break;

		case 'hex':
			val = parseInt(value);
	    if(isNaN(val)) {
	      val = 0;
	    }
			else {
      	while(value != 0) {
        	val=hex.charAt(value%16)+val;
        	value=value >> 4;
      	}
    	}
			return val;
	}
}


function FormEx(formId, doAction, subAction, args) {
	if (document.getElementById) {
		if(document.getElementById(formId)) {
			var activeForm = document.getElementById(formId);

			try {
				activeForm.doAction.value = doAction;
			} catch(e) {}
			try {
				activeForm.subAction.value = subAction;
			} catch(e) {}

			if(args.length>0) {
				var arguments = args.split(',')
				for (key=0; key<arguments.length; key++) {
					keyAndVal = arguments[key].split('=');
					if(keyAndVal.length==2) {
						activeForm.elements[trim(keyAndVal[0])].value = keyAndVal[1];
					}
				}
			}

			activeForm.submit();
		}
	}
}


//Löst bei [Enter] ein Clickereignis auf einem bestimmten Button aus
function EvalKeyPress(e, form, button) {
	var key = (window.event?window.event.keyCode:e.which);

	if (form && button) {
			if(key==13) {
				//button.click();
			}
	}
}

function ValidateGalleryEvent(form, action) {
	switch (action) {
		case 'store':
		case 'apply':
			var valid = true;
			valid = valid && isDate(form.eventDate.value, 'Date');
			valid = valid && isKeyWord(form.galleryPath.value, true);

			if(valid==true) {
				if(form.eventTitle_de.value.length==0) {
					alert("Es muss ein Titel erfasst werden");
					return false;
				}

				return true;
			}
			break;

		case 'remove':
			check = confirm("Diesen Datensatz wirklich loeschen?");
			if (check==true) {

				return true;
			}
			break;

		case 'abort':
			return true;
			break;
	}

	return false;
}

function ValidateGalleryEntry(form, action) {
	switch (action) {
		case 'store':
		case 'apply':
			var valid = true;
			valid = valid && (form.galleryFileName.value.length>0 || form.galleryEntryOID.value>0);

			if(valid!=true) {
				alert("Es wurde kein Bild ausgewählt!");
				return false;
			}

			return true;
			break;

		case 'remove':
			check = confirm("Diesen Datensatz wirklich loeschen?");
			if (check==true) {

				return true;
			}
			break;

		case 'abort':
			return true;
			break;
	}

	return false;
}

// ]]>

