// Konstanten
	//x = document.anchors['startpos'].x + 160;
	//y = document.anchors['startpos'].y + 206;

	x = 160;
	y = 140 + 206;

// Ablaufdatum für News-Seite, muss aktualisiert werden, wenn eine neue News-Seite aufgespielt wird
	dNewsEnd = new Date(2006,2,22,0,0,0);

// Browserabfrage
function getBrowser() {
	var bBrowser = 0;
	if (navigator.appName.indexOf('Microsoft') != -1) {
		bBrowser = 1;
	} else if (navigator.appName.indexOf('Netscape') != -1) {
		bBrowser = 2;
	}
	return bBrowser;
}

// öffnet Link in neuem Fenster
function openWindow(cLink, iWidth, iHeight, bScroll, cName) {
	var cWidth = iWidth + 'px';
	var cHeight = iHeight + 'px';
	if (bScroll == 'yes') {
		cScroll = 'scrollbars=yes,resizable=no';
	} else {
		cScroll = '';
	}
	window.open(cLink,cName,'top=50,left=50,width=' + cWidth + ',height=' + cHeight + ',' + cScroll);
	return false;
}

// tauscht Bilder aus
function changeImage(cId, cImage) {
	var bBrowse = getBrowser();
	if (bBrowse == 1) {
		document.getElementById(cId).src = 'images/' + cImage;
	} else {
		document.getElementById(cId).style.src = 'url(images/' + cImage + ')';
	}
}

// schließt das Browserfenster
function doExit() {
	window.close();
}

// führt eine Aktion cAction nach iSpan Sekunden aus
function doDelay(cAction,iSpan) {
	iMillisec = iSpan * 1000;
	window.setTimeout(cAction,iMillisec);
}

// Funktionen zum Formularcheck

// Copyright (c) 2002 by Virtual Forge
// You like our coding, contact us : contact@virtualforge.de

var myForm  = 'vform';
var datSep  = '.';
var timSep  = ':';
var arrSep  = ';';
var cCR	= '\n';
var dform   = null;

// Sprachabhängige Bausteine

var cChoice = '-- Bitte wählen --';
var cPleaseState = 'Bitte geben Sie "#c#" an.';
var cFieldMinLen = 'Im Feld "#c#" müssen #i# Zeichen angegeben werden.';
var cFieldMaxLen = 'Im Feld "#c#" dürfen maximal #i# Zeichen angegeben werden.';
var cNoDate = '#d# ist kein gültiges Datum.';
var cNoTime = '#d# ist keine gültige Uhrzeit (HH' + timSep + 'MM).';
var cInvldFormat = 'Ungültiges Format : "#c#".';
var cHasDigits   = 'Text enthält Ziffern : "#c#".';
var cPleaseSelct = 'Bitte wählen Sie "#c#" aus.';
var cPleaseFillMin = 'Bitte füllen Sie mindestens #i# Pflichtfeld(er) aus.';
var cPleaseFillAll = 'Bitte füllen Sie alle Pflichtfelder aus.';
var cIllegalChar = 'Illegales Zeichen (#c1#) im Feld "#c2#".';
var cApproval = 'Bitte klicken Sie die Einverständniserklärung an.';


var aDigit   = new String('0123456789');
var aMonLen  = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
var aIllegal = new Array();

var bAddErrorOverride = false;

// Dummy Funktion für zusätzliche komplexere Prüfungen
function addCheckFunction() {
	return new String("");
}

// "true" wenn s1 und s2 gleich
function CmpString(s1, s2) {
	var str1 = new String(s1);
	var str2 = new String(s2);
	var bRet = (str1.indexOf(str2) == 0) && (str2.indexOf(str1) == 0);

	return bRet;
}

function strReplaceBy() {
	var cSrc = '';
	if (arguments.length > 1) {

		cSrc = new String(arguments[0]);
		for (var ij = 0; ij < (arguments.length - 1) / 2; ij++) {
			if (2 * ij + 2 < arguments.length) {
				var cSeek = arguments[2 * ij + 1];
				var cRepl = arguments[2 * ij + 2];
				cSrc = cSrc.split(cSeek).join(cRepl);
			}
		}

	}
	return cSrc;
}

function provideForm() {
	if (dform == null) {
		dform = eval('document.' + myForm);
	}
}

function getCheckValue(cCheckName) {
	provideForm();
	var bRet = false;
	var cField = eval('dform.' + cCheckName);
	if (cField) {
		bRet = cField.checked;
	}
	return bRet;
}

function getRadioValue(cRadioName) {
	provideForm();
	var cRet = '';
	var cField = eval('dform.' + cRadioName);
	if (cField) {
		for (var i = 0; i < cField.length; i++) {
			if (cField[i].checked == true) {
				cRet = cField[i].value;
			}
		}
	}
	return cRet;
}


// Liefert den Index (Index-Origin 0) des Feldes valField im Formular
function formIndex(valField) {
	provideForm();
	var bFound = false;
	var fi = 0;
	if (new String(valField).length > 0) {
		var ff = dform;
		while (!bFound && (fi < ff.length)) {
			if (CmpString(ff.elements[fi].name, valField)) {
				bFound = true;
			} else {
				fi++;
			}
		}
	}

	var ret = -1;
	if (bFound) {
		ret = fi;
	}

	return ret;
}

// Liefert den Wert des Feldes valField
function formValue(valField) {
	provideForm();
	var cRet = '';

	var cField = eval('dform.' + valField);
	if (cField) {
		cRet = cField.value;
	} else {
		var fi = formIndex(valField);
		if (fi != -1) {
			cRet = eval('dform.elements[' + fi + '].value');
		}
	}

	return new String(cRet);
}

// Liefert die Länge des Wertes des Feldes aField; " " und "*" werden überlesen
function fieldLength(aField) {
	var pField = formValue(aField);
	var retVal = 0;
	for (var fi = 0; fi < pField.length; fi++) {
		var c = pField.charAt(fi);
		if (c != " ") {
			retVal++;
		}
	}
	return retVal;
}

// Liefert "true" wenn aVal nur Ziffern enthält. ! Achtung : ist aVal leer wird false zurückgegeben !
function OnlyDigits(aVal) {
	var retVal = true;
	var aField = new String(aVal);
	if (aField.length != 0) {
		for (var fi = 0; fi < aField.length ; fi++) {
			var myVal = aField.charAt(fi);
			if (aDigit.indexOf(myVal) == -1) {
				retVal = false;
			}
		}
	} else {
		retVal = false;
	}
	return retVal;
}

// Liefert "true" wenn aVal keine Ziffern enthält.
function NoDigits(aVal) {
	var retVal = true;
	var aField = new String(aVal);
	if (aField.length != 0) {
		for (var fi = 0; fi < aDigit.length ; fi++) {
			myVal = aDigit.charAt(fi);
			if (aField.indexOf(myVal) != -1) {
				retVal = false;
			}
		}
	}
	return retVal;
}

// Liefert "true" wenn aVal ein gültiges Datum ist (Format TT.MM.JJJJ oder TTMMJJJJ; siehe datSep). ! Schaltjahre werden ignoriert !
function isDate(aVal) {
	var ret = false;
	var s = new String(aVal);

	if ((s.indexOf('.') != -1) || (s.indexOf(',') != -1) || (OnlyDigits(s) && ((s.length < 3) || (s.length == 6) || (s.length == 8)))) {

		ret = true;
		var aSep = new Array();

		if (OnlyDigits(s) && ((s.length == 6) || (s.length == 8))) {

			aSep[0] = s.substring(0, 2);
			aSep[1] = s.substring(2, 4);
			if (s.length == 6) {
				aSep[2] = s.substring(4, 6);
			} else {
				aSep[2] = s.substring(4, 8);
			}

		} else {

			var cSpl = '';
			if (s.indexOf('.') != -1) {
				cSpl = '.';
			} else {
				cSpl = ',';
			}
			aSep = s.split(cSpl);

		}

		var d = new Date();
		var aRet = new Array(d.getDate(), d.getMonth() + 1, d.getFullYear());

		for (var si = 0; si < aSep.length; si++) {

			if (aSep[si].length > 0) {
				if (!OnlyDigits(aSep[si])) {
					ret = false;
				} else {
					aRet[si] = aSep[si] - 0;
				}
			}

		}



		if (ret) {

			var iD = aRet[0] - 0;
			var iM = aRet[1] - 0;
			var cY = new String(aRet[2]);

			if (cY.length < 4) {
				var l = cY.length;
				cYear = new String(d.getYear());
				cY = cYear.substring(0, 4 - l) + cY;
			}
			var iY = cY - 0;

			if ((iM < 1) || (iM > 12) || (iD < 1) || (iD > aMonLen[iM - 1]) || (iY < 1)) {
				ret = false;
			}

		}


	}

	return ret;
}

// Liefert "true" wenn aVal eine gültige Zeit ist (Format HH:MM; siehe timSep).
function isTime(aVal) {
	var ret = true;
	var pS  = new String(aVal);

	var iH = -1;
	var iM = -1;

	if (OnlyDigits(pS)) {
		if ((pS.length == 4) || (pS.length == 2)) {
			iH = pS.substring(0, 2);
			if (pS.length == 4) {
				iM = pS.substring(2, 4);
			} else {
				iM = 0;
			}
		} else {
			ret = false;
		}
	} else {
		var aDat = pS.split(timSep);
		if (aDat.length == 2) {
			for (var fi = 0; fi < aDat.length; fi++) {
				if (!OnlyDigits(aDat[fi])) {
					ret = false;
				}
			}

			if (ret) {
				iH = aDat[0] - 0;
				iM = aDat[1] - 0;
			}

		} else {
			ret = false;
		}
	}

	if (ret) {
		if ((iH < 0) || (iH > 23) || (iM < 0) || (iM > 59)) {
			ret = false;
		}
	}

	return ret;
}

// Hauptprüfungsroutine für alle Formularfelder; liefert "true" wenn Formular fehlerfrei
function letsVerify(f) {

	var bLetsVerify = true;
	var bIgnore = formValue('iqIgnore') == '1';

	if (!bIgnore) {

		var aFocus = "";
		var myAlert = "";

		var pFieldName = '';
		var pFieldText = '';
		var pFieldType = '';
		var pFieldMust = '';
		var pFieldLimit = '';

		var pDropName = '';
		var pDropText = '';

		var pCheckboxName = '';
		var bBox = false;
		var bBoxAlert = false;

		var pFieldName	= formValue('iqFieldName');
		var pFieldText	= formValue('iqFieldText');
		var pFieldType	= formValue('iqFieldType');
		var pFieldMust	= formValue('iqFieldMust');
		var pFieldLimit	= formValue('iqFieldLimit');

		var pDropName	= formValue('iqDropName');
		var pDropText	= formValue('iqDropText');
		var pDropMust	= formValue('iqDropMust');

		var aFieldName  = new Array();
		var aFieldText  = new Array();
		var aFieldType  = new Array();
		var aFieldMust  = new Array();
		var aFieldLimit = new Array();

		if (pFieldName.length > 0) {
			aFieldName  = pFieldName.split(',');
			aFieldText  = pFieldText.split(',');
			aFieldType  = pFieldType.split(',');
			aFieldMust  = pFieldMust.split(',');
			aFieldLimit = pFieldLimit.split(',');
		}

		var aDropName	= new Array();
		var aDropText	= new Array();
		var aDropMust	= new Array();

		if (pDropName.length > 0) {
			aDropName = pDropName.split(',');
			aDropText = pDropText.split(',');
			aDropMust = pDropMust.split(',');
		}

		if (formIndex('iqCheckbox') != -1) {
			pCheckboxName = formValue('iqCheckbox');
			bBox = true;
		}

		var pRequired	= formValue('iqRequired');
		var iRequired	= pRequired - 0;

		if (isNaN(iRequired)) {
			iRequired = 0;
		}
		var iReq = iRequired;

		var bProcess = (pFieldMust.length > 0) || (aDropMust.length > 0);

		var bAllEmpty = true;			// Alle Textfelder leer ?
		var bNothingSelected = true;	// Alle Selectfelder auf Index 0 ?

		// Textfelder prüfen
		var i = 0;
		while ((i < aFieldName.length) && bAllEmpty) {
			if (fieldLength(aFieldName[i]) != 0) {
				bAllEmpty = false;
			} else {
				i++;
			}
		}

		// Selectfelder prüfen
		var i = 0;
		while ((i < aDropName.length) && bNothingSelected) {
			var iNdx = formIndex(aDropName[i]);
			if (iNdx != -1) {
				var dv = f.elements[iNdx];
				if (dv.selectedIndex > 0) {
					bNothingSelected = false;
				}
			}
			i++;
		}

		if ((bAllEmpty && bNothingSelected) && (iRequired > 0)) {
			iReq = 1;
		}

		if (bProcess && (!bAllEmpty || !bNothingSelected)) {

			// Logisches Prüfen aller Textfelder

			for (var i = 0; i < aFieldMust.length; i++) {
				var bFieldOK = true;
				var iMinLen  = aFieldMust[i];
				var iMaxLen  = aFieldLimit[i];
				var iMomLen  = fieldLength(aFieldName[i]);
				if ((iMinLen > 0) && (iMomLen < iMinLen)) {

					if (iMinLen == 1) {
						myAlert = myAlert + '\n' + strReplaceBy(cPleaseState, '#c#', aFieldText[i]);
					} else {
						myAlert = myAlert + '\n' + strReplaceBy(cFieldMinLen, '#c#', aFieldText[i], '#i#', iMinLen);
					}

					bLetsVerify = false;
					bFieldOK = false;

					if (aFocus.length == 0) {
					     aFocus = new String(aFieldName[i]);
					}
				}

				if ((iMaxLen > 0) && (iMomLen > iMaxLen)) {
					myAlert = myAlert + '\n' + strReplaceBy(cFieldMaxLen, '#c#', aFieldText[i], '#i#', iMaxLen);
					bLetsVerify = false;
					bFieldOK = false;

					if (aFocus.length == 0) {
					     aFocus = new String(aFieldName[i]);
					}
				}

				if ((iReq > 0) && (iMomLen > 0)) {
					iReq--;
				}

				var cVal = formValue(aFieldName[i]);
				var bIllegal = false;

				var ik = 0;
				while ((!bIllegal) && (ik < aIllegal.length)) {
					if (cVal.indexOf(aIllegal[ik]) != -1) {
						bIllegal = true;
					} else {
						ik++;
					}
				}
				if (bIllegal) {
					myAlert = myAlert + '\n' + strReplaceBy(cIllegalChar, '#c1#', aIllegal.join(' '), '#c2#', aFieldText[i]);
					bLetsVerify = false;
					bFieldOK = false;

					if (aFocus.length == 0) {
					     aFocus = new String(aFieldName[i]);
					}
				}

				if ((bFieldOK) && (iMomLen > 0)) {
					var iTyp = getType(aFieldType, i);
					if (iTyp > 0) {
						bMomErr = false;
						switch(iTyp) {
							case 1 : {
								if (!isDate(formValue(aFieldName[i]))) {
									bMomErr = true;
									myAlert = myAlert + '\n' + strReplaceBy(cNoDate, '#d#', formValue(aFieldName[i]));
								}
								break;
							}
							case 2 : {
								if (!OnlyDigits(formValue(aFieldName[i]))) {
									bMomErr = true;
									myAlert = myAlert + '\n' + strReplaceBy(cInvldFormat, '#c#', aFieldText[i]);
								}
								break;
							}
							case 3 : {
								if (!isTime(formValue(aFieldName[i]))) {
									bMomErr = true;
									myAlert = myAlert + '\n' + strReplaceBy(cNoTime, '#d#', formValue(aFieldName[i]));
								}
								break;
							}
							case 4 : {
								if (!NoDigits(formValue(aFieldName[i]))) {
									bMomErr = true;
									myAlert = myAlert + '\n' + strReplaceBy(cHasDigits, '#c#', aFieldText[i]);
								}
								break;
							}
						}
						if (bMomErr) {
							bLetsVerify = false;
							if (aFocus.length == 0) {
								 aFocus = new String(aFieldName[i]);
							}

						}
					}
				}

			}

			if (pDropName.length > 0) {
				for (var i = 0; i < aDropName.length; i++) {
					var iNdx = formIndex(aDropName[i]);
					var dv = f.elements[iNdx];
					if (aDropMust[i] == "1") {
						if (iReq > 0) {
							iReq--;
						}

						if (dv.selectedIndex == 0) {
							myAlert = myAlert + '\n' + strReplaceBy(cPleaseSelct, '#c#', aDropText[i]);
							bLetsVerify = false;
							if (aFocus.length == 0) {
								 aFocus = new String(aDropName[i]);
							}
						}
					}
				}
			}

			var pADC = addCheckFunction();

			if (pADC.length > 0) {
				myAlert = myAlert + pADC;
				bLetsVerify = false;
			}

		}

		if (bBox) {
				var iBox = formIndex(pCheckboxName);
			if (!(f.elements[iBox].checked)) {
				bBoxAlert = true;
				bLetsVerify = false;
				if (aFocus.length == 0) {
					 aFocus = new String(pCheckboxName);
				}
			}
		}

		if (iReq > 0) {
			bLetsVerify = false;
			//myAlert += '\n' + strReplaceBy(cPleaseFillMin, '#i#', iRequired);
			myAlert += '\n' + cPleaseFillAll;
			bBoxAlert = false;
		}

		if (bBoxAlert) {
				myAlert += '\n' + cApproval;
		}


		if (!bLetsVerify) {
			alert(myAlert);
			if (aFocus.length != 0) {
				pi = formIndex(aFocus);
				if (pi != -1) {
					eval('dform.elements[' + pi + '].focus()');
				}
			}
		}


		if (bLetsVerify) {
			if (bAllEmpty) {
				if (dform.iqSavePage) {
					dform.iqSavePage.value = '0';
				}
			}
		}

	}

	return bLetsVerify;
}

function letsSubmit(aForm) {

	if (arguments.length > 0) {
		myForm	= aForm;
		dform	= null;
	}

	provideForm();

	var bLetsSubmit = letsVerify(dform);

	if (bLetsSubmit) {
		eval(dform.submit());
	}
	return bLetsSubmit;
}


function setFocus(aFieldName) {
	eval('dform.' + aFieldName).focus();
}

function getType(aFieldType, iField) {
	var pTemp = new String(aFieldType[iField]);
	var iType = -1;
	if (pTemp.indexOf('non') == 0) {
		iType = 0;
	}
	if (pTemp.indexOf('dat') == 0) {
		iType = 1;
	}
	if (pTemp.indexOf('num') == 0) {
		iType = 2;
	}
	if (pTemp.indexOf('tim') == 0) {
		iType = 3;
	}
	if (pTemp.indexOf('txt') == 0) {
		iType = 4;
	}
	return iType;
}


// Wechsel eines Bildes in einem Seitenelement mit Namen image
function changeGalleryImg(vImage) {
	var bBrowse = getBrowser();
	var cImage = 'big_' + vImage;
	if (bBrowse == 1) {
		document.getElementById("image").background = 'images/' + cImage;
	} else {
		document.getElementById("image").style.background = 'url(images/' + cImage + ')';
	}
}


function changeText(vText) {
	var bBrowse = getBrowser();
	if (bBrowse == 1) {
		document.all.text.innerHTML = vText;
	} else {
	}
}


function showBigPicture(vImage, vText) {
	var bBrowse = getBrowser();
	var cImage = 'big_' + vImage;
	var cOut = '<tr>';
	cOut += '<td width="9px">&nbsp;</td>';
	cOut += '<td width="400px" height="290px" valign="top" align="center" class="normal" id="image"';
	if (bBrowse == 1) {
		cOut += ' background="images/' + cImage;
	} else {
		cOut += ' style="background-image: url(images/' + cImage + ');';
	}
	cOut += '">&nbsp;</td>';
	cOut += '<td width="9px">&nbsp;</td>';
	cOut += '</tr>';
	cOut += '<tr>';
	cOut += '<td width="9px">&nbsp;</td>';
	cOut += '<td width="400px" height="290px" valign="bottom" align="center" class="normal" id="text"><br/>';
	cOut += vText;
	cOut += '<br/></td><td width="9px">&nbsp;</td>';
	cOut += '</tr>';
	document.write(cOut);
}

function openNews(cLink) {
	var dToday = new Date();
	iToday = dToday.getTime();
	var iEnd = dNewsEnd.getTime();
	if ((iEnd - iToday) > 0) {
		return openWindow(cLink, '300', '400', '', 'news');
	}
}

function changeColor(cID,cClass) {
	document.getElementById(cID).font = cClass;
}

function send_newsletter_form() {
	var dform = eval('document.vform');
	if ((!dform.elements.iqnewsletter.checked) && (dform.elements.email.value == '')) {
		return false;
	} else {
		var bSend = true;
		if (!dform.elements.iqnewsletter.checked) {
			bSend = false;
			alert('Please confirm that you want to get the Virtual Forge newsletter');
		} else if (dform.elements.email.value == '') {
			bSend = false;
			alert('Please enter your email adress');
		} else {
			var bMail = true;
			var mail = dform.elements.email.value;
			var mailparts = mail.split('@');
			if (mailparts.length != 2) {
				bMail = false;
			} else {
				var domainparts = mailparts[1].split('.');
				if (domainparts.length != 2) {
					bMail = false;
				} else {
					var extension = domainparts[1];
					if ((extension.length < 2) || (extension.length > 4)) {
						bMail = false;
					}
				}
			}
			if (!bMail) {
				bSend = false;
				alert('Please enter a valid email adress');
			}
		}
		if (bSend) {
			eval(dform.submit());
			return false;
		}
	}
}
