/* Author: Karl Schwaier (DMC 01)
 * 
 * core functions, initialization and behaviour for all calculators
 * encapsulated in one object
 */
var J = jQuery.noConflict();
var calc = {



	paramsCalc: new Object(), // current field values of calculator	

	/*******************************************************************************************************
	 * FUNCTIONS
	 ******************************************************************************************************/
	// NUMBER FORMATTING
	numberFormat: function(value, format, comma) {
   if(typeof(value)!="undefined"){
  		var value = value.toString();
  		switch (format) {
  			case 'money':
  			case 'zins':
  				// 1000000 => 1.000.000,--
  				// split number at comma
  				var p = value.split(",");
  				var l = p[0];
  				var r = p[1];
  				
  				// format left part
  				l = parseInt(l, 10); // remove leading zero
  				if (value == "" || isNaN(l)) {
  					l = 0;
  				}
  				l = l.toString();
  				var a = [];
  				while (l.length > 3) {
  					a.unshift(l.substr(l.length-3));
  					l = l.substr(0,l.length-3);
  				}
  				a.unshift(l);
  				if(a[0] == '-'){
            a.shift();
            a[0] = '-' + a[0];
          }
  				l = a.join(".");
  
  				// check if comma should be displayed
  				if (comma == false) {
  					value = l;
  				} else {
  					// format right part
  					r = parseInt(r);
  					if (isNaN(r) || r == 0) {
  						r = "--";
  					}
  
  					// build string
  					value = l + "," + r;
  				}
  				
  				break;
  			case 'rate':
  				// 3.8 => 3,8
  				value = value.replace(/\./, ",");
  				break;
  		}
  		return value;
		}else{ 
      return 0;
		}
	},
	
	roundToInteger: function(value) {
	  return Math.round(value);
	},
	
	// UNDO NUMBER FORMATTING
	numberUnformat: function(value, format, comma) {
		// set which comma should be in output
		if (typeof comma == "undefined") {
			comma = ",";
		}
		
		// unformatting
		switch (format) {
			case 'money':
			case 'zins':
				value = value.replace(/\./g, ""); // remove all .
				value = value.replace(/,--/g, "");	// remove all ,--
				value = value.replace(/,/g, comma); // replace comma
				break;
			case 'rate':
			  value = value.replace(/\./g, ","); // replace all '.' with ','
        value = value.split(",")[0];
        break;
		}
		return value;
	},

	// STRING FORMATTING
	stringFormat: function(value, format) {
		var str;
		switch (format) {
			case 'years':
				if (value == 1) {
					str = "Jahr";
				} else {
					str = "Jahre";
				}
				break;
			case 'months':
				if (value == 1) {
					str = "Monat";
				} else {
					str = "Monate";
				}
				break;
		}
		value = value.toString();
		str = value.replace(/\./g, ",") + " " + str; // replace . with ,
		return str;
	},

	// ROUND NUMBERS
	round: function(value, digits) {
		digits = Math.pow(10, digits);
		value = Math.round(value * digits) / digits;
		return value;
	},
	
	// NAVIGATION
	showPage: function(page) {
		if(page=="PageRequest"){ //reload captcha every time this site is displayed
      J("#doCaptcha").attr("src", "/m101/volksbank/BestellserviceServlet?aktion=captcha&"+Math.round(Math.random()*Math.pow(10,16)));
    }
    // each page is a calcBody object
		J(".calcBody").hide(); // hide all
		J("#calc" + page).show(); // show wanted
		J(".calcError").remove(); // remove all errors
		if(page=="PageSent")
		{
  		J(".calcTab_zukunftscheck1").hide();
  		J(".calcTab_zukunftscheck2").hide();
  		J(".calcTab_zukunftscheck3").hide();
  	}
  	else
  	{
      J(".calcTab_zukunftscheck1").show();
  		J(".calcTab_zukunftscheck2").show();
  		J(".calcTab_zukunftscheck3").show();
    }
	},	
	
	// PRINT ERROR
	printError: function(text) {
		var error = J('<div class="calcError">' + text + '</div>');
		error.appendTo(".calcBody:visible .calcActions"); // append to currently visible action container
	},
	
	// REFRESH NEEDED
	needsRefresh: function() {
		// show overlay on current visible page
		J(".calcBody:visible").each(function(){
			if (!J(".calcOverlay:visible").length) {
				// set height of overlay
				h = J(".calcProfit", this).height();
				//console.log("h of calcProfit: "+h);		
				J(".calcOverlay").height(h-5);	



				
				// show overlay
				J(".calcOverlay").fadeIn();
				J(".calcBtnRefresh").show(); // fadeIn does not properly work in Safari(Win)
				J(".calcProfit .calcInfo").each(function(){ J(this).hide(); });
				J(".calcBtnApply").hide();
        		
			}	
		});	
		J(".calcBtnPrint").hide(); // fadeIn does not properly work in Safari(Win)    			
	},
	
	// REFRESHED
	refreshed: function(page) {
		// hide overlay on current visible page
		J(".calcBody:visible").each(function(){
			if (J(".calcOverlay:visible").length) {
				J(".calcOverlay").hide();
				J(".calcBtnRefresh").hide();
				J(".calcProfit .calcInfo").each(function(){ J(this).show(); });
				J(".calcBtnApply").show();
			}
		});
		J(".calcBtnPrint").show(); // fadeIn does not properly work in Safari(Win)		
	},
	
	// HIDE INFOBUTTONS IN ZUKUNFTSCHECK
	hideInfobuttonsZuk: function() {
    J(".calcInfoUnfall").hide();
    J(".calcInfoHaushaft").hide();
    J(".calcInfoKrankheit").hide();
    J(".calcInfoRechtsschutz").hide();
    J(".calcInfoBerufsunf").hide();
    J(".calcInfoErableben").hide();
    J(".calcInfoPflegevors").hide();
  },
  
  // SHOW INFOBUTTONS IN ZUKUNFTSCHECK
	showInfobuttonsZuk: function() {
    J(".calcInfoUnfall").show();
    J(".calcInfoHaushaft").show();
    J(".calcInfoKrankheit").show();
    J(".calcInfoRechtsschutz").show();
    J(".calcInfoBerufsunf").show();
    J(".calcInfoErableben").show();
    J(".calcInfoPflegevors").show();
  },
	
	// SET STATE OF CUSTOMFIELDBUTTONS
	setStateOfCustomFieldButtons: function(field, value) {
    field.each(function(){
			// remove old state
			J("label", this).removeClass("calcChecked");

			// set new state
			J("input#" + value, this).click();			
			J("label[for=" + value +"]", this).addClass("calcChecked");
		});
	},
	
	// SET VALUE OF SLIDER
	setSliderValue: function(field, value, format, comma) {
		// set slider position
		J(".calcTrack", field).slider("option", "value", value);
		
		// set displaying value			
		J(".calcValue", field).text(calc.numberFormat(value, format, comma));
		
		// set input value			
		J("input[type=hidden]", field).val(value);	
	},
	
	// SET RANGE OF SLIDER
	setSliderRange: function(field, min, max, format, comma) {
		if (min != null) {
			J(".calcTrack", field).slider("option", "min", min);
			J(".calcMin span", field).text(calc.numberFormat(min, format, comma));	
		}
		if (max != null) {
			J(".calcTrack", field).slider("option", "max", max);		
			J(".calcMax span", field).text(calc.numberFormat(max, format, comma));	
		}		
	},
	
	// SET STEP OF SLIDER
	setSliderStep: function(field, step) {
		J(".calcTrack", field).slider("option", "step", step);
	},	
	
	// SHOW STATE
	showState: function(stateIdx) {
		// get state data
		state = states[stateIdx];
		
		// flag active tab
		J("#calcHeader .calcTabs").each(function(){
			J("li", this).removeClass("calcActive");
			J("li.calcTab"+stateIdx, this).addClass("calcActive");
			J("li.calcTab_zukunftscheck"+stateIdx, this).addClass("calcActive");

		});		 
				
		J("#calcPageCalculate").each(function(){
			// show correct headline (only if there are different headlines)			
			if (J(".calcTarget h3", this).length > 1) {
				//J(".calcTarget h3", this).hide();
				J(".calcTarget h3", this).each(function(){
					J(this).hide();
				});
				J(".calcTarget h3#calcHeadline-"+stateIdx, this).show();	
			}			
			
			// show correct parameters
			J(".calcParam").show();
			for (var i in state.hiddenFields) {
				J("#calcParam-"+state.hiddenFields[i], this).hide();	
			}		
		});		
		
		// write target in hidden field
		if (state.target != null) {
			J(".calcTarget input[name=target]").val(state.target);	
		}
		formatCalcInputSlider();
	},

	// WRITE RESULT VALUES
	writeResultTable: function(resultValues, jahr) {
		// result table
		var table = J(".calcResult table");
		
		// loop through result values	
		for (var key in resultValues) {
			var row = resultValues[key];
			// fill row with values			
			J("tr:eq("+key+")", table).each(function(){				
				// first row is different, because of additional strong-tag
				var th, td;
				if (key == 0) {
					th = J("th strong", this);
					td = J("td strong", this);
				} else {
					th = J("th", this);
					td = J("td", this);
				}
				// write th
				if (typeof row.th != "undefined") {
					th.html(row.th);
				}
				// write td								
				if (typeof row.tdNonEur == "undefined") {
					// flag negative values
					if (calc.numberUnformat(row.td, "money") < 0) {
						J("td", this).addClass("calcNegVal");
					}else{
            J("td", this).removeClass("calcNegVal");
          }
					if(jahr == 1 && key == 0){
					  if(row.td == 1){
              td.text(row.td + " Jahr");
            }else{
              td.text(row.td + " Jahre");
            }
          }else{
            td.text(row.td + " EUR");
          }
				} else {
					td.text(row.tdNonEur);
				}														
			});		
		}	
	},

	init: function() {
		/*******************************************************************************************************
	 	* INITIALIZATION
	 	******************************************************************************************************/
		// SHOW APP IF JAVASCRIPT IS AVAILABLE
		J(".calc form").show();		
		
		// FONT REPLACEMENT
		Cufon.replace(".calcCufon");
		
		// INFO TOOL TIPS
		// avoid false overlaying by decrementing z-index
		var x = 999;
		J(".calcInfo").each(function(){
			J(this).css("z-index", x);
			x-=3;
		});
		
    J(".calcInfoUnfall").each(function(){
      J(this).css("z-index", x);
    	x-=3;
    });
    
    J(".calcInfoHaushaft").each(function(){
      J(this).css("z-index", x);
    	x-=3;
    });
    
    J(".calcInfoKrankheit").each(function(){
      J(this).css("z-index", x);
    	x-=3;
    });
    
    J(".calcInfoRechtsschutz").each(function(){
      J(this).css("z-index", x);
    	x-=3;
    });
    
    J(".calcInfoBerufsunf").each(function(){
      J(this).css("z-index", x);
    	x-=3;
    });

    J(".calcInfoErableben").each(function(){
      J(this).css("z-index", x);
    	x-=3;
    });

    J(".calcInfoPflegevors").each(function(){
      J(this).css("z-index", x);
    	x-=3;
    });
		
		// SLIDER CONFIG AND INIT
		if (typeof sliderConfig != "undefined") {
			J(".calcSlider .calcTrack").slider({
				range: "min",
				slide: function(event, ui) {
					// refresh value in hidden input field an displaying span element
					var p = J(this).parents(".calcParam");
					var idx = p.attr("id").substring(10);
					J(".calcControl input", p).val(ui.value);
					J(".calcControl .calcValue", p).text(calc.numberFormat(ui.value, sliderConfig[idx].format, true));
					J(".calcControl .calcInputSlider", p).val(calc.numberFormat(ui.value, sliderConfig[idx].format, true));
				}
			});			
			var p, s;
			for (var id in sliderConfig) {
				// get slider values and param element
				s = sliderConfig[id];		
				p = J("#calcParam-" + id);
					
				// set values 
				calc.setSliderStep(p, s.step);	
				calc.setSliderRange(p, s.min, s.max, s.format, false);		
				calc.setSliderValue(p, s.value, s.format, true);
				J(".calcControl .calcInputSlider", p).val(s.value);
			}	
		}

		// SHOW STATE
		if (typeof states != "undefined") {
			calc.showState(1); // must be before jqTransform because otherwise IE6 breaks layout!!	
		}		 	
				
		// JQTRANSFORM FOR CUSTOM SELECT FIELDS
		J(".calcJqTransform").jqTransform();
		
		// DATE & TIME EXAMPLES 
		// (could be very nice with chained classes, but IE6 doesn't support them)
		if (J(".calcDateField").val() != "") {		
			J(".calcDateField").removeClass("calcDateFieldExample");
		}
		if (J(".calcTimeField").val() != "") {		
			J(".calcTimeField").removeClass("calcTimeFieldExample");
		}
		
		// DATE PICKER
		J(".calcDateField").datepicker({
			dateFormat: "dd.mm.yy",
			dayNamesMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
			firstDay: 1,
			maxDate: "+4m",
			minDate: "today",		
			monthNames: ["Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
			onClose: function(dateText, inst) {			
				J(this).removeClass("calcDateFieldExample")
			}
		});
		
		// PRE-SELECTED THE RADIO BUTTONS
		J("label[for=calcInputContactEmail]").addClass("calcChecked");
    //J("label[for=calcInputNewsletterYes]").addClass("calcChecked");
    //J("label[for=calcInputCustomerYes]").addClass("calcChecked");
		
		// KEEP SURE THAT CHECKED CUSTOM FIELDS ARE DISPLAYED AS CHECKED
		J(".calcCustomField input:checked").each(function(){
			J("label[for=" + J(this).attr("id") + "]").addClass("calcChecked");
		});
		
		J(".calcCustomField1 input:checked").each(function(){
			J("label[for=" + J(this).attr("id") + "]").addClass("calcChecked");
		});
		
		// SHOW INITIAL PAGE
		J(".calcBody").hide(); // must be after jqtransform, because jqtransform doesn't work on hidden elements!!
		J("#calcPageCalculate").show();
	
		
		/*******************************************************************************************************
	 	* BEHAVIOUR
	 	******************************************************************************************************/	
		
		// set the slider when changing the input field
    J('.calcInputSlider').change(function(){
      var name = J(this).attr("id").substring(16);
      var min = sliderConfig[name].min;
      var max = sliderConfig[name].max;
      var format = sliderConfig[name].format;
      if(name=="zinssatz"){
        format="zins";
      }
      var value = calc.round(calc.numberUnformat(J(this).val(), format, "."),3);
      var p = J(this).parent().parent().parent();

      if (J(this).val()!="" && !isNaN(value)){
        if(min <= value && max >= value){
          calc.setSliderValue(p, value, format, true);
          if(format=="zins"){
            value = value.toString().replace(/\./,",");
          }
          J(this).val(value);
        }else{
          if(max < value){
            calc.setSliderValue(p, max, format, true);
            J(this).val(max);
          }else{
            calc.setSliderValue(p, min, format, true);
            J(this).val(min);
          }
        }
      }else{
        calc.setSliderValue(p, min, format, true);
        J(this).val(min);
      }
      calc.needsRefresh();
      calc.hideInfobuttonsZuk();
    });
    
    // show refresh Button when changing the dropdown fields in Zukunftscheck/Risiko-Absicherung
    J('.calcLebensphase').change(function(){
      calc.needsRefresh();
      calc.hideInfobuttonsZuk();
    });
    J('.calcFamilienstand').change(function(){
      calc.needsRefresh();
      calc.hideInfobuttonsZuk();
    });
    
    // TEXT FIELDS WITH AUTOMATIC MONEY FORMATTING
		// entering field
		J("input[type=text].calcFormatMoney").focus(function(){	
			var v = J(this).val();
			v = calc.numberUnformat(v, "money");		
			J(this).val(v);
			J(this).select();
		});
		// leaving field
		J("input[type=text].calcFormatMoney").blur(function(){
			var v = J(this).val();			
			var vF = calc.numberFormat(v, "money", true);			
			J(this).val(vF);
		});		
		
		// CUSTOM FIELDS
		J(".calcCustomField label").click(function(){
			// get parent container
			var p = J(this).parents(".calcCustomField");
			
			// check input field (should also been done automatically by the browser)
			// commented out because it makes problems in firefox with checkboxes
			//J("input#"+J(this).attr("for"), p).click();
			
			// different label flagging for customFieldBoxes (checkbox) other fields are radio
			if (p.hasClass("calcCustomFieldBoxes")) {
				J(this).toggleClass("calcChecked");
			}else if (p.hasClass("calcCustomFieldBoxesZukunftscheck")) {
        J(this).toggleClass("calcChecked");
      }else {
				J("label", p).removeClass("calcChecked");
				J(this).addClass("calcChecked");
			}
		});
		
		J(".calcCustomField1 label").click(function(){
			// get parent container
			var p = J(this).parents(".calcCustomField1");
			
			// check input field (should also been done automatically by the browser)
			// commented out because it makes problems in firefox with checkboxes
			//J("input#"+J(this).attr("for"), p).click();
			
			// different label flagging for customFieldBoxes (checkbox) other fields are radio
			if (p.hasClass("calcCustomFieldBoxes")) {
				J(this).toggleClass("calcChecked");
			}else if (p.hasClass("calcCustomFieldBoxesZukunftscheck")) {
        J(this).toggleClass("calcChecked");
      }else {
				J("label", p).removeClass("calcChecked");
				J(this).addClass("calcChecked");
			}
		});

		// TOGGLE EXAMPLES IN DATE & TIME FIELDS
		// hide on focus, show when leaving without input
		J(".calcDateField").each(function(){		
			J(this).focus(function(){
				J(this).removeClass("calcDateFieldExample");
			});		
			J(this).blur(function(){
				if (J(this).attr("value") == "") {
					J(this).addClass("calcDateFieldExample");
				}
			});		
		});
		J(".calcTimeField").each(function(){			
			J(this).focus(function(){
				J(this).removeClass("calcTimeFieldExample");
			});		
			J(this).blur(function(){
				if (J(this).attr("value") == "") {
					J(this).addClass("calcTimeFieldExample");
				}
			});
		});	
		
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfo").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfoUnfall").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfoHaushaft").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfoKrankheit").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfoRechtsschutz").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfoBerufsunf").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfoErableben").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		
		// TOOL TIPS: SHOW ON HOVER	
		J(".calcInfoPflegevors").hover(function(){

			J("span", this).show();




		},function(){
			J("span", this).hide();


		});
		
		// CHANGE STATE VIA TABS		
		J("#calcHeader .calcTabs a").click(function(){		
			// get wanted state
			var state = J(this).attr("href").substring(1);
/*
			// reset params to min					
			var s;
			for (var id in sliderConfig) {			
				s = sliderConfig[id];			
				J("#calcParam-" + id).each(function(){
					calc.setSliderValue(this, s.min, s.format, true);				
				});
			}
*/
			// show state
			calc.showState(state);
			
			// refresh necessary
			calc.needsRefresh();
			calc.hideInfobuttonsZuk();
					
			return false;
		});		
		
		// DISPLAY THAT REFRESH IS NECESSARY WHEN CHANGING PARAMS
		J("#calcPageCalculate .calcSlider .calcTrack").bind("slide", function(event, ui){
	  		calc.needsRefresh();
	  		calc.hideInfobuttonsZuk();
		});
		J("#calcPageCalculate .calcCustomField label").click(function(){		
			calc.needsRefresh();
			calc.hideInfobuttonsZuk();
		});	
		J("#calcPageCalculate .calcTextInput input").blur(function(){
			calc.needsRefresh();
			calc.hideInfobuttonsZuk();
		});
		
		// NAVIGATION BUTTONS
		// apply
		J("#calcPageCalculate .calcBtnApply").click(function(){
		    if(J("#content_big_calc .outobblocks div h2") && J("form[name=frm_websitesuche]").children("[name=branch]:first")) {
		      clickTracker('Rechner - ' + J("#content_big_calc .outobblocks div h2").text() + ' - Kontaktformular', J("form[name=frm_websitesuche]").children("[name=branch]:first").val());
		    }
		    J("#calcPageRequest .calcRequiredZukunftscheck").each(function(){
		      if(J("label[for=calcInputGenderM]").hasClass("calcChecked")){
				    (J("label[for=calcInputGenderAnredeF]").removeClass("calcChecked"));
            (J("label[for=calcInputGenderAnredeM]").addClass("calcChecked"));
          }
			  });
			calc.showPage("PageRequest");
			if(J(".calcTab_zukunftscheck1").length != 0) {
        if(J(".calcTab_zukunftscheck1").attr("class").indexOf("calcActive") != -1){
          TrackerFunc(16);
        }
        else
        {
          if(J(".calcTab_zukunftscheck2").attr("class").indexOf("calcActive") != -1){
            TrackerFunc(17);
          }
          if(J(".calcTab_zukunftscheck3").attr("class").indexOf("calcActive") != -1){
            TrackerFunc(18);
          }  		
  			}
  		}
		});	
		// new
		J(".calcBtnNew").click(function(){
			calc.showPage("PageCalculate");
		});
		
		// button: reset request form		
		J("#calcPageRequest .calcBtnReset").click(function(){		
			J("#calcPageRequest").each(function(){
				// empty text fields
				J("input[type=text]", this).val("");
				
				// uncheck radios and checkboxes
				J("input[type!=text]", this).removeAttr("calcChecked");
				J("label", this).removeClass("calcChecked");
				
				// unselect select lists		
				J("option", this).removeAttr("calcSelected");
				J(".jqTransformSelectWrapper", this).each(function(){
					J("div span", this).text(J("option:first", this).text());			
				});
				
				// date and time fields
				J(".calcDateField", this).addClass("calcDateFieldExample");
				J(".calcTimeField", this).addClass("calcTimeFieldExample");
			});
			
			return false;
		});
		
		// SUBMIT CALCULATOR FORM
		J("#calcPageCalculate .calcBtnRefresh").click(function(){
			var p = J("#calcPageCalculate");
						
			// get params and write them into calc.paramsCalc property		
			var params = new Object();
			var name, value;
			// radios, checkboxes and visible textfields	
			J("input:checked, .calcParam:visible input", p).each(function(){			
				name = J(this).attr("name");
				if (J(this).hasClass("calcFormatMoney")) {
					value = parseFloat(calc.numberUnformat(J(this).val(), "money", ".")); // unformat value
				} else {
					value = parseFloat(J(this).val());	



				}																			
				params[name] = value;	
			});			
			// selects
			J("option:selected", p).each(function(){
				params[J(this).parent("select").attr("name")] = J(this).val();
			});			
			// hidden target field
			J("input[name=target]", p).each(function(){
				params["target"] = J(this).val();
			});	
			calc.paramsCalc = params;
			//console.log(calc.paramsCalc);
			
			// check params
			J(".calcParam .calcSlider").removeClass("calcSliderError"); // clear errors
			J(".calcActions .calcError", p).remove();
			var error = false;	
			if (typeof checkParams == 'function') {
				error = checkParams(params, p); // new check
			}

			// update values & hide overlay
			if (!error) {
        onParamsChanged(params);


        calc.refreshed();
        calc.showInfobuttonsZuk();
        if (J('.calcTab_zukunftscheck1').length != 0) {
          if (document.getElementById("calcResult-Kontaktformularergebnis2")!=null) {
            if (document.getElementById("calcResult-Kontaktformularergebnis3")!=null) {
              TrackerFunc(9);
            }
          }
          if (document.getElementById("calcResult-Kontaktformularergebnis1")!=null) {
            if (document.getElementById("calcResult-Kontaktformularergebnis3")!=null) {
              TrackerFunc(10);
            }
          }
          if (document.getElementById("calcResult-Kontaktformularergebnis1")!=null) {
            if (document.getElementById("calcResult-Kontaktformularergebnis2")!=null) {
              TrackerFunc(11);
            }
          }
          if (document.getElementById("calcResult-Kontaktformularergebnis1")==null){
            if (document.getElementById("calcResult-Kontaktformularergebnis2")==null){
              TrackerFunc(12); 
            }
          }
          if (document.getElementById("calcResult-Kontaktformularergebnis1")==null){
            if (document.getElementById("calcResult-Kontaktformularergebnis3")==null){
              TrackerFunc(13); 
            }
          }
          if (document.getElementById("calcResult-Kontaktformularergebnis2")==null){
            if (document.getElementById("calcResult-Kontaktformularergebnis3")==null){
              TrackerFunc(14); 
            }
          }
    			if (document.getElementById("calcResult-Kontaktformularergebnis1")==null){
            if (document.getElementById("calcResult-Kontaktformularergebnis2")==null){
              if (document.getElementById("calcResult-Kontaktformularergebnis3")==null){
                TrackerFunc(15);
              } 
            }
          }
        }
			}
			
			return false;				
		});
		
		// SUBMIT REQUEST FORM
		J("#calcPageRequest .calcBtnSubmit").click(function(){
			var label;
			
			// check for required fields
			var error = false;
      
      if(J("label[for=calcInputContactPhone]").hasClass("calcChecked")){
        J("#calcFieldPhone").addClass("calcRequired");
      }else{
        J("#calcFieldPhone").removeClass("calcRequired");
      }
              
      J("#calcPageRequest .calcError").remove(); // remove error messages
      J("#calcPageRequest .calcRequiredZukunftscheck").each(function(){
				if (
          ((!(J("label[for=calcInputGenderAnredeF]").hasClass("calcChecked")))
          &&
          (!(J("label[for=calcInputGenderAnredeM]").hasClass("calcChecked"))))
				) {
					label = J("label:first", this).text();
					label = label.substring(0, label.length - 1); // cut off the *
					calc.printError("<strong>" + label + "</strong> ist ein Pflichtfeld");				
					error = true;
				}			
			});
			J("#calcPageRequest .calcRequired").each(function(){
				if (
					(J("input[type=radio]", this).length > 1 && J("input[type=radio]:checked", this).length == 0)
					||
					(J("input[type=text]", this).val() == "")
				) {
					label = J("label:first", this).text();
					label = label.substring(0, label.length - 1); // cut off the *
					calc.printError("<strong>" + label + "</strong> ist ein Pflichtfeld");				
					error = true;
				}			
			});
			
			// check date
			var value = J("#calcPageRequest input[name=appointment_date]").val();
			var filter = /^([0-2][0-9]|[3][0-1])\.([0][1-9]|[1][0-2])\.([2][0][0-9][0-9])$/;		
			if (value != "" && !filter.test(value)) {
				calc.printError("Das <strong>Datum</strong> ist ungültig! (Format TT.MM.JJJJ)");
				error = true;
			}
			
			// check time
			value = J("#calcPageRequest input[name=appointment_time]").val();
			filter = /^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/;
			if (value != "" && !filter.test(value)) {
				calc.printError("Die <strong>Uhrzeit</strong> ist ungültig! (Format HH:MM)");
				error = true;
			}
			
			// check zip code
			value = J("#calcPageRequest input#calcInputZip").val();
			filter = /^[0-9]{4,5}$/;
			if (value != "" && !filter.test(value)) {
				calc.printError("Die <strong>PLZ</strong> ist ungültig! Sie muss aus 4 oder 5 Ziffern bestehen.");
				error = true;
			}		
			
			// check e-mail
			value = J("#calcPageRequest input#calcInputEmail").val();
			filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
			if (value != "" && !filter.test(value)) {
				calc.printError("Die <strong>E-Mail-Adresse</strong> ist ungültig!");
				error = true;
			}
			
			// check captcha (needs to be checked after all other fields)
  		var mailservlet_name = "isCaptcha";
      var servlet_name = J("#doCaptcha").attr("src").split("?")[0]+"?action="+mailservlet_name;
      var captchaInput = J("#calcInputCaptcha").val();
      var servlet_return = '';
			if(J("#calcInputCaptcha").val().length==0){
        error = true;
      }else{
        J.post(servlet_name, { captchaInput: captchaInput },
          function(data){
            if(data!="true"){
              error = true;
              calc.printError("Die <strong>Sicherheitsabfrage</strong> ist ungültig!");
            }

            // submit and go to last page
      			if (!error) {
      				// get field values of calculator
      				var params = calc.paramsCalc;
      				
      				// add field values of request form
      				var p = J("#calcPageRequest");
      				J("input[type=text], input[type=hidden], input:checked", p).each(function(){
                params[J(this).attr("name")] = J(this).val();
      				});
      				J("option:selected", p).each(function(){
      					params[J(this).parent("select").attr("name")] = J(this).val();
      				});
      				//console.log(params);
      				if(J("label[for=calcInputOffer]").hasClass("calcChecked")){
                params["want_offer"]="1";
              }else{
                params["want_offer"]="0";







              }
      				if(J("label[for=calcInputAppointment]").hasClass("calcChecked")){
                params["want_appointment"]="1";
              }else{
                params["want_appointment"]="0";
              }
      				if(J("label[for=calcInputContactEmail]").hasClass("calcChecked")){
                params["contact_me"]="mail";
              }else{
                params["contact_me"]="phone";
              }
              if(J("label[for=calcInputNewsletterYes]").hasClass("calcChecked")){
                params["newsletter"]="1";
              }else{
                params["newsletter"]="0";
              }
              if(J("label[for=calcInputCustomerYes]").hasClass("calcChecked")){
                params["customer"]="1"
              }else{
                params["customer"]="0";
              }
      				if(J("#content_big_calc .outobblocks div h2") && J("form[name=frm_websitesuche]").children("[name=branch]:first")) {
		            clickTracker('Rechner - ' + J("#content_big_calc .outobblocks div h2").text() + ' - Best%E4tigung', J("form[name=frm_websitesuche]").children("[name=branch]:first").val());
		          }
              // send them to the server
              sendMail(params);
              //launch tracker
              if(J(".calcTab_zukunftscheck1").length != 0) {
                if(J(".calcTab_zukunftscheck1").attr("class").indexOf("calcActive") != -1){
                  TrackerFunc(19);
                }
                else
                {
                  if(J(".calcTab_zukunftscheck2").attr("class").indexOf("calcActive") != -1){
                    TrackerFunc(20);
                  }
                  if(J(".calcTab_zukunftscheck3").attr("class").indexOf("calcActive") != -1){
                    TrackerFunc(21);
                  }
                }
              }
      				// show last page
      				calc.showPage("PageSent");
      			}
          }
        );
      }
		});	
	}
};


