/**
 * Default JavaScript fuer LT.
 */
 
 //  init Methode
var debugOut = '';
var taste = 0, mouseX=0, mouseY=0;
var numbers = "0123456789";
var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var umlauts ="??????????????";

var submitting = new Array();
var runtime = new Array();
var runtimeChecked = new Array();
var hilightFormFields = new Array();

var prozlayer = "";
var focused = false;
var isRuntime = false;
var isSubmit = false;
var statusLayerModus = "normal";
var statusLayerMessage = "false";

var focusingField = "", currentField = "";

var currentNumberField = "";
var currentFormElement = null;
var numberFields = new Array("profilID1", "profilID3");
var numberPlusFields = new Array("");

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();

// Status, ob Runtime-Validerung erfolgreich war
var runtimeIsOk = true;
var runtimeIsOk2 = true;
var oldValue = new Array();

// Funktionen f?r die Tastenkombinationen und f?r die Erkennung des aktuellen Browsers
var netscape = navigator.appName.indexOf("Netscape") != -1;

document.onmouseover = documentOnMouseOver;
if (netscape)
	document.onkeypress = documentOnKeyPress;
else
	document.onkeydown = documentOnKeyPress;

function elementOnBlur(event) {
	var eventElement;
	if (event != null) {	// FF
		eventElement = event.target;

	} else {				// IE
		eventElement = window.event.srcElement;
	}
	
	if (window.numberFieldSet && numberFieldSet[eventElement.id] != null) {
		if (isNaN(eventElement.value) && !"+" == eventElement.value)
		{
			eventElement.value = oldValue[eventElement.id];
			alert(fehlermeldungNumerischerWert);
			return false;
		}
	}
	
	return true;
}

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;
}

function checkSearchDate(ident){
	var bool = datumJuengerHeute(ident);
	
	var datumHeute = new Date();
	var currentDay = datumHeute.getDate();
	var currentMonth = datumHeute.getMonth() + 1;
	var currentYear = datumHeute.getFullYear();
	
	if(bool){
		if(document.getElementById("tag_" + ident + "datum")){
			document.getElementById("tag_" + ident + "datum").value = currentDay;
		}
		if(document.getElementById("tag_" + ident + "datum")){
			document.getElementById("monat_" + ident + "datum").value = currentMonth;
		}
		if(document.getElementById("tag_" + ident + "datum")){
			document.getElementById("jahr_" + ident + "datum").value = currentYear;
		}
	}
}

/**
 * True, wenn das aktuelle Datum älter ist, als das ausgewählte
 * @param ident Unterscheidung zwischen Packages oder Tickets  
 * 							Beisp. ticket
 * 							Beisp. ev
 * 
 * var bool = datumGroesserHeute("ticket");
 * @return Boolean 
 */
function datumJuengerHeute(ident){
	var currentDay = "";
	var currentMonth = "";
	var currentYear = "";
	
	if(document.getElementById("tag_" + ident + "datum")){
		currentDay = document.getElementById("tag_" + ident + "datum").value;
	}
	if(document.getElementById("tag_" + ident + "datum")){
		currentMonth = document.getElementById("monat_" + ident + "datum").value;
	}
	if(document.getElementById("tag_" + ident + "datum")){
		currentYear = document.getElementById("jahr_" + ident + "datum").value;
	}
	var datum = new Date(currentYear, currentMonth - 1, currentDay);
	var datumHeute = new Date();
	
	var intDate = Calendar.dateToInt(datum);
	var intHeute = Calendar.dateToInt(datumHeute);
	
	return intHeute > intDate;
}

function documentOnMouseOver(event) {
	if (event == null || event.pageX == null) {	// IE
        mouseX = window.event.x;
        mouseY = window.event.y;	
	} else {				// FF
        mouseX=event.pageX;
        mouseY=event.pageY;	
	}
}

function documentOnKeyPress(event) {
	var eventTaste;
	var eventIstZahl;
	var eventAltKey;
	var eventCtrlKey;
	var eventElement;
	if (event != null && event.which != null) {	// FF
		eventTaste = event.which;
		eventAltKey = event.altKey;
		eventCtrlKey = event.ctrlKey;
		eventElement = event.target;
		taste = eventTaste;
		
		if (eventTaste >= 48 && eventTaste <= 57 ) {
			eventIstZahl = true;
		} else {
			eventIstZahl = false;
		}

	} else {				// IE
		eventTaste = window.event.keyCode;
		eventAltKey = window.event.altKey;
		eventCtrlKey = window.event.ctrlKey;
		eventElement = window.event.srcElement;
		
		if (eventTaste >= 96 && eventTaste <= 105 ) {	// Num-Block-Zahlen
			eventTaste = eventTaste - 48;
			eventIstZahl = true;
		}
		else if (eventTaste >= 48 && eventTaste <= 57 ) {	// Zahlen der oberen Tastatur-Zeile
			eventIstZahl = true;
		} else {
			eventIstZahl = false;
		}
		
		taste = eventTaste;
	}
	
	if (eventAltKey) {
		altKey = true;
		var aktiviert = false;
		
		if (window._standardTasten) {
			// Siehe default2.js
			aktiviert =	_standardTasten(eventTaste);
		}
		if (!aktiviert) {		
			if (window.captureKey) {
				captureKey(eventTaste);
			}
			if (window.captureKeyList) {
				captureKeyList(taste);
			}
		}
	} else {
		altKey = false;
		if (eventTaste == 13 && window.captureEnter)
			captureEnter();
	}
	

	altKey = eventAltKey;
	
	if (eventAltKey)
		return true;
	
	return checkKeycode(eventElement, eventTaste, eventCtrlKey, eventIstZahl);
}


function checkKeycode(eventElement, eventTaste, eventCtrlKey, eventIstZahl) {
	if (!window.numberFieldSet)
		return true;
		
	if (numberFieldSet[eventElement.id] != null) {
	
		// Pr?fe Zahl
		if (eventIstZahl) {
			return true;
		}
			
		// Pr?fe Strg+C Strg+V Strg+X
		if (eventCtrlKey && (eventTaste == 99 || eventTaste == 118 || eventTaste == 120)) {
    		return true;
    	}
			
		// Pr?fe Steuertasten Backspace, Tab und Return
		if (netscape && (eventTaste == 0 || eventTaste == 8 || eventTaste == 13 ) ||
			!netscape && (eventTaste == 8 || eventTaste == 9 || eventTaste == 13 )) {
			return true;
		}
			
		// Pr?fe +
		if (netscape && eventTaste == 43 || !netscape && (eventTaste == 107 || eventTaste == 187 )) {
			return checkPlusFeld();
		}
		
		return false;
	}
	
	return true;
}

function getZahl(tastencode) {
	if (tastencode >= 48 && tastencode <= 57 ) {
		return tastencode - 48;
	}
	return null;
}

function init() {
    if (window.initForm) {
        initForm();
    }
}

function register() {
}
// Diese Methode definiert ob eine Taste gedruckt worden ist.
function isAltKey() {
    return altKey;
}
// Funktion f?r Focus auf Input-Feld
function focusField(field1, fieldName2, len) {
	if (!len)
		len = 2;
    var field2 = getElementById(fieldName2);
    if (netscape) {
        if (taste != 0 && field1.value.length==len && field2.focus) {
        	try {
        		if(field2.focus){
            		field2.focus();
            	}
            }
            catch (e) {
            }
        }
    } else {
        if (!istErlaubt()) {
           return false;
        }
        if (taste != 0 && taste != 9 && taste != 16 && field1.value.length==len && field2.focus) {
        	try {
            	field2.focus();
            }
            catch (e) {
            }
        }
    }
    taste=0;
}

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 (getElementById(nameTag).nodeName == 'SELECT')
            updateDateByCalendarSelect(cal, nameTag, nameMonat, nameJahr);
        else
            updateDateByCalendarText(cal, nameTag, nameMonat, nameJahr);
        
        if (window.checkDateAfterChangeByCalendar) {
            window.checkDateAfterChangeByCalendar(cal, nameTag, nameMonat, nameJahr);
        }
		if(getElementById(nameTag).focus){
        	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 openDateByCalendar(thebutton) 
{
    var name    = thebutton.id.substring(4);

    var bTag = getElementById("tag_" + name).value;
    var bMonat = getElementById("monat_" + name).value;
    var bJahr = getElementById("jahr_" + name).value;
    if (bTag == "-1" || bMonat == "-1" || bJahr == "-1") {
        return new Date();
    }
    if (bTag == "" || bMonat == "" || bJahr == "") {
        return new Date();
    }
    try {
        var xMonat = eval(bMonat) - 1;
        return new Date(bJahr, xMonat, bTag);
    } catch (e) {
        return new Date();
    }
    
}	

function updateDateByCalendarSelect(cal, nameTag, nameMonat, nameJahr) 
{
    var jahr    = cal.date.getFullYear();
    var monat   = cal.date.getMonth();
    var tag     = cal.date.getDate();
    
    if (getElementById(nameMonat).options[0].value == 1)
        ++monat;
    
    updateDateByCalendarSetSelect(nameTag, tag);
    updateDateByCalendarSetSelect(nameMonat, monat);
    updateDateByCalendarSetSelect(nameJahr, jahr);
}

function updateDateByCalendarSetSelect(name, wert)
{
    var el = 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();
    getElementById(nameTag).value = tag;
    getElementById(nameMonat).value = monat;
    getElementById(nameJahr).value = jahr;
    completeField(getElementById(nameTag));
    completeField(getElementById(nameMonat));
    completeField(getElementById(nameJahr));
}

// Funktion fuer die Ergaenzung 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;
    }
}

// Methoden fuer das Menue von Ueber Uns im Header und im footer Start
sfHover = function() {
	if(document.getElementById("rollovermenu") != null) {
    	var sfEls = document.getElementById("rollovermenu").getElementsByTagName("li");
    	
	    for (var i=0; i<sfEls.length; i++) {
	        sfEls[i].onmouseover=function() {
	            this.className+=" sfhover";
	        }
	        sfEls[i].onmouseout=function() {
	            this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
	        }
	    }
	}
}

if (window.attachEvent) window.attachEvent("onload", sfHover);

sfHover2 = function() {
	if(document.getElementById("rollovermenu2") != null) {
	    var sfEls = document.getElementById("rollovermenu2").getElementsByTagName("li");
	    for (var i=0; i<sfEls.length; i++) {
	        sfEls[i].onmouseover=function() {
	            this.className+=" sfhover";
	        }
	        sfEls[i].onmouseout=function() {
	            this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
	        }
	    }
    }
}
if (window.attachEvent) window.attachEvent("onload", sfHover2);
// Methoden fuer das Menue von Ueber Uns im Header und im footer Ende

// 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;
}


//################################################
//       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
//################################################

// JavaScript validation Klasse
function FormValidator(name, err, reiter) {
    
    this.methode = name;
    this.message = err;
    this.reiter = reiter;
    this.isValid = validate;
    
    function validate() {
        valid = eval(this.methode);
        return valid;
    }

}

// JavaScript runtime validation
function checkRuntime(field) {
	if (isSubmit)
		return true; 
    isRuntime = true;
    
    // Zahlenfelder pr?fen
    runtimeIsOk = checkNumberField(field);
    if (!runtimeIsOk && !checkPlusFeldEinzeln(field)) {
  		field.value = oldValue[field.id];
  		alert(fehlermeldungNumerischerWert);
    	return false;
    } else {
        runtimeIsOk = true;
    }
        
    var eigenschaft = field.name;
    if (eigenschaft == null)
    {
    	runtimeIsOk = true;
    	return true;
    }
    
    if (isAltKey()) {
        runtimeIsOk = false;
        return false;
    }
    
    // Endlos-Fehlerschleifen vermeiden
    var rtcId = eigenschaft2(eigenschaft);
    var schonGeprueft = runtimeChecked[rtcId];
    runtimeChecked[rtcId] = true;
    if (schonGeprueft != null && schonGeprueft == true) {
    	return true;
    }
    
    if (!runtime[eigenschaft].isValid()) {
        runtimeIsOk = false;
        // "Prellen" verhindern und Fehlermeldung anzeigen
        // W?hrend die Alert-Box aktiv ist, dark kein weiterer Event eine Alert-Box ?ffnen
        if (runtimeIsOk2)
        {
            runtimeIsOk2 = false;
            alert(runtime[eigenschaft].message + "\n");
            runtimeIsOk2 = true;
            runtimeIsOk = true;
        }
        if(field.focus){
        	field.focus();
        }
        resetRuntimeChecked(rtcId);
        return false;
    }
    if (window.checkRuntimeForm) {
        var ok = checkRuntimeForm(field);
        if (!ok)
        {
            runtimeIsOk = false;
            resetRuntimeChecked(rtcId);
            return false;
        }
    }
    resetRuntimeChecked(rtcId);
    return true;
}

function resetRuntimeChecked(rtcId) {
	runtimeChecked[rtcId] = false;
	delete runtimeChecked[rtcId];
}
function resetRuntimeChecked(rtcId) {
	runtimeChecked[rtcId] = false;
	delete runtimeChecked[rtcId];
}

function checkNumberField(field) {
    if (window.numberFieldSet) {
	    if (numberFieldSet[field.id] != null && !checkPlusFeldEinzeln(field)) {
	    	if (isNaN(field.value)) {
	    		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 eigenschaft2(eigenschaft) {
	var eigenschaft0;
	if (eigenschaft != (eigenschaft0 = cut('jahr_', eigenschaft)) )  return eigenschaft0;
	if (eigenschaft != (eigenschaft0 = cut('monat_', eigenschaft)) )  return eigenschaft0;
	if (eigenschaft != (eigenschaft0 = cut('tag_', eigenschaft)) )  return eigenschaft0;
	if (eigenschaft != (eigenschaft0 = cut('stunde_', eigenschaft)) )  return eigenschaft0;
	if (eigenschaft != (eigenschaft0 = cut('minute_', eigenschaft)) )  return eigenschaft0;
	if (eigenschaft != (eigenschaft0 = cut('zahl_', eigenschaft)) )  return eigenschaft0;
	if (eigenschaft != (eigenschaft0 = cut('komma_', eigenschaft)) )  return eigenschaft0;
	return eigenschaft;
}

function cut(prefix, str) {
	var p = str.indexOf(prefix);
	var res;
	if (p == 0)
		res = str.substring(prefix.length);
	else
		res = str;
	return res;
}

// JavaScript Submit Validation
// nach kurzer Wartezeit
function checkSubmit() {
	isSubmit = true;
    if (document.formular && document.formular.aktion) {
        if (document.formular.aktion.value == "sprachwechsel") {
            return checkSubmitInternal();
        } else {
            setTimeout('checkSubmitInternal()', 50);
        }
    } else {
        setTimeout('checkSubmitInternal()', 50);
    }
}

function checkEmpty(fieldName) {
   
   tags = new Array(fieldName);
   setBackgroundColor(tags, "normalfeld");
   currentField=getElementById(fieldName);
   if (!isRuntime && isEmpty(currentField.value)) {
       setBackgroundColor(tags, "pflichtfeld");
       return false;
   }
   return true;
}

function checkEmail(fieldName, optional) {
   currentField=getElementById(fieldName);
   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.indexOf("optional") != -1) {
        if (!isEmpty(field) && !isEmail(field)) {
            setBackgroundColor(tags, "pflichtfeld");
            return false;
        }
      } else {
          if (!isEmail(field)) {
              setBackgroundColor(tags, "pflichtfeld");
              return false;
          }
      }
   }
   return true;
}

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 (var 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 (var i = 0; i < len; i++) {
            if (field.charAt(i)!=' ') {
                return false;
            }
        }
    }
    return true;
}

// Function fuer die ueberpruefung der Zahlen '+' und '-' sind hier erlaubt
function isNumber(field) {
    if (isEmpty(field)) {
        return false;
    }
    var len = field.length;
    for (var 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;
}

// Prueft, ob value eine positive Zahl ist
function isPositiv(value)
{
    return value != null && !isNaN(value) && parseInt(value, 10) > 0;
}


// Function fuer die ueberpruefung der Zahlen '+' und '-' sind hier nicht erlaubt
function isUnsignedNumber(field) {
    if (isEmpty(field)) {
        return false;
    }
    var len = field.length;
    for (var i = 0; i < len; i++) {
        if (numbers.indexOf(field.charAt(i))==-1) {
            return false;
        }
    }
    return true;
}

// Function fuer die ueberpruefung belibiger Werte. Es wird geprueft ob alle Zeichen von field in master enthaltensind
function isInMaster(field, master) {
    if (isEmpty(field)) {
        return false;
    }
    var len = field.length;
    for (var i = 0; i < len; i++) {
        if (master.indexOf(field.charAt(i))==-1) {
            return false;
        }
    }
    return true;
}

// Function fuer die ueberpruefung der Zahlen fuer Telefon und Faxfelder. Erstmal ist alles erlaubt.
function isTNumber(field) {
    if (isEmpty(field)) {
        return false;
    }
    return true;
}

// Function f?r die ?berpr?fung eine Email
function isEmail(field) {
    if (isEmpty(field)) {
        return false;
    }

    field = decodeURI(field);
    field = field.replace(/%40/,'@');

    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 (var 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 den Vergleich zwei Daten
function compareDates(smallerDate, greaterDate) {
    smallerDateTime = smallerDate.getTime();
    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) {

	// Klasse Normalfeld pro Submit nur 1x setzen
	if (klasse == "normalfeld") {
		for(var i=0; i < tags.length; i++) {
			var tag = tags[i];
			if (hilightFormFields[tag]) {
				return;
			}
			hilightFormFields[tag] = true;
		}
	}

	// Styleklasse auf alle angegebenen Tag setzen
    for(var i=0; i < tags.length; i++) {
    	var tag = tags[i];
        var el = getElementById(tags[i]);
        if (el == null)
            continue;
        var aktuelleKlasse = getElementById(tags[i]).className;
        var pflichtfeld = aktuelleKlasse.lastIndexOf(" pflichtfeld");
        if (pflichtfeld != -1) {
            aktuelleKlasse = aktuelleKlasse.substring(0, pflichtfeld);
        }
        var normalfeld = aktuelleKlasse.lastIndexOf(" normalfeld");
        if (normalfeld != -1) {
            aktuelleKlasse = aktuelleKlasse.substring(0, normalfeld);
        }
        aktuelleKlasse = aktuelleKlasse + " " + klasse;
        getElementById(tags[i]).className = aktuelleKlasse;
    }
}


// Reset tabindex
function resetTabindex(field) {
	if(statusLayerModus != "stop"){
		if (!isSubmit)
			if(field.focus){
    			field.focus(); 
    		}
    } 
}

/*
 * In diesem Bereich sind Funktionen f?r checkSubmit() Methode definiert worden, die Allgemeing?ltig sind.
 */
 
 
 // CurrencyFormat with sprachId
 
 function currencyFormat(preis,sprachId){
	if(sprachId == 'de'){ 	
		preis = preis.toFixed(2);
		preis = preis.replace('.',',');
	}else{
		preis = preis.toFixed(2);
	}
	return preis;		
 }
 

// removes whitespace from the beginning and end of a string
// null string will be converted to empty strings
function trim(str) {
	if (str == null) {
		return '';
	}
	var res = str.replace(/^\s*(.*?)\s*$/, '$1');
	return res;
}
 
function ticket_ajax_call(formElement, resultContainerId, options) {
	var url = null;
	var doExecuteJavascript = false;

	if ( typeof options == "object" && typeof options != "undefined") {
		url = trim(options.url);
		doExecuteJavascript = options.doExecuteJavascript;
	}

	// get the url
	if (url == '') {
		url = trim(formElement.action);
	}
	if (url == '') {
		url = trim(location.pathname);
	}
	options.url = url;
	options.formElement = formElement;
	options.resultContainerId = resultContainerId;
	// collect the parameters of the ajax call
	var ajaxParams = {
		url: url,
		formNode: formElement,
		mimetype: 'text/plain',
		load: function(type, data, evt) {
			options.type = type;
			options.data = data;
			options.evt = evt;
			
			// ggf. Callback-Methode starten
			if (typeof options.callback == 'function') {
				var result = options.callback();
				
				// wenn die Callback-Methode mit false antwortet, wird die Verarbeitung abgebrochen 
				if (typeof result == 'boolean') {
					if (result == false) {
						return;
					}
				}
			}
			
			if (!data || data == '') {
				try {
					// try to log to firebug
					if (window.console && window.console.error) {
						console.error('Ajax error: no data received');
					}
				}
				catch (e) {
				}
			}
			else {
				var resultContainer = document.getElementById(resultContainerId);
	  			resultContainer.innerHTML = data;
	  			if (doExecuteJavascript == true) {
	  				executeScriptElements(resultContainer);
	  			}	  			
			}		
		},
		error: window.handleAjaxError
	};
	// make Ajax call
	dojo.io.bind(ajaxParams);
}


// Image animation start
function start_Image_Animation(animationImagePath,imageId) {
	var imageTag = document.getElementById(imageId);	
	imageTag.src = animationImagePath;	
}

function stop_Image_Animation(defaultImagePath,imageId) {
	var imageTag = document.getElementById(imageId);	
	imageTag.src = defaultImagePath;
}

// Image animation start
function start_Css_Animation(css_class_name,button_Id) {
	var button_Tag = document.getElementById(button_Id);
	if(button_Tag){	
		button_Tag.className = css_class_name;
	}	
}

function stop_Css_Animation(default_css_class_name,button_Id) {
	var button_Tag = document.getElementById(button_Id);
	if(button_Tag){	
		button_Tag.className = default_css_class_name;
	}
}

    function checkAnreise(instance) {

		var anreise_tag;
		var anreise_monat;
		var anreise_jahr;
		var abreise_tag;
		var abreise_monat;
		var abreise_jahr;
		
		if(instance.indexOf("abreise")!=-1){
			var instance1 = "tag_abreise";
			var instance2 = "monat_abreise";
			var instance3 = "jahr_abreise";
		}else{
			var instance1 = "tag_anreise";
			var instance2 = "monat_anreise";
			var instance3 = "jahr_anreise";
		}
		
		var today = new Date();
		
		if(document.getElementById(instance1))
			reqTag = document.getElementById(instance1).value;
		else
			reqTag = today.getDay();
		if(document.getElementById(instance2))
			reqMonat = document.getElementById(instance2).value;
		else
			reqMonat = today.getMonth();
			
		if(document.getElementById(instance3))
			reqJahr = document.getElementById(instance3).value;
		else
			reqJahr = today.getFullYear();

		var day = parseInt(reqTag);
		var month = parseInt(reqMonat);
		var year = parseInt(reqJahr);
		console.debug(month+" -> "+reqMonat);
		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 (reqTag <= 0){	document.getElementById(instance1).value = "01";	}
		if (reqTag > daysInMonth){	document.getElementById(instance1).value = daysInMonth;	}
		
		if(reqMonat <= 0) {	document.getElementById(instance2).value = "01";	}
		if(reqMonat > 12) {	document.getElementById(instance2).value = "12";	}
          
		var dateSet = new Date(year,month,day);
		
		if (dateSet<today) {
			return false;
		}
       
        return true;
    }
    
    function checkAbreise(instance){
    	return checkAnreise(instance);
    }

	function check(instance){
		// What should happen here?
	}
	
	function selectAll(obj){
		if(typeof obj != "object")
			obj = document.getElementById(obj);
			
		if(obj != null && typeof obj != "undefined" && obj){
			if(obj.select){
				obj.select();
			}
		}
	}
	
	// Unterdrückt Doppelklick bei einem Element el
	var clicked = false;
	function noDblClick(ev) {
		var el = ev.target;
		if (!(clicked) && el.href != undefined) {
			clicked = true;
			var href_orig = el.href;
			location.href = href_orig;
			el.href="javascript: void(0)";
			window.setTimeout(function() {
				el.href = href_orig;
				clicked = false;
			},500);
			return false;
		}
		
	}
	
	// Registriert die Doppelklick-Unterdrückung
	function registerNoDblClick(elementName) {
	    var array = document.getElementsByTagName(elementName);
	    for (var i = 0; i < array.length; ++i) {
	        var el = array[i];
	        var find_javascript = /^javascript\:/;
	        var find_hash = /^#/;
			if (((el.target == null) || (el.target == undefined) || (el.target == "")) && (!(find_javascript.test(el.href))) && (!(find_hash.test(el.href))) && (el.href != undefined) && (el.href != "#")) {
				dojo.event.connect(el, 'onclick', noDblClick);
			}
		}
	}

	dojo.addOnLoad(function() {
		var browser=navigator.appName;
		var b_version=navigator.appVersion;
		var version=parseFloat(b_version);
		if (!(browser=="Microsoft Internet Explorer") && (version<=4)) {
		    // Unterdrückt Doppelklicks
		    registerNoDblClick('a');
			// registerNoDblClick('button');
		}
	});

