/****************************************************************************************
*																																										*
*		Enthält globale JavascriptFunktionen																																			*
*	    coded by Jens Langemann -- www.jelnet.de 2006																																				*																																
*
****************************************************************************************/

var global_PopUp; //globaler-PopUphalter

//====================================
// Liefert ein Ajax-Obj zurück
// @return Ajax-Obj or nothing
//
// @param showError 		(Boolean)
//====================================
function ajx_getObj(showErrorMsg)
{
    var ajxObj;
	if (window.XMLHttpRequest) 
	     {ajxObj = new XMLHttpRequest();} 
	else 
    if (window.ActiveXObject)  
	     {ajxObj = new ActiveXObject("Microsoft.XMLHTTP");}
	
	if (showErrorMsg && !ajxObj)
	   {alert("Ihre Anfrage konnte nicht versendet werden.\r\nBitte überprüfen Sie Ihre Browsereinstellungen.");}	 
		 
	return ajxObj;
}


//############################################
// Funktion zum negieren des aktuellen Collapsezustandes eines Elements.
// Ist ein Eintrag "offen" werden die Vertragsdetails angezeigt. 
// Img-Element wird benötigt.
//
//@Param elemID ; html-Object ID
//############################################
function changeCollapse(elemID)
{
    if (document.getElementById(elemID).style.display == "none")
	  {
	     document.getElementById(elemID).style.display = "block";
		 document.getElementById(elemID+"_img").src    = "../bilder/icon_arrowUp.gif";
	  }
	else
	  {
	     document.getElementById(elemID).style.display = "none";
		 document.getElementById(elemID+"_img").src    = "../bilder/icon_arrowDown.gif";
	  }
}


/*####################################
 # PopUp anzeigen
 # @Param w_link    string
 # @Param w_width   int
 # @Param w_height  int
 # @Param scrolling true/false
 # @Param popUpObj  true/false
 # @Param resizable true/false
 # @return popUp_name
 ####################################*/
  function showPopUp(w_link, w_width, w_height, scrolling, popUp_name, resizable) 
  {
	  var zuffzahl
	  var bildvorschau;
	  var screen_hoehe;
	  var screen_breite;
	  var popUp_top    = 0;
	  var popUp_left   = 0;
	  var popUp_hoehe  = w_width;
	  var popUp_breite = w_height;
	  var popUp_scrollbars  = scrolling ? 1 : 0;
      var popUp_resizable   = resizable ? 1 : 0;
	   
	  screen_hoehe  = parseInt(screen.height);
	  screen_breite = parseInt(screen.width);
	  
	  popUp_top  = (screen_hoehe /2 )  - (popUp_hoehe /2);
	  popUp_left = (screen_breite /2 ) - (popUp_breite /2);
	  
	  zufallszahl = w_link.indexOf("?") > -1 ? "&rnd=" : "?rnd=";
	  zufallszahl = zufallszahl + Math.round(Math.random ()*100000)+10000; //Wird benötigt damit sich das anischtenfenster neu aktuallisiert
	  
	  var popUp_name = (popUp_name) ? popUp_name : "Helpdata";
	  
	  global_PopUp = window.open(w_link + zufallszahl , popUp_name, "toolbar=0,scrollbars="+popUp_scrollbars+",location=0,statusbar=0,menubar=0,resizable="+popUp_resizable+",width="+popUp_breite+",height="+popUp_hoehe+",left="+popUp_left+",top="+popUp_top)
      global_PopUp.focus();
  }

  
  
  
  //#############################
//# Funktion zum resizen von content-div layern.
//# Diese funktion wird benötigt, da die einzelnen Div-Layer nicht mit 100%
//# definiert werden können, da brwoser (abgesehen IE) dies falsch intepretiert.
//# daher wird die höhe per JS onTheFly gesetzt.
//# Desweiteren wird die Breite gesetzt, da bei seltenen fällen z.B. breitere Listen ect.
//# darstellungsprobleme in älteren Browsern auftreten. (z.B. scrollbalken)
//#
//# Nown ResizeBugs:
//# - [Mozilla] [IE], horizontaler scrollbalken wird bei width 100% und nach resizen zu breit angezeigt
//#                   ist div auf 100% gesetzt und mit overflow:auto belegt, eine liste aber gröser 100%, dann wird der div-bereich evtl. zu breit angezeigt.
//#                   [Behoben durch ermitteln und setzen der breite]
//# - [Opera]       , Scrollbalken (Vertikal) wird angezeigt, obwohl nicht benötigt, wenn content zu breit. Problem konnte nicht behoben werden, ist aber als nicht kritisch eingestuft.
//#
//#
//# @Param String layerID
//# @Param int    defaultHeight (Standard höhe)
//# @Param int    usedHeight    (höhe die vom gesamtwert abgezigen wird)
//# @Param int    defaultWidth  (Standard breite)
//# @Param int    usedWidth     (breite die vom gesamtwert abgezigen wird)
//#############################
function resizeLayer(layerID, defaultHeight, usedHeight, defaultWidth, usedWidth)
{
  //Ermitteln der Höhe je nach Browser-Möglichkeit
  var hoehe  = getWindowHeight() - usedHeight;
  var breite = getWindowWidth()  - usedWidth;
  
  //Default Höhe 
  if (hoehe <= defaultHeight)
    {hoehe = defaultHeight;}
	
  //Default Breite 
  if (breite <= defaultWidth)
    {breite = defaultWidth;}	
  
  document.getElementById(layerID).style.height =  hoehe;
  document.getElementById(layerID).style.width  =  breite;
}


/****************************************************************************************
Liefert die Höhe des Anzeigebereichs zurück
@return int
****************************************************************************************/
function getWindowHeight()
{
	  //Ermitteln der Höhe je nach Browser-Möglichkeit
	  if (window.innerHeight) //NC ect.
	     {return window.innerHeight;}
	  else	   
	  if (document.body.offsetHeight) //IE ect.
	     {return document.body.offsetHeight;}
}
  
/****************************************************************************************
Liefert die Höhe des Anzeigebereichs zurück
@return int
****************************************************************************************/
function getWindowWidth()
{
	  //Ermitteln der Höhe je nach Browser-Möglichkeit
	  if (window.innerWidth) //NC ect.}
	     {return window.innerWidth;}
	  else	   
	  if (document.body.offsetWidth) //IE ect.
	     {return document.body.offsetWidth;}
}

/****************************************************************************************
Setzt das textfeld auf den angegebenen Wert, sofern das Feld noch keinen Wert enthält.
@param  formName 
@param  elemName 
@param  value 
****************************************************************************************/
function setDefaultTextValue(formName, elemName, value)
{
   if(document[formName][elemName].value == "")
     {document[formName][elemName].value = value;}
}	


/****************************************************************************************
Setzt den inhalt des übergebenen Formularfeldes auf Großbuchstaben
@param  fieldObj formElement
****************************************************************************************/
function upperfieldValue(fieldObj)
{
   var text       = fieldObj.value ;
   text           = text.toUpperCase();
   fieldObj.value = text;
}	


/****************************************************************************************
Name: datum()    
Formatiert das Datum des übergebenen Formularfeldes mit "." falls dieser nicht eingegeben wurden
@param  fieldObj formElement
****************************************************************************************/
function chkDateField(fieldObj)
{
     var eingabe = fieldObj.value;
     var punkt   = eingabe.split(".");
     
	 //wenn kein punkt mit eingegeben wurde
	 if (punkt.length == 1)  
	  { 
			
			 if (eingabe.length == 6 )
			  {				   
				   eingabe = eingabe.substring(0,2)+"."+eingabe.substring(2,4)+"."+eingabe.substring(4,6);
				   fieldObj.value = eingabe;
			  }
			 else
			 if (eingabe.length == 8 )
			  {
			       eingabe = eingabe.substring(0,2)+"."+eingabe.substring(2,4)+"."+eingabe.substring(4,8);
			       fieldObj.value = eingabe;
			  }
	  }
}


///########################################################################################

/****************************************************************************************
Funktion zum überprüfen von Formularfeldern.
Es wird automatisch eine MEldung angezeigt, wenn die Eingabe nicht korrekt ist.
Als übergabe wird ein Array in folgender Form erwartet:
      var a_felder = new Array (new Array("Fieldname", "Pflichtfeld", "Pruefart"))
	  Pflichtfeld : 1/0
	  Pruefart    : 0(SpecialLetter) 1(GanzZahl) 2(KommaZahl) 3(Datum)
@param  array 
@return boolean
****************************************************************************************/
function chkFormInput(formObj, a_pruefArray)
{
	
	var result = true;
	
	//Alle übergebenen Felder durchlaufen
	for (x=0; x<a_pruefArray.length; x++)	
	 {
			var formElement = formObj[a_pruefArray[x][0]];
     
			//Prüfen ob das Feld ein Pflichtfeld ist
			if (a_pruefArray[x][1] == 1 && formElement.value == "")
			{
				alert("Bitte füllen Sie alle Pflichfelder aus.")
				formElement.focus();
				result = false;
				return result;
				break;
			}
				    
			//Inhalt des Feldes prüfen
			switch(a_pruefArray[x][2]) //was soll geprüft werden
			{
				case "0":
					 result = !valueContainsSpecialLetter(formElement.value); //übergabe des feldnamens
				     break;
				case "1":
					 result = valueIsNum(formElement.value);
				     break;
				case "2":
				     result = valueIsKommazahl(formElement.value);
				     break;
			    case "3":
					 result = valueIsDate(formElement.value);
				     break;
			 } 
					
			//Wenn eine Fehleingabe getätigt wurde
			if (!result)
			 {
				alert("Bitte prüfen Sie Ihre Eingabe")
				formElement.focus();
				result = false;
				break;
			 }	     
	 }
	 
	 return result;
}
	   

/****************************************************************************************
Diese Funktion prueft, ob ein Datum korrekt eingegeben wurde und
beruecksichtig dabei neben der richtigen Form, auch ob es sich 
um ein zulaessiges Datum handelt (inklusive Schaltjahr Betrachtung)

Parameter:
chkdate		-	eingegebenes Datum

Return:
true			- Datum ist korrekt
false			- Datum ist (in irgendeiner Form) unzulaessig
****************************************************************************************/
function valueIsDate(chkdate)
{		
   if (chkdate != "" )
   {
	   var Year		=	parseInt(chkdate.substring(6,10), 10);
	   var Month	=	parseInt(chkdate.substring(3,5), 	10);
	   var Day		=	parseInt(chkdate.substring(0,2), 	10);
	   
	   
	   //Prüfen ob das Jahr ein gültiges Jahr ist
	   //========================================
	   //Prüfen ob es sich bei den Jahresangaben um korrekte numerische Werte handelt
	   if (isNaN(chkdate.substring(6,10))){return false;}
	   if (isNaN(chkdate.substring(3,5))) {return false;}
	   if (isNaN(chkdate.substring(0,2))) {return false;}
	   //ab einer Eingabe > 2 darf das Jahr nicht kleiner 100 sein
	   if (chkdate.substring(6,10).length > 2 && Year < 100) { return false;}
	   //========================================
	   
	   // Punkte an der richtigen Position?
	   if ((chkdate.charAt(2)==".") && (chkdate.charAt(5)=="."))
	   {		// maximal 31 Tage und 12 Monate?
	       if ((Day<=31) && (Day>=1) && (Month>=1) && (Month<=12))
	       {	// Monate mit 31 Tagen -> Datum korrekt
	         if((Month==1) || (Month==3) || (Month==5) || (Month==7) || (Month==8) || (Month==10) || (Month==12)) { return true; }
	         else
	         {		// maximal 30 Tage?
	            if ((Day<=30) && (Day>=1))
	            {			// Monate mit 30 Tagen -> Datum korrekt
	                if((Month==4) || (Month==6) || (Month==9) || (Month==11)) { return true; } 
	               else
	               {	// maximal 28 Tage fuer Februar -> Datum korrekt
	                  if ((Day<=28) && (Day>=1)) { return true; }
	                  else
	                  {			// 29 Tage und Monat Februar?
	                      if(Day==29)
	                      {			// Schaltjahprobe!
	                           if ((Year%4)==0)
	                           {		//Schaltjahr? -> Datum korrekt
	                               if ((Year%100)!=0) { return true; }
	                               else
	                               {			//Schaltjahr? -> Datum korrekt
	                                     if ((Year%400)==0) { return true; }
	                                     else { return false; } // ungueltiges Datum
	                               }
	                           }
	                          else { return false; } // ungueltiges Datum
	                      }
	                      else { return false; } // ungueltiges Datum
	                  }
	            }
	         }
	        else { return false; } // ungueltiges Datum
	       }
	    }
	    else { return false; } // ungueltiges Datum
	  }
	  else {return false; }  //leer// ungueltiges Datum
  }
  else return true
}	
	
	
/****************************************************************************************
Diese Funktion prüft ob eine Zahl/kommazahl eingegeben wurde
@param  string 
@return boolean
****************************************************************************************/
function valueIsKommazahl(stringValue)
{
  var stringValue = stringValue.replace(",", ".");
  return (!isNaN(stringValue));
}	
	   
/****************************************************************************************
Diese Funktion prüft ob eine Ganz-Zahl eingegeben wurde
@param  string 
@return boolean
****************************************************************************************/
function valueIsNum(stringValue)
{
  var result = true;
  for(var i=0;i<stringValue.length;++i)
   {
       if(stringValue.charAt(i) < "0" || stringValue.charAt(i) > "9")
	   {
	     result = false;
		 break;
	   }
   }	
   return result;
}	 

 
/****************************************************************************************
Diese Funktion prüft ob ein Sonderzeichen eingegeben wurden
@param  string 
@return boolean
****************************************************************************************/
function valueContainsSpecialLetter(stringValue)
{
     var result     = false;
	 var a_specialL = new Array ("'", "<", ">", "\"");
	 	 
	 for(var i=0; i<a_specialL.length; ++i)
	  {
		 if(stringValue.indexOf(a_specialL[i])>-1)
         {
		   result = true;
		   break;
		 }
	   }	 
     return result;     
 }	   

 //############################ ENDE Formular-Prüf-Funktionen #################################
  //############################################################################################
  
  
  
  
/****************************************************************************************
Name: zeichenZeahler() 
zählt die zeichen in dem angegebenen formularfeld und weist die anzahl dem 
Labelfield "feldID_charCount" zu

@Param fieldObj
@Param zeichen
****************************************************************************************/
 function fieldCounter(feldObj, maxCount)
   {
		 var fieldValue = feldObj.value;
		 if (fieldValue.length > 999)
		    {document.getElementById(feldObj.name + "_charCount").style.color = "red";}
		 else
		    {document.getElementById(feldObj.name + "_charCount").style.color = "#000000";}
		 
		 document.getElementById(feldObj.name + "_charCount").innerHTML = fieldValue.length;
   }
  


/*
 * Funktion zum Prüfen einer Datumseingabe
 */
function check_date(field){
	var checkstr = "0123456789";
	var DateField = field;
	var Datevalue = "";
	var DateTemp = "";
	var seperator = ".";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;
	
	err = 0;
	DateValue = DateField.value;
	
	for (i = 0; i < DateValue.length; i++) {
		if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
			DateTemp = DateTemp + DateValue.substr(i,1);
		}
	}
	
	DateValue = DateTemp;
	if (DateValue.length == 6) {
		if (DateValue.substr(4,2) < 80) {
			century = '20';
		} else {
			century = '19';
		}
		DateValue = DateValue.substr(0,4) + century + DateValue.substr(4,2);
	}
	
	if (DateValue.length != 8) {
		err = 19;
	}
	
	year = DateValue.substr(4,4);
	if (year == 0) {
		err = 20;
	}
	
	month = DateValue.substr(2,2);
	if ((month < 1) || (month > 12)) {
		err = 21;
	}
	
	day = DateValue.substr(0,2);
	if (day < 1) {
		err = 22;
	}
	
	if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
		leap = 1;
	}
	
	if ((month == 2) && (leap == 1) && (day > 29)) {
		err = 23;
	}
	
	if ((month == 2) && (leap != 1) && (day > 28)) {
		err = 24;
	}
	
	if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
		err = 25;
	}
	
	if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
		err = 26;
	}
	
	if ((day == 0) && (month == 0) && (year == 00)) {
		err = 0; day = ""; month = ""; year = ""; seperator = "";
	}
	
	if (err == 0) {
		DateField.value = day + seperator + month + seperator + year;
	} else {
		alert("Datum ist nicht korrekt!");
		DateField.select();
		DateField.focus();
	}
}