
mindestflaeche = 20;
mindestflaeche_reihe = 0;
mindestflaeche_eck = 0;
mindestflaeche_kopf = 0;
mindestflaeche_insel = 0;
maximalflaeche_reihe = 9999;
maximalflaeche_eck = 9999;
maximalflaeche_kopf = 9999;
maximalflaeche_insel = 9999;

qm_grenzen = new Array();
qmDependants = new Array();
qmBDependants = new Array();

psVorschlagListe = null;


function showPaketstand () {

	sessvars.da = null;	
	$('paketstandDialog').hide();
	// paketstaende sichtbar machen falls welche vorhanden
	if (psVorschlagListe != null) {
		psVorschlagListe.showList();
		$('flaecheForm').hide();
		reiterMenu.hide();
		$('headline_flaeche').hide();
		$('headline_paketstand').show();
		$('paketstandListLink').hide();
		$('nextPageLink').hide();
		$('column_right').hide();
		
	}
}
function hidePaketstand () {
	// paketstaende sichtbar machen falls welche vorhanden
	if (psVorschlagListe != null) {
		psVorschlagListe.hideList();
		$('flaecheForm').show();
		reiterMenu.enableReiter (true);
		$('headline_flaeche').show();
		$('paketstandListLink').show();
		$('headline_paketstand').hide();
		$('nextPageLink').show();
		$('column_right').show();
		
	}
}

function showPaketstandDialog () {
	$('paketstandDialog').show();
}

/**
 * Funktion die vom Button nicht anzeigen aufgerufen wird
 */
function hidePaketstandDialog () {
	$('paketstandDialog').hide();
	sessvars.da = false;	
}


/**
 * Adress Formular laden 
 */
function ladeAdressFormular () {
  var optionen = {
        parameters: {
          locale: locale
        }
      };
  optionen.onComplete = function(transport) {
    new Form.Observer(formularName + 'Form', 0.7, eval("set_adresse"));
  };

	var zielElement = "adresse";
	var formularURL = "formulare/adresse.html";
	new Ajax.Updater(zielElement, formularURL, optionen);
	return false;
}

/**
 * Lädt ein Formular für den Content Bereich
 * wenn das Standbau Formular angezeigt wird, wird eine Vorauswahl des Standes getroffen.
 * Nachdem das Flächenformular geladen wurde wird set_flaeche ausgeführt
 * Ansonsten wird die Kalkulation (rechter Block) geladen
 * @param formularName
 * @returns {Boolean}
 */
function ladeFormular (formularName) {
	var optionen = {
			parameters: {
				locale: locale
        	},
        	onCreate: mausWarte,
        	evalScripts: true
	};
	optionen.onComplete = function(transport) {
		mausNormal();
		if ($(formularName + 'Form') != null) {
			new Form.Observer(formularName + 'Form', 0.7, eval("set_" + formularName));
			if (formularName == "standbau" && $$('.preselect')[0] != null && $FR('standbauForm', 'id_stand') == null) {
				$$('.preselect')[0].checked = true;
			} else if (formularName == "flaeche") {
				set_flaeche();
			} else {
			    ladeKalkulation();
			}
		} else {
		    ladeKalkulation();
		}
	};

	var zielElement = "formular";
	var formularURL = "formulare/" + formularName + ".html";
	new Ajax.Updater(zielElement, formularURL, optionen);
	reiterMenu.aktiviereReiter(formularName);
	return false;
}
/**
 * lädt die Kalkulation (rechts)
 */
function ladeKalkulation () {
	var optionen = {
			parameters: {
				locale: locale
    		},
    		onCreate: mausWarte,
    		onComplete: mausNormal
		};
	optionen.onSuccess = function(transport) {
	}
	var zielElement = "kalkulation";
	var requestURL = "messekosten-kalkulation.html";
	new Ajax.Updater(zielElement, requestURL, optionen);
}

/**
 * schickt den Inhalt eines Formulars an den Server,
 * falls Antwort ok wird die kalkulation rechts aktualisiert, falls timeout wird die timeout Seite angezeigt
 * @param formular
 * @returns {Boolean}
 */
function sendForm (formular) {
	formular.request(
			{
		  	onSuccess: function(transport) {
		  		var json = transport.responseText.evalJSON(true);
					if (json.status == "ok") {
		  			ladeKalkulation();
		  		} else if (json.status == "timeout") {
							document.location = "timeout.html";
					}
		  	},
		  	onCreate: mausWarte,
		  	onComplete: mausNormal
		  }
	  )
	  return false;
}

/**
 * checkbox geklickt in der Kalkulation der rechten Spalte
 * eine Position wird an oder abgeschaltet
 */
function togglePos (posName) {
  var optionen = {
        parameters: {
          ak: posName
        },
		  	onSuccess: function(transport) {
		  		var json = transport.responseText.evalJSON(true);
					if (json.status == "ok") {
		  			ladeKalkulation();
		  		} else if (json.status == "timeout") {
							document.location = "timeout.html";
					} else {
						alert("status: " + json.status);
					}
		  	},
		  	onCreate: mausWarte,
		  	onComplete: mausNormal
      };
	var requestURL = "setPos.do";
	new Ajax.Request(requestURL, optionen);
	return false;
}


function deaktiviereFlaechenButtons () {
	$('nextPageLink').hide();
	$('kalkulation_abschliessen_button').hide();
	reiterMenu.hide();
}
function aktiviereFlaechenButtons () {
	$('nextPageLink').show();
	$('kalkulation_abschliessen_button').show();
	reiterMenu.enableReiter (true, "flaeche");	
}

/**
 * Fläche wurde geändert
 */
function set_flaeche () {
	standartWert = $FR('flaecheForm', 'standart');
	
	mindestflaeche = eval('mindestflaeche_' + standartWert);
	maximalflaeche = eval('maximalflaeche_' + standartWert);
	// Alle Fehlermeldungen verbergen
	$$('.fehlermeldung_standart').invoke('hide');
	if ($('fehlermeldung_freiflaeche')) $('fehlermeldung_freiflaeche').hide();

	// tausche Komma durch Punkt
	var formVals = $('flaecheForm').serialize(true);

	// Feld qm
	formVals.qm = formVals.qm.replace(/,/, ".");
	if (! formVals.qm_bb) {
		// falls bebaute Fläche nicht vorhanden nimm die qm Fläche
	  formVals.qm_bb = formVals.qm;
	} else {
		// falls vorhanden ersetze komme durch punkt
		formVals.qm_bb = formVals.qm_bb.replace(/,/, ".");
	}

	var parsedQm = parseFloat(formVals.qm);
	var parsedQmBB = parseFloat(formVals.qm_bb);

	// Grosses Standart Bild anzeigen
	$$('.standart_bild_gross').invoke('hide');
	$('standart_bild_gross_' + standartWert).show();
	
	if (parsedQm != Number.NaN) {
		deaktiviereFlaechenButtons();
		// mindestflaeche wird am Anfang dieses Scripts initialisiert.
		// im formular flaeche.xslt wird dieser Wert von dem überschrieben der bei der Messe konfiguriert ist
		var fehlerMeldung = $('fehlermeldung_' + standartWert);
		if (parsedQm < mindestflaeche || parsedQm > maximalflaeche) {
			fehlerMeldung.show();
		} else if (parsedQmBB != Number.NaN && parsedQmBB > parsedQm) {
			// Zeige Fehlermeldung, dass die bebaute Fläche nicht größer sein kann als die gesamt Fläche
			if ($('fehlermeldung_freiflaeche')) {
				$('fehlermeldung_freiflaeche').show();
			}
		} else {
			hallenflaeche = parsedQm;
			if (qm_grenzen != null) {
				for (var i = 0; i < qm_grenzen.length; i++) {
					if (parsedQm <= qm_grenzen[i] || i + 1 == qm_grenzen.length) {
						showBeschreibung("reihe_flaeche_preis_" + qm_grenzen[i], "preis_flaeche_reihe");
						showBeschreibung("eck_flaeche_preis_" + qm_grenzen[i], "preis_flaeche_eck");
						showBeschreibung("kopf_flaeche_preis_" + qm_grenzen[i], "preis_flaeche_kopf");
						showBeschreibung("insel_flaeche_preis_" + qm_grenzen[i], "preis_flaeche_insel");
						break;
					}
				}
			}
		}
		var optionen = {
				parameters: formVals,
				requestHeaders: {
			Accept: 'application/json'},
			onSuccess: function(transport) {
				var json = transport.responseText.evalJSON(true);
				if (json.status == "ok") {
					var paketstaende = json.paketstaende;
					// Details Vorschläge verstecken
					$$('div.paketstand_vorschlag_details').invoke ('hide');					
					$('paketstandListLink').hide();
					if ($('paketstandDialog')) $('paketstandDialog').hide();
					if ($('paketstand_vorschlagliste') != null) {
						if (psVorschlagListe == null) {
							psVorschlagListe = new PsVorschlagListe($('paketstandcontainer'), $('paketstandleiste'), $('psNachRechts'), $('psNachLinks'));
						}
						psVorschlagListe.paketstandIDs = paketstaende;
						// Vorschlag Liste verstecken
						psVorschlagListe.hideList();
						// Falls für die Anzahl der qm Paketstände vorhanden, zeige Dialog
						
						if (paketstaende != null) {
							$('paketstandListLink').show();
							if (sessvars.da == null ) {
								$('paketstandDialog').show();
							}
						}
					} else {
						window.onresize = null;
					}
					ladeKalkulation();
					aktiviereFlaechenButtons();
					updateDependants();
					if ($('kalkulation_abschliessen_button')) $('kalkulation_abschliessen_button').show();
					
				} else if (json.status == "timeout") {
					document.location = "timeout.html";
				} else {
					$('kalkulation_abschliessen_button').hide();
				}
			},
			onCreate: mausWarte,
			onComplete: mausNormal
		};
		new Ajax.Request("setFormData.do", optionen);
	}
	return false;
}

/**
 * das Parameter Element ist abhängig von der gewählten Anzahl an qm
 */
function addQmDependent (elementName, preis) {
	var dependendant = {
				el: elementName,
				preis: preis
	}
	qmDependants.push(dependendant);
}

/**
 * das Parameter Element ist abhängig von der gewählten Anzahl an BEBAUTER Standfläche
 */
function addQmBDependent (elementName, preis) {
	var dependendant = {
				el: elementName,
				preis: preis
	}
	qmBDependants.push(dependendant);
}


/**
 * aktualisiere alle von der qm Zahl abhängigen Elemente
 */
function updateDependants() {
	if (qmDependants != null) {
		for (var i = 0; i < qmDependants.length; i++) {
			var cDep = qmDependants[i];
			berechnePosten(cDep.el, hallenflaeche, cDep.preis);
		}
	}
	if (qmBDependants != null) {
		for (var i = 0; i < qmBDependants.length; i++) {
			var cDep = qmBDependants[i];
			berechnePosten(cDep.el, hallenflaeche, cDep.preis);
		}
	}
}

function set_elektro () {
	showBeschreibungElektro ();
	if ($F('id_a') == 'none') {
  // Verstecke alle weiteren Fieldsets wenn kein E-Anschluss gewählt
	  if ($('erdung'))    $('erdung').hide();
	  if ($('verbrauch')) $('verbrauch').hide();
	  if ($('verteiler')) $('verteiler').hide();
	} else {
	  if ($('erdung'))    $('erdung').show();
	  if ($('verbrauch')) $('verbrauch').show();
	  if ($('verteiler')) $('verteiler').show();
	}
	return sendForm($('elektroForm'));

}


function set_wasser () {
	var result = validateWasser();
	if (result) {
		sendForm($('wasserForm'));
	}
	return false;
}


function validateWasser () {
	var result = true;
// Prüfe Eingabe Anschlüsse
	var mengeAnschluss = $F('m_e').match(/[^0-9,]/gi);
	if (mengeAnschluss != null) {
		$('m_e').className = "numberField borderred";
		result = false;
	} else {
		$('m_e').className = "numberField";
		var menge = parseFloat($('einzelAnschluss').innerHTML.replace(/,/, "."));
		var einzelPreis = parseFloat($F('m_e'));
		berechnePosten ('gesamt_a_e', menge, einzelPreis);
	}
// Prüfe Eingabe weitere Anschlüsse
	var mengeWeitere = $F('m_w').match(/[^0-9]/gi);
	if (mengeWeitere != null) {
		$('m_w').className = "numberField borderred";
		result = false;
	} else {
		$('m_w').className = "numberField";
		var menge = parseFloat($('einzelWeitere').innerHTML.replace(/,/, "."));
		var einzelPreis = parseFloat($F('m_w'));

		berechnePosten ('gesamt_w', menge, einzelPreis);
	}
	return result;
}

function berechnePosten (lmntName, menge, einzelPreis) {
		var newValue = (menge * einzelPreis).toFixed(2);
		if (locale == 'de' || locale == 'it' ) {
			$(lmntName).update (newValue.replace(/\./, ","));
		} else {
			$(lmntName).update(newValue);
		}
}


function set_reinigung () {
	return sendForm($('reinigungForm'));
}


function set_bewachung () {
	var result = validateBewachung();
	if (result) {
		sendForm($('bewachungForm'));
	}
	return false;
}

function validateBewachung () {
  // bewachungsliste wird in bewachung.xslt erstellt
	var result = true;
   for (var i = 0; i < bewachungsliste.length; i++) {
      var bewID = bewachungsliste[i];
      var idMenge = 'm_' + bewID;
      var feldInhalt = $F(idMenge); 
      if (feldInhalt) {
         var checkNumber = feldInhalt.match(/^[0-9]*$/gi);
         if (checkNumber == null) {
         	$(idMenge).className = "numberField borderred";
         	result = false;
         } else {
         	$(idMenge).className = "numberField";
         	var menge = parseFloat($('einzel_wache_' + bewID).innerHTML.replace(/,/, ".")) * hzu;
         	var einzelPreis = parseFloat(feldInhalt);
         	berechnePosten ('gesamt_wache_' + bewID, menge, einzelPreis);
         }
      } else {
         $(idMenge).className = "numberField borderred";
         result = false;
      }
   }
	return result;
}

function set_standbau() {
	showBeschreibung("detail_standansicht_" + $FR('standbauForm', 'id_stand'), "detail_standansicht");
	return sendForm($('standbauForm'));
}

function set_adresse () {
	var formVals = $('adresseForm').serialize(true);
	var result = true;
	if (checkEmail(formVals.email)){
		$('adresse_email').className = "";
	} else {
		$('adresse_email').className = "borderred";
		result = false;
	}
	if (formVals.firma != ""){
		$('adresse_firma').className = "";
	} else {
		$('adresse_firma').className = "borderred";
		result = false;
	}
	if (formVals.name != ""){
		$('adresse_name').className = "";
	} else {
		$('adresse_name').className = "borderred";
		result = false;
	}
	return result;
}

var zahl = "";

function validateZahl(inputEl) {
	var testZahl = inputEl.value;
	var num_error = false;
	var num = testZahl.match(/[^0-9,\.]/gi);
	var dot = testZahl.match(/\./g);
	var com = testZahl.match(/,/g);
	if (num != null) {
		num_error = true;
	} else if (dot != null && dot.length > 1) {
		num_error = true;
	} else if ( com != null && com.length > 1) {
		num_error = true;
	} else if (dot != null && com != null) {
		num_error = true;
	}
	if (num_error == false) {
		zahl = testZahl;
	}
	inputEl.value =  zahl;
}

function showBeschreibungElektro () {
  if ($('id_a') != null) {
		// ANSCHLUSS
		showBeschreibung("anschluss_beschreibung_" + $F('id_a'), "beschreibung_anschluss");
		showBeschreibung("anschluss_preis_" + $F('id_a'), "preis_anschluss");
		// VERBRAUCH
		showBeschreibung("verbrauch_" + $F('id_a'), "name_verbrauch");

		// VERTEILER
		if ($('id_v') != null) {
  		showBeschreibung("verteiler_beschreibung_" + $F('id_v'), "beschreibung_verteiler");
  		showBeschreibung("verteiler_preis_" + $F('id_v'), "preis_verteiler");
    }
  }
}

function showBeschreibung (beschreibungID, beschreibungClass) {
	var meineDivs = $$("." + beschreibungClass);
// erst alle divs für diese beschreibungsKlasse verstecken
	meineDivs.invoke('hide');
// das gewünschte div anzeigen
	if (beschreibungID != 'none' && $(beschreibungID) != null) {
		$(beschreibungID).show();
	}
}

function mausWarte () {
	document.getElementsByTagName('body')[0].style.cursor = "wait";
}

function mausNormal () {
	document.getElementsByTagName('body')[0].style.cursor = "default";
}

function $FR (el, radioGroup) {
    if($(el).type && $(el).type.toLowerCase() == 'radio') {
    	var radioGroup = $(el).name;
    	var el = $(el).form;
   	} else if ($(el).tagName.toLowerCase() != 'form') {
    	return false;
   	}
    	
   	var checked = $(el).getInputs('radio', radioGroup).find(
   			function(re) {return re.checked;}
    );
    return (checked) ? $F(checked) : null;	
//    return $F($(frm).getInputs('radio', inputName).find(function(obj) { return obj.checked; }));
}

function checkEmail (email) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,12})+$/.test(email)){
		return (true)
	} else {
		return (false)
	}
}

function setMesse (messeID) {
  var optionen = {
		parameters: {
			a: "sM",
			id_m: messeID
  	}
  };
	var requestURL = "setMesseNR.do";
	new Ajax.Request(requestURL, optionen);
}

function ReiterMenu () {

	this.reiter = new Array ('flaeche', 'elektro', 'wasser', 'bewachung', 'reinigung', 'standbau');
	this.currentReiter = null;
	this.aktiv     = "menu_aktiv";
	this.inaktiv   = "menu_inaktiv";
	this.deaktiv   = "menu_deaktiv";
	// Paketstände
	this.psAktiv   = "menu_ps_aktiv";
	this.psInaktiv = "menu_ps_inaktiv";
	
	this.hide = function () {
		for (var i = 0; i < this.reiter.length; i++) {
			var tab = this.reiter[i];
			$(tab).className = this.deaktiv;
		}
	}

	/**
	 * schaltet Reiter auf aktiv oder deaktiv, cReiter ist der aktuelle Reiter, der davon nicht betroffen ist 
	 */
	this.enableReiter = function (aktiv, cReiter) {
		var newClassName = this.inaktiv;
		if (!aktiv) newClassName = this.deaktiv;

		for (var i = 0; i < this.reiter.length; i++) {
			var tab = this.reiter[i];
			$(tab).className = newClassName;
		}
		if ($(cReiter)) {
			$(cReiter).className = this.aktiv;
		}
	}
	/**
	 * aktiviert einen Reiter, falls ein anderer Reiter vorher aktiviert war wird dieser auf inaktiv gesetzt
	 */
	this.aktiviereReiter = function (reiterName) {
		if (this.currentReiter != null) {
			this.currentReiter.className = this.inaktiv;
		}
		this.currentReiter = $(reiterName);
		this.currentReiter.className = this.aktiv;
	}
}


/**
 * Event Methode für Window Resize
 */
function adjustPSContainer () {
	if (psVorschlagListe != null) {
		psVorschlagListe.adjustContainer();		
	}
}
/**
 * Paketstand Vorschlag Liste Klasse
 */
function PsVorschlagListe (_container, _leiste, _btnRechts, _btnLinks) {
	this.dialogAnzeigen = true;
	this.container = _container;
	this.leiste = _leiste;
	this.buttonR = _btnLinks;
	this.buttonL = _btnRechts;
	this.paketstandBreite = 234;
	this.leistePosition = 0;
	this.anzahl = 0;
	this.sichtbarePositionen = 0;
	this.paketstandIDs = new Array();

	
	
	this.hideList = function () {
		$('paketstand_vorschlagliste').hide();
		$$('td.paketstand').invoke('hide');		
	}

	this.showList = function () {
		if (this.paketstandIDs != null) {
			for (var i = 0; i < this.paketstandIDs.length; i++) {
				$('paketstand_' + this.paketstandIDs[i]).show();
			}
			$('paketstand_vorschlagliste').show();
			this.anzahl = this.paketstandIDs.length;
			window.onresize = adjustPSContainer;
			this.adjustContainer();
		}
	}
	
	this.moveLeft = function () {
		if (this.sichtbarePositionen + this.leistePosition < this.anzahl) {
			this.move(-1);
		}
	}
	
	this.moveRight = function () {
//		alert ("move right");
		if (this.leistePosition > 0) {
			this.move(1);
		}
	}

	this.move = function (steps) {
//		alert ("move: " + steps + " sp:" + this.sichtbarePositionen + " + " + this.leistePosition + " anzahl: " + this.anzahl);
		if (steps == null) {
			steps = 1;
		}
		new Effect.Move(this.leiste, 
				{ 
					x: this.paketstandBreite * steps, 
					y: 0, 
					queue: { 
						position: 'end', 
						scope: 'paketstand', 
						limit: 1
					},
					objekt: this,
					afterFinish:  function() {
						this.objekt.leistePosition -= steps;
						this.objekt.adjustContainer();
						this.objekt.toggleButtons();
                    }

				}
		);
	}
	
	
	this.adjustContainer = function () {
//		alert ("adjusting container");
		this.container.setStyle({width: '1px'});
		// berechne neue Breite, die einem vielfachen der Paketstand breite entspricht
		var newWidth = $('paketstandcontainer_max').getWidth() - ($('paketstandcontainer_max').getWidth() % (this.paketstandBreite));
		this.container.setStyle({width: newWidth + 'px'});
		this.sichtbarePositionen = Math.floor(newWidth / this.paketstandBreite);
		if (this.sichtbarePositionen > this.anzahl) {
			this.sichtbarePositionen = this.anzahl;
		}
		
		var aktuellSichtbar = this.anzahl - this.leistePosition;
		if (this.leistePosition > 0 && this.sichtbarePositionen > aktuellSichtbar) {
			this.move(this.sichtbarePositionen - aktuellSichtbar);
		}
		this.container.setStyle({width: newWidth + 'px'});
		this.toggleButtons();
	}
	
	this.activateButton = function (button) {
		button.getElementsBySelector ('a').invoke('show');
		//button.show();
	}
	this.deactivateButton = function (button) {
		button.getElementsBySelector ('a').invoke('hide');
		//button.hide();
	}
	
	this.toggleButtons = function () {
//		alert ("toggleButtons");
		// Sichtbarkeit der Buttons anzeigen
		if (this.sichtbarePositionen >= this.anzahl) {
			// keine Buttons benötigt
			this.deactivateButton(this.buttonR);
			this.deactivateButton(this.buttonL);
		} else {
			if (this.leistePosition + this.sichtbarePositionen >= this.anzahl) {
//				alert("Staende sind ganz nach links gescrollt");
				this.deactivateButton(this.buttonL);
				this.activateButton(this.buttonR);
			} else if (this.leistePosition == 0) {
//				alert("Staende sind ganz nach rechts gescrollt");
				this.deactivateButton(this.buttonR);
				this.activateButton(this.buttonL);
			} 
			if (this.leistePosition > 0) {
//				alert("mindestens ein Stand nach links gescrollt");
				this.activateButton(this.buttonR);
			}
			if (this.leistePosition + this.sichtbarePositionen < this.anzahl) {
//				alert("mindestens ein Stand nach rechts gescrollt");
				this.activateButton(this.buttonL);
			}
		}
	}
	this.showPS = function (dbid) {
		$$('div.paketstand_vorschlag_details').invoke ('hide');
		
		var listHeight = $('paketstand_vorschlagliste').getHeight();
		var standHeight = $('paketstand-vorschlag-' + dbid).getHeight();
		if (listHeight < standHeight) {
			var newHeight = $('content').getHeight() + standHeight - listHeight;  
			$('content').setStyle({height: newHeight + 'px'});
		}
		Effect.SlideDown('paketstand-vorschlag-' + dbid);
//		$('paketstand-vorschlag-' + dbid).show();
	}
	this.hidePS = function (dbid) {
		$('paketstand-vorschlag-' + dbid).hide();
		Effect.SlideUp('paketstand-vorschlag-' + dbid, 
						{ 
							afterFinish:  function() {
								$('content').setStyle({height: null});        
							}
						}
		);
		
	}
	this.hideAllPS = function () {
		$$('div.paketstand_vorschlag_details').invoke ('hide');
		$('content').setStyle({height: null});		
	}
	
}


