var NavTyp = "";
if(-1 != navigator.appVersion.indexOf(';'))
{
    var Temp = navigator.appVersion.split(';');
    
    if(Temp[1].search(/5.+/) != -1){
        NavTyp="IE5";
    } else if(Temp[1].search(/6.+/) != -1){
        NavTyp="IE5";
    }
}
var orgButtonText = '';
/**
 * Key-Ereignisse überwachen - Mozilla-Compatible
 */
var Taste = "";
var check = true; // Submit-Blocker(@see doFormActionOnKeyPress()) wenn false -> nix tun
// Mozilla-Variante
function Ausgabe (Ereignis) {
  Taste = Ereignis.which;
}

var _checked = null;
/** Alle Checkboxen innerhalb des Root-Elementes werden aktiviert (ziel=true), deaktiviert(ziel=false), oder umgeschalten (ziel=switch)
 * @param object rootObj z.B. tbody - Object um den zu aktivierenden Block
 * @param ziel
 * @param clickObj wenn gefuellt: Inhalt wird auf "alle ausw&auml;hlen" bzw. "Auswahl aufheben" gesetzt
 */
checkallFromRoot = function(rootObj, ziel, clickObj) {
  if(rootObj)
  {
    if(typeof clickObj == 'object' && ziel == 'switch') {
      if(clickObj.innerHTML == 'Auswahl aufheben') {
        clickObj.innerHTML = 'Alle ausw&auml;hlen'; 
        ziel = false;	  
      } else {
        clickObj.innerHTML = 'Auswahl aufheben';
        ziel = true;
      }
    }

    // var rootObj = document.getElementById(rootTag);      
    // alert(rootObj.nodeName);
    if(typeof rootObj == 'object' && rootObj.hasChildNodes())
    {
      var childs = rootObj.childNodes;
      for(var i = 0; i < childs.length; i++)
      {
        if(typeof childs[i] == 'object')
        {		  
          if(childs[i].nodeName == 'INPUT' && childs[i].type == 'checkbox')
          {
            switch(ziel){
              case 'switch':			
                if(childs[i].checked == true) { 
                  childs[i].checked = false; 
                  _checked = false;
                }
                else {
                  childs[i].checked = true;
                  _checked = true;
                }			
                break;
              default:
                childs[i].checked = ziel;
                break;
            }	
          } 
        }
        if(childs[i].hasChildNodes())
        {
          checkallFromRoot(childs[i],ziel,clickObj);
        }
      }	  
    }
  }
}
/** welche Aktion soll, bei welchem Key durchgeführt werden
 * - diese Funktion soll return_key_pressed ersetzen, wegen Kompatibilität
 * - !!! aktion sollte im switch nach Wunsch erweitert werden
 * @param object formObj - in welchem Formular
 * @param aktion string  - soll aktion
 * @param object formEl  - auf Formular-Element(wenn false -> dann direkt auf Formular-Object) ausgeführt werden
 * @param int taste      - wenn diese taste gedrückt wurde
 */
function doFormActionOnKeyPress(formObj, aktion, formEl, taste)
{
  // IE
  if(window.event)
    {
      Ereignis = window.event;
      Taste = Ereignis.keyCode;
    }
  else
    {
      // Mozilla
      if(window.captureEvents) {
	window.captureEvents(Event.KEYPRESS);
	window.onkeypress = Ausgabe;
      }
    }
  if(Taste == 13 && taste == 13)
    {
      // in Textareas soll die Enter-taste einen Zeilenumbruch bewirken
      // das ist so, war schon immer so und soll so bleiben
      if(formEl.type == 'textarea' && formEl.focus)
	{
	  return false;
	}
    }
  
  if(Taste == taste && check == true)
    {
      check = false; // Einmal reicht
      switch(aktion) {
      case 'submit': // Formular abschicken
        formObj.submit();
        break;
      case 'call': // Aufruf einer Javascript-Funktion
        eval(formEl);
        check = true;
        return true;
        break;
      default:
        return true;
        break;
      }
    }
  return false;
}
/** ENDE Key-Ereignisse */

//alert(NavTyp);

function button_sperren(button) {
  if(button != 'ALL') {
        // Sperrt den Submit-Button bis neue Seite geladen,
        // und "ndert den Text auf 'Bitte warten...'.
        // Aufruf im form-Tag: onsubmit="button_sperren(document.formularName.submitbuttonName)"
        orgButtonText = button.value;
        button.value = "Bitte warten...";
        button.disabled = true;
    }
  else {
      var AnzahlFormulare = document.forms.length;
    for(var j=0;j<AnzahlFormulare;j++) {
	  AnzahlElemente = document.forms[j].elements.length;
      for(var i=0;i<AnzahlElemente;i++) {
        if(document.forms[j].elements[i].type == 'submit' 
            || document.forms[j].elements[i].type == 'button'  
            || document.forms[j].elements[i].type == 'reset' ) {
          // alle Button sperren !!! ACHTUNG: gesperrte(disabled) Elemente werden nicht via POST übergeben !!!
          // Bitte beachten, wenn der Name des gedrückten Buttons abgefragt werden soll!
          //		  document.forms[j].elements[i].value = "Bitte warten...";
          document.forms[j].elements[i].disabled = true;
        }
      }
    }
  }
  //so, nun auch mal noch den Mauszeiger auf Sanduhr!
  //so erkennen die meisten (DAU) noch besser das nun nix geht
  try {
    document.getElementsByTagName("body")[0].setAttribute("cursor", "wait");
    document.getElementsByTagName("form")[0].setAttribute("cursor", "wait");
  }
  catch (e) {}
}

// alle Button auf der Seite sperren

// Helpfuncs einbinden
document.write("<script language='JavaScript' src='/skripte/helpfuncs.js'></script>");
// button-sperren für Kundenbuchung, bzw. für den Fall, daß man mehrere Button gleichzeitig sperren will
function kubu_button_sperren(ButtonArr) {
  var nurdiese = false;
  var AnzahlFormulare = document.forms.length;
  // Sperrt den Submit-Button bis neue Seite geladen,
  // und "ndert den Text auf 'Bitte warten...'.
  // Aufruf im form-Tag: onsubmit="button_sperren(document.formularName.submitbuttonName)"
  if(ButtonArr.length > 0)
    {
      nurdiese = true;
    }
  for(var j=0;j<AnzahlFormulare;j++)
    {
      AnzahlElemente = document.forms[j].elements.length;
      for(var i=0;i<AnzahlElemente;i++)
        {
          if(document.forms[j].elements[i].type == 'submit')
            {
              if( nurdiese == true && inArray(document.forms[j].elements[i].name,ButtonArr) == true)
                { // nur Elemente sperren, die im ButtonArr stehen
                  orgButtonText = document.forms[j].elements[i].value;
                  document.forms[j].elements[i].value = "Bitte warten...";
                  document.forms[j].elements[i].disabled = true;
                }
              else if(nurdiese == false)
                { // alle Button sperren !!! ACHTUNG: gesperrte(disabled) Elemente werden nicht via POST übergeben !!!
                  // Bitte beachten, wenn der Name des gedrückten Buttons abgefragt werden soll!
                  orgButtonText = document.forms[j].elements[i].value;
                  document.forms[j].elements[i].value = "Bitte warten...";
                  document.forms[j].elements[i].disabled = true;
                }
            }
        }
    }
}
/**
 * soll der Name des gedrückten button abgefragt werden
 * und Button wird gesperrt, dann unbedingt diese Funktion
 * als onClick-Ereignis aufrufen
 */
function setSubmitHidden(HiddenId,HiddenName,HiddenValue){
  
  var HiddenObj = document.getElementById ? document.getElementById(HiddenId) : document.all.HiddenId;
  
  HiddenObj.name = HiddenName;
  HiddenObj.value = HiddenValue;
  
  if('' != HiddenObj.name && '' != HiddenObj.value)
    {
      return true;
    }
  else
    {
      return false;
    }
}


function button_entsperren(button) {
  // ENT _ Sperrt den Submit-Button bei einem JS - Fehlerabfang
  // und aendert den Test auf Das Orginal zurueck
  // Aufruf im form-Tag: onsubmit="button_entsperren(document.formularName.submitbuttonName)"
  if(button != 'ALL')
    {
        // Sperrt den Submit-Button bis neue Seite geladen,
        // und "ndert den Text auf 'Bitte warten...'.
        // Aufruf im form-Tag: onsubmit="button_sperren(document.formularName.submitbuttonName)"
      button.disabled = false;
      button.value = orgButtonText;
    }
    else
    {
        var AnzahlFormulare = document.forms.length;
        for(var j=0;j<AnzahlFormulare;j++)
        {
            AnzahlElemente = document.forms[j].elements.length;
            for(var i=0;i<AnzahlElemente;i++)
            {
				if(document.forms[j].elements[i].type == 'submit' || document.forms[j].elements[i].type == 'button'  || document.forms[j].elements[i].type == 'reset' )
                {
                    // alle Button sperren !!! ACHTUNG: gesperrte(disabled) Elemente werden nicht via POST übergeben !!!
                    // Bitte beachten, wenn der Name des gedrückten Buttons abgefragt werden soll!
//                    document.forms[j].elements[i].value = document.forms[j].elements[i].name;
                    document.forms[j].elements[i].disabled = false;
                }
            }
        }
    }
  
  //so, nun auch mal noch den Mauszeiger auf wieder zurueck auf DEFAULT ZEIGER!!
  //so erkennen die meisten (DAU) das es wieder geht
  try {
    document.getElementsByTagName("body")[0].style.setAttribute("cursor", "default");
    document.getElementsByTagName("fieldset").style.setAttribute("cursor", "default");
    document.getElementsByTagName("form").style.setAttribute("cursor", "default");
  }
  catch (e) {
  }
}

/**
 * soll die Funktion button_sperren mit Partameter 'ALL'
 * verwendet werden, muß diese Funktion am Ende der Seite aufgerufen
 * werden (im Template)
 * !!! Wichtig !!! - alle Button müssen unterschiedliche Namen haben !!!
 */
function initButton()
{
  var AnzahlFormulare = document.forms.length;
  orgButtonText = new Array();
  for(var j=0;j<AnzahlFormulare;j++)
    {
      AnzahlElemente = document.forms[j].elements.length;
      for(var i=0;i<AnzahlElemente;i++)
	{
	  if(document.forms[j].elements[i].type == 'submit' || document.forms[j].elements[i].type == 'button')
	    {
	      // alle Button sperren !!! ACHTUNG: gesperrte(disabled) Elemente werden nicht via POST übergeben !!!
	      // Bitte beachten, wenn der Name des gedrückten Buttons abgefragt werden soll!
	      orgButtonText[document.forms[j].elements[i].name] = document.forms[j].elements[i].value; 
	    }
	}
    }
}

function return_key_pressed(kcode) {
 // submit beim Dr_cken der Returntaste
  // wird wie folgt im Formularfeld aufgerufen:
  // onKeydown="return return_key_pressed(window.event.keyCode);"
  if (13 == kcode) {
    if(document.getElementById('formular') && document.getElementById('wartemal'))
      {
	switchWaiting(true);
      }
    return true;
  }
  if(document.getElementById('formular') && document.getElementById('wartemal'))
    {
      switchWaiting(false);
    }
  return false;
}

function clearInput(input_field,anzeige)
{
  if(anzeige == 1)
    {
      if ( input_field=='eingabekunde' )
	{
	  document.kDaten.nn.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='nn' )
	{
	  document.kDaten.eingabekunde.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='karte' )
	{
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.kartepnr.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.nn.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='kartepnr' )
	{
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.karte.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.nn.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='kid' )
	{
	  document.kDaten.karte.value='';
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.kartepnr.value='';
	  document.kDaten.nn.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='tel' )
	{
	  document.kDaten.nn.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.eingabekunde.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='search_value' )
	{
	  document.kDaten.nn.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.tel.value='';
	}
    }
  else
    {
      if ( input_field=='eingabekunde' )
	{
	  document.kDaten.nn.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='nn' )
	{
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='karte' )
	{
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.kartepnr.value='';
	  document.kDaten.nn.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='kartepnr' )
	{
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.nn.value='';
	  document.kDaten.tel.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='tel' )
	{
	  document.kDaten.nn.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.eingabekunde.value='';
	  if(document.kDaten.search_value)
	    {
	      document.kDaten.search_value.value='';
	    }
	}
      else if ( input_field=='search_value' )
	{
	  document.kDaten.nn.value='';
	  document.kDaten.karte.value='';
	  document.kDaten.kartepnr.value='';
	  if(document.kDaten.kid){
	    document.kDaten.kid.value='';
	  }
	  document.kDaten.eingabekunde.value='';
	  document.kDaten.tel.value='';
	}
    }
}

function AutoBuchen(count){
    var buchmich = false;
	var Adresse = "";
    for(var i=0; i<count;i++){
        var radioobj=document.getElementById ? document.getElementById("buradio"+i) : document.all.buradio+i;
        var linkobj=document.getElementById ? document.getElementById("link"+i) : document.all.link+i;
        if(radioobj.checked == true){
            document.bu.bubtn.focus();
            button_sperren(document.bu.bubtn);
            if(NavTyp == "IE5"){
                Adresse=linkobj.value;
            }else{
                Adresse=encodeURI(linkobj.value);
            }
            //alert("Ziel: "+Adresse);
            document.bu.action=Adresse;
            buchmich = true;
        }
    }
    if(buchmich == true){
        return true;
    } else {
        return false;
    }
}

/** Klasse zum abfangen das in Auswahlfeldern die Scrollen Fehler verursacht */
function classReload(){
  this.isChanged = 0;
  this.scrollReload = scrollReload;
  this.scrollDoFunction = scrollDoFunction;
}
/* für Redirect */
function scrollReload(myurl){
  if(! this.isChanged){
    this.isChanged = 1;
    location.href = encodeURI(myurl);
  }
}
/* für Funktionsaufruf */
function scrollDoFunction(functionText) {
  if(! this.isChanged){
    this.isChanged = 1;
    eval(functionText);
  }
}
/** ENDE DER KLASSE */

/* Funktion, die aus einer Gruppe von Radio-Objekten, den selectierten Value oder Index ausgibt */
// 3 Parameter: 1: Objekt (document.forms[].RadioName);
// 2: was zurueck ('value' || 'index');  - optional DEFALUT: 'index'
// 3: Warnings & Errors true || false;   - optional DEFALUT: false
// bei Fehler gibt es ein -1 sonst den geforderten Wert

var radioGroup = new Array();

function getCheckedRadiobuttonInfo(radioGroup) {
   var retKey = 'index';
   if (getCheckedRadiobuttonInfo.arguments[1] && getCheckedRadiobuttonInfo.arguments[1].length != 0 ) {
       retKey = getCheckedRadiobuttonInfo.arguments[1];
   }

   var debug = false;
   if (getCheckedRadiobuttonInfo.arguments[2]) {
       debug = getCheckedRadiobuttonInfo.arguments[2];
   }
   //Fehlerbehandlung - wenn keine Object-Group
   if (!radioGroup || radioGroup.length == 0 ) {
       if ( debug == true ) {
           alert('Es existiert keine Radio-Button-Gruppe zum auswerten!');
       }
       return -1;
   }
   //auswertung der Radio-Gruppe
   var retVal = null;
   for (var i=0; i < radioGroup.length; i++ ) {
       if ( radioGroup[i].checked ) {
           if ( retKey == 'value' )     {
               retVal = radioGroup[i].value;
           }
           else {
               retVal = i;
           }
           //und zurueck
           return retVal;
       }
   }
   //Fehlerbehandlung - wenn in der Liste nichs gecheckt...
   if ( debug == true ) {
       alert('Die Auswertung der Radio-Button-Gruppe fuehrte zu keinem Ergebnis!');
   }
   return -1;
}
// Holt die selektierten Werte einer (Multi-)Selectbox (obj) und gibt diese als
// als kommaseparierte Liste zurück
function getSelectedMulti(obj)
{ 
  var selectObj = document.getElementById ? document.getElementById(obj) : document.all.obj;
  var erg = "";
  if(selectObj)
    {
      var _list_arr = new Array(); // gewünschte
      var _list_arr_alt = new Array(); // alternative
      var j = 0;
      var k = 0;
      for(var i = 0; i < selectObj.options.length; i++)
        {
          if(selectObj.options[i].selected == true)
            {
              _list_arr[j] = selectObj.options[i].value;
              j++;
            }
          else
            {
              _list_arr_alt[k] = selectObj.options[i].value;
              k++;
            }
        }
      erg =_list_arr.join(',');
      // ich komme z.B. von normaler Buchanfrage
      if(erg == "egal")
        {
          erg = _list_arr_alt.join(',');
        }
    }
  else
    {
      erg = "";
    }
  return erg;
}

//aehnlich wie die Funktion: getSelectedMulti nur das wir hier als param 
//nicht den Namen des Objektes haben, sondern das objekt selber
function getSelectedMultiByObj(obj)	
{
	//die vars die man so halt brauch
    var _list_arr = new Array(); // gewünschte
    var _list_arr_alt = new Array(); // alternative
    var j = 0, k = 0;
    var erg = "";
	//mal alles in ein lokales array (objekt) packen
	var myObj = obj;
	//schauen wo wir es herholen
	var myType =  (myObj.type ? myObj.type : myObj[0].type) ;
	//hier nun die einzelen verarbeitung
	switch(myType) 
	{
		case "select-multiple":		//wir haben also ein MULTI-Select
		case "select-one":		//wir haben also ein Select - eig. nutzlos, aber wer weiss
		case "select":		//wir haben also ein Select - eig. nutzlos, aber wer weiss
			for(var i = 0; i < myObj.options.length; i++)
			{
				if(myObj.options[i].selected == true)
			    {
			    	_list_arr[j] = myObj.options[i].value;
			         j++;
				}
				else
			    {
			    	_list_arr_alt[k] = myObj.options[i].value;
					k++;
				}
			}
			erg =_list_arr.join(',');
			// ich komme z.B. von normaler Buchanfrage!!
			if(erg == "egal")
			{
				erg = _list_arr_alt.join(',');
			}
			break;
			
		case "checkbox":				//wir haben also eine Gruppe checkboxen array
			if(myObj.length)	{
				for(var i = 0; i < myObj.length; i++)
				{
					if(myObj[i].checked == true)
				    {
				    	_list_arr[j] = myObj[i].value;
				        j++;
					}
				    else
				    {
				        _list_arr_alt[k] = myObj[i].value;
						k++;
				    }
				}
			}
			else {
				_list_arr[0] = myObj.value;
			}
			erg =_list_arr.join(',');
			// ich komme z.B. von normaler Buchanfrage
			if(erg == "egal")
			{
				erg = _list_arr_alt.join(',');
			}
			break;
			
		default:
			alert("Kein gültiger Typ: " + obj.type + "  - Name: " + obj.name);
			return "";
//			return false;
	}
	return erg;
//	alert("erg: "+ erg);
//	return false;
}

/**
 * Selected/Checked alle Elemente des typs elmtype
 * im formular formname, oder in allen Formularen wenn formname == ALL
 */
function setAll(elmtype, form, todo)
{
  if(form == 'ALL')
    {
      var AnzahlFormulare = document.forms.length;
      for(var j=0;j<AnzahlFormulare;j++)
	{
	  AnzahlElemente = document.forms[j].elements.length;
	  for(var i=0;i<AnzahlElemente;i++)
	    {
	      if(document.forms[j].elements[i].type == elmtype)
		{
		  switch (elmtype){
		  case 'checkbox':
		  case 'radio':
		    document.forms[j].elements[i].checked = todo;
		    break;
		  }
		}
	    }
	}
    }
  else
    {
      AnzahlElemente = form.elements.length;
      for(var i=0;i<AnzahlElemente;i++)
	{
	  if(form.elements[i].type == elmtype)
	    {
	      switch (elmtype){
	      case 'checkbox':
	      case 'radio':
		form.elements[i].checked = todo;
		break;
	      }
	    }
	}
    }
}
// Kubu
function ChangeStadt(proc, session) {

  var x=document.bookingForm.stadt_id.options[document.bookingForm.stadt_id.selectedIndex].value;

  var submit_blocker = document.bookingForm.submit_blocker.value;

  var linkaction="process.php?proc="+proc+"&"+session+"&stadt_id="+x;

  if('' == submit_blocker) {
    self.location.href = linkaction;
  }
  document.bookingForm.submit_blocker.value = 1;
}
// Kubu
function setAusstChanged(){
  document.bookingForm.ausst_waschanged.value="1";
}
function setKlassChanged(){
  document.bookingForm.klasse_waschanged.value="1";
}
//checkt oder uncheckt alle checkboxen im angegebenen form
function checkAllCheckboxesInForm(currForm)    {
    for (var i=0; i<currForm.elements.length; i++)      {
        if(currForm.elements[i].type == 'checkbox')   {
            currForm.elements[i].checked = !currForm.elements[i].checked;
        }
    }
}
function switchWaiting(what)
{
  if(document.getElementById('head')) document.getElementById('head').focus();
  if(what == true) { 
    document.getElementById('formular').style.visibility = 'hidden'; 
    document.getElementById('formular').style.display = 'none';
    document.getElementById('wartemal').style.visibility = 'visible'; 
    document.getElementById('wartemal').style.display = 'block';
  } else {
    if(document.anchors["head"]) document.anchors["head"].focus();
    document.getElementById('formular').style.visibility = 'visible'; 
    document.getElementById('formular').style.display = 'block';
    document.getElementById('wartemal').style.visibility = 'hidden'; 
    document.getElementById('wartemal').style.display = 'none';
  }
}



// Klasse zum erstellen einer Formularmaske mit der Werte von
// einem Selectfield in ein anderes uebertragen werden koennen.
// Das erste enthaelt dabei alle verfuegbaren Werte waehrend das
// zweite die einer Sache zugeordneten Werte enthaelt
// USE:
//      var allocator = new SelectfieldBasedValueAllocator('allocator' !!!muss immer gesetzt sein!!!
//                                                        [Parameterliste laut beschreibung]
//                                                        );
//      allocator.generateAllocator(); // erstellt und plaziert die Maske
//      var allocatedValues = allocator.getAllocatedValues()
//
//
//
// Konstruktur der Klasse SelectfieldBasedValueAllocator
// Parameter
//  string  allocatorObject            Name der Instanz der Klasse SelectfieldBasedValueAllocator
//  array   availableValueList         Liste aller moeglichen zuordenbarer Werte
//                                     mehrdimensionales JS Array mit folgenden Keys
//                                         array[index]['optionValue']         - der Wert welches vom Formular uebertragen wird
//                                                     ['optionText']          - die angezeigte Beschreibung des Werte
//                                                     ['optionTextColor']     - Schriftfarbe der Beschreibung Format: #xxxxxx
//                                                     ['optionIsChangeable']  - wenn 1 gesetzt wird, wird dieser Wert angezeigt, 
//                                                                               ist aber nicht uebertragbar
//                                                     ['optionJsOnClick']     - Javascript das bei einem MouseOver-Event auf dieses
//                                                                               Option-Element ausgefuehrt werden soll
//                                                                               (onmouseover="JavaScript: array[index]['optionJsOnClick']")
//  array   allocatedValueList         Liste aller aller bereits zugeordneten Werte
//                                     mehrdimensionales JS Array mit folgenden Keys
//                                         array[index]['optionValue']         - der Wert welches vom Formular uebertragen wird
//                                                     ['optionText']          - die angezeigte Beschreibung des Werte
//                                                     ['optionTextColor']     - Schriftfarbe der Beschreibung Format: #xxxxxx
//                                                     ['optionIsChangeable']  - wenn 1 gesetzt wird, wird dieser Wert angezeigt, 
//                                                                               ist aber nicht uebertragbar
//                                                     ['optionJsOnClick']     - Javascript das bei einem onclick-Event auf dieses
//                                                                               Option-Element ausgefuehrt werden soll
//                                                                               (onmouseover="javascript: array[index]['optionJsOnClick']")
//                                                                               ACHTUNG: wird vom IE nicht unterstuetzt
// string   elementId                  die Tag-Id des HTML-Objekt (div,span,td usw.) in dem die
//                                     Ausgabe plaziert werden soll
// bool     enableMultiselect          true: aktiviert die mehrfachauswahl innerhalb der Selectboxen
// integer  selectfieldWidth           Breite je Selectbox in px
// integer  selectfieldRows            Anzahl der in beiden Selectboxen dargstellten Zeilen 
// string   availableOptionListTitle   angezeigter Titel ueber dem Selectfeld mit allen wahlbaren Werten
// string   allocatedOptionListTitle   angezeigter Titel ueber dem Selectfeld mit allen zugeordneten Werten
// array    selectJsEventList          Array mit folgenden Keys um Select-Events auszufuehren
//                                         array['selectJsOnChange'] - JS-Anweisungen die bei einem onchange-Event ausgefuehrt werden
//
function SelectfieldBasedValueAllocator(allocatorObject
                                       ,availableValueList
                                       ,allocatedValueList
                                       ,elementId
                                       ,enableMultiselect
                                       ,selectfieldWidth
                                       ,selectfieldRows
                                       ,availableOptionListTitle
                                       ,allocatedOptionListTitle
                                       ,selectJsEventList
                                       )
{
    // Eigenschaften
    this.allocatorObject          = allocatorObject;
    this.availableValueList       = availableValueList;
    this.allocatedValueList       = allocatedValueList;
    this.elementObj               = document.getElementById ? document.getElementById(elementId) : document.all.elementId;
    this.enableMultiselect        = enableMultiselect;
    this.selectfieldWidth         = parseInt(selectfieldWidth);
    this.selectfieldRows          = parseInt(selectfieldRows);
    this.availableOptionListTitle = availableOptionListTitle;
    this.allocatedOptionListTitle = allocatedOptionListTitle;
    this.selectJsEventList        = selectJsEventList;

    // Methoden
    this.generateAllocator             = generateAllocator;
    this.getAllocatedValues            = getAllocatedValues;
    this.setAllAvailableValues         = setAllAvailableValues;
    this.setSelectedAvailableValues    = setSelectedAvailableValues;
    this.removeAllAllocatedValues      = removeAllAllocatedValues;
    this.removeSelectedAllocatedValues = removeSelectedAllocatedValues;
}


// Methode der Klasse SelectfieldBasedValueAllocator
// -> erstellt die HTML-Ausgabe und plaziert diese ueber die Tag-Id
//    in einem Div-Element
function generateAllocator()
{
    var selectfieldWidthHTML = "";
    var selectfieldRowsHTML  = "";
    var multiselectHTML      = "";
    var availableOptionList  = "";
    var allocatedOptionList  = "";
    var optionTextColor      = "";
    var optionJsOnClick      = ""; 
    var selectJsOnChange      = "";
    
    var removeOptionValueFromAvailableList = false;    
    if(!isNaN(this.selectfieldWidth))
    {
        selectfieldWidthHTML = "style=\"width: "+this.selectfieldWidth+"px;\"";
    }
    
    if(!isNaN(this.selectfieldRows))
    {
        selectfieldRowsHTML = "size=\""+this.selectfieldRows+"\"";
    }
    
    if(true == this.enableMultiselect)
    {
        multiselectHTML = "multiple";
    }

    this.availableValueList.sort(sortAllocatedOptionList);
    this.allocatedValueList.sort(sortAllocatedOptionList);  
    
    for(var i = 0; i < this.availableValueList.length; i++)
    {
        removeOptionValueFromAvailableList = false;
        for(var j = 0; j < this.allocatedValueList.length; j++)
        {
            if(this.allocatedValueList[j]["optionValue"] == this.availableValueList[i]["optionValue"])
            {
                removeOptionValueFromAvailableList = true;
            }
        }
        
        optionTextColor = "";
        if(this.availableValueList[i]["optionTextColor"])
        {
            optionTextColor = "style=\"color:"+this.availableValueList[i]["optionTextColor"]+";\" ";
        }
        
        
        optionJsOnClick = "";
        if(this.availableValueList[i]["optionJsOnClick"])
        {
            optionJsOnClick = "onclick=\"javascript: "+this.availableValueList[i]["optionJsOnClick"]+"\" ";
        }
        
        // nur die noch nicht vergebenen Options anzeigen auf der Seite der 'noch moeglichen Zuordenbaren'
        if(false === removeOptionValueFromAvailableList)
        {
            availableOptionList += "<option "
                                  +"id=\"availableOption_"+this.availableValueList[i]["optionValue"]+"\" "
                                  +"value=\""+this.availableValueList[i]["optionValue"]+"\" "
                                  +optionTextColor
                                  +optionJsOnClick
                                  +">"
                                  +this.availableValueList[i]["optionText"]
                                  +"</option> \n";
        }
    }

    for(var i = 0; i < this.allocatedValueList.length; i++)
    {
        optionTextColor = "";
        if(this.allocatedValueList[i]["optionTextColor"])
        {
            optionTextColor = "style=\"color:"+this.allocatedValueList[i]["optionTextColor"]+";\" ";
        }

        optionJsOnClick = "";
        if(this.allocatedValueList[i]["optionJsOnClick"])
        {
            optionJsOnClick = "onclick=\"javascript: "+this.allocatedValueList[i]["optionJsOnClick"]+"\" ";
        }

        allocatedOptionList += "<option "
                              +"id=\"allocatedOption_"+this.allocatedValueList[i]["optionValue"]+"\" "
                              +"value=\""+this.allocatedValueList[i]["optionValue"]+"\" "
                              +optionTextColor
                              +optionJsOnClick
                              +">"
                              +this.allocatedValueList[i]["optionText"]
                              +"</option> \n";
    }    


    selectJsOnChange = "";
	if(this.selectJsEventList["selectJsOnChange"])
    {
        selectJsOnChange = "onchange=\"javascript: "+this.selectJsEventList["selectJsOnChange"]+"\" ";
    }

    var allocatorForm = "<form name=\"valueAllocatorForm\" action=\"\"> \n"
                       +"  <table border=\"0\"  align=\"center\" class='fliesstext'> \n"
                       +"    <tr> \n"
                       +"      <td width=\"45%\" align=\"center\">"+this.availableOptionListTitle+"</td>  \n"
                       +"      <td width=\"10%\"></td>  \n"
                       +"      <td width=\"45%\" align=\"center\">"+this.allocatedOptionListTitle+"</td>  \n"
                       +"    </tr>  \n"
                       +"    <tr> \n"
                       +"      <td width=\"45%\"> \n"
                       +"        <select name=\"availableValueList\" "+selectfieldWidthHTML+" "+selectfieldRowsHTML+" "+multiselectHTML+" "+selectJsOnChange+"> \n"
                       +"         "+availableOptionList+" \n"
                       +"        </select>  \n"
                       +"      </td> \n"
                       +"      <td width=\"10%\" align=\"center\"> \n"
                       +"        <input type=\"button\" class=\"fliessfett\" name=\"setAllAvailable\"         value=\">>\" style=\"width:30px;\" onclick=\""+this.allocatorObject+".setAllAvailableValues();\"><br> \n"
                       +"        <input type=\"button\" class=\"fliessfett\" name=\"setSelectedAvailable\"    value=\">\"  style=\"width:30px;\" onclick=\""+this.allocatorObject+".setSelectedAvailableValues();\"><br> \n"
                       +"        <input type=\"button\" class=\"fliessfett\" name=\"removeSelectedAvailable\" value=\"<\"  style=\"width:30px;\" onclick=\""+this.allocatorObject+".removeSelectedAllocatedValues();\"><br> \n"
                       +"        <input type=\"button\" class=\"fliessfett\" name=\"removeAllAvailable\"      value=\"<<\" style=\"width:30px;\" onclick=\""+this.allocatorObject+".removeAllAllocatedValues();\"> \n"
                       +"      </td> \n"
                       +"      <td width=\"45%\"> \n"
                       +"        <select name=\"allocatedValueList\" "+selectfieldWidthHTML+" "+selectfieldRowsHTML+" "+multiselectHTML+" "+selectJsOnChange+"> \n"
                       +"          "+allocatedOptionList+" \n"
                       +"        </select> \n"
                       +"      </td> \n"
                       +"    </tr> \n"
                       +"  </table> \n"
                       +"</form> \n"
                       ;

    this.elementObj.innerHTML = allocatorForm;
}

// Methode der Klasse SelectfieldBasedValueAllocator
// -> liefert die zugeordneten Werte als Kommaseparierte Liste
function getAllocatedValues()
{
    var formAllocatedValueList = document.valueAllocatorForm.allocatedValueList;
    var allocatedValues        = "";
    
    for(var i = 0; i < formAllocatedValueList.length; i++)
    {
        if("" == allocatedValues)
        {
            allocatedValues += formAllocatedValueList[i].value;
        }
        else
        {
            allocatedValues += ","+formAllocatedValueList[i].value;
        }
    }
    
    return allocatedValues;
}

// Methode der Klasse SelectfieldBasedValueAllocator
// -> ordnet alle verfuegbaren Werte zu
function setAllAvailableValues()
{
    var formAvailableValueList = document.valueAllocatorForm.availableValueList;
    var newAllocatedOption = "";

    for(var i = 0; i < formAvailableValueList.length; i++)
    {
        for(var j = 0; j < this.availableValueList.length; j++)
        {
            if(this.availableValueList[j]["optionValue"] == formAvailableValueList[i].value && 1 != this.availableValueList[j]["optionIsChangeable"])
            {
                newAllocatedOption = new Array()
                newAllocatedOption["optionValue"]       = formAvailableValueList[i].value;
                newAllocatedOption["optionText"]        = formAvailableValueList[i].text;
                
                if(this.availableValueList[j]["optionTextColor"]){
                    newAllocatedOption["optionTextColor"]   = this.availableValueList[j]["optionTextColor"];
                }

                if(this.availableValueList[j]["optionJsOnClick"]){
                    newAllocatedOption["optionJsOnClick"] = this.availableValueList[j]["optionJsOnClick"];
                }

                this.allocatedValueList.push(newAllocatedOption);            
            }
        }
    }
    
    this.generateAllocator();
}

// Methode der Klasse SelectfieldBasedValueAllocator
// -> ordnet alle selectierten Werte in der Liste der verfuegbaren Werte zu
function setSelectedAvailableValues()
{
    var formAvailableValueList = document.valueAllocatorForm.availableValueList;
    var newAllocatedOption = "";

    for(var i = 0; i < formAvailableValueList.length; i++)
    {
        if(formAvailableValueList[i].selected)
        {
            for(var j = 0; j < this.availableValueList.length; j++)
    	    {
                if(this.availableValueList[j]["optionValue"] == formAvailableValueList[i].value && 1 != this.availableValueList[j]["optionIsChangeable"])
                {
                    newAllocatedOption = new Array()
                    newAllocatedOption["optionValue"] = formAvailableValueList[i].value;
                    newAllocatedOption["optionText"]  = formAvailableValueList[i].text;
                    
                    if(this.availableValueList[j]["optionTextColor"]){
                        newAllocatedOption["optionTextColor"]   = this.availableValueList[j]["optionTextColor"];
                    }

                    if(this.availableValueList[j]["optionJsOnClick"]){
                        newAllocatedOption["optionJsOnClick"] = this.availableValueList[j]["optionJsOnClick"];
                    }
                
                    this.allocatedValueList.push(newAllocatedOption);   
                }
            }
    	}
    }

    this.generateAllocator();
}

// Methode der Klasse SelectfieldBasedValueAllocator
// -> entfernt alle zugeordneten Werte sofern sie in der 
//    Liste der verfuegbaren enthalten sind
function removeAllAllocatedValues()
{
    // es duerfen nur die nicht gesperrten Werte aus der Selectliste 
    // der zugeordneten Werte entfernt werden
    var newallocatedValueList = new Array();
    for(var j = 0; j < this.allocatedValueList.length;j++)
    {
        if(1 == this.allocatedValueList[j]["optionIsChangeable"])
        {
            newallocatedValueList.push(this.allocatedValueList[j]);
        }
    }
    this.allocatedValueList = newallocatedValueList;
    this.generateAllocator();
}

// Methode der Klasse SelectfieldBasedValueAllocator
// -> entfernt alle selectierten Werte in der Liste der zugeordneten Werte
function removeSelectedAllocatedValues()
{
    var formAllocatedValueList    = document.valueAllocatorForm.allocatedValueList;
    var newallocatedValueList     = new Array();

    for(var i = 0; i < formAllocatedValueList.length; i++)
    {
        if(false == formAllocatedValueList[i].selected)
        {
            for(var j = 0; j < this.allocatedValueList.length;j++)
            {
                if(formAllocatedValueList[i].value == this.allocatedValueList[j]["optionValue"])
                {
                    newallocatedValueList.push(this.allocatedValueList[j]);
                }
            } 
        }
        else
        {
            // es duerfen nur die nicht gesperrten Werte aus der Selectliste 
            // der zugeordneten Werte entfernt werden
            for(var j = 0; j < this.allocatedValueList.length;j++)
            {
                if(formAllocatedValueList[i].value == this.allocatedValueList[j]["optionValue"] && 1 == this.allocatedValueList[j]["optionIsChangeable"])
                {
                    newallocatedValueList.push(this.allocatedValueList[j]);
                }
            } 
        }
    }
    
    this.allocatedValueList = newallocatedValueList;
    this.generateAllocator();
}

// Hilfsfunktion für die Klasse Klasse SelectfieldBasedValueAllocator
// um die Liste der zugeordneten Werte nach der Berechtigung zum setzten/entfernen und 
// dann nach deren Texten für der  Selectbox zu sortieren
function sortAllocatedOptionList(a,b)
{
    if(!a["optionIsChangeable"]) { a["optionIsChangeable"] = 0; }
    if(!b["optionIsChangeable"]) { b["optionIsChangeable"] = 0; }
    
    if(a["optionIsChangeable"] < b["optionIsChangeable"])
        return -1;
    if(a["optionIsChangeable"] > b["optionIsChangeable"])
        return 1;
    if(a["optionText"].toLowerCase() < b["optionText"].toLowerCase())
        return -1;
    if(a["optionText"] > b["optionText"])
        return 1;
    return 0;
}

function checkInfoFormData()
{
  var auswahl = document.info_form.wahl;
  var fehler = '';
  var ausw = '';  
  if(typeof auswahl == 'object' && auswahl.length > 0)
  {
    for(i = 0; i < auswahl.length; i++)
    {
        if(auswahl[i].checked == true) {
            ausw = auswahl[i].value; 
        }
    }
  }
  
    switch(ausw)
    {
        case 'k':
        // wir brauchen einen Kunden
        if(!document.info_form.info_mnr || document.info_form.info_mnr == '')
        {
            fehler = 'Bitte loggen Sie zuerst einen Kunden ein!';
        }
        else
        {
            button_sperren('ALL');
            return true;
        }
        break;
        case 's':
        // wir brauchen eine Station-Id
        if(!document.info_form.info_sname || document.info_form.info_sname.length <= 0)
        {
            fehler = 'Bitte wählen Sie eine Station!';
        }
        else
        {
            var stationSel = document.info_form.info_sname;
            for(i = 0; i < stationSel.length; i++)
            {
                if(stationSel[i].selected == true) {
                  button_sperren('ALL');
                  return true;
                }
            }
            fehler = 'Bitte wählen Sie eine Station!';
        }
        break;
        case 'a':
         // wir brauchen eine auto-Id        
        if(!document.info_form.info_aname || document.info_form.info_aname.length <= 0)
        {
            fehler = 'Bitte wählen Sie ein Fahrzeug!';
        }
        else
        {
            var autoSel = document.info_form.info_aname;
            for(i = 0; i < autoSel.length; i++)
            {
                if(autoSel[i].selected == true) {
                  button_sperren('ALL');
                    return true;
                }
            }
            fehler = 'Bitte wählen Sie ein Fahrzeug!';
        }   
        break;
        default:        
        fehler = 'Bitte einen Infotyp wählen!';
        break;
    }
    
    alert(fehler);
    return false;
}

// prueft die das nicht zuviele Zeichen in ein Feld eingegeben werden
function checkTextareaFieldLength(max_zeichen, myfield, freeZeichenElementId) {
  var text = myfield.value;
  var restZeichen = max_zeichen - text.length;
  if ( restZeichen < 0 ) {
     alert ('Sie dürfen keine Zeichen mehr eingeben');
     myfield.value = myfield.value.substring(0, max_zeichen);
  }
  else {
      document.getElementById(freeZeichenElementId).value = restZeichen;   
  }
  return false;    
}

