
// Logging -----------------------------------------------------
// do_log ist der Hauptschalter, um Logging ein oder auszuschalten
var do_log = true;    


// Existiert eine Logging-Konsole (zB. Firebug), wird diese verwendet.
// An sonsten wird ein Dummy eingeführt, um die Log-Funktionen bekannt 
// zu machen, ohne sie aber zu implementieren.  
var log = null;
if (do_log && window.console) {
	log = window.console;
}
else {
	log = function() {
		this.log = function() {};
		this.debug = function() {};
		this.info = function() {};
		this.warn = function() {};
		this.error = function() {};
		this.time = function() {};
		this.timeEnd = function() {};
		this.profile = function() {};
		this.profileEnd = function() {};
		this.trace = function() {};
		this.group = function() {};
		this.groupEnd = function() {};
		this.groupCollapsed = function() {};
		this.dir = function() {};
		this.dirxml = function() {};
		this.assert = function() {};
		this.count = function() {};
	}    
}









var taste = 0, mouseX=0, mouseY=0;
var numbers = "0123456789";
var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var umlauts ="???????";
   
var submitting = new Array();
var runtime = new Array();

var focused = false, isRuntime = false;
var focusingField = "", currentField = "";

var currentNumberField = "";
var numberFields = new Array("profilID1", "profilID3");

var altKey = false;

var netscape = new Boolean();

// Aktuelles Datum
var currentDate = new Date();
// Aktueller Tag
var currentDay = currentDate.getDate();
currentDay = (currentDay < 10 ? ("0" + currentDay) : currentDay);
// Aktueller Monat
var currentMonth = currentDate.getMonth()+1; 
currentMonth = (currentMonth < 10 ? ("0" + currentMonth) : currentMonth);
// Aktuelles Jahr
var currentYear = (new Date()).getFullYear();

// Linksausrichten des Calendarlayers
var iwRePositionCalendarLayer = true;
var iwWidth = 0;

// Funktionen f?r die Tastenkombinationen und f?r die Erkennung des aktuellen Browsers
if(navigator.appName.indexOf("Netscape")>-1) {  
    netscape = true;
    document.onkeypress = function Tastendrueck(tastatur) {
        taste = tastatur.which;
        if (tastatur.altKey) {
            altKey = true;
            if (window.captureKey) {
                captureKey(taste);
            }
            if (window.captureKeyList) {
                captureKeyList(taste);
            }
        } else {
            altKey = false;
        }
        if (!istErlaubt()) {
            return false;
        }
        return true;
    }
    document.onmouseover = function Position(maus) {
        //mouseX=maus.pageX;
       // mouseY=maus.pageY;
       if (!maus) var maus = window.event;
       
		if (maus.pageX || maus.pageY) {
			mouseX = maus.pageX;
			mouseY = maus.pageY;
		}
		else {
			if (maus.clientX || maus.clientY) {
				mouseX = maus.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
				mouseY = maus.clientY + document.body.scrollTop	+ document.documentElement.scrollTop;
			}
		}
    }
} else {
    netscape = false;
    document.onkeydown = function Tastendrueck(tastatur) {
        taste = window.event.keyCode;
        if (taste>=96 && taste<=105) {
            taste = taste - 48;
        }
        if(window.event.altKey) {
            altKey = true;
            if (window.captureKey) {
                captureKey(taste);
            }
            if (window.captureKeyList) {
                captureKeyList(taste);
            }            
        } else {
            altKey = false;
        }
        if (!istErlaubt()) {
            return false;
        }
        return true;
    }
    document.onmouseover = function Position(maus) {
        //mouseX = window.event.x;
        //mouseY = window.event.y;
        if (!maus) var maus = window.event;
		if (maus.pageX || maus.pageY) {
			mouseX = maus.pageX;
			mouseY = maus.pageY;
		}
		else {
			if (maus.clientX || maus.clientY) {
				mouseX = maus.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
				mouseY = maus.clientY + document.body.scrollTop	+ document.documentElement.scrollTop;
			}
		}
    }
}

// trimmt einen String
function trim(str) {
    return String(str).replace(/^\s+|\s+$/g,'');
}


// Diese Methode definiert ob eine Taste gedruckt worden ist.
function isAltKey() {
    return altKey;
}

function focusField(field1, fieldName2, len) {
	if (!len)
		len = 2;
    field2 = getElementById(fieldName2);
    if (netscape) {
        if (taste != 0 && field1.value.length==len) {
        	try{
  	            field2.focus();
        	}catch(e){
        	}
        	
        }
    } else {
        if (!istErlaubt()) {
           return false;
        }
        if (taste != 0 && taste != 9 && taste != 16 && field1.value.length==len) {
        	try{
  	            field2.focus();
        	}catch(e){
        	}
        }
    }
    taste=0;
}

function register(numberField) {
    currentNumberField = numberField.name;
}

function istErlaubt() {
    for (i = 0; i < numberFields.length; i++) {
        if (currentNumberField==numberFields[i]) {
            if (netscape) {
                if (!(taste>=48 && taste<=57) && taste!=0 && taste!=8 && taste !=13) {
                    return false;
                }
            } else {
                if (!(taste>=48 && taste<=57) && taste!=0 && taste!=8 && taste!=9 && taste!=16 && taste!=37 && taste!=39 && taste !=13) {
                    return false;
                }
            }
        }
    }
    return true;
}


// Funktion f?r die Erg?nzung der Zahlen z.B. von 1 zu 01
function completeField(field) {
    var feld = parseInt(field.value, 10);
    year = false;
    if (field.name.indexOf("jahr") != -1) {
       year = true;
    }
    if (year) {
        if (feld < 10) {
            field.value = "200" + feld;
        } else if (feld >= 10 && feld <= 99) {
            field.value = "20" + feld;
        }
    } else if (feld < 10 && field.value.length< 2 ) {
        field.value = "0" + feld;
    }
}

function completeZahl(field, maxlength) {
    var feld = parseInt(field.value, 10);
    if (field.name.indexOf("komma") != -1) {
        vorkommaName = "zahl" + field.name.substring(field.name.indexOf("komma")+5);
        vorkomma = document.getElementById(vorkommaName);
        if (!isEmpty(vorkomma.value)) {
            if (isEmpty(field.value) || feld==0) {
                if (maxlength >=2) {
                   field.value = "00";
                } else {
                   field.value = "0";
                }
            } else if (feld < 10 && field.value.length<2) {
                if (maxlength >=2) {
                    field.value = feld + "0";
                }
            }
        }
    }
}

// Funktion f?r Focus auf preis input Feld
function focusZahl(vorkomma, nachkommaName) {
    nachkomma = document.getElementById(nachkommaName);
    if (netscape) {
        if (taste == 44 || taste == 46) {
            nachkomma.focus();
            nachkomma.select();
        }
    } else {
        if (taste == 110 || taste == 190 || taste == 188) {
            nachkomma.focus();
        }
    }
}

// Funktion f?r die ?ffnung des Child Windows in der Mitte des Bildschirms
function MM_openBrWindow(theURL,winName,features, width, height) {
    var top=((screen.availHeight)/2)-(height/2);
    var left=((screen.availWidth)/2)-(width/2);
    childfenster = window.open(theURL,winName,features+",height="+height+",width="+width+",top="+top+",left="+left);
    childfenster.focus();
    return childfenster;
}

function openWindow(url, param){
	if(param == true) {
		childfenster = window.open(url,'onlinebuchung','resizable=yes, scrollbars=yes, width=760,height=750');
	} else {
		childfenster = window.open(url);
	}
	childfenster.focus();
}

// Funktionen f?r die ?berpr?fung der Kreditkarte
function isVisa(cc) {
    if (((cc.length == 16) || (cc.length == 13)) && (cc.substring(0,1) == 4)) {
        return isCreditCard(cc);
    }
    return false;
} 
function isMasterCard(cc) {
    firstdig = cc.substring(0,1);
    seconddig = cc.substring(1,2);
    if ((cc.length == 16) && (firstdig == 5) && ((seconddig >= 1) && (seconddig <= 5))) {
        return isCreditCard(cc);
    }
    return false;
}
function isAmericanExpress(cc) {
    firstdig = cc.substring(0,1);
    seconddig = cc.substring(1,2);
    if ((cc.length == 15) && (firstdig == 3) && ((seconddig == 4) || (seconddig == 7))) {
        return isCreditCard(cc);
    }
    return false;
}
function isDinersClub(cc) {
    firstdig = cc.substring(0,1);
    seconddig = cc.substring(1,2);
    if ((cc.length == 14) && (firstdig == 3) && ((seconddig == 0) || (seconddig == 6) || (seconddig == 8))) {
        return isCreditCard(cc);
    }
    return false;
}
function isCreditCard(st) {
    if (st.length > 19) {
        return (false);
    }
    sum = 0; mul = 1; l = st.length;
    for (i = 0; i < l; i++) {
        digit = st.substring(l-i-1,l-i);
        tproduct = parseInt(digit ,10)*mul;
        if (tproduct >= 10) {
          sum += (tproduct % 10) + 1;
        } else {
          sum += tproduct;
        }
        if (mul == 1) {
          mul++;
        } else {
          mul--;
         }
    }
    if ((sum % 10) == 0) {
        return (true);
    } else {
        return (false);
    }
}

// Function f?r die ?berpr?fung eines leeren Feldes
function isEmpty(field) {
    if (field != null && field.length > 0) {
        var len = field.length;
        for (i = 0; i < len; i++) {
            if (field.charAt(i)!=' ') {
                return false;
            }
        }
    }
    return true;
}

// Function f?r die ?berpr?fung der Zahlen
function isNumber(field) {
    if (isEmpty(field)) {
        return false;
    }
    var len = field.length;
    for (i = 0; i < len; i++) {
        if (i == 0 && (field.charAt(i)=='-' || field.charAt(i)=='+')) {
           continue;
        } else if (numbers.indexOf(field.charAt(i))==-1) {
            return false;
        }
    }
    return true;
}

// Function f?r die ?berpr?fung eine Email
function isEmail(field) {
    if (isEmpty(field)) {
        return false;
    }
    var punkt = field.indexOf(".");
    var at = field.indexOf("@");
    var lastPunkt = field.lastIndexOf(".");
    var len = field.length-1;
    if ((punkt <= 0 || punkt >= len) 
        || (at <= 0 || punkt >= len) 
        || (lastPunkt <= (at+1) || lastPunkt >= len)) {
        return false;
    }
    var len = field.length;
    var emailPattern=letters+numbers+"_@.-";
    for (i = 0; i < len; i++) {
        if (emailPattern.indexOf(field.charAt(i))==-1) {
            return false;
        }
    }
    return true;
}

// Function f?r die ?berpr?fung eines Datums
function isDate(fieldDay, fieldMonth, fieldYear) {
    if (!isNumber(fieldDay) || !isNumber(fieldMonth) || !isNumber(fieldYear)) {
        return false;
    }
    month = parseInt(fieldMonth,10);
    day = parseInt(fieldDay,10);
    year = parseInt(fieldYear,10);
    daysInMonth = ((month==4 || month==6 || month==9 || month==11) ? 30 : (month==2 ? (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28) : 31));
    if ((day <= 0 || day > daysInMonth) || (month <= 0 || month > 12)) {
        return false;
    }
    return true;
}


// Function f?r die ?berpr?fung eines Datums
function isDateTime(fieldDay, fieldMonth, fieldYear, fieldHour, fieldMinute) {
    if (!isNumber(fieldDay) || !isNumber(fieldMonth) || !isNumber(fieldYear) || !isNumber(fieldHour) || !isNumber(fieldMinute)) {
        return false;
    }
    var month = parseInt(fieldMonth,10);
    var day = parseInt(fieldDay,10);
    var year = parseInt(fieldYear,10);
    var hour = parseInt(fieldHour, 10);
    var minute = parseInt(fieldMinute, 10);
    var daysInMonth = ((month==4 || month==6 || month==9 || month==11) ? 30 : (month==2 ? (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28) : 31));
    if ((day <= 0 || day > daysInMonth) || 
    	(month <= 0 || month > 12) || 
    	(hour < 0 || hour > 23) ||
    	(minute < 0 || minute > 59) ) {
        return false;
    }
    return true;
}


// Function f?r den Vergleich zwei Daten
function compareDates(smallerDate, greaterDate) {
    var smallerDateTime = smallerDate.getTime();
    var greaterDateTime = greaterDate.getTime();
    if (greaterDateTime < smallerDateTime) {
        return false;
    }
    return true;
}

function compareWithCurrentDate(fieldDay_datum, fieldMonth, fieldYear) {
    if (!fieldMonth && !fieldYear)
        return compareWithCurrentDate2(fieldDay_datum);
    else
        return compareWithCurrentDate1(fieldDay_datum, fieldMonth, fieldYear);
}

// Function f?r den Vergleich mit aktuellen Datum
function compareWithCurrentDate1(fieldDay, fieldMonth, fieldYear) {
    dateTime = (new Date(fieldYear, (fieldMonth-1), fieldDay)).getTime();
    currentTime = (new Date(currentYear,(currentMonth-1),currentDay)).getTime();
    if (dateTime < currentTime) {
        return false;
    }
    return true;
}

// Function f?r den Vergleich mit aktuellen Datum
function compareWithCurrentDate2(datum) {
    dateTime = datum.getTime();
    currentTime = (new Date(currentYear,(currentMonth-1),currentDay)).getTime();
    if (dateTime < currentTime) {
        return false;
    }
    return true;
}

// Set oder Reset der Hintergrundfarbe der Felder
function setBackgroundColor(tags, klasse) {
    for(i=0; i < tags.length; i++) {
        el = document.getElementById(tags[i]);
        if (el == null)
            continue;
        aktuelleKlasse = document.getElementById(tags[i]).className;
        pflichtfeld = aktuelleKlasse.lastIndexOf(" pflichtfeld");
        if (pflichtfeld != -1) {
            aktuelleKlasse = aktuelleKlasse.substring(0, pflichtfeld);
        }
        normalfeld = aktuelleKlasse.lastIndexOf(" normalfeld");
        if (normalfeld != -1) {
            aktuelleKlasse = aktuelleKlasse.substring(0, normalfeld);
        }
        aktuelleKlasse = aktuelleKlasse + " " + klasse;
        document.getElementById(tags[i]).className = aktuelleKlasse;
    }
}


// Reset tabindex
function resetTabindex(field) {
    field.focus();
}

// JavaScript validation Klasse
function FormValidator(name, err) {
    
    this.methode = name;
    this.message = err;
    this.isValid = validate;
    
    function validate() {
        valid = eval(this.methode);
        return valid;
    }

}

/*
 * In diesem Bereich sind Funktionen f?r checkSubmit() Methode definiert worden, die Allgemeing?ltig sind.
 */
 
//  init Methode
function init() {
    if (window.initForm) {
        initForm();
    }
    if (window.initMessages) {
        initMessages();
    }
    setTimeout('loadForm()', 500);
}

// JavaScript runtime validation
function checkRuntime(field) {
    isRuntime = true;
    var eigenschaft = field.name;
    if (isAltKey()) {
        return false;
    }

    if(!runtime[eigenschaft])
    	return true;
    
    if (!runtime[eigenschaft].isValid()) {
        alert(runtime[eigenschaft].message);
        field.focus();
        field.select();
        return false;
    }
    if (window.checkRuntimeForm) {
        checkRuntimeForm(field);
    }
    return true;
}

// JavaScript submit validation
function checkSubmit() {
    errorMessage="";
    focused=false;
    isRuntime = false;
    for(j = 0; j < submitting.length; j++) {
        if (!submitting[j].isValid()) {
            errorMessage += submitting[j].message+"\n";
            if (!focused) {
                focused = true;
                focusingField = currentField;
            }
        }
    }
    if (errorMessage != "") {
        
        alert(errorHeader+"\n\n"+errorMessage);
        focusingField.focus();
        if ((focusingField.type).indexOf("select")==-1) {
            focusingField.select();
        }
        return false;
    } else {
        if (window.checkSubmitForm) {
            return checkSubmitForm();
        }
    }
    return true;
}

function zurueck() {
    document.formular.aktion.value="zurueck";
    document.formular.target=self.name;
    document.formular.submit();
}

function displayErrors(field, messages) {
    alert(messages);
    if (field != "") {
        focusingField=document.getElementById(field);
        focusingField.focus();
        if ((focusingField.type).indexOf("select")==-1) {
            focusingField.select();
        }
    }
    return false;
}

function disableFloat(field, farbe, disable) {
   var fields = new Array();
    fields[0] = 'zahl_' + field;
    fields[1] = 'punkt_' + field;
    fields[2] = 'komma_' + field;
    disableField(fields, farbe, disable);
}

function disableField(fields, farbe, disable) {
    var i = 0;
    if (disable) {
        for (i=0; i<fields.length; ++i) {
            var element = document.getElementById(fields[i]);
            var klasse = element.className;
            var spaceIndex = klasse.indexOf(' ');
            var klassenIndex = klasse.indexOf('rahmen')+6;
            if (klassenIndex!=-1) {
                element.className = klasse.substring(0, klassenIndex)+'disable'+klasse.substring(spaceIndex);
            }
            element.disabled = 'disabled';
        }
    }
    else {
        for (i=0; i<fields.length; ++i) {
            var element = document.getElementById(fields[i]);
            var klasse = element.className;
            var klassenIndex = klasse.indexOf('disable');
            if (element.className.indexOf('disable')!=-1) {
               element.className = klasse.substring(0, klassenIndex)+farbe+' '+klasse.substring(klassenIndex+7);
            }
            element.disabled = null;
        }
    }
}

function checkEmpty(fieldName) {
   tags = new Array(fieldName);
   setBackgroundColor(tags, "normalfeld");
   currentField=document.getElementById(fieldName);
   
   if (!isRuntime && isEmpty(currentField.value) &&  (! currentField.disabled)) {
       setBackgroundColor(tags, "pflichtfeld");
       return false;
   }
   return true;
}


function checkSelected(fieldName) {
   tags = new Array(fieldName);
   setBackgroundColor(tags, "normalfeld");
   currentField=document.getElementById(fieldName);
   numField = parseInt(currentField.value, 10);
   if (!isRuntime) {
       if (isNumber(currentField.value) && numField < 0) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;
       }
   }
   return true;
}

function checkMultiSelected(fieldName) {
   tags = new Array(fieldName);
   setBackgroundColor(tags, "normalfeld");
   currentField=document.getElementById(fieldName);
   numField = parseInt(currentField.selectedIndex, 10);
   if (!isRuntime) {
       if (numField < 0) {
         setBackgroundColor(tags, "pflichtfeld");
         return false;
       }
   }
   return true;
}

function setLandesVorwahl(landField, vorwahlField) {
    var land = document.getElementById(landField);
    var vorwahl = document.getElementById(vorwahlField);
    vorwahl.value = landesVorwahl[land.value];
}

function checkTelefon(fieldName, vorwahlName, nummerName) {
    currentField=document.getElementById(fieldName);
    if (isRuntime) {
        punkt = "punkt2" + fieldName.substring(fieldName.indexOf("_"));
        if (fieldName.indexOf("landesvorwahl") != -1) {
            punkt = "punkt1" + fieldName.substring(fieldName.indexOf("_"));
        }
        tags = new Array(fieldName, punkt);
        setBackgroundColor(tags, "normalfeld");
        field = currentField.value;
        if (!isEmpty(field) && (!isNumber(field) || (fieldName.indexOf("landesvorwahl") != -1 && field.indexOf("00")!=0))) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    } else {
        punkt1 = "punkt1" + fieldName.substring(fieldName.indexOf("_"));
        punkt2 = "punkt2" + fieldName.substring(fieldName.indexOf("_"));
        tags = new Array(fieldName, punkt1, vorwahlName, punkt2, nummerName);
        setBackgroundColor(tags, "normalfeld");
        name = document.formular.name.value;
        land=document.getElementById(fieldName).value;
        vorwahl=document.getElementById(vorwahlName).value;
        nummer=document.getElementById(nummerName).value;
        if (!isNumber(land) || (!isEmpty(vorwahl) && !isNumber(vorwahl)) || !isNumber(nummer) || land.indexOf("00") != 0) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    }
    return true;
}

function nop () {
	return true;
}

function checkFax(fieldName, vorwahlName, nummerName) {
   currentField=document.getElementById(fieldName);
   
   if(! currentField.disabled){
   if (isRuntime) {
       punkt = "punkt2" + fieldName.substring(fieldName.indexOf("_"));
       if (fieldName.indexOf("landesvorwahl") != -1) {
           punkt = "punkt1" + fieldName.substring(fieldName.indexOf("_"));
       }
       tags = new Array(fieldName, punkt);
       setBackgroundColor(tags, "normalfeld");
       field = currentField.value;
       if (!isEmpty(field) && (!isNumber(field) || (fieldName.indexOf("landesvorwahl") != -1 && field.indexOf("00")!=0))) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;
       }
   } else {
       punkt1 = "punkt1" + fieldName.substring(fieldName.indexOf("_"));
       punkt2 = "punkt2" + fieldName.substring(fieldName.indexOf("_"));
       tags = new Array(fieldName, punkt1, vorwahlName, punkt2, nummerName);
       setBackgroundColor(tags, "normalfeld");   
       land=document.getElementById(fieldName).value;
       vorwahl=document.getElementById(vorwahlName).value;
       nummer=document.getElementById(nummerName).value;
       if (!isNumber(land) || (!isEmpty(vorwahl) && !isNumber(vorwahl)) || !isNumber(nummer) || land.indexOf("00") != 0) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;
       }
    }
    }
    return true;
}

/**
 * Pr?ft ob in einem Feld eine g?ltige email eingegeben wurde.
 * Ist der Parameter optional nicht gegeben darf das Feld nicht leer sein(mandatory).
 * Ist dort 'optional' angegeben kann es auch leer sein.
 */
function checkEmail(fieldName, optional) {
   currentField=document.getElementById(fieldName);
   if(! currentField.disabled){
   field = currentField.value;
   tags = new Array(fieldName);
   setBackgroundColor(tags, "normalfeld");
   if (isRuntime) {
      if (!isEmpty(field) && !isEmail(field)) {
          setBackgroundColor(tags, "pflichtfeld");
          return false;
      }
   } else {
      if (optional == "optional") {
        if (!isEmpty(field) && !isEmail(field)) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
      } else {
          if (!isEmail(field)) {
              setBackgroundColor(tags, "pflichtfeld");
              return false;
          }
      }
   }
   }
   return true;
}

function checkInternet(fieldName) {
    currentField=document.getElementById(fieldName);
    field = currentField.value;
    tags = new Array(fieldName);
    setBackgroundColor(tags, "normalfeld");
    if (!isEmpty(field) && field != "http://" && field.indexOf(".") == -1) {
       setBackgroundColor(tags, "pflichtfeld");
       return false;
    }
    return true;
}

function checkDatum(fieldName, monatName, jahrName) {
   currentField=document.getElementById(fieldName);
   if (isRuntime) {
       punkt = "punkt2" + fieldName.substring(fieldName.indexOf("_"));
       if (fieldName.indexOf("landesvorwahl") != -1) {
           punkt = "punkt1" + fieldName.substring(fieldName.indexOf("_"));
       }
       tags = new Array(fieldName, punkt);
       setBackgroundColor(tags, "normalfeld");
       field = currentField.value;
       if (!isEmpty(field)) {
           numField = parseInt(currentField.value, 10);
           if ((fieldName.indexOf("tag") != -1 && (!isNumber(field) || numField < 0 || numField > 31)) ||
               (fieldName.indexOf("monat") != -1 && (!isNumber(field) || numField < 0 || numField > 12)) ||
               (fieldName.indexOf("jahr") != -1 && (!isNumber(field) || numField < 0))) {
                setBackgroundColor(tags, "pflichtfeld");
                return false;              
           }
       }
   } else {
       punkt1 = "punkt1" + fieldName.substring(fieldName.indexOf("_"));
       punkt2 = "punkt2" + fieldName.substring(fieldName.indexOf("_"));
       tags = new Array(fieldName, punkt1, monatName, punkt2, jahrName);
       setBackgroundColor(tags, "normalfeld");
       
       var tag = document.getElementById(fieldName).value;
       var monat = document.getElementById(monatName).value;
       var jahr = document.getElementById(jahrName).value;      
       // datum = getDate(fieldName, monatName, jahrName);
       if (!isDate(tag, monat, jahr) /*|| (isDate(tag, monat, jahr) /*&& !compareWithCurrentDate(datum))*/) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;              
       }
   }
   return true;
}

function checkDatumZeit(fieldName, monatName, jahrName, stundeName, minuteName) {
   currentField=document.getElementById(fieldName);
   if (isRuntime) {
       var tags = new Array(fieldName);
       setBackgroundColor(tags, "normalfeld");
       var field = currentField.value;
       if (!isEmpty(field)) {
           var numField = parseInt(currentField.value, 10);
           if ((fieldName.indexOf("tag") != -1 && (!isNumber(field) || numField < 0 || numField > 31)) ||
               (fieldName.indexOf("monat") != -1 && (!isNumber(field) || numField < 0 || numField > 12)) ||
               (fieldName.indexOf("jahr") != -1 && (!isNumber(field) || numField < 0)) ||
               (fieldName.indexOf("stunde") != -1 && (!isNumber(field) || numField < 0 || numField > 23)) ||
               (fieldName.indexOf("minute") != -1 && (!isNumber(field) || numField < 0 || numField > 59))) {
                setBackgroundColor(tags, "pflichtfeld");
                return false;              
           }
       }
   } else {
	   var basis = fieldName.substring(fieldName.indexOf("_"));
       var punkt1 = "punkt1" + basis;
       var punkt2 = "punkt2" + basis;
       var doppelpunkt = "doppelpunkt"
       var tags = new Array(fieldName, punkt1, monatName, punkt2, jahrName, stundeName, doppelpunkt, minuteName);
       setBackgroundColor(tags, "normalfeld");
       
       var tag = document.getElementById(fieldName).value;
       var monat = document.getElementById(monatName).value;
       var jahr = document.getElementById(jahrName).value;      
       var stunde = document.getElementById(stundeName).value;      
       var minute = document.getElementById(minuteName).value;      
       // datum = getDate(fieldName, monatName, jahrName, stundeName, minuteName);
       if (!isDateTime(tag, monat, jahr, stunde, minute)) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;              
       }
   }
   return true;
}


function getDate(tagId, monatId, jahrId, stundeId, minuteId) {
    var tag = document.getElementById(tagId).value;
    var monat = document.getElementById(monatId).value;
    var jahr = document.getElementById(jahrId).value;
    var stunde = 0;
    var minute = 0;
    var sekunde = 0;
    if (stundeId && minuteId)
    {
    	stunde = document.getElementById(stundeId).value;
    	minute = document.getElementById(minuteId).value;
    }
    return new Date(jahr,(monat-1), tag, stunde, minute, sekunde);
}

function getDateForTag(idSuffix) {
	if (document.getElementById('stunde_' + idSuffix))
		return getDate('tag_' + idSuffix, 'monat_' + idSuffix, 'jahr_' + idSuffix, 'stunde_' + idSuffix, 'minute_' + idSuffix );
	else	
    	return getDate('tag_' + idSuffix, 'monat_' + idSuffix, 'jahr_' + idSuffix);
}

function setDateForTag(idSuffix, dt) {
	var domTag = document.getElementById('tag_' + idSuffix);
	var domMonat = document.getElementById('monat_' + idSuffix);
	var domJahr = document.getElementById('jahr_' + idSuffix);
	var domStunde = document.getElementById('stunde_' + idSuffix);
	var domMinute = document.getElementById('minute_' + idSuffix);

	domTag.value = dt.getDate();
	domMonat.value = dt.getMonth() + 1;
	domJahr.value = dt.getFullYear();
	completeField(domTag);
	completeField(domMonat);
	completeField(domJahr);
	
	if (domStunde && domMinute) {
		domStunde.value = dt.getHours();
		domMinute.value = dt.getMinutes();
		completeField(domStunde);
		completeField(domMinute);
	}
}

/**
 * Pr?ft zwei S?tze von Selectbox Daten erst auf g?ltiges Datum in beiden
 * Selectboxs?tzen einzeln. Danach wird gepr?ft ob das erste Datum vor dem
 * zweiten liegt. Die function kann bei der ersten Selectbox angegeben werden.
 * alle anderen Selectboxen die dazugeh?ren m?ssen das folgendes Tag gesezt haben:
 * attributestext="onBlur='setNormalfeldOnRuntime(\"date_offline_monat\");'"
 * 
 * Die Feldnamen werden dynamisch zusammengesetzt. F?r das erste Datum wird
 * an das Prefix1 jeweils 'tag', 'monat' und 'jahr' angeh?ngt. F?r das zweite
 * DAtum wird prefix2 verwendet. 
 * Wenn mitZeit='true' ?bergeben wird werden bei beiden Daten jeweils noch die
 * stunde und minute ausgewertet.
 */
function check2SelectBoxDatum(fieldName, prefix1, prefix2, mitZeit, optional) {
   // erst die einzelnen daten pr?fen
   if (!checkSelectBoxDatum(prefix1 + "tag", prefix1 + "monat", prefix1 + "jahr", optional)) {
      checkSelectBoxDatum(prefix2 + "tag", prefix2 + "monat", prefix2 + "jahr", optional)
      return false;
   }
   if (!checkSelectBoxDatum(prefix2 + "tag", prefix2 + "monat", prefix2 + "jahr", optional)) {
      return false;
   }
   currentField=document.getElementById(fieldName);
   tags = new Array(prefix1 + "tag", prefix1 + "monat", prefix1 + "jahr",
                    prefix2 + "tag", prefix2 + "monat", prefix2 + "jahr");
   if (mitZeit == 'true') {
     tags = new Array(prefix1 + "tag", prefix1 + "monat", prefix1 + "jahr",
                      prefix1 + "stunde", prefix1 + "minute",
                      prefix2 + "tag", prefix2 + "monat", prefix2 + "jahr",
                      prefix2 + "stunde", prefix2 + "minute");
   }
   setBackgroundColor(tags, "normalfeld");
   if ('true' == optional) {
       tagI1 = parseInt(document.getElementById(prefix1 + "tag").value, 10);
       monatI1 = parseInt(document.getElementById(prefix1 + "monat").value, 10);
       tagI2 = parseInt(document.getElementById(prefix2 + "tag").value, 10);
       monatI2 = parseInt(document.getElementById(prefix2 + "monat").value, 10);
       if ((tagI1 < 0) || (monatI1 < 0) || (tagI2 < 0) || (monatI2 < 0)) {
          return true;
       }
   }
   if (isRuntime) {
       return true;
   } else {
       tag1 = document.getElementById(prefix1 + "tag").value;
       monat1 = document.getElementById(prefix1 + "monat").value;
       jahr1 = document.getElementById(prefix1 + "jahr").value;
       tag2 = document.getElementById(prefix2 + "tag").value;
       monat2 = document.getElementById(prefix2 + "monat").value;
       jahr2 = document.getElementById(prefix2 + "jahr").value;
       datum1 = new Date(jahr1, monat1, tag1);
       datum2 = new Date(jahr2, monat2, tag2);
       if (mitZeit == 'true') {
          stunde1 = document.getElementById(prefix1 + "stunde").value;
          minute1 = document.getElementById(prefix1 + "minute").value;
          stunde2 = document.getElementById(prefix2 + "stunde").value;
          minute2 = document.getElementById(prefix2 + "minute").value;
          datum1 = new Date(jahr1, monat1, tag1, stunde1, minute1);
          datum2 = new Date(jahr2, monat2, tag2, stunde2, minute2);
       }
       if (!compareDates(datum1, datum2)) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;              
       }
   }
   return true;
}

/**
 * Pr?ft ein Datum in einem Satz von 3 Selectboxen, eingesetzt wird die function
 * bei der box f?r den Tag. Monat und Jahr werden als zus?tzliche Parameter 
 * ?bergeben. Bei Monat und jahr muss die function 'setNormalfeldOnRuntime'
 * aufgerufen werden damit die rote Markierung aufgehoben wird. z.B.:
 * attributestext="onBlur='setNormalfeldOnRuntime(\"date_offline_monat\");'"
 * wenn optional='true' ist das Datum nicht mandatory.
 */
function checkSelectBoxDatum(fieldName, monatName, jahrName, optional) {
   currentField=document.getElementById(fieldName);
   tags = new Array(fieldName, monatName, jahrName);
   setBackgroundColor(tags, "normalfeld");
   if ('true' == optional) {
       tagI = parseInt(document.getElementById(fieldName).value, 10);
       monatI = parseInt(document.getElementById(monatName).value, 10);
       if ((tagI < 0) || (monatI < 0)) {
          return true;
       }
   }
   if (isRuntime) {
       return true;
   } else {
       tag = document.getElementById(fieldName).value;
       monat = document.getElementById(monatName).value;
       jahr = document.getElementById(jahrName).value;
       intMonat = parseInt(monat, 10);
       intMonat = intMonat + 1;
       if (!isDate(tag, ("" + intMonat), jahr)) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;              
       }
   }
   return true;
}
/**
 * Hilfsfunction zur function 'checkSelectBoxDatum'
 */
function setNormalfeldOnRuntime(fieldName) {

   if (isRuntime) {
       tags = new Array(fieldName);
       setBackgroundColor(tags, "normalfeld");
       return true;
   }
}

function checkKontonr(fieldName) {
    tags = new Array(fieldName);
    setBackgroundColor(tags, "normalfeld");
    currentField=document.getElementById(fieldName);
    if (isRuntime) {
        numField = parseInt(currentField.value, 10);
        if (!isEmpty(currentField.value) && (!isNumber(currentField.value) || (isNumber(currentField.value) && numField < 0))) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    } else {
        numField = parseInt(currentField.value, 10);
        if ((!isNumber(currentField.value) || (isNumber(currentField.value) && numField < 0))) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    }
    return true;
}

function checkBLZ(fieldName) {
    tags = new Array(fieldName);
    setBackgroundColor(tags, "normalfeld");
    currentField=document.getElementById(fieldName);
    if (isRuntime) {
        numField = parseInt(currentField.value, 10);
        if (!isEmpty(currentField.value) && (!isNumber(currentField.value) || (isNumber(currentField.value) && numField < 0))) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    } else {
        numField = parseInt(currentField.value, 10);
        if ((!isNumber(currentField.value) || (isNumber(currentField.value) && numField < 0))) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    }
    return true;
}

function checkPreis(fieldName, nachkommaName) {
    currentField=document.getElementById(fieldName);
    if (isRuntime) {
        if (fieldName.indexOf("zahl") != -1) {
           punkt = "punkt" + fieldName.substring(fieldName.indexOf("_"));
           tags = new Array(fieldName, punkt);
        } else {
           tags = new Array(fieldName);
        }
        setBackgroundColor(tags, "normalfeld");
        numField = parseInt(currentField.value, 10);
        if (!isEmpty(currentField.value) && (!isNumber(currentField.value) || (isNumber(currentField.value) && numField < 0))) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    } else {
        punkt = "punkt" + fieldName.substring(fieldName.indexOf("_"));
        tags = new Array(fieldName, punkt, nachkommaName);
        setBackgroundColor(tags, "normalfeld");
        nachkomma = document.getElementById(nachkommaName);
        numField = parseFloat((currentField.value+"."+nachkomma.value), 10);
        if (!isNumber(currentField.value) || !isNumber(nachkomma.value) || numField < 0) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
    }
    return true;
}

/**
 * Pr?ft ob in einem Feld eine Zahl eingegeben wurde.
 * Ist der Parameter mandatory nicht gegeben darf das Feld auch leer sein(Optional).
 * Ist dort 'mandatory' angegeben muss es ausgef?llt sein.
 */
function checkInt(fieldName, mandatory) {
   currentField=document.getElementById(fieldName);
   field = currentField.value;
   tags = new Array(fieldName);
   setBackgroundColor(tags, "normalfeld");
   if (isRuntime) {
      if (!isEmpty(field) && !isNumber(field)) {
          setBackgroundColor(tags, "pflichtfeld");
          return false;
      }
   } else {
      if (mandatory == "mandatory") {
        if (!isNumber(field)) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
      } else {
          if (!isEmpty(field) && !isNumber(field)) {
              setBackgroundColor(tags, "pflichtfeld");
              return false;
          }
      }
   }
   return true;
}

/**
 * Pr?ft die anzahl der eingegebenen Zeichen (darf nicht ?ber anzahl liegen)
 * Beispiel: <iw:textarea id="ti_teaser" css="rahmenblauabst1" attributestext='cols="70" rows="8"' tabindex="130" function="checkMax(500, 'mandatory')" errorkey="cms.error.tourist.teaser"/>
 *
 * @param anzahl Die maximal erlaubte Anzahl der Zeichen.
 * @mandatory ist dieser Parameter gegeben (Wert: 'mandatory') muss etwas eingegeben sein.
 */
function checkMax(fieldName, anzahl, mandatory) {
   tags = new Array(fieldName);
   setBackgroundColor(tags, "normalfeld");
   currentField=document.getElementById(fieldName);
   if (mandatory == "mandatory") {
       if (!isRuntime && isEmpty(currentField.value)) {
           setBackgroundColor(tags, "pflichtfeld");
           return false;
       }
   } else {
      if (isEmpty(currentField.value)) {
          return true;
      }
   }
   content = document.getElementById(fieldName).value;
   if ( content.length > anzahl) {
     setBackgroundColor(tags, "pflichtfeld");
     return false;
   }
   return true;
}

/**
 * Pr?ft die anzahl der eingegebenen Zeichen (darf nicht ?ber maxsize liegen)
 *
 * @param editorsubmit Das hidden Feld mit dem Editor Content.
 * @param anzahl Die maximal erlaubte Anzahl der Zeichen.
 */
function checkEditor(fieldName, editorsubmit, maxsize) {
   currentField=document.getElementById(editorsubmit);
   field = currentField.value;
   if (!isRuntime) {
      if (isEmpty(currentField.value)) {
          return true;
      }
      if (field.length > maxsize) {
          return false;
      }
   }
   return true;
}


/*
 * In diesem Bereich sind Funktionen zum disablen von Feldern.
 */

/**
 * Setzt ein einzelnes Formularfeld auf disabled und f?gt die Klasse 'alldisabled' hinzu.
 */
function disableOne(fieldname) {
  field = document.getElementById(fieldname);
  field.disabled = true;
  field.className = field.className + " alldisabled";
}

/**
 * Setzt ein Telefon Formularfeld auf disabled.
 */
function disableTelefon(fieldname) {

  disableOne('landesvorwahl_' + fieldname);
  disableOne('vorwahl_' + fieldname);
  disableOne('nummer_' + fieldname);
  disableOne('punkt1_' + fieldname);
  disableOne('punkt2_' + fieldname);
}

/**
 * Setzt einen Satz von Selectboxen f?r die Datumsanzeige(ohne Zeit) auf disabled.
 */
function disableDate(fieldname) {

  disableOne(fieldname + '_tag');
  disableOne(fieldname + '_monat');
  disableOne(fieldname + '_jahr');
}

/**
 * Setzt ein Telefon Formularfeld auf enabled.
 */
function enableTelefon(fieldname) {

  enableOne('landesvorwahl_' + fieldname);
  enableOne('vorwahl_' + fieldname);
  enableOne('nummer_' + fieldname);
  enableOne('punkt1_' + fieldname);
  enableOne('punkt2_' + fieldname);
}

/**
 * Setzt ein einzelnes Formularfeld auf enabled 
 */
function enableOne(fieldname) {

  field = document.getElementById(fieldname);
  field.disabled = false;
  //field.className = field.className + " allenabled"; 
}

/**
 * Setzt einen Satz von Selectboxen f?r die Datumsanzeige(mit Zeit) auf disabled.
 */
function disableDateTime(fieldname) {

  disableDate(fieldname);
  disableOne(fieldname + '_stunde');
  disableOne(fieldname + '_minute');
}

/**
 * Setzt ein Preisfeld auf disabled.
 */
function disablePreis(fieldname) {

  disableOne('zahl_' + fieldname);
  disableOne('punkt_' + fieldname);
  disableOne('komma_' + fieldname);
}

/**
 * Setzt ein einzelnes Formularfeld auf enabled.
 */
function enableOne(fieldname) {

  field = document.getElementById(fieldname);
  field.disabled = false;
  //field.className = field.className + " alldisabled";
}

/**
 * Setzt einen Knopf bzw. Link auf disabled.
 */
function disableKnopf(knopfname) {

   knopf = document.getElementById(knopfname);
   knopf.className = "buttonblaudisabled";
}





// ============================================================================
// ============================================================================
// Druckmodus
// ============================================================================
// ============================================================================

function printmode() {
    var childWindow;
    
    childWindow = window.open('','Drucken','width=800,height=650,scrollbars=yes,resizable=yes');

    // Formular: POST-Request
    document.printmodeform.submit();
    
    if (childWindow && childWindow.focus)
        childWindow.focus();    
}


// erzeugt ein neues Hidden-Input-Feld
// dies muss mit appendChild() einem Formular angeh?ngt werden
function newHidden(name, value) {
    var field = document.createElement('input');
    var type = document.createAttribute('type');
    type.nodeValue = 'hidden';
    var name = document.createAttribute('name');
    name.nodeValue = name;
    var value = document.createAttribute('value');
    value.nodeValue = value;
    field.setAttributeNode(type);
    field.setAttributeNode(name);
    field.setAttributeNode(value);
    return field;
}


// ============================================================================
// ============================================================================
// Automatische Pr?fung auf ?nderungen
// ============================================================================
// ============================================================================



var startFormcontents = new Array();

var formularHatUnterschiede = 'NACHFRAGE, OB SEITE WIRKLICH VERLASSEN WERDEN SOLL';
var nichtZuPruefendeFormulare = new Array();
var nichtZuPruefendeElemente = new Array();

function loadForm()
{
    getFormContents(startFormcontents);
}

function checkFormChanges()
{
    var endFormcontents = new Array();
    getFormContents(endFormcontents);
    if (!comparePages(startFormcontents, endFormcontents))
    {
        return confirm(formularHatUnterschiede);
    }
    return true;
}

function ignoreCheckFormChanges(formname)
{
    nichtZuPruefendeFormulare[formname] = true;
}

function ignoreElementCheckFormChanges(formname, elementname)
{
    var elemente = nichtZuPruefendeElemente[formname];
    if (elemente == null)
        elemente = '|';
    elemente += elementname + '|';
    nichtZuPruefendeElemente[formname] = elemente;
}

/**
 *  vergleicht die Formulare einer Seite
 *
 *  @returns  true = Seiten sind gleich
 */
function comparePages(formcontents1, formcontents2)
{
    // gew?hnliche Formulare pr?fen
    var form1, form2;
    for (var index in formcontents1)
    {
        if (nichtZuPruefendeFormulare[index])
            continue;
                
        form1 = formcontents1[index];
        form2 = formcontents2[index];
        if (formcontents2 == null)
            return false;

        if (!compareArrays(form1, form2, nichtZuPruefendeElemente[index]))
            return false;
    }

    // HTMLArea pr?fen
    form1 = formcontents1['__editor'];
    form2 = formcontents2['__editor'];  
    if (form1 != null)
        if (!compareArrays(form1, form2, nichtZuPruefendeElemente['__editor']))
            return false;
            
    return true;
}

/**
 * pr?ft rekursiv, ob zwei Arrays den selben Inhalt besitzen
 *
 * @param arr1      Array 1
 * @param arr2      Array 2
 *
 * @returns     true = beide Arrays sind gleich
 */
function compareArrays(arr1, arr2, ignorelist)
{
    var value1, value2, name, p;

    for (var index1 in arr1)
    {
        p = index1.indexOf('_');
        if (p > -1)
            name = index1.substring(0, p);
        else
            name = index1;
        if (ignorelist!=null && ignorelist.indexOf('|'+name+'|')!=-1)
            continue;
        value1 = arr1[index1];
        value2 = arr2[index1];
        if (value2 != value1)
            return false;
    }

    return true;
}


/**
 *  speichert den Inhalt des Formulars in einer hierarchischen Array-Struktur
 *
 *  @param formcontens     Array, in dem die Daten abgelegt werden
 */
function getFormContents(formcontents)
{
    var forms = document.forms;
    var form, elements, element, value;
    var i, j, k;
    var ename, istr;
    var editorname, editor;
    
    // gew?hnliche Formulare pr?fen
    for (i = 0; i < forms.length; ++i)
    {
        form = forms[i];
        elements = new Array();
        for (j = 0; j < form.elements.length; ++j)
        {
            element = form.elements[j];
            value = getValue(element);
            if (value != null)
            {
                ename = element.name + '_' + j;
                elements[ename] = value;
            }
        }
        formcontents[form.name] = elements;
    }
    
    // HTMLArea pr?fen
    i = 1;
    elements = new Array();
    while (true)
    {
        istr = (i == 1 ? '' : String(i));
        editorname = '__' + istr + 'editor';
        editor = eval('window.' + editorname);
        if (!editor)
            break;
        if (editor && editor.getHTML())
        {
            elements[editorname] = editor.getHTML();
        }
        ++i;
    }
    if (i > 1)
    {
        formcontents['__editor'] = elements;
    }
}

/**
 * ermittelt den Wert eines Formularfeldes
 *
 * @param element       Das Element-Objekt des Formularfelds
 *
 */
function getValue(element)
{
    var j;
    var values;
    var option;

    if (element.type == 'hidden')
        return null;

    if (element.type == 'radio' || element.type == 'checkbox')
        return element.checked;

    if (element.type == 'select-one')
    {
        option = element.options[element.selectedIndex];
        if (option.value != null)
            return option.value;
        else
            return option.text;
    }

    if (element.type == 'select-multiple')
    {
        values = '';
        for (j = 0; j < element.options.length; ++j)
        {

            option = element.options[j];
            if (option.selected)
            {
                if (values != '')
                    values += '||';
                if (option.value != null)
                    values += option.value;
                else
                    values += option.text;
            }
        }
        return values;
    }

    return element.value;
}


function setDateByCalendar(cal, nameTag, nameMonat, nameJahr) 
{
    var p = cal.params;    
    var update = (cal.dateClicked || p.electric);
    if (update) 
    {
        if (nameTag == null || nameMonat == null || nameJahr == null) 
        {
            var name    = p.button.id.substring(4);
            nameTag = "tag_" + name;
            nameMonat = "monat_" + name;
            nameJahr = "jahr_" + name;
        }
        
        if (window.checkDateOnChangeByCalendar)
            if (!window.checkDateOnChangeByCalendar(cal, nameTag, nameMonat, nameJahr))
                return;        
        
        if (document.getElementById(nameTag).nodeName == 'SELECT')
            updateDateByCalendarSelect(cal, nameTag, nameMonat, nameJahr);
        else
            updateDateByCalendarText(cal, nameTag, nameMonat, nameJahr);
            
        document.getElementById(nameTag).focus();
    }
    if (update && p.displayArea)
        p.displayArea.innerHTML = cal.date.print(p.daFormat);
    if (update && typeof p.onUpdate == "function")
        p.onUpdate(cal);
    if (update && p.flat) {
        if (typeof p.flatCallback == "function")
            p.flatCallback(cal);
    }
    if (update && p.singleClick && cal.dateClicked)
        cal.callCloseHandler();        
}


function updateDateByCalendarSelect(cal, nameTag, nameMonat, nameJahr) 
{
    var jahr    = cal.date.getFullYear();
    var monat   = cal.date.getMonth();
    var tag     = cal.date.getDate();

    if (document.getElementById(nameMonat).options[0].value == 1)
        ++monat;    
    
    updateDateByCalendarSetSelect(nameTag, tag);
    updateDateByCalendarSetSelect(nameMonat, monat);
    updateDateByCalendarSetSelect(nameJahr, jahr);
}

function updateDateByCalendarSetSelect(name, wert)
{
    var el = document.getElementById(name);
    var o = el.options;
    for (var i=0; i<o.length; ++i)
    {
        if (o[i].value == wert)
        {
            el.selectedIndex = i;
            break;
        }
    }
}

// setzt das Datum des Kalenders in die entsprechenden Felder
function updateDateByCalendarText(cal, nameTag, nameMonat, nameJahr) 
{
    var jahr    = cal.date.getFullYear();
    var monat   = cal.date.getMonth() +1;
    var tag     = cal.date.getDate();
    document.getElementById(nameTag).value = tag;
    document.getElementById(nameMonat).value = monat;
    document.getElementById(nameJahr).value = jahr;
    completeField(document.getElementById(nameTag));
    completeField(document.getElementById(nameMonat));
    completeField(document.getElementById(nameJahr));
}
// die Funktion zum Sprachwechsel (noch von igor)
function bildePfad(){
 
  pfad_neu =   document.sprachform.sprache.options[document.sprachform.sprache.selectedIndex].value;
  document.sprachform.action = pfad_neu ; /* Attribut "action" setzen */
  document.sprachform.submit();

}

// die Funktion zum Sprachwechsel (noch von igor)
function bildeIbePfad(){
 
  pfad_neu =   document.sprachform.ibesprache.options[document.sprachform.ibesprache.selectedIndex].value;
  document.sprachform.action = pfad_neu ; /* Attribut "action" setzen */
  document.sprachform.submit();

}

// OEPNV  //

function Zeit_anzeigen()
{
    var Datum = new Date()
    var std = Datum.getHours()
    var min = Datum.getMinutes()
    var tag = Datum.getDate()
    var mon = Datum.getMonth() + 1
    var yea = Datum.getYear()
    Datum = ((tag < 10) ? "0" : "") + tag
    Datum += ((mon < 10) ? ".0" : ".") + mon
    Datum += "." + yea
    Zeit = ((std < 10) ? "0" : "") + std
    Zeit += ((min < 10) ? ":0" : ":") + min
    document.RouteForm.datum.value = Datum
    document.RouteForm.zeit.value = Zeit
}

function formpop()
{
	formWin = window.open("about:blank", "formWin", "width=1024,height=768,top=0,left=0,scrollbars=yes,location=yes, directories=yes,status=yes,menubar=yes,toolbar=yes,resizable=yes");
	if (formWin && !formWin.closed)
		formWin.focus();
	return true;
}

// liefert zum angegebenen Element die ID
// IE-Bug: Elemente mit Attribut "name" werden hier ebenfalls ber?cksichtigt.
// Daher angeh?ngte Suche
function getElementById(id)
{
	var el = document.getElementById(id);
	
	if (el != null && id == el.id)
		return el;
	
	var els = document.getElementsByName(id);
	for (var i=0; i < els.length; ++i) {
		el = els[i];
		if (el.id == id)
			return el;
	}
	return null;
}

    /**
     * blendet einen Div ein oder aus.
     *
     * param eleH4 das Ueberschriftelement
     * param eleDiv das Div element das ausgeblendet werden soll.
     */
    function switchLayer(eleH4, eleDiv) {
        var h4Style = getElementById(eleH4);
        if (h4Style.className == "aufklappen") {
            h4Style.className = "zuklappen";
            getElementById(eleDiv).style.display = "block";
        } else {
            h4Style.className = "aufklappen";
            getElementById(eleDiv).style.display = "none";
        }
    }

	function displayWaitScreen(objImg,objSubmit) {
		if(document.getElementById(objImg)) {
			var elementObjImg = document.getElementById(objImg);
			elementObjImg.style.display = "inline";
			//var expression = 'document.getElementById(\''+objImg+'\').src = \''+elementObjImg.src+'\'';
			//'alert("'+expression+'");'+
			//window.setTimeout(expression,400);
		}
	}
	function displayWaitScreen(objImg, objSubmit, show) {
		if(document.getElementById(objImg)) {
			var elementObjImg = document.getElementById(objImg);
			elementObjImg.style.display = show;
			//var expression = 'document.getElementById(\''+objImg+'\').src = \''+elementObjImg.src+'\'';
			//'alert("'+expression+'");'+
			//window.setTimeout(expression,400);
		}
	}
	
	function displayWaitScreen2(el, newText, newClass){
		if(el != null && el.value != null && typeof el.value != "undefined"){
			el.value = newText;
			el.className = newClass;
		}
	}
	
//################################################
//       Methoden des DojoFramework zum nachladen.
//################################################
    // ï¿½bertrï¿½gt alle Formulardaten
    function registerForm(params, formular) {
        var elements = formular.elements;
        for (var i = 0; i < elements.length; ++i) {
            var element = elements[i];
            var name = element.name;
            if (!name)
                continue;
            var value = element.value;
            if (element.type == 'radio' || element.type == 'checkbox') {
                if (element.checked) {
                    toParam(params, name, value);
                }
            }
            else {
                toParam(params, name, value);
            }
        }
    }
    
    // mehrdeutige Felder als String-Array,
    // eindeutige Felder aber nur als String 
    // registrieren
    function toParam(params, name, value) {
        var old = params[name];
        if (old != null) {
            var arr;
            if (old.push) {
                arr = old;
            }
            else {
                arr = new Array(old);
            }
            arr.push(value);
            params[name] = arr;
            return;
        }
        else {
            params[name] = value;
        }
    }
//################################################
// Methoden des DojoFramework zum nachladen. ende
//################################################

// Jquery Parameter preparation
// e.g,; {foo:["bar1", "bar2"]} 
    function registerFormQueryString(params, formular) {		
    	registerForm(params, formular);
    	var queryString = "";
    	var sep = "";
    	
    	$.each(params,
    			function( index , value) {
    				queryString += sep + index + "=" + encodeURIComponent(value);
    				sep = "&";    				
    			}
    	);
    	
    	return queryString;
    }        

function deactivatebutton(button, button2) {
	if(button) {
		var submitObj1 = document.getElementById(button);
		if(submitObj1){
			submitObj1.style.color="#eeeeee";
			submitObj1.disabled=true;
		}
	}
	
	if(button2) {
		var submitObj2 = document.getElementById(button2);
		if(submitObj2){
			submitObj2.style.color="#eeeeee";
			submitObj2.disabled=true;
		}
	}
}

function deactivatelink(link) {
/*
	if(navigator.appVersion.indexOf("MSIE 5") == -1) {
		linkObj = document.getElementById(link);
		window.location = linkObj.href;
		window.setTimeout('linkObj.href = "javascript://void(0);";',50);
	}
*/
}

function removeLink(obj){
	if(navigator.appVersion.indexOf("MSIE") == -1) {
		if(document.getElementById(obj)){
			linkObj = document.getElementById(obj);
			window.location = linkObj.href;
			window.setTimeout('linkObj.href = "javascript://void(0);";',100);
		}
	}
}

/**
 Disabled the dates in past
**/
function isDisabled(date) {
   var MINUTE = 60 * 1000;
   var HOUR = 60 * MINUTE;
   var DAY = 24 * HOUR;
   var WEEK = 7 * DAY;
   var today = new Date;
   var valueDate = false;
   var totalDay = 365 * 50;
   var tempDate = new Date;
        tempDate.setTime(date.getTime());
        tempDate.setDate(date.getDate()-1);

   //(Math.abs(date.getTime() - today.getTime()) / DAY) > totalDay

	if((Math.abs(date.getTime() - today.getTime()) / DAY) > 1){
		valueDate = false;
	}else{
        valueDate = true;
    }
	if (!valueDate && date.getTime() < today.getTime()){
   		valueDate = true;
	}else{
   		valueDate = false;
	}	
    

return valueDate;

}

function isDisabledAbreise(date) {
   var MINUTE = 60 * 1000;
   var HOUR = 60 * MINUTE;
   var DAY = 24 * HOUR;
   var WEEK = 7 * DAY;
   var today = new Date;
   var valueDate = false;
   var totalDay = 365 * 50;
   var tempDate = new Date;
        tempDate.setTime(date.getTime());
        tempDate.setDate(date.getDate()-1);
   var anreiseDatum = new Date();
   //(Math.abs(date.getTime() - today.getTime()) / DAY) > totalDay
    anreiseDatum.setDate(getElementById("tag_anreise_1").value);
    anreiseDatum.setMonth(eval(getElementById("monat_anreise_1").value) - 1);
    anreiseDatum.setYear(getElementById("jahr_anreise_1").value);
    
	if (date.getTime() <= anreiseDatum.getTime()){
   		valueDate = true;
	}else{
   		valueDate = false;
	}	
    

return valueDate;

}
/**
 show and updates the calendar
**/
function changeCalendar(dateId,monthId,yearId, buttonId){
	
	var tag = getElementById(dateId).value;
	var month = getElementById(monthId).value;
	var year = getElementById(yearId).value;
		
	var newDate = new Date();	
	
	if(buttonId == "trigger1"){		

		newDate.setDate(tag);
		newDate.setMonth(month - 1);
		newDate.setYear(year);
		
		Calendar.setup(
		{
		date : newDate, // Default Date
		onSelect : setAnreise, // aufzurufende Funktion
		ifFormat : "%d. %m. %Y", // the date format
		button : buttonId, // ID of the button
                disableFunc : isDisabled
		}
		);	
		
		
	}
	if(buttonId == "trigger2"){		
		newDate.setDate(tag);
		newDate.setMonth(month - 1);
		newDate.setYear(year);

		Calendar.setup(
		{
		date : newDate, // Default Date
		onSelect : setAbreise, // aufzurufende Funktion
		ifFormat : "%d. %m. %Y", // the date format
		button : buttonId, // ID of the button
                disableFunc : isDisabledAbreise
		}
		);	
		
	}	
}


function findPosY(obj){
		var curtop = 0;
	    if(obj.offsetParent)
	        while(1)
	        {
	          curtop += obj.offsetTop;
	          if(!obj.offsetParent)
	            break;
	          obj = obj.offsetParent;
	        }
	    else if(obj.y)
	        curtop += obj.y;
	    return curtop;
	}
	
	function findPosX(obj)  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }


	var iwMouseX = 0;
	var iwMouseY = 0;
	
	function iwShowPreiswechsel(obj,preislayer,container) {

		var newY = findPosY(obj)+23;
		var newX = findPosX(obj)-190;
		//alert(newX+"-"+newY);
		
		var newContainer = document.createElement("div");
		newContainer.setAttribute("id",container);
		newContainer.style.display = "block";
		newContainer.style.top=newY+"px";
		newContainer.style.left=newX+"px";
		newContainer.style.position="absolute";
		newContainer.style.zIndex="500";
		document.getElementsByTagName("body")[0].appendChild(newContainer);
		newContainer.innerHTML = unescape(preislayer);
	}
	
	function iwHidePreiswechsel(obj) {
		if(document.getElementById(obj)) {
			document.getElementsByTagName("body")[0].removeChild(document.getElementById(obj));
		}
	}
	
    function iwPosition(e) {

		if (!e) var e = window.event;
		if (e.pageX || e.pageY)	{
			iwMouseX = e.pageX;
			iwMouseY = e.pageY;
		}
		else if (e.clientX || e.clientY){
			iwMouseX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			iwMouseY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}

    }
    
    /**
     * Formatiert floatvalue. Dieser wird auf 2 Zeichen hinter dem Komma gerundet, 
     * und als Dezimaltrennzeichen wird der Wert von kommachar verwendet.
     * 
     * @param floatvalue	Float-Wert
     * @param kommachar		Komma oder Punkt
     * @return				formatierter Wert
     */
    function iwFormatFloat(floatvalue, kommachar) {
    	var gerundet = Math.round(floatvalue * 100) / 100;	// auf 2 Stellen runden
    	var str = String(gerundet).replace(/\./, kommachar);
    	var p = str.indexOf(kommachar);
    	if (p == -1) {
    		str += kommachar;
    	}
    	while (str.indexOf(kommachar) > str.length - 3 ) {
    		str += '0';
    	}
    	return str;
    }
     
     
 /**
  *  Klasse zum dynamischen browserseitigen Summieren den Gesamtpreises auf der Rooms-And-Rates-Seite
  */
  var Ibe_Preise = function(buttonindex, gesamt, komma) {
	this.buttonindex = buttonindex;
  	this.zimmer = gesamt;
  	this.zusatzleistung = 0.0;
  	this.komma = komma;
  	
  	var zimmer = this.zimmer;
  	var zusatzleistung = this.zusatzleistung;
  	var komma = this.komma;

  	/**
  	 * aktualisiert den Zimmerpreis und errechnet den Gesamtpreis 
  	 */
  	this.preisinfo_zimmer = function(preis) {
  		this.zimmer = preis;
  		zimmer = preis;
  		this._preisinfo();
  	};

  	/**
  	 * aktualisiert den Zusatzleistungspreis und errechnet den Gesamtpreis 
  	 */
  	this.preisinfo_zusatzleistung = function(preis) {
  		this.zusatzleistung = preis;
  		zusatzleistung = preis;
  		this._preisinfo();
  	};

  	/**
  	 * Errechnet den Gesamtpreis für den angegebenen Button
  	 */
  	this._preisinfo = function() {
  		var id = 'rate_gesamt_' + this.buttonindex;
  		
  		if($.browser.msie) {
	  		var rateGesamtSpans = $('.rate_gesamt');
	  		if (rateGesamtSpans != null) {
	  			rateGesamtSpans.each(function() {
	  				var rateGesamtSpan = $(this);
	  				if (rateGesamtSpan.attr("id") == id) {
	  
	  					var preis = zimmer + zusatzleistung;
	  	  				var strpreis = iwFormatFloat(preis, komma);
	  	  				rateGesamtSpan.html(strpreis);
	  				}
	  			});
	  		}
  		} else {
  			var rateGesamtSpans = document.getElementsByName('rate_gesamt');
	  		if (rateGesamtSpans != null) {
	  			for (var i = 0; i < rateGesamtSpans.length; ++i) {
	  				var rateGesamtSpan = rateGesamtSpans[i];
	  				if (rateGesamtSpan.id == id) {
	  					var preis = this.zimmer + this.zusatzleistung;
	  	  				var strpreis = iwFormatFloat(preis, this.komma);
	  	  				rateGesamtSpan.innerHTML = strpreis;
	  				}
	  			}
	  		}
  		}
  	}
  	
  };     
    
