/**
 * JS-Datei für Basic JS Funktionen
 * $Revision$
 */

var canSubmit = true;
var wantValidation = true;
var errorFields = new Array();

function reloadPage(_uid) {
	//document.testform.uid.value = _uid;
	document.testform.uid.value = document.testform.fromuid.value;
	wantValidation = false;
}

/**
 * lädt im Vaterfenster eine neue URL
 *
 * Wenn das Vaterfenster nicht mehr vorhanden ist, wird ein
 * neues Fenster geöffnet.
 */
function openerRefresh(url) {
  if (window.location.protocol == 'http:') {
    if (window.opener) {
      window.opener.location.href=url;
      window.opener.focus();
	  return;
	}
  }
  window.open(url);
}

/**
 * überprüft die URL des öffnenden Fensters
 */
function checkOpener() {

  check = true;
  if (opener.location) {
    url = opener.location.href;
  } else {
    check = false;
  }
  if (url == '' || url.search(/www\.stuttgart\.de/) == -1) {
    if (url.search(/cellent\.int/) == -1)
    check = false;
  }
  if (!check) {
    window.location.href = 'noaccess.php';
  }
}

/**
 * öffnet ein neues Fenster
 */
function openWindow(url, name, options) {
  mywin = window.open(url, name, options);
  mywin.focus();
}

/**
 * überprüft ob Funktion existiert und ruft diese dann auf
 */
function checkFormWrapper() {
  var result1 = true;
  var result2 = true;

  if (!wantValidation) return true;

  // bisherige Fehlermeldungen löschen -> jetzt wird neu geprüft
  clearErrorMessages();

  // externe Prüfung wenn JS-Funktion "checkForm" im Template definiert wurde
  if (typeof(checkForm) == 'function') {
    result1 = checkForm();
  }
  // interne Prüfung (über konfigurierbare Formularfelder)
  if (typeof(checkFormInt) == 'function') {
    result2 = checkFormInt();
  }
  //alert('r1:' + result1 + ' - r2:' + result2);
  return result1 && result2;
}

/**
 * gibt eine Anfrage an den versteckten IFRAME weiter
 */
function lookup_exec(lookup_url) {
  frames['lookupframe'].location.href  = lookup_url;
}

/**
 * Event-Handler für die Checkboxen auf Suchergebnis-Seiten
 */
function clickResult(E, session) {
  if (E.checked) {
    lookup_exec('../common/hidden.php?add=1&array=selected&key=' + E.name + '&value=1'+session);
  } else {
    lookup_exec('../common/hidden.php?remove=1&array=selected&key=' + E.name + '&value=1'+session);
  }
}

/**
 * Minimiert eine Finder-Anwendung und ruft dann die gewünschte
 * URL in der dahinterliegenden Kiosk-Anwendung auf
 * NUR bei Kiosk !!!
 */
function kioskminimize(url) {
  // Fenster nur verkleiner, wenn im Hintergrund die Kiosk-Anwendung läuft
  if (opener.document._kiosk) {
    // Fenstergröße ist bei SiteKiosk und normalen Browser unterschiedlich
    if (opener.isKiosk()) {
      window.resizeTo(250, 160);  // SiteKiosk
    } else {
      window.resizeTo(260, 200); // normaler Browser
    }
    // an den Anfang der Seite scrollen -> Hinweis muss sichtbar sein
    scrollTo(0,0);
    // Hinweis zum Wiederherstellen einblenden
    zoominfo.style.visibility = "visible";
  }
  // Vater-Anwendung aktualisieren
  openerRefresh(url);

}

/**
 * Stellt das Finderfenster wieder in der Orginalgröße dar
 */
function restoreWindow() {
  // Originalgröße wiederherstellen
  window.resizeTo(940, 620);
  // Hinweis ausblenden (nur Kiosk)
  if (typeof(zoominfo) != 'undefined') {
    zoominfo.style.visibility = "hidden";
  }
}

/**
 * Handler für Body Onload-Events
 *
 * Ruft die Funktion customOnLoad auf (falls vorhanden)
 */
function onLoad() {
  window.focus();
  if (typeof(customOnLoad) == 'function') {
    customOnLoad();
  }
}

/**
 * markiert ein Feld mit rotem Hintergrund bei fehlerhafter Eingabe
 */
function highlightField(field, highlight) {
  if (field.style) {
    if (highlight) {
      errorFields.push(field.id);
      field.style.backgroundColor = '#FFB5B5';
      field.style.border = '1px solid #FF4D4D';
      if (field.tagName == 'SELECT') {
        for(i=0; i<field.options.length;i++) {
          field.options[i].style.backgroundColor = '#FFB5B5';
        }
      }
      if (canSubmit) {
        // beim 1. Fehler -> Seite nach oben scrollen, damit die
        // Fehlermeldunen sichtbar werden (#4258)
        window.scrollTo(0, 0);
        //field.focus();
        //if (field.tagName == 'INPUT') field.select();
      }
    } else {
      // prüfen, ob das Feld fehlerhaft ist
      for (i=0;i<errorFields.length;i++) {
        if (field.id == errorFields[i]) return;
      }

      // Feld wieder auf weiß setzen
      field.style.backgroundColor = '#FFF';
      field.style.border = '1px solid #7F9DB9';
      if (field.tagName == 'SELECT') {
        for(i=0; i<field.options.length;i++) {
          field.options[i].style.backgroundColor = '#FFF';
        }
      }

    }
  }
}

function checkRegExp(str, pattern) {
  var isOK = true;
  var re;
  if(typeof(str) == "string" || typeof(str) == "number") {
    if((pattern == null)) {
      pattern = ".*";
    } else {
      pattern = "^" + pattern + "$";
           }
    re = new RegExp(pattern);
    if(!re) {
      alert("No regular expression!");
      isOK = false;
    }
    if(isOK) {
      isOK = re.test(str);
    }
    return isOK;
  } else {
    alert("Wrong usage of checkRegExp, at least a string has to be passed!");
    return false;
  }
}

/**
 * prüft, ob eine E-Mail-Adresse gültig ist
 */
function isValidEmail(str) {
  return checkRegExp(str, '(^[a-zA-Z0-9]+([_.-][a-zA-Z0-9]+)*@[a-zA-Z0-9]+([.-][a-zA-Z0-9]+)*\.[a-z]{2,4}$)?');
}

/**
 * gibt es eine Fehlermeldung aus
 */
function displayError(msg) {
  _field = document.getElementById('errormsg');
  if (!_field) {
    alert('DIV für Fehlermeldungen fehlt !\nBitte folgendes ins Template einfügen:\n<div id="errormsg" class="error"></div>');
    alert(msg);
    return false;
  }
  if (_field.innerHTML != '') {
    _field.innerHTML = _field.innerHTML + '<br/>';
  }
  _field.innerHTML = _field.innerHTML + msg;
  canSubmit = false;
}

/**
 * löscht alle ausgegebenen Fehlermeldungen
 */
function clearErrorMessages() {
  _field = document.getElementById('errormsg');
  if (!_field) {
    return false;
  }
  if (_field.innerHTML != '') _field.innerHTML = '';
  canSubmit = true;
  errorFields = new Array();
}

/**
 * schickt das Formular ab, wenn der checkFormWrapper sein OK gibt
 */
function submitForm(uid) {
	if (uid) {
	  document.testform.uid.value =uid;
	}
	if (checkFormWrapper()) document.testform.submit();
}

/**
 * prüft eine Zeichenkette auf sinnlose Eingaben
 *
 * - dasselbe Zeichen mehrfach hintereinander
 */
function isValidInput(input) {
  var counter = 0;
  // Inhalt muss mehr als ein Zeichen haben, damit sich die folgende Prüfung lohnt
  // ACHTUNG: Hier wird TRUE zurückgegeben, weil nicht geprüft wurde - FALSE würde einen Fehler auslösen
  if (input.length <= 1) return true;
  for(i = 1; i < input.length; i++) {
    if (input.charAt(i-1) != input.charAt(i)) counter++;
  }
  return counter != 0;
}


/**
 *
 *
 */
function isNumeric(input) {
  var validLetters = "0123456789";
  var isNumber = true;
  var letter = '';

  for (i = 0; i < input.length && isNumber == true; i++)
  {
    letter = input.charAt(i);
    if (validLetters.indexOf(letter) == -1)
    {
      isNumber = false;
    }
  }
  return isNumber;
}



/**
 * String in Javascript Dateobjekt wandeln
 *
 *  String im Format 31.12.2000
 *  Gibt ein Javascriptobjekt vom Typ DATE zurück
 */
function convertDateString2obj(String) {
  // Vorbereitungen das das Datum in ein JS-Objekt gewandelt werden kann
  text = String.replace(/[^0-9.,-\/]/g,"");	//--- Ungueltige Zeichen entfernen --->
	zahlen = text.split(/[ ,.\-\/]/);			//--- In tt mm jjjj auftrennen --->
      //--- String in Zahl wandeln --->
	tag   = zahlen[0]*1;
	monat = zahlen[1]*1;
	jahr  = zahlen[2]*1;
  if (tag   < 10){tag   = "0" + tag   }
  if (monat < 10){monat = "0" + monat }
  // Aktivieren um zweistellige Jahre zuzulassen (Bsp. 05 = 2005)
  //if (jahr < 10){jahr = "0" + jahr }
  //if (jahr < 100){jahr = "20" + jahr }
	// Aktuelles Datum in JS-Objekt wandeln (monat fängt bei JS mit 0 an)
	if(isValidDate(tag+'.'+monat+'.'+jahr)){
    o_Date = new Date(jahr,monat-1,tag,"0","0","0");
  return o_Date;
	}else{
	  return 'ungültiges Datum';
	}

}

/**
 *  Zweck:		Vergleicht 2 Datum's die als Strings übergeben wurden
 *  s_Date1:	Erstes Datum vom Typ String
 *  s_Date2:	Zweites Datum vom Typ String
 *  Ausgabe:	Wenn Datum1 gleich Datum2 dann Return 0
 *	Wenn Datum1 größer Datum2 dann Return 1
 *	Wenn Datum1 kleiner Datum2 dann Return -1
 *  Ungültiges Datum dann Return false
 */
function compare_DateString(s_Date1,s_Date2) {

    	// in Objekt wandeln
    o_Date1 = convertDateString2obj(s_Date1);
		o_Date2 = convertDateString2obj(s_Date2);

		if((o_Date1 != 'ungültiges Datum') && (o_Date2 != 'ungültiges Datum')){
    // in serielle Zahl wandeln
		z_Date1 = o_Date1.getTime();
		z_Date2 = o_Date2.getTime();
		if (z_Date1 == z_Date2) return 0;
		if (z_Date1 > z_Date2) return 1;
		if (z_Date1 < z_Date2) return -1;
		}
}

/**
*  Zweck: Prüft einen Datums-String auf ein gültiges
* Datum im Format TT.MM.YYYY
*
*/
function isValidDate (datum)
{
    //(Schritt 1) Fehlerbehandlung
 if (!datum) return false;
 datum=datum.toString();

 //(Schritt 2) Aufspaltung des Datums
 datum=datum.split(".");
 if (datum.length!=3) return false;

 //(Schritt 3) Entfernung der fuehrenden Nullen und Anpassung des Monats
 datum[0]=parseInt(datum[0],10);
 datum[1]=parseInt(datum[1],10)-1;


 //(Schritt 4) Behandlung Jahr nur zweistellig
 //if (datum[2].length==2) datum[2]="20"+datum[2]
 if (datum[2].length!=4)
 return false;

 //(Schritt 5) Erzeugung eines neuen Dateobjektes
 var kontrolldatum=new Date(datum[2],datum[1],datum[0]);

 //(Schritt 6) Vergleich, ob das eingegebene Datum gleich dem JS-Datum ist
 if (kontrolldatum.getDate()==datum[0] && kontrolldatum.getMonth()==datum[1] && kontrolldatum.getFullYear()==datum[2])
     return true; else return false;

}

/**
* Liefert einen Teil eines Datumsstrigs zurück
* TT = 0, MM = 1, YYYY = 2
* @return Teil des Datums
*/
function getDatePart(date1,teil){
  text = date1.replace(/[^0-9.,-\/]/g,"");	//--- Ungueltige Zeichen entfernen --->
	zahlen = text.split(/[ ,.\-\/]/);			//--- In tt mm jjjj auftrennen --->
      //--- String in Zahl wandeln --->
  return zahlen[teil]
}


/**
 * versteckt im IE alle SELECT-Felder mit der CSS-Klasse "formtabselect"
 */
function toggleIESelect(show) {
   if (document.all) {
		for(ix=0; ix <document.all.length; ix++) {
		  if (document.all[ix].className == 'formtabselect') {
			  object = document.all[ix];
			  if (show) {
          object.style.visibility = 'visible';
        } else {
          object.style.visibility = 'hidden';
        }
			}
		}
	}
}

/**
 * Längenbegrenzung für Textareas
 *
 * @param field Feld, dessen Länge überprüft werden soll
 * @param countfield Feld, in dem die Länge ausgegeben werden soll
 * @param maxlimit Maximal zulässige Anzahl an Zeichen
 */
function textareaCounter(field, countfield, maxlimit) {
  if (field.value.length > maxlimit) {
    field.value = field.value.substring(0, maxlimit);
  } else {
    countfield = document.getElementById(countfield);
    countfield.innerHTML = 'Es sind noch ' + (maxlimit - field.value.length) + ' Zeichen übrig.';
  }
}

/**
 * ändert eine Style-Eigenschaft eines Elements
 */
function setStyleAttr(LO, key, value) {
  eval("LO.style." + key + " = value;");
}


/**
* Prüft die Hausnummer auf eines der folgenden gültigen Formate
*  Ziffern (Bsp: 29 99 1234 4)
*	 Ziffern und Prefix (Bsp: 29a 116b 20A)
*  Ziffern/Ziffern (Bsp: 29/11 116/2 20/3)
*  Ziffern/Ziffern und Prefix (Bsp: 29/1A 116/2z 20/3B)
*
*/
function checkStreetNumber(value){
	// Regular Expression
	regex = /^([0-9]+)(\/?([0-9]+))?([A-Za-z])?$/;
	if(value.match(regex)){
	 return false;
	}
return true;
}
