function AllgemeineApplikation(defaultsparte)
{
  this.defaultsparte = defaultsparte;
}

AllgemeineApplikation.prototype.pruefe_fom_kundennummer = function(feld)  {

  var search1 = /\d{3}1{7}/;
  var search2 = /\d{3}2{7}/;
  var search3 = /\d{3}3{7}/;
  var search4 = /\d{3}4{7}/;
  
  if(search1.exec(feld.value)){
	return false;
  }
  if(search2.exec(feld.value)){
	return false;
  }
  if(search3.exec(feld.value)){
	return false;
  }
  if(search4.exec(feld.value)){
	return false;
  }
  return true;
}

AllgemeineApplikation.prototype.ajax_modul_wechseln = function(seite, pid, modulname, modus) {
  var url = encodeURI("/applikation/ajax/update.html?seite="+seite+"&pid="+pid+"&modulname="+modulname+"&modus="+modus);
  ajax = new Ajax.Updater(modulname, url, {method:'get'});
}

AllgemeineApplikation.prototype.pruefe_modul_anzeige = function(feld) {
  var modul_regel = modul_regeln();
  var feldname = feld.name;

  // Gehe durch alle Anzeigeregeln
  for(var i=0; i < modul_regel.length; i++) {
    // Teile die Felder der Regel auf
    var modul_regel_feldnamen_liste = modul_regel[i].split(";")[1];
    // Teile die Liste der relevanten Felder auf
    var modul_regel_feldnamen       = modul_regel_feldnamen_liste.split(",");
    // Schaue ob das geaenderte Feld in der Liste der relevanten Felder ist
    for(var j=0; j < modul_regel_feldnamen.length; j++) {
      // console.log("Chec:k "+ feld + " feldname: "+ feldname + " relevant:
		// "+ modul_regel_feldnamen[j]);
      if(feldname == modul_regel_feldnamen[j])
      {
        // Ueberpruefe die Anzeige des Feldes
        allgemein_zeige_modul(modul_regel[i]);
        break;
      }
    }
  }
}

// Lade-/Berechnenanimation starten
AllgemeineApplikation.prototype.show_overlay = function() {
  if ($('overlay')) {
    $('form_part').style.visibility = "hidden";
    $('overlay').style.display = "block";
  }
  return 1;
}

// Lade-/Berechnenanimation starten
AllgemeineApplikation.prototype.show_overlay_new = function(hideDivs) {
  if ($('overlay')) {
  	for (divelem in hideDivs) {
  		if ($(divelem))
  			$(divelem).style.visibility = "hidden";
  	}
	// Aufgrund eines Bugs im IE muessen alle Select-Boxen versteckt werden, da
	// sie sonst nicht verdeckt werden
	$$('.mainBox select').each( function(s) {
		s.style.display = "none";
	});
    $('overlay').style.display = "block";
  }
  return 1;
}


function Tarifrechner(defaultsparte)
{
  this.defaultsparte = defaultsparte;
// // DEBUG
// console.log("Kennzeichen1: " + this.kennzeichen1_temp);
// console.log("Kennzeichen2: " + this.kennzeichen2_temp);
}

Tarifrechner.prototype = new AllgemeineApplikation();
Tarifrechner.prototype.constructor = Tarifrechner;
Tarifrechner.superClass = AllgemeineApplikation.prototype;

// ************************ Funktionalitaeten fuer KGS5-Auswahlbox
// ******************************* //

// globale Variablen, um mehrfache Calls zu verhindern und beim Laden der Seite
// einen Call zu starten
Tarifrechner.ajax_call_running = 0;
Tarifrechner.first_call = 0;

// Methoden zum Zugriff auf die globalen Variablen
Tarifrechner.prototype.ajax_start = function() {
	Tarifrechner.ajax_call_running = 1;
}
Tarifrechner.prototype.ajax_stop = function() {
	Tarifrechner.ajax_call_running = 0;
}
Tarifrechner.prototype.ajax_runs = function() {
	return Tarifrechner.ajax_call_running;
}
Tarifrechner.prototype.ajax_cleanup = function( text ) {
	// console.log( text );
	this.ajax_stop();
	return;
}

// Hilfsfunktionen zur Pruefung von Kennzeichenwerten
Tarifrechner.prototype.kennzeichen_komplett = function() {
	// erstes Feld ist Pflicht
	if ( $("kennzeichen1") && $F("kennzeichen1") == '' ) {
		return;
	}
	
	// falls zulassdaten-schalter vorhanden, auch suchen wenn kennzeichen2+3
	// vorhanden aber leer sind, da sie optional sein koennen
	var zulassungsdaten = $("zulassungsdaten_vorhanden_container") ? true : false;	
	if (zulassungsdaten && $("kennzeichen2") && $F("kennzeichen2") == '' && $("kennzeichen3") && $F("kennzeichen3") == '' ) {
		return 1;
	}
	
	// weitere Felder vorhanden und mindestens eines leer, dann Abbruch
	if ( 
		( $("kennzeichen2") && $F("kennzeichen2") == '' ) || 
		(	$("kennzeichen3") && $F("kennzeichen3") == '' ) ) {
		return;
	}
	return 1;
}
// Pruefung, ob ein neues Kennzeichen eigegeben wurde oder die Werte beibehalten
// wurden
Tarifrechner.prototype.kennzeichen_geaendert = function() {
	// Pruefung beim ersten Aufruf ignorieren
	if ( Tarifrechner.first_call == 1 ) { return 1; }

	var neues_kennzeichen = this.erstelle_kennzeichen();
	var altes_kennzeichen = this.erstelle_temp_kennzeichen();
	
	if ( neues_kennzeichen != altes_kennzeichen ) {
		if ( $("kennzeichen1") && $("kennzeichen1_temp") ) { $("kennzeichen1_temp").innerHTML = $F("kennzeichen1"); } 
		if ( $("kennzeichen2") && $("kennzeichen2_temp") ) { $("kennzeichen2_temp").innerHTML = $F("kennzeichen2"); }
		if ( $("kennzeichen3") && $("kennzeichen3_temp") ) { $("kennzeichen3_temp").innerHTML = $F("kennzeichen3"); }
		return 1;
	}
	return;
}
Tarifrechner.prototype.erstelle_kennzeichen = function() {
	var kennzeichen = $F("kennzeichen1").toUpperCase();
	if ( $("kennzeichen2") ) { kennzeichen = kennzeichen + "-" + $F("kennzeichen2").toUpperCase(); }
	if ( $("kennzeichen3") ) { kennzeichen = kennzeichen + " " + $F("kennzeichen3").toUpperCase(); }
	return kennzeichen;
}

Tarifrechner.prototype.erstelle_temp_kennzeichen = function() {
	var kennzeichen = $("kennzeichen1_temp").innerHTML.toUpperCase();
	if ( $("kennzeichen2_temp") ) { kennzeichen = kennzeichen + "-" + $("kennzeichen2_temp").innerHTML.toUpperCase(); }
	if ( $("kennzeichen3_temp") ) { kennzeichen = kennzeichen + " " + $("kennzeichen3_temp").innerHTML.toUpperCase(); }
	return kennzeichen;
}


// Achtung: diese Funktion wird beim Laden der Seite ausgefuehrt
Tarifrechner.prototype.check_stadtland = function() {
	// Abbruch, falls kein zu fuellender HTML-Container vorhanden ist
	if ( !$("zulassungsbezirk_select") ) {	return this.ajax_cleanup("Kein Feld gefunden!"); }

	var bezirksliste;
	var stadtland;

	// Nur abschicken, wenn gerade kein Request laeuft // DEBUG
	if ( this.ajax_runs() ) { return this.ajax_cleanup("Es läuft bereits ein AJAX-Call!"); }

	// DEBUG
	this.ajax_start();
	Tarifrechner.first_call++;
	// console.log("Start: " + this.ajax_runs());

	// Nur wenn alle moeglichen Werte eingefuellt sind
	if ( this.kennzeichen_komplett() ) {
		// Request nur starten, wenn sich Daten geaendert haben!
		if ( !this.kennzeichen_geaendert() ) { return this.ajax_cleanup("Keine Abfrage, da keine Änderung!"); }

		// Initial unsichtbar machen
		if ( $("Zulassungsbezirk") ) { $("Zulassungsbezirk").style.display = "none"; }

		$("zulassungsbezirk_select").innerHTML = '';

		var kennzeichen = this.erstelle_kennzeichen();
		
		// Suche der Bezirke per AJAX
		var json;
		var url = '/applikation/ajax/zulassungsbezirk-suchen.html?konfig_name=' + encodeURIComponent($("konfig_name").value) + '&kennzeichen1=' + encodeURIComponent(kennzeichen);
		new Ajax.Request(url, {
			onSuccess: function( ajax_results ) {
        var counter  = 0;                                                                                                       
        var selected = 0;
				var json = eval("(" + ajax_results.responseText + ")");
				// Iterating
				json.result.each(function(item){
					// build option-HTML-Code for each result
					if (item.selected == 1) { selected = counter; }
					var option = new Option( item.name, item.id, false, false );
					$("zulassungsbezirk_select").options[$("zulassungsbezirk_select").length] = option;
          counter++;
				});
				// Abfangen, dass kein Ergebnis geliefert wird
				if ( json.result.length <= 1 ) {
					$("Zulassungsbezirk").style.display = "none";
				}
				if ( json.result.length > 1 ) {
					$("Zulassungsbezirk").style.display = "block";
				}

        // waehle den selectierten (oder ersten) Eintrag aus
        var options = $$('select#zulassungsbezirk_select option');
        options[selected].selected = true;
			}
		})
	}
	// DEBUG
	return this.ajax_cleanup("Fertig.");
}
// ********************** Ende Funktionalitaeten fuer KGS5-Auswahlbox
// ***************************** //

Tarifrechner.prototype.get_short_stadtland = function(value) {
  value = value.replace(/\u00C4/,"A");
  value = value.replace(/\u00D6/,"O");
  value = value.replace(/\u00DC/,"U");
  value = value.replace(/ /,"");

  return value;
}

Tarifrechner.prototype.vorvu_setzen = function() {
  if ($("tmp_vorvu")) {
    if ($("tmp_vorvu").value != "") {
      var tmp = $("tmp_vorvu").value.split("::");
      document.getElementsByName("vorvu_key")[0].value = tmp[0];
      document.getElementsByName("vorvu_name")[0].value = tmp[1].replace("&quot","\"");
    }
  }
}

Tarifrechner.prototype.set_bank_adresse = function(multi, blz, name, ort) {
  if(document.getElementsByName(multi)[0].selectedIndex != 0) {
    var selectedIndex = document.getElementsByName(multi)[0].selectedIndex;
    var tmp = document.getElementsByName(multi)[0].options[selectedIndex].value.split("::");
    document.getElementsByName(blz)[0].value = tmp[0];
    document.getElementsByName(name)[0].value = tmp[1];
    document.getElementsByName(ort)[0].value = tmp[2];
  }
}

Tarifrechner.prototype.setze_beginn_pruefung = function(beginn, cb, feld) {
  if (document.getElementsByName(cb)[0]) {
    if(beginn.match(/01\.01\./) || beginn.match(/0101/) || beginn.match(/1\.1\./)) {
      document.getElementsByName(cb)[0].checked = true;
      document.getElementsByName(feld)[0].value = '1';
    } else {
      document.getElementsByName(cb)[0].checked = false;
      document.getElementsByName(feld)[0].value = '';
    }
  }
}

Tarifrechner.prototype.set_vorvu = function() {
  if(document.getElementsByName("tmp_vorvu_zn")[0].selectedIndex != 0) {
    var selectedIndex = document.getElementsByName("tmp_vorvu_zn")[0].selectedIndex;
    var tmp = document.getElementsByName("tmp_vorvu_zn")[0].options[selectedIndex].value.split("::");
    document.getElementsByName("vorvu_key")[0].value = tmp[0];
    document.getElementsByName("vorvu_name")[0].value = tmp[1].replace("&quot","\"");
  }
}

// Veredelung des Kunden
Tarifrechner.prototype.set_beratung = function() {
  if ( ( !document.getElementsByName(this.defaultsparte + '-dokument-beratung_kontaktaufnahme_checkbox')[0] ) && ( !document.getElementsByName('-dokument-beratung_gewuenscht_checkbox')[0] ) ) {
    return;

  }
  // wenn die erste Checkbox aktiviert wird,
  if (document.getElementsByName(this.defaultsparte + '-dokument-beratung_gewuenscht_checkbox')[0].checked == true) {
    // soll die zweite aktivierbar sein
    document.getElementsByName(this.defaultsparte + '-dokument-beratung_kontaktaufnahme_checkbox')[0].disabled=false;
    // auf 0 setzen, wenn nicht auf 1 (Verhinderung von leeren values)
    if ( document.getElementById(this.defaultsparte + '-dokument-beratung_kontaktaufnahme_0').value != "1" ) {
      document.getElementById(this.defaultsparte + '-dokument-beratung_kontaktaufnahme_0').value="0";     

    }
  // ansonsten wird die zweite einfach gesperrt
  } else {
    document.getElementsByName(this.defaultsparte + '-dokument-beratung_kontaktaufnahme_checkbox')[0].checked=false;
    document.getElementsByName(this.defaultsparte + '-dokument-beratung_kontaktaufnahme_checkbox')[0].disabled=true;
    document.getElementById(this.defaultsparte + '-dokument-beratung_kontaktaufnahme_0').value="0";
  }
}


// ET 5190: Vorgangszustand per AJAX abfragen um Button zu aktivieren.
Tarifrechner.prototype.check_vorgang_status = function() {
	// Abbruch, falls kein zu fuellender HTML-Container vorhanden ist
	if(!$("beratungsdoku")) {
    return this.ajax_cleanup("Kein Feld gefunden!");
  }

	// Nur abschicken, wenn gerade kein Request laeuft // DEBUG
	if(this.ajax_runs()) {
    return this.ajax_cleanup("Es läuft bereits ein AJAX-Call!");
  }

	this.ajax_start();

  var json;
  var url = '/applikation/ajax/vorgang-status.html';

  new Ajax.Request(url, {
      onSuccess: function( ajax_results ) {
        var text = ajax_results.responseText;
        if(text.match(/^1/)) {
          document.getElementsByName('ablauf_weiter')[0].className='orange';
          document.getElementsByName('ablauf_weiter')[0].disabled = false;
          allgemein_fehler_zuruecksetzen();
        }
        else {
          setTimeout('Applikation.check_vorgang_status();',1000);
        }
      }
    }
  );
	return this.ajax_cleanup("Fertig.");
};


// ET 4706: Wenn die VorVu allianz ist soll eine InfoBox angezeigt werden
Tarifrechner.prototype.pruefe_auf_allianz_bei_vorvu = function(text, li) {
  if ($("VorVu_Allianz_Info")) {
    var istAllianz = li.getAttribute("istAllianz");
    if (istAllianz == 1) {
        $("VorVu_Allianz_Info").style.display = "";
    } else {
        $("VorVu_Allianz_Info").style.display = "none";
    }
  }
}

Tarifrechner.prototype.setze_sondereinstufungen_aus_referenvertrag_typ = function(select) {
  var auswahl = select.value;
  if (auswahl == '-1') {
    if ($('ehegatte'))                  $('ehegatte').value = ''; 
    if ($('zweitwagen_sf1_2'))          $('zweitwagen_sf1_2').value = '';
    if ($('zweitwagen_sf1_2_allianz'))  $('zweitwagen_sf1_2_allianz').value = '';
    if ($('zweitwagen_sf2'))            $('zweitwagen_sf2').value = '';
  }
  else if (auswahl == '0') {
    if ($('ehegatte'))                  $('ehegatte').value = '0'; 
    if ($('zweitwagen_sf1_2'))          $('zweitwagen_sf1_2').value = '0';
    if ($('zweitwagen_sf1_2_allianz'))  $('zweitwagen_sf1_2_allianz').value = '0';
    if ($('zweitwagen_sf2'))            $('zweitwagen_sf2').value = '0';
  }
  else {
    /*
	 * Füher waren die Felder voneinander abhängig und nacheinander gefragt
	 * ehegatte -> SF2 daher muss bei Auswahl von SF2 nun ehegatte (oder
	 * zweitwagen_sf1_2) auch ausgewählt werden
	 */
    if ($('ehegatte'))                 $('ehegatte').value                 = (auswahl == 'EHEGATTE'           || auswahl == 'ZWEITWAGEN_SF1_2_ALLIANZ' || auswahl == 'ZWEITWAGEN_SF2') ? '1' : '0';
    if ($('zweitwagen_sf1_2'))         $('zweitwagen_sf1_2').value         = (auswahl == 'ZWEITWAGEN_SF1_2'   || auswahl == 'ZWEITWAGEN_SF1_2_ALLIANZ' || auswahl == 'ZWEITWAGEN_SF2') ? '1' : '0';
    if ($('zweitwagen_sf1_2_allianz')) $('zweitwagen_sf1_2_allianz').value = (auswahl == 'ZWEITWAGEN_SF1_2_ALLIANZ') ? '1' : '0';
    if ($('zweitwagen_sf2'))           $('zweitwagen_sf2').value           = (auswahl == 'ZWEITWAGEN_SF2') ? '1' : '0';
  }
}

/*
 * Setzt das uebergebene Feld auf 1 um die Validierung der Adresse beim
 * naechsten Schritt im Dialog zu triggern. Noetig wegen Problem mit der
 * Auswertung von Fehler bei Unterschritten.
 */
Tarifrechner.prototype.vorschlag_zusenden_email_validieren_flag_setzen = function(feld) {
  if ($(feld)) $(feld).value = 1;
  return 1;
}

