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

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

Applikation.prototype.init = function() {
  if(! (typeof(window.modul_regeln) == "function") )
    return;

  var modul_regel = modul_regeln();
  for(var i=0; i < modul_regel.length; i++)
    allgemein_zeige_modul(modul_regel[i]);

  if(document.getElementsByName("focus_helper")[0]) {
    document.forms[0].onsubmit = function() {
      return this.check_focus();
    }
  }
  this.set_search_focus_listener();
  this.check_stadtland();

  this.show_storno_info();
  this.set_beratung();
  if( $("sfr_kh") && $("sfr_kh").getAttribute('onchange') || $("sfr_vk") && $("sfr_vk").getAttribute('onchange') ) {
    this.sf_hinweistext();
    this.kfz_vorschaeden_anzeige();

    var hinweis_onchange = $("sfr_kh").attributes["onchange"].value;
    eval(hinweis_onchange);
  }
  
  this.check_veredelung();
  
}

// Diese Funktion wird beim Seitenaufruf aufgefuehrt.
Applikation.prototype.check_veredelung = function() {
	if ($('kompetenteberatung_checkbox_0')) {
		if ($('Veredelung1') && $('Veredelung2') && $('Veredelung3') && $('Veredelung4')) {
			if ($('kompetenteberatung_checkbox_0').checked) {
				$('Veredelung1').show();
				if ($('telefonkontakt_0') &&  $('telefonkontakt_0').checked) {
					$('Veredelung2').show();
					$('Veredelung3').hide();
				}
				else if ($('telefonkontakt_1') &&  $('telefonkontakt_1').checked) {
					$('Veredelung2').hide();
					$('Veredelung3').show();
				} else {
                    // nichts ausgewaehlt
					$('Veredelung2').hide();
					$('Veredelung3').hide();                    
                }
				$('Veredelung4').show();
			}
			else {
				$('Veredelung1').hide();
				$('Veredelung2').hide();
				$('Veredelung3').hide();
				$('Veredelung4').hide();
			}
		}   
    }
}

// Defaultbutton deaktivieren, wenn Fahrzeugsuche gewaehlt
Applikation.prototype.set_search_focus_listener = function() {
  if(document.getElementsByName('suche_modell_freitext')[0]) {
	if (document.getElementsByName('suche_modell_freitext')[0].addEventListener) 
      document.getElementsByName('suche_modell_freitext')[0].addEventListener("keydown", this.check_key_code, true);
    else if (document.getElementsByName('suche_modell_freitext')[0].attachEvent) 
      document.getElementsByName('suche_modell_freitext')[0].attachEvent("onkeydown", this.check_key_code);
  }	
}

Applikation.prototype.check_key_code = function(event) {
  var key_code = event.keyCode;
  if(key_code == "13") 
    suche_fahrzeug();
}

Applikation.prototype.show_storno_info = function() {
  if($("storno_datum")) {
	if ($("VorVu_VSNR_container")) $("VorVu_VSNR_container").innerHTML= "";		
	if ($("VorVuKennzeichen1_container")) $("VorVuKennzeichen1_container").innerHTML= "";
    var flag = ($("storno_datum").value != "" || $("storno_datum_unbekannt").checked)? "block" : "none";
    $('HinweisVorfahrzeug').style.display = flag;
  }
}

Applikation.prototype.set_storno_vsnr = function(antragnr) {
  if (antragnr) {
	var index = antragnr.selectedIndex;
	if(index == 0) {
	  $("VorVu_VSNR").value = "";	
	  $("VorVu_Kennzeichen1").value = "";	
	  $("VorVu_Kennzeichen2").value = "";	
	  $("VorVu_Kennzeichen3").value = "";
	} else {
	  $("VorVu_VSNR").value = $("Temp_VorVu_VSNR").value.split("::")[index-1];	
	  $("VorVu_Kennzeichen1").value = $("Temp_VorVu_Kennzeichen1").value.split("::")[index-1];	
	  $("VorVu_Kennzeichen2").value = $("Temp_VorVu_Kennzeichen2").value.split("::")[index-1];	
	  $("VorVu_Kennzeichen3").value = $("Temp_VorVu_Kennzeichen3").value.split("::")[index-1];	
    }
  }
}

Applikation.prototype.clean_storno_datum = function(flag) {
  if(flag == "cb" && $("storno_datum").value != "") {
    $("storno_datum_unbekannt").checked = false;
    $("storno_datum_unbekannt_hidden").value = "";
  } else if ($("storno_datum_unbekannt").checked == true) {
    $("storno_datum").value = "";
  }
}

Applikation.prototype.change_grund_n = function(grundid, anbieterid, hiddenid, wertarr, ergebnisarr, textarr) {
  document.getElementsByName("vu_sonst_checkbox")[0].checked = false;
  document.getElementsByName("vu_sonst")[0].value = "0";
  
  if (document.getElementsByName("vu_az")[0] != null) {  
	  document.getElementsByName("vu_az")[0].value = "0";
	  document.getElementsByName("vu_az_checkbox")[0].checked = false;
  }
  if (document.getElementsByName("vu_dialog")[0] != null) {
    document.getElementsByName("vu_dialog")[0].value = "0";
    document.getElementsByName("vu_dialog_checkbox")[0].checked = false;
  }
  if (document.getElementById(hiddenid))
  	document.getElementById(hiddenid).value = ergebnisarr[0];
  this.set_grund_n(grundid, anbieterid, hiddenid, wertarr, ergebnisarr, textarr);
}

Applikation.prototype.set_grund_n = function(grundid, anbieterid, hiddenid, wertarr, ergebnisarr, textarr) {    
  var steuerung1 = document.getElementById(grundid+"_0");
  var steuerung2 = document.getElementById(grundid+"_1");
  var steuerung3 = document.getElementById(grundid+"_2");
  var steuerung4 = document.getElementById(grundid+"_3");
   
  // Die Texte koennen nun auch in Prodi definiert werden und ueberschreiben die hier definierten Default
  var frage1 = textarr ? textarr[0] : "Bei welchem der folgenden Anbieter ist Ihr derzeitiger PKW versichert?";
  var frage2 = textarr ? textarr[1] : "Bei welchem der folgenden Anbieter ist Ihr bisheriger PKW versichert?";
  var frage3 = textarr ? textarr[2] : "Bei welchem der folgenden Anbieter haben Sie derzeit einen PKW versichert?";
    
  var flag = (steuerung4.checked == true || steuerung3.checked == true || (steuerung1.checked == false && steuerung2.checked == false && steuerung4.checked == false)) ? "none" : "block" ;
  document.getElementById(anbieterid+"_element_container_0").style.display = flag;
  document.getElementById(anbieterid+"_element_container_1").style.display = flag;
  if (document.getElementById(anbieterid+"_element_container_2")  != null) {
    document.getElementById(anbieterid+"_element_container_2").style.display = flag;
  }
  document.getElementById(anbieterid+"_frage_anbieter").style.display = flag;
  
  if(steuerung1.checked == true) 
    document.getElementById(anbieterid+"_label_container").innerHTML = frage1;
    
  if(steuerung2.checked == true)
    document.getElementById(anbieterid+"_label_container").innerHTML = frage2;
     
  if(steuerung3.checked == true)
    document.getElementById(anbieterid+"_label_container").innerHTML = frage3;  
  
  if(steuerung1.checked == true && $('vu_checkbox_1').name == 'vu_dialog_checkbox')
    document.getElementById(anbieterid+"_element_container_1").style.display = "none";
    
  if (document.getElementById(hiddenid)) {
  	klickwert = 0;
  	if (document.getElementsByName("vu_az_checkbox")[0] != null && document.getElementsByName("vu_az_checkbox")[0].checked)
  		klickwert |= wertarr[0];
  	if (document.getElementsByName("vu_dialog_checkbox")[0] != null && document.getElementsByName("vu_dialog_checkbox")[0].checked)
  		klickwert |= wertarr[1];
  	if (document.getElementsByName("vu_sonst_checkbox")[0].checked)
  		klickwert |= wertarr[2];
  		
  	document.getElementById(hiddenid).value = ergebnisarr[klickwert];
  }
}
  
Applikation.prototype.set_anbieter_n = function(anbieter, grundid, anbieterid, hiddenid, wertarr, ergebnisarr) {
   	
  if(document.getElementById(grundid+"_2").checked == false) {
				
		if(anbieter.name == "vu_az_checkbox" && anbieter.checked == true) {
			document.getElementsByName("vu_sonst_checkbox")[0].checked = false;
			document.getElementsByName("vu_sonst")[0].value = "0";
            if (document.getElementsByName("vu_dialog")[0] != null) {
			    document.getElementsByName("vu_dialog")[0].value = "0";
		    	document.getElementsByName("vu_dialog_checkbox")[0].checked = false;
            }
		}
		if(anbieter.name == "vu_dialog_checkbox" && anbieter.checked == true){
			document.getElementsByName("vu_sonst_checkbox")[0].checked = false;
			document.getElementsByName("vu_sonst")[0].value = "0";
			
			if (document.getElementsByName("vu_az")[0] != null) {
			    document.getElementsByName("vu_az")[0].value = "0";
			    document.getElementsByName("vu_az_checkbox")[0].checked = false;
            }
		}
		if(anbieter.name == "vu_sonst_checkbox" && anbieter.checked == true){
			if (document.getElementsByName("vu_az")[0] != null) {
			    document.getElementsByName("vu_az")[0].value = "0";
			    document.getElementsByName("vu_az_checkbox")[0].checked = false;
            }
            if (document.getElementsByName("vu_dialog")[0] != null) {
			    document.getElementsByName("vu_dialog")[0].value = "0";
			    document.getElementsByName("vu_dialog_checkbox")[0].checked = false;
            }
		}
		
	}
		
  if (document.getElementById(hiddenid)) {
  	
  	klickwert = 0;
  
  	if (document.getElementsByName("vu_az_checkbox")[0] != null && document.getElementsByName("vu_az_checkbox")[0].checked)
  		klickwert |= wertarr[0];
  
  	if (document.getElementsByName("vu_dialog_checkbox")[0] != null && document.getElementsByName("vu_dialog_checkbox")[0].checked)
  		klickwert |= wertarr[1];
  
  	if (document.getElementsByName("vu_sonst_checkbox")[0].checked)
  		klickwert |= wertarr[2];
  		
  	document.getElementById(hiddenid).value = ergebnisarr[klickwert];
  
  }
  
}

// Zeige bei bestimmten SF-Klassen Hinweistexte mit dynamischen Inhalten an
// es soll sowohl KH als auch Vollkasko beruecksichtigt werden
Applikation.prototype.sf_hinweistext = function() {
	// zuerst vorhandenen Text entfernen
	$$("#sfr_vk_container #post_container").first.innerHTML = '';
	if ($("sfr_kh") && $('hinweis_sfr')) {
		var gewaehlte_sfk 				= $F("sfr_kh");
		var gewaehlte_sfk_vk 			= $F("sfr_vk");
		
		// Variablen
		var kleiner_sf2 					=	["KH_M","KH_S","KH_SF00","KH_SFHL","KH_SF01"];
		var groesser_gleich_sf2 	= ["KH_SF02","KH_SF03","KH_SF04","KH_SF05","KH_SF06","KH_SF07","KH_SF08","KH_SF09","KH_SF10","KH_SF11","KH_SF12","KH_SF13","KH_SF14","KH_SF15","KH_SF16","KH_SF17","KH_SF18","KH_SF19","KH_SF20","KH_SF21","KH_SF22","KH_SF23","KH_SF24","KH_SF25"];
		var search_next 					= 1;
		var sfk_groesser_sf2			= 1;
		var sfk_liste							= groesser_gleich_sf2;
		
		// die kleinere Liste durchsuchen
		kleiner_sf2.each( function(s) {
  		if ( gewaehlte_sfk == s ) {
  			search_next 			= 0;
  			sfk_groesser_sf2 	= 0;
  			sfk_liste					= kleiner_sf2;
  			throw $break;
  		}
		});
		var text = this.generiere_sfk_hinweistext( gewaehlte_sfk, sfk_groesser_sf2, sfk_liste, gewaehlte_sfk_vk );
		// Hinweistext einfuegen, sofern vorhanden
		if ( $("sfr_vk_container") ) {
			var containers 	= $$("#hinweis_sfr .infoPart p");
			var container 	= containers.first();
			var hinweis		= text;
			if (text != '') {
				$('hinweis_sfr').style.display = "block";
			} else {
				$('hinweis_sfr').style.display = "none";
			}
			//document.getElementById("")
			container.innerHTML = hinweis;
		}
	}
}
// Hiweistext erstellen
Applikation.prototype.generiere_sfk_hinweistext = function( gewaehlte_sfk, sfk_groesser_sf2, liste, gewaehlte_sfk_vk ) {
	if ( gewaehlte_sfk == -1 ) { return ''; }
	// Aktuelles und kommenden Jahr ermitteln
	var jetzt 								= new Date();
	var aktuelles_jahr 				= jetzt.getFullYear();
	var naechstes_jahr 				= aktuelles_jahr + 1;
	
	// Ermittlung von weiteren SFK und Formatierung fuer Ausgabe
	var gewaehlte_sfk_ausgabe 		= this.sfk_fuer_ausgabe( gewaehlte_sfk );
	var gewaehlte_sfk_vk_ausgabe 	= this.sfk_fuer_ausgabe( gewaehlte_sfk_vk )


  var anzeigen = false;
  
  if ($("wunschbeginn")) {
    var wunschbeginn = $("wunschbeginn").value;

    if(wunschbeginn.match(/^[0-9]+\.[0-9]+\.([0-9]{4})$/)) {
      var wunschbeginn_jahr = RegExp.$1;
      if(wunschbeginn_jahr == naechstes_jahr) {
        anzeigen = true;
      }
    }
  }

  var text = '';

  if (anzeigen) {
    text = "<strong>Wichtiger Hinweis:</strong> ";
    if ( sfk_groesser_sf2 == 0 ) {
      
      text = text.concat("Aufgrund Ihrer Angaben berechnen wir ");
      // Fall 1: VK == HK
      if ( gewaehlte_sfk_ausgabe == gewaehlte_sfk_vk_ausgabe ) {
        text = text.concat("das neue Angebot für Haftpflicht und Vollkasko " + naechstes_jahr + " mit der Schadenfreiheitsklasse " + gewaehlte_sfk_ausgabe); 
      
      // Fall 2: VK != HK oder !VK
      } else {
        text = text.concat("für " + naechstes_jahr + " das neue Angebot in der Haftpflicht mit " + gewaehlte_sfk_ausgabe); 
        text = text.concat( ( gewaehlte_sfk_vk_ausgabe ) ? " und Vollkasko mit " + gewaehlte_sfk_vk_ausgabe : '');
      }
      text = text.concat(".");
    } else {
      
      var aktuelle_sfk = this.aktuelle_sfk_berechnen( gewaehlte_sfk, liste );
      var aktuelle_sfk_ausgabe;
      if ( aktuelle_sfk ) { aktuelle_sfk_ausgabe = this.sfk_fuer_ausgabe( aktuelle_sfk ); }
      
      // Fall 1: VK == HK || !VK
      if ( !gewaehlte_sfk_vk_ausgabe || ( gewaehlte_sfk_ausgabe == gewaehlte_sfk_vk_ausgabe ) ) {
        text = text.concat("Wir berechnen das neue Angebot für " + naechstes_jahr + " aufgrund Ihrer Angaben mit ");
        text = text.concat(gewaehlte_sfk_ausgabe + ", da wir davon ausgehen, dass Ihre derzeitige "); 
        text = text.concat("(" + aktuelles_jahr + ") Schadensfreiheitsklasse  " + aktuelle_sfk_ausgabe + " ist.");
        
      // Fall 2: VK != HK
      } else {
        text = text.concat("Aufgrund Ihrer Angaben berechnen wir ");
        text = text.concat("für " + naechstes_jahr + " das neue Angebot in der Haftpflicht mit " + gewaehlte_sfk_ausgabe); 
        text = text.concat(" und Vollkasko mit " + gewaehlte_sfk_vk_ausgabe);
      }
    }
  }
	return text;
}
// Ermittlung der vorigen SFK aus gewaehlter SFK
Applikation.prototype.aktuelle_sfk_berechnen = function( sfk, sfk_liste ) {
	var neue_sfk;
	//Sonderfall
	if ( sfk == 'KH_SF02' ) { return 'KH_SF01' };
	
	var temp_liste = [];
	sfk_liste.each( function(s) {
  	if ( sfk != s ) {
  		temp_liste.push( s );
  	} else {
  		neue_sfk = temp_liste.pop();
  		throw $break;
  	}
  });
  return neue_sfk;
}

// Formatierung des SF-Codes fuer die Ausgabe
Applikation.prototype.sfk_fuer_ausgabe = function( sfk ) {
	
	// keine Vollkasko ...
	if ( !sfk || sfk == 'undefined' || sfk == '' || sfk == '-1' ) { return ''; }
	if ( sfk.match(/KEINE/g) ) { return ''; }
	
	// KH am Anfang entfernen
	var ausgabe = sfk.replace(/KH_/,'');
	ausgabe 		= ausgabe.replace(/VK_/,'');
	ausgabe 		= ausgabe.replace(/SF/,'');
	ausgabe 		= ausgabe.replace(/^0/,'');
	// Sonderfaelle
	if ( ausgabe == 'HL' ) { ausgabe = '½' };
	if ( ausgabe != 'M' && ausgabe != 'S' ) { ausgabe = 'SF'+ausgabe; }
	return ausgabe;
}

Applikation.prototype.kfz_vorschaeden_anzeige = function() {
  var kleinere_klasse_kh = false;
  var kleinere_klasse_vk = false;
  var sfr_vk_gesetzt = false;
  var sfr_kh_gesetzt = false;
  
  /* Killer Kriterium */
  if ($("kfz_vorschaeden")) {
    var vorschaeden = $F("kfz_vorschaeden");
    if (vorschaeden == "ZWEI_PLUS") {
    	return false;
    }
  }
  
  if ($("sfr_kh")) {
    var gewaehlte_sfk = $F("sfr_kh");
    var kleiner_sf4   = ["KH_M","KH_S","KH_SF00","KH_SFHL","KH_SF01","KH_SF02","KH_SF03"];

    if (gewaehlte_sfk != "-1") {
      sfr_kh_gesetzt = true;
    }

    for (var i = 0; i < kleiner_sf4.length; ++i) {
      if (kleiner_sf4[i] == gewaehlte_sfk) {
        kleinere_klasse_kh = true;
      }
    }
  }

  if ($("sfr_vk")) {
    var gewaehlte_sfr_vk = $F("sfr_vk");
    var kleiner_sf4      = [ "VK_KEINE_VK_12_MON", "VK_M", "VK_S", "VK_SF00", "VK_SFHL", "VK_SF01", "VK_SF02", "VK_SF03" ]

    if (gewaehlte_sfr_vk != "-1") {
      sfr_vk_gesetzt = true;
    }

    for (var i = 0; i < kleiner_sf4.length; ++i) {
      if (kleiner_sf4[i] == gewaehlte_sfr_vk) {
        kleinere_klasse_vk = true;
      }
    }
  }

  if (sfr_kh_gesetzt && sfr_vk_gesetzt && !kleinere_klasse_kh && (!kleinere_klasse_vk || gewaehlte_sfr_vk == "VK_KEINE_VK_12_MON")) {
    return true;
  }

  return false;
}
