/* ###############################################
#  FormCheck                                 								    #
############################################### */
// Declare Global Variables
var formAlertMessage = 'Es sind Fehler aufgetreten!';
var formSubmit = 1;
/*
   throwError gets called each time there is an error in the
   validation routines.
 */

function throwError(theField, theMessage)
{
   formAlertMessage = formAlertMessage + "\n - " + theMessage;
   formSubmit = 0;
   switchStyle(theField);
}

function switchStyle(theField)
{
   theSwitch = new Function("this.style.backgroundColor='#FFFFFF';this.style.color='#000000';if(this.type=='text') this.select();");
   theField.style.backgroundColor = '#FF0000';
   theField.style.color = 'White';
   theField.onfocus = theSwitch;
}
/*
   formAlert displays the alert message and clears necessary variables to start
   the validation over.
 */

function formAlert()
{
   alert(formAlertMessage);
   formAlertMessage = 'Es sind Fehler aufgetreten!';
   formSubmit = 1;
}
/*
   formRequired makes sure a field has been completed by the user.   In order
   for this function to work with select boxes the empty value must be set to 0
   in the form.
 */

function formRequired(theField, theMessage)
{
   theField.value = theField.value.trim();
   if(theField.value == '' || theField.value == '-1' || theField.value == ' ')
   {
      throwError(theField, theMessage);
   }
}
// form field must be composed only of numbers and letters.

function formIsAlphaNumeric(theField, theMessage)
{
   if(theField.value.trim() != '')
   {
      theField.value = theField.value.trim();
      isAlphaNum = new RegExp("[^0-9a-zA-Z\xE4\xC4\xF6\xD6\xFC\xDC\xDF \(\)\-\.\/]");
      if(isAlphaNum.test(theField.value))
      {
         throwError(theField, theMessage);
      }
   }
}
// form field must be composed only of numbers.

function formIsNumeric(theField, theMessage)
{
   if(theField.value.trim() != '')
   {
      theField.value = theField.value.trim();
      //^[-]?[0-9]+[.|,]?[0-9]+$
      isNum = new RegExp("^[-]?[0-9]+$");
      if(!isNum.test(theField.value))
      {
         throwError(theField, theMessage);
      }
   }
}
// form field must be composed only of numbers and dots.

function formIsDate(theField, theMessage)
{
   if(theField.value.trim() != '')
   {
      // Leerzeichen entfernen
      theField.value = theField.value.trim();
      // Datumseingabe ohne Trennzeichen
      isNumeric8 = new RegExp("^([0-3]{1}[0-9]{1})([0-1]{1}[0-9]{1})([1-2]{1}[0-9]{3})$");
      if(isNumeric8.test(theField.value))
      {
           theField.value = theField.value.replace(/^([0-9]{2})([0-9]{2})([0-9]{4})$/g, '$1.$2.$3');
               //alert(theField.value);
      }
      // eventuelle Kommas mit punkten ersetzen
      theField.value = theField.value.replace(/\,/g, '.');
      // Datumsformat testen DD.MM.YYYY
      isDate = new RegExp("^([0-3]{1}[0-9]{1})\.([0-1]{1}[0-9]{1})\.([1-2]{1}[0-9]{3})$");
      if(!isDate.test(theField.value))
      {
         throwError(theField, theMessage);
      }
   }
}
// form field must be composed only of numbers and plus.


function formIsTime(theField, theMessage)
{
	  
	  theField.value = theField.value.trim();
		
	  isTime= new RegExp("^([0-1][0-9]|[2][0-3]):([0-5][0-9])$");
	
	  if(!isTime.test(theField.value))
      {
         throwError(theField, theMessage);
      }
		
}


function formIsPartitioning(theField, theMessage)
{
   theField.value = theField.value.trim();
   isPartitioning = new RegExp("[^0-9\+]");
   if(isPartitioning.test(theField.value))
   {
      throwError(theField, theMessage);
   }
}
/**
 * Pr?ft und formatiert wenn m?glich eine Telefonnummer
 *
 * @argument formular in dem gepr?ft werden soll
 * @argument formularName name des Formulares
 *
 *
 * @author andi r.
 * @version 20040319
 */

function formIsPhoneNumber(theField, theMessage)
{
   theField.value = theField.value.trim();
   if(theField.value.length)
   {
      // formatiert die Telefonnummer
      theField.value = theField.value.replace(/^([0-9]*)(\D*)([0-9]*)/, "$1/$3");
      isPhoneNumber = new RegExp("^([0-9]+)\/([0-9]+)$");
      if(!isPhoneNumber.test(theField.value))
      {
         throwError(theField, theMessage);
      }
   }
}
/**
 * Pr?ft und formatiert wenn m?glich eine Kommazahl
 *
 * @argument formular in dem gepr?ft werden soll
 * @argument formularName name des Formulares
 *
 *
 * @author andi r.
 * @version 20040413
 */

function formIsDecimal(theField, theMessage)
{
   theField.value = theField.value.removeWhitespace();
   if(theField.value.length)
   {
      // evtl. vorhandenes Komma durch einen Punkt ersetzen
      theField.value = theField.value.replace(/([0-9]*)(,)([0-9]*)/, "$1.$3");
      isNumber = new RegExp("^[0-9]+[\.]?[0-9]*$");
      if(!isNumber.test(theField.value))
      {
         throwError(theField, theMessage);
      }
   }
}
// form field must be composed only of numbers and letters.

function formIsSame(field1, field2, theMessage)
{
   if(field1.value != field2.value)
   {
      throwError(field2, theMessage);
      switchStyle(field1);
   }
}

function formIsEmail(theField, theMessage)
{
   theField.value = theField.value.trim();
   if(theField.value.length)
   {
      var email = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
      if(!email.test(theField.value))
      {
         throwError(theField, theMessage);
      }
   }
}

function getFormElemType(elem)
{
   if(elem.type)
   {
      switch(elem.type)
      {
         case "select-one" :
            {
               return elem.options[elem.selectedIndex];
               break;
            }
         default :
            {
               return elem;
            }
      }
   }
   else if(elem[0].type == "radio")
   {
      return checkRadioButton(elem);
   }
   else
   {
      throw new Error("Unbekanntes Formularelement");
   }
}

/**
 * vergleicht zeitliche Unterschiede von datums-Formularfeldern
 *
 * @argument 1....n daten in zeitlich aufsteigender Reihenfolge
 *
 *
 * @author andi r.
 * @version 20040405
 */

function compareDate(formular)
{
   var f = document.forms[formular];
   var theMessage = new String();
   var dat = new Array("");
   for(var i = 1; i < arguments.length; i++)
   {
      var datStr = new String();
      var act = arguments[i];
      if(act != "aktuellesDatum")
      {
         var tmpDat = f.elements[act].value.getDateFromFormat('dd.MM.yyyy');
      }
      else
      {
         var tmpDat = new Date();
      }
      datStr = tmpDat.getFullYear().toString() +(tmpDat.getMonth() + 1).toString().zweistellig() + tmpDat.getDate().toString().zweistellig();
      dat[i] = parseInt(datStr, 10);
   }
   for(var i = 1; i < dat.length - 1; i++)
   {
      var c = i + 1;
      if(dat[i] > dat[c])
      {
         if(arguments[c] != "aktuellesDatum")
         {
            theMessage += "Das Datum von " + arguments[i] + " liegt nach dem von " + arguments[c] + ".\n";
         }
         else
         {
            theMessage += "Das Datum von " + arguments[i] + " liegt vor dem aktuellen Datum.\n";
         }
      }
      if(theMessage.length)
      {
         throwError(f.elements[arguments[c]], theMessage);
      }
   }
}
/**
 * ich habe echt keine Ahnung mehr, wie dieses Ding funktioniert - aber es tut
 *
 * @argument theButton
 *
 *
 * @author andi r.
 * @version 20040113
 */

function checkRadioButton(theButton)
{
   // Dummy Objekt - damit der Formularchecker
   // funktioniert ( ersetzt das Formularelement )
   empty = new Object();
   empty.value = '';
   empty.style = '';
   // finde Checked
   for(var i = 0; i < theButton.length; i++)
   {
      if(theButton[i].checked)
      {
         var found = theButton[i];
      }
   }
   // Rueckgabe gefundenen Radio-Button oder leeres Objekt
   if(found)
   {
      return found;
   }
   else
   {
      return empty;
   }
}
/**
 * select fuer das erste sichtbare und selectierbare Eingabefeld des Formulares
 *
 * @argument theForm Formular
 *
 *
 * @author andi r.
 * @version 20040427
 */

function selectFirst(theForm)
{
   try
   {
      len = theForm.elements.length;
      for(i = 0; i < len; i++)
      {
         act = theForm.elements[i];
         if(act.type == "select-one" || act.type == 'image')
         {
            act.focus();
            break;
         }
         else if(act.type != "hidden" && act.readOnly != true)
         {
            act.focus();
            act.select();
            break;
         }
      }
   }
   catch(e)
   {
   }
}
/**
 * fuegt einer Select-Box ein weiters Option-Feld zu
 *
 * @argument ds name/id des Select-Tags
 * @argument valu wert des Option-Tags, der erzeugt werden soll
 * @argument opt
 *
 *
 * @author andi r.
 * @version 20040113
 */

function addToSelect(ds, valu, opt)
{
   te = document.forms[0].elements[ds];
   n = te.length;
   te[n] = new Option(opt, valu);
   te[n].selected = true;
}
/**
 * Schreibt das Suchergebnis aus einem Such-Popup zurueck
 *
 * @argument argEl
 * @argument arg
 * @argument argShow
 *
 * @author andi r.
 * @version 20040427
 */

function writeBackSearch(argEl, arg, argShow)
{
   te = document.forms[0];
   argElShow = argEl + "_show";
   te.elements[argEl].value = arg;
   te.elements[argElShow].value = argShow;
}
/**
 * Beim Loeschen nochmal bestaetigen lassen
 *
 * @argument theForm Formular, das versandt wird
 *
 * @author andi r.
 * @version 20040427
 */

function askUser(theForm)
{
   var agree = confirm("Sind Sie sicher?");
   if(agree)
   {
      return true;
   }
   else
   {
      return false;
   }
}
/**
 * Loescht den Inhalt eines Formularfeldes
 *
 * @argument theFormId id/name des Formularelements, das geloescht werden soll
 *
 *
 * @author andi r.
 * @version 20040113
 */

function clearSearchValues(theFormId)
{
   theForm = document.forms[theFormId];
   for(i = 1; i < arguments.length; i++)
   {
      theForm.elements[arguments[i]].value = '';
   }
}
/**
 * Beim Dr?cken der Enter-Taste in einem Formularfeld wird nicht das Formular versandt sondern
 * das n?chste focussiert
 *
 * @argument sUri Uri der Seite
 * @return string zur?ckgegebener Code der Seite
 *
 *
 * @author andi r.
 * @version 20040316
 */

function handleEnter(field, event)
{
   var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
   if(keyCode == 13)
   {
      for(var i = 0; i < field.form.elements.length; i++)
      {
         if(field == field.form.elements[i])
         {
            break;
         }
      }
      i =(i + 1) % field.form.elements.length;
      for(var j = i; j < field.form.elements.length; j++)
      {
         if(field.form.elements[j].type != 'hidden')
         {
            field.form.elements[j].focus();
            break;
         }
      }
      return false;
   }
   else
   {
      return true;
   }
}
/**
 * Sicherheits-Nachfrage beim Schliessen eines Popups
 *
 * @author andi r.
 * @version 20040113
 */

function confirmCloseWin()
{
   var agree = confirm("Soll dieses Popup geschlossen werden?");
   if(agree)
   {
      closeWin = window.close();
   }
}
/**
 * Funktion laedt dynamisch inhalte aus der Datenbank nach, um sie in Formularfeldern anzuzeigen
 *
 * @argument ziel formularfeld, welches die Funktion onBlur startet
 * @argument 1....n argumente, die mit Name an die Abfrageseite ?bergeben werden (1.Argument i.d.R.
 *						  das aufrufende Formularfeld mit this)
 *
 * @author andi r.
 * @version 20040316
 */

function loadDynamicFormData(ziel, start)
{
   var tfe = document.getElementById(ziel.id);
   var tfeP = tfe.parentNode;
   var targetDocument = new String(fgPath + "/Autofill.cfm");
   ziel.value = 'lade Auswahl...';
   ziel.disabled = true;
   // queryString bauen aus den Argumenten 1....n der Funktion (formularfeldname = formularfeldwert)
   var qs = new String(targetDocument);
   qs += "?elemName=" + ziel.id;
   for(var i = 1; i < arguments.length; i++)
   {
      var fn = arguments[i].name;
      if(arguments[i].type == "select-one")
      {
         var fv = new String(arguments[i].options[arguments[i].selectedIndex].value);
      }
      else
      {
         var fv = new String(arguments[i].value);
      }
      qs += "&" + fn + "=" + escape(fv.trim());
   }
   // Daten als komma-getrennte Liste laden
   var res = loadHttpFormData(qs);
   // liste in Array ueberfuehren
   var ti = tfe.getAttribute('tabindex');
   var resArray = res.trim().split(",");
   var rAL = resArray.length;
   // mehr als ein Listeneintrag
   if(resArray.length > 0 && resArray[0].trim().length != 0)
   {
      // select bauen und werte von original-Formularfeld uebernehmen
      var ns = document.createElement("select");
      ns.name = tfe.name;
      ns.id = tfe.id;
      ns.size = 1;
      ns.tabIndex =  ti;
      // onblur uebernehmen: wichtig wenn mehrere autoFill-Felder hintereinander kommen
      if(tfe.onBlur != "undefined")
      {
         ns.onBlur  = tfe.onBlur ;
      }
      if(tfe.onChange != "undefined")
      {
         ns.onChange = tfe.onChange;
      }
      if(tfe.readOnly != "undefined")
      {
         ns.readOnly = tfe.readOnly;
      }
      // options bauen
      for(var i = 0; i < rAL; i++)
      {
         var no = document.createElement("option");
         no.setAttribute("value", resArray[i].trim());
         var noT = document.createTextNode(resArray[i].trim());
         no.appendChild(noT);
         ns.appendChild(no);
      }
      // sollte das ausgangs-formularfeld hidden sein verstecken wir das Ergebnis lieber
      if(tfe.type == 'hidden')
      {
         ns.style.display = 'none';
      }
      // originalfeld ersetzen
      tfe.parentNode.replaceChild(ns, tfe);
      // focus auf neues Select setzen
      setTimeout(function(){
         try
         {
            document.getElementById(ziel.id).focus();
         }
         catch(e)
         {
         }
      }, 1);
   }
   else
   {
      if(tfe.type != 'text' && tfe != 'hidden')
      {
         var nt = document.createElement('input');
         if(tfe.onblur != "undefined")
         {
            nt.onblur = tfe.onblur;
            nt.name = tfe.name;
            nt.id = tfe.id;
            nt.tabIndex = ti;
         }
         if(tfe.readOnly != "undefined")
         {
            nt.readOnly = tfe.readOnly;
         }
         tfe.parentNode.replaceChild(nt, tfe);
      }
      //tfe.value = "kein Ergebnis";
      tfe.value = '';
      if(tfe.type == 'hidden')
      {
         nt.style.display = 'none';
      }
      tfe.disabled = false;
      setTimeout(function(){
         try
         {
            document.getElementById(ziel.id).focus();
         }
         catch(e)
         {
         }
      }, 1);
      // focus auf ausl?sendes Form-Feld setzen
      //setTimeout('document.getElementById("' + arguments[1].id + '").focus()', 1);
      //setTimeout('document.getElementById("' + arguments[1].id + '").select()', 1);
   }
}
/**
 * Funktion laedt dynamisch inhalte aus der Datenbank nach, um sie in Formularfeldern anzuzeigen
 *
 * @argument ziel formularfeld, welches die Funktion onBlur startet
 * @argument 1....n argumente, die mit Name an die Abfrageseite ?bergeben werden (1.Argument i.d.R.
 *						  das aufrufende Formularfeld mit this)
 *
 * @author andi r.
 * @version 20040316
 */

function getAdressData(myTarget)
{
   var top = 0;
   var left = 0;
   var myBodyHeight = document.body.offsetHeight;
   var myBodyWidth = document.body.offsetWidth;
   // ermittlung der Position des Eventausl?senden Elements
   while(myTarget != document.body && myTarget != document.documentElement)
   {
      try
      {
         top += myTarget.offsetTop;
         left += myTarget.offsetLeft;
         myTarget = myTarget.offsetParent;
      }
      catch(e) //Notbremse: bei Volldarstellung im Framework wird der Body nicht gefunden (IE)
      {
         break;
      }
   }
   var topPx = new String(top + "px");
   var leftPx = new String(left + "px");
   if(maxHeight < 200)
   {
      var maxHeight = myBodyHeight - top - 8 + "px";
   }
   else
   {
      var maxHeight = "200px";
   }
   var maxWidth = myBodyWidth - left - 80 + "px";
   cIfr = document.createElement('iframe');
   cIfr.setAttribute('id', 'adressIFrame');
   cIfr.setAttribute('name', 'adressIFrame');
   cIfr.frameBorder = 0;
   cIfr.setAttribute('src', '../Abonnenten/adressData.cfm?plainhtml=1');
   cIfr.style.position = "absolute";
   cIfr.style.border = "1px solid #aaa";
   cIfr.style.top = topPx;
   cIfr.style.left = leftPx;
   cIfr.style.height = maxHeight;
   cIfr.style.width = maxWidth;
   //cIfr.style.overflow = "auto";
   cIfr.style.zIndex = "101";
   document.body.appendChild(cIfr);
}

// setzt den Focus auf den Adressen-Iframe, wenn dieser ge?ffnet ist!
function setFocusOnAdressIFrame()
{
   if(!document.forms[0].Postversand.checked)
   {
      document.frames.adressIFrame.document.Adresse.PLZ.focus();
   }
}

function handleKeyEvent()
{
   e = window.event;
   var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
   if(keyEv[keyCode] && e.ctrlKey)
   {
   document.forms[0].submit.click();
      return false;
   }
}
//document.attachEvent( "onkeypress", handleKeyEvent );
/*
   Show active form element
 */
addEvent(window, 'load',

function()
{
   var input;
   var inputs = document.getElementsByTagName('input');
   for(var i = 0;(input = inputs[i]); i++)
   {
      if(input.type != 'hidden') addEvent(input, 'focus', oninputfocus); addEvent(input, 'blur', oninputblur);
   }
   var textareas = document.getElementsByTagName('textarea');
   for(var i = 0;(textarea = textareas[i]); i++)
   {
      addEvent(textarea, 'focus', oninputfocus); addEvent(textarea, 'blur', oninputblur);
   }
}
);

function oninputfocus(e)
{
   if( typeof e == 'undefined')
   {
      var e = window.event;
   }
   var source;
   if( typeof e.target != 'undefined')
   {
      source = e.target;
   }
   else if( typeof e.srcElement != 'undefined')
   {
      source = e.srcElement;
   }
   else
   {
      return;
   }
   try
   {
      source.style.border = '1px solid red';
   }
   catch(e)
   {
   }
}

function oninputblur(e)
{
   if( typeof e == 'undefined')
   {
      var e = window.event;
   }
   var source;
   if( typeof e.target != 'undefined')
   {
      source = e.target;
   }
   else if( typeof e.srcElement != 'undefined')
   {
      source = e.srcElement;
   }
   else
   {
      return;
   }
   source.style.border = '1px solid #aaa';
}

function addEvent(obj, evType, fn)
{
   if(obj.addEventListener)
   {
      obj.addEventListener(evType, fn, true);
      return true;
   }
   else if(obj.attachEvent)
   {
      var r = obj.attachEvent("on" + evType, fn);
      return r;
   }
   else
   {
      return false;
   }
}
/**
 *
 *
 * @argument c html-object Formularfeld
 *
 * @author andi r.
 * @version 20040329
 */

function enableReadonly(c)
{
   var ch = new Boolean(c.checked);
   var chr = new Boolean(ch.reverse());
   var sId = document.getElementById('Strasse_ID');
   if(ch == true && sId.value.trim().length)
   {
      var q = confirm("Soll die Adresse wirklich auf Postversand ge\u00e4ndert werden?");
      if(q)
      {
         sId.value = '';
         document.getElementById('outch').value = '';
      }
      else
      {
         c.checked=ch.reverse();
      }
   }
   for(var i = 1; i < arguments.length; i++)
   {
      var act = c.form.elements[arguments[i]];
      if(!ch)
      {
         act.onclick = c.onclick;
         act.readOnly = true;
      }
      else
      {
         act.onclick = null;
         act.readOnly = false;
      }
   }
   if(ch == false)
   {
      getAdressData(c);
   }
}
/**
 *
 *
 * @author andi r.
 * @version 20040330
 */

function showHideSelect(theDoc, sh)
{
   var showHide = new String();
   // select boxen wieder sichtbar machen
   if(sh == "show") showHide = "visible";
   else showHide = "hidden";
   selectBoxes = theDoc.getElementsByTagName('select');
   for(var i = 0; i < selectBoxes.length; i++)
   {
      selectBoxes[i].style.visibility = showHide;
   }
}
/**
 *
 *
 * @author andi r.
 * @version 20040910
 */

function returnAdresse(theForm)
{
   var pL = parent.document.getElementById('adressIFrame');
   var pF = parent.document.forms[0];
   if(!pF)
   {
      var pF = parent.document.getElementById('editAdresse');
   }
   var theError = new String();
   var resOk = new Boolean();
   loadDynamicFormData(theForm.Strasse_ID, theForm.PLZ, theForm.Ort, theForm.Strasse, theForm.Hausnummer, theForm.Hausnummer_Zusatz);
   if(theForm.Strasse_ID.type == 'select-one' && theForm.Strasse_ID.options.length == 1)
   {
      resOk = true;
   }
   else
   {
      resOk = false;
   }
   if(resOk)
   {
      for(var i = 0; i < theForm.elements.length; i++)
      {
         if(theForm.elements[i].type != 'button')
         {
            try
            {
               var act = pF.elements[theForm.elements[i].id];
               act.value = theForm.elements[i].value;
               act.readOnly = false;
               act.onclick = pF.elements['Postversand'].onclick;
            }
            catch(e)
            {
               alert(theForm.elements[i].id);
            }
         }
      }
      // select boxen wieder sichtbar machen
      showHideSelect(parent.document, 'show');
      // wichtig sonst Fehler im IE
      setTimeout(function() {
         pL.parentNode.removeChild(pL);
      }, 100);
   }
   else
   {
      theError += "Es konnte kein passender Bezirk zugeordnet werden!\n";
      if(!resOk && theForm.Strasse_ID.type == 'select-one')
      {
         theError += "(Anzahl der Ergebnisse: " + theForm.Strasse_ID.options.length + ")";
      }
      alert(theError);
   }
   var urli = new String('/BechtleIntranet/_extensions/formGenerator/Autofill.cfm?xmlhttp=1&elemName=StrasseInfo&strasse_id=' + theForm.Strasse_ID.value);
   strasseInfo =  loadHttpFormData(urli);
   pF.outch.style.height = "86px";
   pF.outch.style.width = "250px";
   pF.outch.value = strasseInfo.trim();
   if(typeof(pF.Ablage) != 'undefined')
   {
      pF.Ablage.focus();
   }
   else if(typeof(pF.Landeskennzeichen) != 'undefined')
   {
      pF.Landeskennzeichen.focus();
   }
}
/**
 *
 *
 * @author andi r.
 * @version 20040330
 */

function closeAdresse()
{
   showHideSelect(parent.document, 'show');
   var ck = parent.document.forms[0];
   if(!ck)
   {
      var ck = parent.document.getElementById('editAdresse');
   }
   var theForm = document.getElementById('Adresse');
   // keine Strasse_ID -> Postversand
   if(!parent.document.getElementById('Strasse_ID').value.trim().length)
   {
      ck.Postversand.checked = true;
      for(var i = 0; i < theForm.getElementsByTagName('input').length; i++)
      {
         var act = theForm.getElementsByTagName('input')[i];
         try
         {
            ck.elements[act.name].readOnly = false;
            ck.elements[act.name].onclick = null;
         }
         catch(e)
         {
         }
      }
   }
   parent.document.getElementById('PLZ').focus();
   parent.document.body.removeChild(parent.document.getElementById('adressIFrame'));
}
/**
 *
 *
 * @author andi r.
 * @version 20040330
 */

function getSelectFromList(start)
{
   var targets = new Array('PLZ', 'Ort', 'Strasse');
   var targetDocument = new String("/BechtleIntranet/_extensions/formGenerator/Autofill.cfm");
   var outStr = new String();
   var selWidth = start.offsetParent.offsetWidth - 15;
   // queryString bauen
   var qs = new String(targetDocument);
   for(var i = 0; i < targets.length; i++)
   {
      if(targets[i] == start.id)
      {
         var ziel = targets[i + 1];
         var zielDiv = targets[i + 1].toLowerCase() + "div";
         break;
      }
   }
   qs += "?elemName=" + ziel;
   for(var i = 0; i < start.form.elements.length; i++)
   {
      var act = start.form.elements[i];
      if(act.type != 'select')
      {
         qs += "&" + act.id + "=" + escape(act.value);
      }
      else
      {
         qs += "&" + act.id + "=" + escape(act.options[act.selectedIndex].value);
      }
   }
   // Daten als komma-getrennte Liste laden
   var res = loadHttpFormData(qs);
   // liste in Array ueberfuehren
   if(res.trim().length)
   {
      var resArray = res.trim().split("|");
      var rAL = resArray.length;
      outStr += '<select size="7" id="' + ziel + '" name="' + ziel + '" ';
      // tabindex aus Vorlage ?bernehmen
      outStr += ' tabindex="' + document.getElementById(ziel).tabIndex + '"';
      if(ziel != 'Strasse')
      {
         outStr += 'onfocus="getSelectFromList(this)"';
         outStr += 'onchange="getSelectFromList(this)"';
      }
      outStr += '>';
      for(var i = 0; i < rAL; i++)
      {
         outStr += '<option value="' + resArray[i].trim() + '">';
         outStr += resArray[i].trim();
         outStr += '</option>';
      }
      outStr += '</select>';
   }
   else
   {
      outStr = "Kein Ergebnis gefunden!";
      outStr += document.getElementById(zielDiv).innerHTML;
   }
   setTimeout(function() {
      try
      {
         document.getElementById(ziel).options[0].selected = true;
         document.getElementById(ziel).focus();
      }
      catch(e)
      {
      }
   }, 500);

   document.getElementById(zielDiv).innerHTML = outStr;
}
/**
 *
 *
 * @author andi r.
 * @version 20040401
 */

function checkZahlungsart()
{
   var theFields = new Array('ZahlungsartText', 'Modus', 'Zahlweise');
   var qs = new String('autofill.cfm?elemName=Zahlungsart');
   var res = new String();
   var theMessage = new String('Die Kombination aus Zahlungsart, Zahlungs-\nmodus und Zahlweise ist nicht erlaubt');
   var reg = new RegExp('^[0-9]{1,2}$');
   var retVal = new Boolean();
   for(var i = 0; i < theFields.length; i++)
   {
      var act = document.getElementById(theFields[i]);
      qs += "&";
      qs += theFields[i] + '=';
      qs += escape(act.options[act.selectedIndex].value);
   }
   res = loadHttpFormData(qs).trim();
   if(reg.test(res))
   {
      document.getElementById('Zahlungsart').value = res;
      retVal = false;
   }
   else
   {
      retVal = true;
   }
   return retVal;
}

function submitKwYear(theForm)
{
   if(theForm.elements['changed'].value == 'true')
   {
      if(confirm('Es wurden Werte editiert. Wenn Sie jetzt die Kalenderwoche oder das Jahr wechseln werden diese ?nderungen nicht ?bernommen.'))
      {
         theForm.submit();
      }
   }
   else
   {
      theForm.submit();
   }
}

function resizeTextarea(x, y)
{
   if(y == 'g')
   {
      x.style.height = '100px';
      x.style.width = '500px';
   }
   if(y == 's')
   {
      x.style.height = '36px';
      x.style.width = '180px';
   }
}

function showBezirksMitteilungen(textarray)
{
   if(textarray.length > 0)
   {
      var newWin = open('', 'Mitteilungen', 'height=200, width=300');
      newWin.document.open();

      with(newWin.document)
      {
         write('<html><head><title>Bezirksmitteilungen</title>');
         write('<style type="text/css" media="all">@import "/BechtleIntranet/_css/bechtleLayout.css";</style>');
         write('<style type="text/css" media="all">@import "/BechtleIntranet/_css/bechtleBasic.css";</style>');
         write('</head><body><fieldset style="height:90%"><legend>Mitteilungen</legend><ul>');
         for(var i=0; i < textarray.length; i++)
         {
            write('<li>' + textarray[i] + '</li>');
         }
         write('</ul></body></html>');
      }
   }
}

function checkVerpflichtung(datum, kundennummer)
{
   // eventuelle Kommas mit punkten ersetzen
   var dat = datum.value.replace(/\,/g, '.');
   var urli = new String('/BechtleIntranet/_extensions/formGenerator/Autofill.cfm?xmlhttp=1&elemName=Verpflichtung&endeLieferung=' + dat + '&Kundennummer=' + kundennummer);
   var force = new Boolean();
   var verpflichtung = loadHttpFormData(urli).trim();
   if(verpflichtung == 'true')
   {
      force = confirm('Der Abonnent hat eine noch laufende Verpflichtung.\nSie k\u00f6nnen diesen Warnhinweis durch dr\u00fccken des OK-Buttons \u00fcbergehen.\nMit Abbrechen entfernen Sie das eingetragen Lieferende wieder.');
      if(force)
      {
         alert('Die Verpflichtungswarnung wurde ignoriert.\nDas Abo wird trotz bestehender Verpflichtung beendet.');
         return true;
      }
      else
      {
         datum.value = '';
         alert('Das Lieferende wurde aufgrund einer bestehenden Verpflichtung wieder entfernt.');
         return false;
      }
   }
}

function submitonce(theform)
{
   //if IE 4+ or NS 6+
   if(document.all||document.getElementById)
   {
      //screen thru every element in the form, and hunt down "submit" and "reset"
      for (i=0;i<theform.length;i++)
      {
         var tempobj=theform.elements[i];
         if(tempobj.type.toLowerCase()=="submit"||tempobj.type.toLowerCase()=="reset")
         {
            //disable em
            tempobj.onclick=function(){return false};
         }
      }
   }
}

function loadStandardtraeger(ziel, start)
{
   var tfe = document.getElementById(ziel.id);
   var tfeP = tfe.parentNode;
   var targetDocument = new String(fgPath + "/Autofill.cfm");
   var zp = ziel.parentNode;
   ziel.value = 'lade Auswahl...';
   ziel.disabled = true;
   // queryString bauen aus den Argumenten 1....n der Funktion (formularfeldname = formularfeldwert)
   var qs = new String(targetDocument);
   qs += "?elemName=" + ziel.id;
   for(var i = 1; i < arguments.length; i++)
   {
      var fn = arguments[i].name;
      if(arguments[i].type == "select-one")
      {
         var fv = new String(arguments[i].options[arguments[i].selectedIndex].value);
      }
      else
      {
         var fv = new String(arguments[i].value);
      }
      qs += "&" + fn + "=" + escape(fv.trim());
   }
   // Daten als komma-getrennte Liste laden
   var res = loadHttpFormData(qs);
   // liste in Array ueberfuehren
   var ti = tfe.getAttribute('tabindex');
   var resArray = res.trim().split(",");
   if(resArray.length == 5)
   {
      var retStr = '<span name="' + ziel.name + '" id="' + ziel.id + '"><a target="_blank" href="/BechtleIntranet/BI_solseitAbo/Zustellung/?table=Traeger&action=edit&ID=' + resArray[0] + '">' +  ' ' + resArray[1] + ', ' + resArray[2] + ' [' + resArray[4] + ']</a> <a target="_blank" href="/BechtleIntranet/BI_solseitAbo/Bezirke/?action=edit&id=' + resArray[3] + '">Bezirk: ' + resArray[3] + '</a></span>';
   }
   else
   {
      var retStr = '<span name="' + ziel.name + '" id="' + ziel.id + '">-</span>';
   }
   zp.innerHTML=retStr;
}


	
	/***********************************************
	* Textarea Maxlength script- © Dynamic Drive (www.dynamicdrive.com)
	* This notice must stay intact for legal use.
	* Visit http://www.dynamicdrive.com/ for full source code
	***********************************************/
	
	function ismaxlength(obj){
	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
	if (obj.getAttribute && obj.value.length>mlength)
	obj.value=obj.value.substring(0,mlength)
	}
	

