function testform(form)
{
	var num = form.elements.length-1;	//wieviele felder gibt es?
	for (var i=0; i<num; i++)		//alle felder checken

	{
	if(form.elements[i].value=='00.00.0000' && form.elements[i].format=="DATUM")
	{form.elements[i].value=''}
		if (form.elements[i].required == "YES" ) //leere MUSS-Felder? Fehler!
		{
//			if (RequiresValue(form.elements[i],'Bitte tragen sie in folgendes Feld'
//				+ ' etwas ein.')){return false;}
			
			if (RequiresValue(form.elements[i],'Bitte füllen Sie das Feld \"'
				+ form.elements[i].pseudo + '\" aus.')){return false;}
		}
		if (form.elements[i].format=="DATUM" && form.elements[i].required == "YES" )
		{
		 if(form.elements[i].value=='')
		 {
		 alert('Bitte füllen Sie das Feld \"' + form.elements[i].pseudo + "aus.");
		 return false;
		 }
		}
		// optionale Felder auf Format prüfen, wenn sie NICHT leer sind.
		if (form.elements[i].value != '')
		{
			switch(form.elements[i].format)
			{
			case('TELEFON') :
				if (MustBeTelNo(form.elements[i],'Bitte tragen sie'
					+ ' hier eine gültige Telefonnummer ein\n(Z.B.: +49 40 123321 oder (040) 43 22 34)')){return false;}
				break;
			case('DATUM') :
				//alert(form.elements[i].name + form.elements[i].value);
				if (MustBeValidDate(form.elements[i])){return false;}
				break;
			case('EMAIL') :
				if (MustBeValidEmail(form.elements[i])){return false;}
				break;
			case('CREDITCARD') :
				if (MustBeValidCard(form.elements[i],'Diese Kreditkartennummer ist ungültig!')){return false;}
				break;
			case('ZAHL') :
				if (MustBeNumeric(form.elements[i],'Diese Zahl ist ungültig',form.elements[i].dec,form.elements[i].Allowzero,form.elements[i].Allowneg)){return false;}
				break;
			case('ZEIT') :
				if (MustBeValidTime(form.elements[i])){return false;}
				break;
			case('JAHR') : //tobi
				if (MustBeValidYear(form.elements[i],'Bitte geben Sie für das Feld:\n\n' + form.elements[i].pseudo + '\n\neine vierstellige Jahreszahl ein.')){return false;}
				break;
			}
		}
	}
}

//-----------------------------------------------
//            Elementarfunktionen
//  angepaßt und eingedeutscht aus validation.js
//-----------------------------------------------

// Display message if mandatory field is empty
function RequiresValue(textObj, Msg) {
	if (emptyField(textObj)) {
		SendMessage(textObj, Msg)
		return true;
	}
	return false;
}

// Display message if field is not empty
function MustBeEmpty(textObj, Msg) {
	if (!emptyField(textObj)) {
		SendMessage(textObj, Msg)
		return true;
	}
	return false;
}

function MustBeValidPort(textObj, Msg) {
alert('moin')
	if (!emptyField(textObj)) {
		SendMessage(textObj, Msg)
		return true;
	}
	return false;
}

// Display message if numeric field contains alpha characters
function MustBeNumeric(textObj, Msg, DecPlaces, AllowZero, AllowNeg, AllowBlanks) {
	if (!IsValidNum(textObj, DecPlaces, AllowZero, AllowNeg, AllowBlanks)) {
		SendMessage(textObj, Msg)
		return true;
	}
	return false;
}

// Display message if Telephone number field contains invalid characters
function MustBeTelNo(textObj, Msg) {
	if (!IsValidTelNum(textObj)) {
		SendMessage(textObj, Msg)
		return true;
	}
	return false;
}

// Display message if Credit Card field is not valid
function MustBeValidCard(cardObj, Msg) {
	if (!IsCreditCardValid(cardObj)) {
		SendMessage(cardObj, Msg)
		return true;
	}
	return false;
}

// Display message if Email Address field is not valid
function MustBeValidEmail(textObj) {
	if (!emailCheck(textObj.value)) {
		// Message provided by function
		if (textObj.disabled==false) { 
			textObj.focus(); 
			textObj.select(); 
			}
		return true;
	}
	return false;
}

// Display message if Date field is not valid
function MustBeValidDate(textObj) {
	if (!isValidDate(textObj.value, textObj)) {
		// Message provided by function
		if (textObj.disabled==false) { textObj.focus(); textObj.select(); }
		return true;
	}
	return false;
}

// Display message if Year field contains invalid thing - Tobi
function MustBeValidYear(textObj, Msg) {
    if (!IsValidYear(textObj))
		{
			 SendMessage(textObj, Msg);
			 return true;
		}
}

 

// Display message if Time field is not valid - von Tobias eingefügt
function MustBeValidTime(textObj) {
	if (!isValidTime(textObj.value, textObj)) {
		// Message provided by function
		if (textObj.disabled==false) { textObj.focus(); textObj.select(); }
		return true;
	}
	return false;
}

// 
function MustBeValidYearEnd(textObj)
{
if (!isValidYearEnd(textObj))
	{
	if (textObj.disabled==false) { textObj.focus(); }
	return true;
	}
return false;	
}


// Display a message and set focus to field
function SendMessage(textObj, Msg) {
	alert(Msg);
	if (textObj.disabled==false) { 
		textObj.focus(); 
		textObj.select(); 
		}
}

// ****************************************************************
// Validation processing functions
// ****************************************************************

// ****************************
// Check whether field is empty
// ****************************
 
function emptyField(textObj)
{
if (textObj.value.length == 0)
	{
	return true;
	}
for (var i=0; i<textObj.value.length; i++)
	{
	var ch = textObj.value.charAt(i);
	if (ch != " " && ch != "")
		{
		return false;
		}
	}
return true;
}
// **********************
// Validate Year Field
// **********************


function IsValidYear(textObj){
		if (textObj.value.length == 0)
		{
				return true;
		}
		if (textObj.value.length != 4 && textObj.value.length != 0)
		{
		 	  return false;
		}
		var NumChars = new String ("0123456789")
		for (var i=0; i<textObj.value.length; i++)
		{
		 		var ch = textObj.value.charAt(i);
				var ii = NumChars.indexOf(ch,0)
				if (ii == -1)
				{
				 	 return false;
				}
		}
		return true;
}

// **********************
// Validate Numeric Field
// **********************

function IsValidNum(textObj, DecPlaces, AllowZero, AllowNeg, AllowBlanks) {

// Parameters:	Form control			- Object
//		No of decimal places		- Integer
//		Whether zero is valid		- Y/N 
//		Whether -ve is valid		- Y/N
//		Whether embedded blanks valid	- Y/N

var NumChars = new String ("0123456789.")
var CheckStr = new String (textObj.value)

if (DecPlaces > 0) NumChars = NumChars + "," 
if (AllowNeg == "Y") NumChars = NumChars + "-" 
if (AllowBlanks == "Y") NumChars = NumChars + " " 

// Check for numeric
if (textObj.value.length == 0)
	{
	return true;
	}
for (var i=0; i<textObj.value.length; i++)
	{
	var ch = textObj.value.charAt(i);
	var ii = NumChars.indexOf(ch,0)
	if (ii == -1)
		{
		return false;
		}
	}

// Check for duplicate dec points, if required
if (DecPlaces > 0) {
	var ii = CheckStr.indexOf(",",0)	// find offset of dec point
	if (ii != -1)
		{
		if (CheckStr.indexOf(",",ii+1) != -1)
			{
			return false;
			}
	// Check for up to 2 decimals
		var iii = CheckStr.length - (ii + 1)	// add 1 to ii as ii is offset not position 
		if (iii > DecPlaces) 
			{
			return false
			}
		}
	}

// Only allow minus sign in first character, if appropriate 
if (AllowNeg == "Y") {
	var ii = CheckStr.indexOf("-",0)	// find offset of minus sign
	if (ii > 0) return false
	}

if (AllowZero == "N") {
	if (parseFloat(CheckStr) == 0) return false;
	}
	
return true;
}

// *************************
// Validate Telephone Number
// *************************

function IsValidTelNum(textObj)
{	
// Check phone number field contains numerics or +, (, ) or spaces

var NumChars = new String ("0123456789 +()")
var CheckStr = new String (textObj.value)


// Check for numeric
if (textObj.value.length == 0)
	{
	return true;
	}
for (var i=0; i<textObj.value.length; i++)
	{
	var ch = textObj.value.charAt(i);
	var ii = NumChars.indexOf(ch,0)
	if (ii == -1)
		{
		return false;
		}
	}

// Only allow plus sign in first character

	var PlusOffset = CheckStr.indexOf("+")	// find offset of plus sign
	if (PlusOffset!=0 && PlusOffset!=-1) return false

// If Open bracket found, there must be a close bracket and vice versa
	var OpenOffset = 0
	var CloseOffset = 0
	var Difference = 0

	OpenOffset = CheckStr.indexOf("(")	// find offset of first open bracket
	CloseOffset = CheckStr.indexOf(")")	// find offset of first close bracket

	while (OpenOffset != -1 || CloseOffset != -1) {

		if (OpenOffset == -1 && CloseOffset != -1) return false	// close bracket but no open bracket
		if (OpenOffset != -1 && CloseOffset == -1) return false	// open bracket but no close bracket

		Difference = CloseOffset - OpenOffset;

		if (Difference < 2) return false			// close bracket before open bracket or next to it
		
		OpenOffset = CheckStr.indexOf("(",OpenOffset+1)		// find offset of next open bracket
		CloseOffset = CheckStr.indexOf(")",CloseOffset+1)	// find offset of next close bracket
	}

return true;
}

// ******************************
// Replace substring with another
// ******************************

function stringReplace(OrigString, findText, replaceText) {
	var pos = 0
	var len = findText.length

	pos = OrigString.indexOf(findText)
	while (pos != -1) {
		preString = OrigString.substring(0, pos)
		postString = OrigString.substring(pos+len, OrigString.length)
		OrigString = preString + replaceText + postString
		pos = OrigString.indexOf(findText)
	}
	return OrigString
}

// ****************************
// Remove substring from String
// ****************************

function stringRemove(OrigString, findText) {
	var pos = 0
	var len = findText.length

	pos = OrigString.indexOf(findText)
	while (pos != -1) {
		preString = OrigString.substring(0, pos)
		postString = OrigString.substring(pos+len, OrigString.length)
		OrigString = preString + postString
		pos = OrigString.indexOf(findText)
	}
	return OrigString
}

// ********************
// Validate Credit Card
// ********************

function IsCreditCardValid(cardObj) { 
	var CardNum = new String(cardObj.value);
	CardNum = stringRemove(CardNum, " ")

	if (!IsValidNum(cardObj, 0, "N", "N", "Y")) return false

	if (CardNum == "") return false;
	var RevNum = new String(CardNum);
	RevNum = Reverse(RevNum);
	var total = new Number(0);
	for ( var i = 0; i < RevNum.length; i += 1 ) {
		var temp = 0;
		if (i % 2) {
		temp = RevNum.substr(i, 1) * 2;
			if (temp >= 10) {
				var splitstring = new String(temp);
				temp = parseInt(splitstring.substr(0, 1)) + parseInt(splitstring.substr(1, 1));
			}
		}
		else temp = RevNum.substr(i, 1);
		total += parseInt(temp); 
	}
// if there's no remainder, we return true
	return (total % 10) ? false : true;
}

// **********************************
// Reverse the characters of a string
// **********************************

function Reverse(strToReverse) {
	var strRev = new String;
	var i = strToReverse.length;
	while (i--)
	strRev += strToReverse.charAt(i);
	return strRev;
}

// ***********************
// Validate E-mail Address
// ***********************

function emailCheck (emailStr) {
	/* The following pattern is used to check if the entered e-mail address
	   fits the user@domain format.  It also is used to separate the username
	   from the domain. */
	var emailPat=/^(.+)@(.+)$/
	/* The following string represents the pattern for matching all special
	   characters.  We don't want to allow special characters in the address. 
	   These characters include ( ) < > @ , ; : \ " . [ ]    */
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"

	/* The following string represents the range of characters allowed in a 
	   username or domainname.  It really states which chars aren't allowed. */
	var validChars="\[^\\s" + specialChars + "\]"

	/* The following pattern applies if the "user" is a quoted string (in
	   which case, there are no rules about which characters are allowed
	   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	   is a legal e-mail address. */
	var quotedUser="(\"[^\"]*\")"

	/* The following pattern applies for domains that are IP addresses,
	   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	   e-mail address. NOTE: The square brackets are required. */
	var ipDomainPat="/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/"

	/* The following string represents an atom (basically a series of
	   non-special characters.) */
	var atom=validChars + '+'

	/* The following string represents one word in the typical username.
	   For example, in john.doe@somewhere.com, john and doe are words.
	   Basically, a word is either an atom or quoted string. */
	var word="(" + atom + "|" + quotedUser + ")"

	// The following pattern describes the structure of the user
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")

	/* The following pattern describes the structure of a normal symbolic
	   domain, as opposed to ipDomainPat, shown above. */
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


	/* Finally, let's start trying to figure out if the supplied address is
	   valid. */

	/* Begin with the coarse pattern to simply break up user@domain into
	   different pieces that are easy to analyze. */
	var matchArray=emailStr.match(emailPat)

	if (matchArray==null) {
	  /* Too many/few @'s or something; basically, this address doesn't
	     even fit the general mould of a valid e-mail address. */
		alert("eMail-Adresse scheint nicht korrekt zu sein (Prüfe @ und .'s)")
		return false
	}

	var user=matchArray[1]
	var domain=matchArray[2]

	// See if "user" is valid 
	if (user.match(userPat)==null) {
	    // user is not valid
		alert("Der username dieser eMail-Adresse scheint nicht korrekt zu sein.")
		return false
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	   host name) make sure the IP address is valid. */
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
	    // this is an IP address
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("Diese IP-Adresse ist ungültig!")
				return false
			}
		}
		return true
	}

	// Domain is symbolic name
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		alert("Die Domain scheint nicht korrekt zu sein!")
		return false
	}

	/* domain name seems valid, but now make sure that it ends in a
	   three-letter word (like com, edu, gov) or a two-letter word,
	   representing country (uk, nl), and that there's a hostname preceding 
	   the domain or country. */

	/* Now we need to break up the domain to get a count of how many atoms
	   it consists of. */
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || 
	    domArr[domArr.length-1].length>3) {
	   // the address must end in a two letter or three letter word.
		alert("Die eMail-Adresse muß mit einer Toplevel-Domain (drei Zeichen)\n oder einem Länderkürzel (zwei Zeichen) enden.");
		return false
	}

	// Make sure there's a host name preceding the domain.
	if (len<2) {
		var errStr="In dieser eMail-Adresse fehlt der hostname"
		alert(errStr)
		return false
	}

	// If we've gotten this far, everything's valid!
	return true;
}

// ************************
// Validate Date DD/MM/YYYY
// ************************

function isValidDate(dateStr, feld) {
//alert(feld.name);
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	// Also separates date into month, day, and year variables

	//var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

	// To require a 4 digit year entry, use this line instead:
	var datePat = /^(\d{1,2})(.)(\d{1,2})\2(\d{4})$/;

	var matchArray = dateStr.match(datePat); // is the format ok?

	if (matchArray == null) {
		alert("Bitte geben Sie das Datum\n\n \"" + feld.pseudo + "\"\n\n in folgendem Format ein:\n(dd.mm.yyyy)")
		return false;
	}
	if ( dateStr!="00.00.0000"){
	month = matchArray[3]; // parse date into variables
	day = matchArray[1];
	year = matchArray[4];
	
	

//	localdate.setYear(year);
	//localdate.setDate(dateStr);
	//localdate.setMonth(month);
	
	if (month < 1 || month > 12) { // check month range
		alert("Bitte geben Sie für den Monat eine Zahl zwischen 1 und 12 ein.");
		return false;
	}

	if (day < 1 || day > 31) {
		alert("Bitte geben Sie für den Tag eine Zahl zwischen 1 und 31 ein.");
		return false;
	}

	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		alert("Der Monat "+month+" hat keine 31 Tage.")
		return false
	}

	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			alert("Der Februar des Jahres " + year + " hat weniger als " + day + " Tage.");
			return false;
		}
	}
	
	if (day.length == 1) day = '0' + day;
	if (month.length == 1) month = '0' + month;
	feld.value = day + '.' + month + '.' + year;	
	return true;  // date is valid
	}
}

function isValidTime(timeStr, feld) {
	// Zeit sollte schon ins Format xx:xx:xx konvertiert worden sein.
	// das macht z.B. die Funktion doDate(feld) in der allabout.js
	// im INPUT: onblur="doDate(this);"

	stunde = timeStr.substr(0,2);
	minute = timeStr.substr(3,2);
	sekunde = timeStr.substr(6,2);

	if (stunde < 0 || stunde > 23) { // Stunde checken
		alert("Die Stundenangabe muß zwischen 0 und 23 liegen.");
		return false;
	}

	if ( minute < 0 || minute > 59) {
		alert("Die Minutenangabe muß zwischen 0 und 59 liegen.");
		return false;
	}
	
	if ( sekunde < 0 || sekunde > 59) {
		alert("Die Sekundenangabe muß zwischen 0 und 59 liegen.");
		return false;
	}
		
	return true;  // date is valid
}

function getBrowser(){
   switch(navigator.appName){
      case "Microsoft Internet Explorer":
         return "ie";
         break;
      case "Netscape":
         return "ns"
         break;
      default:
         return "ie";
   }
}
/*
---------------------------------------------------------------------------------------
Fernster zentriert in einer vorgegebenen Größe öffnen. Tobi
*/
var glbFenster 
var glbTitle
function oeffne(url,title,breite,hoehe){
	var args = "";
	var funktion
	if (breite >= screen.availWidth) breite = screen.availWidth;
	if (hoehe >= screen.availHeight) hoehe = screen.availHeight;
	links = (screen.availWidth - breite)/2;
	oben = (screen.availHeight - hoehe)/2;
	args = "scrollbars=auto,resizable=yes,width=" + breite + ",height=" + hoehe + ", top=" + oben + ", left=" + links;
	glbFenster = window.open(url,'',args);
	glbTitle = title;
	setTimeout("changeTitle()",1000);
	glbFenster.resizeTo(breite,hoehe);
}
function changeTitle(){
	glbFenster.document.title= glbTitle;
	glbFenster.document.body.scroll="auto";
}


function openGrundrissWindow(src, title, breite, hoehe){
	var args="";
	breite=breite;
	hoehe=hoehe;
	glbTitle=title;
	src="http://www.bg-immob.de/fotos/"+src;
	if (breite >= screen.availWidth) breite = screen.availWidth;
	if (hoehe >= screen.availHeight) hoehe = screen.availHeight;
	links = (screen.availWidth - breite)/2;
	oben = (screen.availHeight - hoehe)/2;
	url="grdrss.php?file=" + src + "&name=" + title;
	args = "dependent=yes,status=no,scrollbars=auto,resizable=yes,width=" + breite + ",height=" + hoehe + ", top=" + oben + ", left=" + links;
	glbFenster = window.open(url,'',args);
	setTimeout("changeTitle()",1000);
	//glbFenster.resizeTo(breite,hoehe);
}

function marquee() {
	msg = document.getElementById("marquee").value;
	tmp = msg.substring(1, msg.length) + msg.substring(0, 1);
	document.getElementById("marquee").value = tmp;
    window.setTimeout("marquee()",100);
}
function checkform(form){
	if (!form.emailkontakt.checked && !form.faxkontakt.checked &&!form.postkontakt.checked){
		alert ("Bitte wählen Sie mindestens\neine Kontaktart aus.");
		return false;
	}
	return testform(form);
}
function showKontakt(){

	document.getElementById("kontakt").style.height="400px";
	document.getElementById("kontakt").style.visibility="visible";
	document.getElementById("kontakt").style.overflow="visible";
	
	document.getElementById("weiterempfehlen").style.height="0px";
	document.getElementById("weiterempfehlen").style.visibility="hidden";
	document.getElementById("weiterempfehlen").style.overflow="hidden";
	
	document.getElementById("knopf").scrollIntoView();
}

function showEmpfehlung(){

	document.getElementById("kontakt").style.height="0px";
	document.getElementById("kontakt").style.visibility="hidden";
	document.getElementById("kontakt").style.overflow="hidden";
	
	document.getElementById("weiterempfehlen").style.height="400px";
	document.getElementById("weiterempfehlen").style.visibility="visible";
	document.getElementById("weiterempfehlen").style.overflow="visible";
	
	document.getElementById("knopf").scrollIntoView();
}

function makeTable(){
	hoeheTabelle = document.getElementById("outerTable").offsetHeight;
	hoeheAnsicht = getWinHeight();
	if(hoeheTabelle < hoeheAnsicht){
		document.getElementById("outerTable").style.height=hoeheAnsicht-100 + "px";	
		document.getElementById("header").style.display ="none";
		document.getElementById("header").style.display ="block";		
	}
}

function getWinHeight() // based on a script by projectseven.com (PVII)
{
 if (window.innerWidth) { h = window.innerHeight; } // ns4
 else if(document.body)
 {
  h = document.body.clientHeight;
  if (document.body.offsetHeight == h && document.documentElement && document.documentElement.clientHeight)
  {
   h = document.documentElement.clientHeight;
  }
 }
 return h;
}

function makeExpose(){
	document.getElementById("html_expose").value =	document.getElementById("expose").innerHTML;
	//alert(document.getElementById("html_expose").value);
	document.getElementById("html_expose").value = escape(document.getElementById("html_expose").value).replace(/%09/g,"");
	//alert(unescape(document.getElementById("html_expose").value));
}
