var tarieven;
var adresCollection;
var isInternetExplorer = navigator.appName.indexOf("Microsoft") !== -1;

var pageScroll = function() {
	self.scrollTo(0,156); // horizontal and vertical scroll increments
};

		/** van stap wisselen (target = stapnaam */
		var showStep = function(target,cls){
			
			
			switch(target){
				case "#step-1":
					_hbPageView('contractkeuze', "mkb/offertetool" );
				break;
				case "#step-2":
					_hbPageView('bedrijfsgegevens', "mkb/offertetool" );
				break;
				case "#step-3":
					_hbPageView('overzicht', "mkb/offertetool" );
				break;
				}
			
			
			$("#step-1, #step-2, #step-3").hide();
			$(target).show(); 
			$(".steps li").removeClass("selected").children(cls).parent().addClass("selected");
			pageScroll();
			return false;
		};


		var handleForm= function(target){
			$("dd.company-name").html($("#bedrijfsnaam").val());
			$("dd.contact-person").html($("#naamcontactpersoon").val());
			$("dd.telephone").html($("#telefoonnummer").val());
			$("dd.email").html($("#emailcontactpersoon").val());
		
			GetAlleAdressen();
		};
		
var flashProxySendRequest =function(args,isContact) {
	var offertetoolObj = swfobject.getObjectById("flOfferteTool");
	//alert(offertetoolObj);
	if(isContact){
		_hbPageView('optie-klantofferte', "mkb/offertetool" );
		offertetoolObj.SendOfferte(args);
	}else{
		_hbPageView('optie-offerte', "mkb/offertetool" );
		offertetoolObj.SendOfferte(args);
	}
};

var flashProxyHandleCallBack = function(obj){
			if($("input[name=klantworden]:checked").val()==="ja"){
				window.location.replace("http://www.essent.nl/content/zakelijk/producten/klant_worden/offerte_verstuurd_klant_worden.jsp");
			}else{
				window.location.replace("http://www.essent.nl/content/zakelijk/producten/klant_worden/offerte_verstuurd.jsp");
			};
};




var outputStatus = function(e) {
	alert("e.success = " + e.success +"\ne.id = "+ e.id +"\ne.ref = "+ e.ref);
};

	 $(document).ready(function(){
       	tarieven = new WebServices.Tarieven();
		tarieven.Request(
			function(){
				//flashProxySendRequest("<empty/>",false);
				swfobject.registerObject("flOfferteTool", "9.0.0");
				swfobject.getObjectById("flOfferteTool");
				$("body").show();
			},
			function(msg){alert("Er is iets mis gegaan: tarieven niet gevonden, neem contact op met Essent");}
		 );
     });


	
		$(".adresstabs li:gt(1)").hide();
		$(".foutadres").hide();
		$(".adr.format").hide();
		$("#verbruik").hide();
		
		/**leveringsadressen tonen */
		//document.forms[0].reset();
		$(".leveringsadres:first").show('slow');
		$("#step-2, #step-3").hide();
		
	
		/** tabs bovenin **/
		$(".step1").click(function(){
			showStep("#step-1",".step1"); 
			return false;
		});
		
		$(".step2").click(function(){
			showStep("#step-2",".step2"); 
			return false;
		});
		
		$(".step3").click(function(){
		
			$(".jaarverbruikgas:visible").each(function(){
				
				var pct = /^[0-9]{1,12}$/;
				if(!pct.test($(this).val()))
				{
					$(this).val("0");
				}
				
				
			});
			$(".jaarverbruikelektriciteit:visible").each(function(){
				var pcg = /^[0-9]{1,12}$/;
				if(!pcg.test($(this).val()))
				{
					$(this).val("0");
				}
			});	
			//alert(essentForm.checkSubmit());
			if(essentForm.checkSubmit())
			{
				handleForm();
			}
			pageScroll();
			return false;
		});
		


		

		

		
		/** productknoppen stap 1 */
		$("#step-1 fieldset :radio").change(function(){
			$("#step-1 fieldset .long-description").removeClass("selected");
			$(this).parent().addClass("selected");
			/** contractvorm labels wijziging */
			var contractvorm = $("input[name=tarief]:checked").val();
			var contractvormHtml = $(".contract").html();
			var contractvormText = "";
			switch(contractvorm)
			{
				case "Vast1":
					contractvormHtml = "<span>Vaste prijs</span>1 jaar";
					contractvormText = "1 jaar vast";
				break;
				case "Vast3":
					contractvormHtml = "<span>Vaste prijs</span>3 jaar";
					contractvormText = "3 jaar vast";
				
				break;
				case "Variabel":
					contractvormHtml = "<span>Variabele prijs</span>1 jaar";
					contractvormText = "1 jaar variabel";
				break;
			}
			$(".contract").html(contractvormHtml);
			$(".contractvorm th:gt(0)").html(contractvormText);
		});

		/** bij wijzigingen van de dropdown het aantal leveringsadressen tonen */
		$("#dlleveringsAdressen").change(function(){
			var itemCount = (parseInt($(this).val(),10)-1);
			$(".leveringsadres:gt("+itemCount+")").slideUp('fast');	
			$(".leveringsadres:eq("+itemCount+")").slideDown('slow');
			$(".leveringsadres:lt("+itemCount+")").slideDown('fast');
			
			$(".adresstabs li:gt(1)").hide();
			$(".adresstabs li:lt("+(itemCount+2)+")").show();
			
			$(".leveringsadres:gt("+itemCount+")").find("span").removeClass("error");
			$(".leveringsadres:gt("+itemCount+")").find("span").removeClass("correct");
			$(".leveringsadres:gt("+itemCount+")").find(".errorlabel").css("display","none");
			
		});	

		$(".adresstabs li a").click(function(){
			// juiste tab select geven (groen maken)
			$(".adresstabs li a").removeClass("selected");
			$(this).addClass("selected");
			// eventueel adres verbergen
			$("#verbruik").show();
			$(".adr.format").show();
			if($(this).parent().hasClass("first")){
				$(".adr.format").hide();
				$("#verbruik").hide();
			}
			
			// adressen onder tab updaten
		    var index = ($(this).parent().parent().children("li").index($(this).parent()) ) - 1;
			
			// berekening doorvoeren
			if(adresCollection!==null && adresCollection.Items[index]!==null && index!==-1)
			{
				updateTableAdres(index);
			}else
			{
				updateTableTotal();
			}

		});
		
		$("#verzenden").click(function(){
			 WebServices.Offerte.Request(
				MailMessage.Compose(),
				($("input[name=klantworden]:checked").val()==="ja"),
				function(){
					alert("gelukt mail te versturen");
					//window.location.replace("http://www.essent.nl/content/zakelijk/producten/klant_worden/offerte_verstuurd.jsp");
				},
				function(msg){
					alert("NIET gelukt!");
					//window.location.replace("http://www.essent.nl/content/zakelijk/producten/klant_worden/offerte_verstuurd.jsp");
				}
			 ); 
		});
		
		var updateTableAdres=function(index){
				var item = adresCollection.Items[index];
				
				$(".adr.format .street-adress").html(item.Street + " "+ item.HouseNr);
				$(".adr.format .postal-code").html(item.Postcode + " "+ item.City);
				
				$("#verbruik-electriciteit").html(item.JaarverbruikElectriciteit);
				$("#verbruik-gas").html(item.JaarverbruikGas);
				
				if(item.Electriciteit.VerbruiksKosten!==0){
					$(".Verbruikskosten .Electriciteit").html(BedragFormatter(item.Electriciteit.VerbruiksKosten));
					$(".Vastekosten .Electriciteit").html(BedragFormatter(item.Electriciteit.VasteKosten));
					$(".Totalekosten .Electriciteit").html(BedragFormatter(item.Electriciteit.TotaleKosten));
					$(".Energiebelasting .Electriciteit").html(BedragFormatter(item.Electriciteit.EnergieBelasting));
					$(".BTW .Electriciteit").html(BedragFormatter(item.Electriciteit.BTW));
					$(".Totaal .Electriciteit").html(BedragFormatter(item.Electriciteit.Totaal));
				}else
				{
					updateEmptyElectriciteit();
				}
				
				if(item.Gas.VerbruiksKosten!==0){
					$(".Verbruikskosten .Gas").html(BedragFormatter(item.Gas.VerbruiksKosten));
					$(".Vastekosten .Gas").html(BedragFormatter(item.Gas.VasteKosten));
					$(".Totalekosten .Gas").html(BedragFormatter(item.Gas.TotaleKosten));
					$(".Energiebelasting .Gas").html(BedragFormatter(item.Gas.EnergieBelasting));
					$(".BTW .Gas").html(BedragFormatter(item.Gas.BTW));
					$(".Totaal .Gas").html(BedragFormatter(item.Gas.Totaal));
				}else
				{
					updateEmptyGas();
				}
		};
		
		var updateEmptyElectriciteit= function(){
				$(".Verbruikskosten .Electriciteit").html("--,--");
				$(".Vastekosten .Electriciteit").html("--,--");
				$(".Totalekosten .Electriciteit").html("--,--");
				$(".Energiebelasting .Electriciteit").html("--,--");
				$(".BTW .Electriciteit").html("--,--");
				$(".Totaal .Electriciteit").html("--,--");
		};
		
		var updateEmptyGas= function(){
				$(".Verbruikskosten .Gas").html("--,--");
				$(".Vastekosten .Gas").html("--,--");
				$(".Totalekosten .Gas").html("--,--");
				$(".Energiebelasting .Gas").html("--,--");
				$(".BTW .Gas").html("--,--");
				$(".Totaal .Gas").html("--,--");
		};
		
		
		var updateTableTotal = function(){


				if(adresCollection.Total.Electriciteit.VerbruiksKosten!==0)
				{
					$(".Verbruikskosten .Electriciteit").html(BedragFormatter(adresCollection.Total.Electriciteit.VerbruiksKosten));
					$(".Vastekosten .Electriciteit").html(BedragFormatter(adresCollection.Total.Electriciteit.VasteKosten));
					$(".Totalekosten .Electriciteit").html(BedragFormatter(adresCollection.Total.Electriciteit.TotaleKosten));
					$(".Energiebelasting .Electriciteit").html(BedragFormatter(adresCollection.Total.Electriciteit.EnergieBelasting));
					$(".BTW .Electriciteit").html(BedragFormatter(adresCollection.Total.Electriciteit.BTW));
					$(".Totaal .Electriciteit").html(BedragFormatter(adresCollection.Total.Electriciteit.Totaal));
				}else
				{
					updateEmptyElectriciteit();
				}
				if(adresCollection.Total.Gas.VerbruiksKosten!==0)
				{
					$(".Verbruikskosten .Gas").html(BedragFormatter(adresCollection.Total.Gas.VerbruiksKosten));
					$(".Vastekosten .Gas").html(BedragFormatter(adresCollection.Total.Gas.VasteKosten));
					$(".Totalekosten .Gas").html(BedragFormatter(adresCollection.Total.Gas.TotaleKosten));
					$(".Energiebelasting .Gas").html(BedragFormatter(adresCollection.Total.Gas.EnergieBelasting));
					$(".BTW .Gas").html(BedragFormatter(adresCollection.Total.Gas.BTW));
					$(".Totaal .Gas").html(BedragFormatter(adresCollection.Total.Gas.Totaal));
				}else{
					updateEmptyGas();
				}
		};
		

		
var MailMessage = function(){
	var config = {
		createTextNode:function(nodename, content){
			return config.createXmlNode(nodename, "<![CDATA["+content+"]]>");
		},	
		createXmlNode:function(nodename, content){
			return "<"+nodename+">"+content+"</"+nodename+">";
		},
		extractXmlNode:function(nodename,selector){
			return config.createTextNode(nodename,$(selector).val());
		},
		createKlant:function(){
			
			var leveringxml ="";
			
			var o = adresCollection.Items.length;
			for(var i = 0;i<o;i++){
				var item = adresCollection.Items[i];
				var adresxml = "";
				adresxml += config.createTextNode("straatnaam",  item.Street);				
				adresxml += config.createTextNode("huisnummer",  item.HouseNr);	
				adresxml += config.createTextNode("postcode",  item.Postcode);	
				adresxml += config.createTextNode("plaats",  item.City);	
				adresxml = config.createXmlNode("adres",adresxml);
				
				var gasxml = "";
				if(item.Gas.VerbruiksKosten!==0)
				{
					gasxml += config.createTextNode("volumeverbruik",  ""+item.JaarverbruikGas);
					gasxml += config.createTextNode("verbruik",  BedragFormatterX(item.Gas.VerbruiksKosten));				
					gasxml += config.createTextNode("bedrageenheidsprijs",  BedragFormatterX(item.Gas.VerbruiksKosten));	
					gasxml += config.createTextNode("bedragvastrecht",  BedragFormatterX(item.Gas.VasteKosten));	
					gasxml += config.createTextNode("percentagebelasting",  BedragFormatterX('19'));
					gasxml += config.createTextNode("bedragbelasting",  BedragFormatterX(item.Gas.EnergieBelasting));
					gasxml += config.createTextNode("bedragsubtotaal",  BedragFormatterX(item.Gas.TotaleKosten));	
					gasxml += config.createTextNode("bedragbtw",  BedragFormatterX(item.Gas.BTW));
					gasxml += config.createTextNode("bedragtotaal",  BedragFormatterX(item.Gas.Totaal));
				}else{
					gasxml += config.createTextNode("volumeverbruik",  ""+item.JaarverbruikGas);
					gasxml += config.createTextNode("verbruik",  "--,--");				
					gasxml += config.createTextNode("bedrageenheidsprijs",  "--,--");	
					gasxml += config.createTextNode("bedragvastrecht",  "--,--");	
					gasxml += config.createTextNode("percentagebelasting",  "--,--");
					gasxml += config.createTextNode("bedragbelasting",  "--,--");
					gasxml += config.createTextNode("bedragsubtotaal",  "--,--");	
					gasxml += config.createTextNode("bedragbtw",  "--,--");
					gasxml += config.createTextNode("bedragtotaal",  "--,--");				
				}
				gasxml = config.createXmlNode("gas",gasxml);

				var electriciteitxml = "";
				if(item.Electriciteit.VerbruiksKosten!==0){
					electriciteitxml += config.createTextNode("volumeverbruik",  ""+item.JaarverbruikElectriciteit);
					electriciteitxml += config.createTextNode("verbruik",  BedragFormatterX(item.Electriciteit.VerbruiksKosten));				
					electriciteitxml += config.createTextNode("bedrageenheidsprijs",  BedragFormatterX(item.Electriciteit.VerbruiksKosten));
					electriciteitxml += config.createTextNode("bedragvastrecht",  BedragFormatterX(item.Electriciteit.VasteKosten));	
					electriciteitxml += config.createTextNode("percentagebelasting",  '19');
					electriciteitxml += config.createTextNode("bedragbelasting",  BedragFormatterX(item.Electriciteit.EnergieBelasting));
					electriciteitxml += config.createTextNode("bedragsubtotaal",  BedragFormatterX(item.Electriciteit.TotaleKosten));	
					electriciteitxml += config.createTextNode("bedragbtw",  BedragFormatterX(item.Electriciteit.BTW));
					electriciteitxml += config.createTextNode("bedragtotaal",  BedragFormatterX(item.Electriciteit.Totaal));
				}else{
					electriciteitxml += config.createTextNode("volumeverbruik",  ""+item.JaarverbruikElectriciteit);
					electriciteitxml += config.createTextNode("verbruik",  "--,--");				
					electriciteitxml += config.createTextNode("bedrageenheidsprijs",  "--,--");
					electriciteitxml += config.createTextNode("bedragvastrecht",  "--,--");	
					electriciteitxml += config.createTextNode("percentagebelasting",  '19');
					electriciteitxml += config.createTextNode("bedragbelasting",  "--,--");
					electriciteitxml += config.createTextNode("bedragsubtotaal",  "--,--");	
					electriciteitxml += config.createTextNode("bedragbtw",  "--,--");
					electriciteitxml += config.createTextNode("bedragtotaal",  "--,--");
						
				}
				electriciteitxml = config.createXmlNode("stroom",electriciteitxml);	
				leveringxml += config.createXmlNode("levering", adresxml +  gasxml + electriciteitxml);
			}
			
			leveringxml = config.createXmlNode("leveringen",leveringxml);

			var klantxml = "";
			
			var contractvorm = $("input[name=tarief]:checked").val();
			var contractvormHtml = $(".contract").html();
			var contractvormText = "";

			switch(contractvorm)
			{
				case "Vast1":
					klantxml += config.createXmlNode("contracttype","1 jaar vast");
				break;
				case "Vast3":
					klantxml += config.createXmlNode("contracttype","3 jaar vast");
				break;
				case "Variabel":
					klantxml += config.createXmlNode("contracttype","1 jaar variabel");
				break;
			}
			
			klantxml += config.extractXmlNode("bedrijfsnaam","#bedrijfsnaam");
			
			var persoonxml ="";
			
			persoonxml += config.extractXmlNode("naam","#naamcontactpersoon");
			persoonxml += config.extractXmlNode("telefoonnummer","#telefoonnummer");
			persoonxml += config.extractXmlNode("emailadres","#emailcontactpersoon");
			persoonxml += config.createXmlNode("contact",$("input[name=klantworden]:checked").val());
			persoonxml = config.createXmlNode("contactpersoon",persoonxml);
			klantxml = config.createXmlNode("klant",klantxml + persoonxml);
			
				var itemTotal = adresCollection.Total;
				
				var totalgasxml = "";
				if(itemTotal.Gas.VerbruiksKosten!==0){
					totalgasxml += config.createTextNode("verbruik",  BedragFormatterX(itemTotal.Gas.VerbruiksKosten));				
					totalgasxml += config.createTextNode("bedrageenheidsprijs",  BedragFormatterX(itemTotal.Gas.VerbruiksKosten));	
					totalgasxml += config.createTextNode("bedragvastrecht",  BedragFormatterX(itemTotal.Gas.VasteKosten));	
					totalgasxml += config.createTextNode("percentagebelasting",  '19');
					totalgasxml += config.createTextNode("bedragbelasting",  BedragFormatterX(itemTotal.Gas.EnergieBelasting));
					totalgasxml += config.createTextNode("bedragsubtotaal",  BedragFormatterX(itemTotal.Gas.TotaleKosten));	
					totalgasxml += config.createTextNode("bedragbtw",  BedragFormatterX(itemTotal.Gas.BTW));
					totalgasxml += config.createTextNode("bedragtotaal",  BedragFormatterX(itemTotal.Gas.Totaal));
				}else{
					totalgasxml += config.createTextNode("verbruik",  "--,--");				
					totalgasxml += config.createTextNode("bedrageenheidsprijs",  "--,--");	
					totalgasxml += config.createTextNode("bedragvastrecht",  "--,--");	
					totalgasxml += config.createTextNode("percentagebelasting",  '19');
					totalgasxml += config.createTextNode("bedragbelasting",  "--,--");
					totalgasxml += config.createTextNode("bedragsubtotaal",  "--,--");	
					totalgasxml += config.createTextNode("bedragbtw",  "--,--");
					totalgasxml += config.createTextNode("bedragtotaal",  "--,--");
							
				}
				totalgasxml = config.createXmlNode("gas",totalgasxml);	
				
				var totalelectriciteitxml = "";
				if(itemTotal.Electriciteit.VerbruiksKosten!==0){
					totalelectriciteitxml += config.createTextNode("verbruik",  BedragFormatterX(itemTotal.Electriciteit.VerbruiksKosten));				
					totalelectriciteitxml += config.createTextNode("bedrageenheidsprijs",  BedragFormatterX(itemTotal.Electriciteit.VerbruiksKosten));
					totalelectriciteitxml += config.createTextNode("bedragvastrecht",  BedragFormatterX(itemTotal.Electriciteit.VasteKosten));	
					totalelectriciteitxml += config.createTextNode("percentagebelasting",  '19');
					totalelectriciteitxml += config.createTextNode("bedragbelasting",  BedragFormatterX(itemTotal.Electriciteit.EnergieBelasting));
					totalelectriciteitxml += config.createTextNode("bedragsubtotaal",  BedragFormatterX(itemTotal.Electriciteit.TotaleKosten));	
					totalelectriciteitxml += config.createTextNode("bedragbtw",  BedragFormatterX(itemTotal.Electriciteit.BTW));
					totalelectriciteitxml += config.createTextNode("bedragtotaal",  BedragFormatterX(itemTotal.Electriciteit.Totaal));
				}else
				{
					totalelectriciteitxml += config.createTextNode("verbruik",  "--,--");				
					totalelectriciteitxml += config.createTextNode("bedrageenheidsprijs",  "--,--");
					totalelectriciteitxml += config.createTextNode("bedragvastrecht",  "--,--");	
					totalelectriciteitxml += config.createTextNode("percentagebelasting",  '19');
					totalelectriciteitxml += config.createTextNode("bedragbelasting",  "--,--");
					totalelectriciteitxml += config.createTextNode("bedragsubtotaal",  "--,--");	
					totalelectriciteitxml += config.createTextNode("bedragbtw",  "--,--");
					totalelectriciteitxml += config.createTextNode("bedragtotaal",  "--,--");
				}
				totalelectriciteitxml = config.createXmlNode("stroom",totalelectriciteitxml);
				
			var totalxml = "";
			totalxml += config.createXmlNode("totaaloverzicht",totalelectriciteitxml+totalgasxml);
			var afzender = config.createTextNode("afzender","essent");
			var offertexml = config.createXmlNode("offerte", afzender + klantxml + leveringxml+ totalxml);
			return offertexml;
		}
	};
 	return {
		Compose : config.createKlant
	};
}();
		
/*------------------------------------------------------------------------------------------------------
	***AdresCollectie voor de offertetool***
	Caspar Kleijne 12-03-2010 (ckleijne@hotmail.com) voor Essent Online 2010
	slaat adressen op zoals verkregen uit de webservices
-------------------------------------------------------------------------------------------------------*/
var AdresCollection = function(){
	var config = {
		adressen:[],
		resultSort:function(resulta,resultb){
			return resulta.Index - resultb.Index;
		}
	};
	var Update= function(){
		config.adressen.sort(config.resultSort);
	};	
	var Clear = function(){
		adressen=[];
	};
	return {
		Clear : Clear,
		Update : Update,
		Items : config.adressen
	};
};
/*------------------------------------------------------------------------------------------------------
	***Bedragformatter***
	Caspar Kleijne 12-03-2010 (ckleijne@hotmail.com) voor Essent Online 2010
	zet een getal met puntjes om in een geldbedrag
-------------------------------------------------------------------------------------------------------*/
var BedragFormatter =function(bedrag){
	//alert(bedrag);
	bedrag = parseFloat(bedrag).toFixed(2).replace('.',',');
	if(bedrag.length>6){bedrag = bedrag.substr(0,(bedrag.length-6)) +"." +  bedrag.substr((bedrag.length-6),bedrag.length);}
	if(bedrag.length>10){bedrag = bedrag.substr(0,(bedrag.length-10)) +"." +  bedrag.substr((bedrag.length-10),bedrag.length);}
	bedrag = bedrag.replace('-.','-');
	return bedrag;
};

var BedragFormatterX =function(bedrag){
	//alert(bedrag);
	bedrag = parseFloat(bedrag).toFixed(2).replace('.',',');
	if(bedrag.length>6){bedrag = bedrag.substr(0,(bedrag.length-6)) +"." +  bedrag.substr((bedrag.length-6),bedrag.length);}
	if(bedrag.length>10){bedrag = bedrag.substr(0,(bedrag.length-10)) +"." +  bedrag.substr((bedrag.length-10),bedrag.length);}
	bedrag = bedrag.replace('-.','-');
	return bedrag;
};


/*------------------------------------------------------------------------------------------------------
	***Eventafhandeling voor klikken op knop van stap 2 naar 3***
	Alle ingevulde adressen ophalen en formulier valideren?
	Caspar Kleijne 12-03-2010 (ckleijne@hotmail.com) voor Essent Online 2010
	slaat adressen op zoals verkregen uit de webservices
-------------------------------------------------------------------------------------------------------*/


var GetAlleAdressen = function(){
	//alert("gaan met die mandarijn!");
	$(".foutadres").hide();
	/** resultaatpagina tonen */
	adresCollection = new AdresCollection();
	var itemCount = (parseInt($("#dlleveringsAdressen").val(),10));
	$(".leveringsadres:lt("+itemCount+")").each(function(index, value){
		var huisnummer = $(this).find(".huisnummer").val();
		var huisnummerToevoeging = $(this).find(".huisnummer-letters").val();
		var postcode = $(this).find(".postcode-cijfers").val()+" "+$(this).find(".postcode-letters").val();
		var that = $(this);
		var jaarverbruikelectriciteit = $(this).find(".jaarverbruikelektriciteit").val();
		var jaarverbruikgas = $(this).find(".jaarverbruikgas").val();
		
		// adres ophalen
		var adresService =  new WebServices.Adres();
		adresService.Request(
			postcode,
			huisnummer,
			function(){
				var result = {};
				result.Index = index;
				result.Street = adresService.Result.Street;
				result.HouseNr = adresService.Result.HouseNr + " " + huisnummerToevoeging;
				result.Postcode = adresService.Result.Postcode;
				result.City = adresService.Result.City;
				result.JaarverbruikElectriciteit = jaarverbruikelectriciteit;
				result.JaarverbruikGas = jaarverbruikgas;
				//alert("adres geladen");
				// gasregio ophalen
				var gasregioService = new WebServices.GasRegio();
				gasregioService.Request(
					postcode,
					huisnummer,
					function(){
						result.Regio = gasregioService.Result.Regio;
						
						//alert("regio geladen");
						
						var contractvorm = $("input[name=tarief]:checked").val();
						var regioxml = $(tarieven.Result()).find("regio[ID="+result.Regio+"]");
						//alert(regioxml.text());
						/** Electriciteit */
						var tariefelectriciteitxml =  regioxml.find("tarieven tarief[Soort='Electriciteit'][Vorm='"+contractvorm+"']");
						var VasteKostenElectriciteit  = parseFloat(tariefelectriciteitxml.attr("VasteKosten"));
						var BedragElectriciteit = parseFloat(tariefelectriciteitxml.attr("Bedrag"))/100;
						/** gas */
						var drempelgas = result.JaarverbruikGas < 5000 ? "0" : "5000";
						var tariefgasxml = regioxml.find("tarieven tarief[Soort='Gas'][Vorm='"+contractvorm+"'][VerbruiksDrempel="+drempelgas+"]");
						var VasteKostenGas  = parseFloat(tariefgasxml.attr("VasteKosten"));
						var BedragGas = parseFloat(tariefgasxml.attr("Bedrag"))/100;
						

						
						var kosten = new KostenBerekening();
						result.Electriciteit = kosten.Bereken(result.JaarverbruikElectriciteit, VasteKostenElectriciteit,BedragElectriciteit,false);
						result.Gas = kosten.Bereken(result.JaarverbruikGas, VasteKostenGas,BedragGas,true);
						
						if(adresCollection.Items.push(result)===itemCount){
							adresCollection.Update();
							var total = {
								Gas:{},
								Electriciteit:{}
							};

								total.Electriciteit.VerbruiksKosten=0;
								total.Electriciteit.VasteKosten=0;
								total.Electriciteit.TotaleKosten=0;
								total.Electriciteit.EnergieBelasting=0;
								total.Electriciteit.BTW=0;
								total.Electriciteit.Totaal=0;
								
								total.Gas.VerbruiksKosten=0;
								total.Gas.VasteKosten=0;
								total.Gas.TotaleKosten=0;
								total.Gas.EnergieBelasting=0;
								total.Gas.BTW=0;
								total.Gas.Totaal=0;
							
							for(var c = 0;c<itemCount;c++){
								if(adresCollection.Items[c].Electriciteit.VerbruiksKosten!==0){
									total.Electriciteit.VerbruiksKosten+=adresCollection.Items[c].Electriciteit.VerbruiksKosten;
									total.Electriciteit.VasteKosten+=adresCollection.Items[c].Electriciteit.VasteKosten;
									total.Electriciteit.TotaleKosten+=adresCollection.Items[c].Electriciteit.TotaleKosten;
									total.Electriciteit.EnergieBelasting+=adresCollection.Items[c].Electriciteit.EnergieBelasting;
									total.Electriciteit.BTW+=adresCollection.Items[c].Electriciteit.BTW;
									total.Electriciteit.Totaal+=adresCollection.Items[c].Electriciteit.Totaal;
								}
								if(adresCollection.Items[c].Gas.VerbruiksKosten!==0){
									total.Gas.VerbruiksKosten+=adresCollection.Items[c].Gas.VerbruiksKosten;
									total.Gas.VasteKosten+=adresCollection.Items[c].Gas.VasteKosten;
									total.Gas.TotaleKosten+=adresCollection.Items[c].Gas.TotaleKosten;
									total.Gas.EnergieBelasting+=adresCollection.Items[c].Gas.EnergieBelasting;
									total.Gas.BTW+=adresCollection.Items[c].Gas.BTW;
									total.Gas.Totaal+=adresCollection.Items[c].Gas.Totaal;
								}
							}
							adresCollection.Total = total;
							updateTableTotal();
							// event opgooien voor volgende stap
							showStep("#step-3",".step3"); 
						}
					},
					function(msg){
						that.find(".foutadres").show();
				});
			},
			function(msg){
				that.find(".foutadres").show();
			}
		);
	});
};
		
		/*
		  WebServices.Adres.Request(
			"5261 SB","17",
			function(){alert("OK, adres: " + WebServices.Adres.Result.Street);},
			function(msg){alert("adres niet gevonden");}
 
 
		 WebServices.GasRegio.Request(
			"5261 SB","17",
			function(){alert("OK, regio: " + WebServices.GasRegio.Result.Regio);},
			function(msg){alert("gasregio niet gevonden");});

		 WebServices.Tarieven.Request(
			function(){alert("OK, tarieven: " + WebServices.Tarieven.Result.Xml);},
			function(msg){alert("tarieven niet gevonden");}
		 );

		 WebServices.Offerte.Request(
			"<offerte/>",
			true,
			function(){alert("OK, email:" +  WebServices.Offerte.Result.Success);},
			function(msg){alert("email kon niet worden verzonden");}
		 );  */
 
 
    

	/*
		Autotab by Wilfred Nas

	
		in order to implement you have to have some stuff in the html
	
		like three fields to collect days, months and years.
		by putting the trigger class on the first two, you force the autotab.
		the last one has a manual tab, which is (imho) like the users expect it to.
		<input type="text" maxlength="2" class="day foo" />
		<input type="text" maxlength="2" class="month foo" />
		<input type="text" maxlength="4" class="year" />
	
		REQUIRED
		-a maxlength on the input type='text'
		- a class of autotab on the input
	
		The scripts are being called with event delegation
	
		that's it, zero configuration in your javascript. 
		You just set the maxlenght, a class and you're done.
	*/

	//jQuery.fn.autotab = function (){
	//$('body').delegate('.autotab','keyup',function(e){
	//	switch(e.keyCode){
			// ignore the following keys
	////		case 9: // tab
		//		return false;
	//		case 16: // shift
//				return false;
	//		case 20: // capslock
	//			return false;
	//		default: // any other keyup actions will trigger 
	//			var maxlength = jQuery(this).attr('maxlength'); // get maxlength value
	//			var inputlength = jQuery(this).val().length; // get the length of the text
	//			if ( inputlength >= maxlength ){ // if the text is equal of more than the max length
	//				jQuery(this).next('input[type="text"]').focus(); // set focus to the next text field
	//			}
	//	}
	//});
	

/*------------------------------------------------------------------------------------------------------
	***Webservices voor de offertetool***
	Caspar Kleijne 11-03-2010 (ckleijne@hotmail.com) voor Essent Online 2010
	WebServices.Adres 	 : geeft het complete adres terug voor een postcode+huisnummer combinatie,
	WebServices.GasRegio : geeft de "gasregio-id" terug voor een postcode+huisnummer combinatie,
	WebServices.Tarieven : geeft een complete tarieven XML terug,
	WebServices.Offerte  : verzend een XML naar de offerteservice van Add2Favorites.
	
	iedere klasse werkt volgens
	Request -->  
		handleRequest =[verzenden gegevens]=> 
				handleResponse (response is correct?)
					-[ja] -> 
						completeEvent --|
					-[nee]-> handleError -> 
						errorEvent -|
------------------------------------------------------------------------------------------------------*/
var WebServices = function(){
	var config = {};
	var Adres = function(){
		// private fields
		var config = {
			/** de URL van de "webservice" geeft een xml document terug */
			/** url:"http://www.essent.nl/services/webforms/findaddress",*/
			url:"/services/webforms/findaddress",
			/** templatefield voor het error event */
			errorEvent:null,
			/** templatefield voor het complete event */
			completeEvent:null,
			postcode:null,
			huisnummer:null,
			/** het private resultaat object */
			result:{
				Street:"",
				HouseNr:"",
				Postcode:"",
				City:"",
				Country:""
			},
			/** het xml document dat met POST verzonden zal worden */
			xmlDocument:function(){
				return "<request><Postcode>"+config.postcode.toUpperCase()+"</Postcode><HouseNr>"+config.huisnummer+"</HouseNr></request>";
			},
			/** jQuery ajax request initialiseren en aanroepen */
			handleRequest:function(){
				$.ajax({
					  url: config.url,
					  global: false,
					  type: "POST",
					  data: config.xmlDocument(),
					  dataType: "xml",
					  complete: config.handleResponse
					}
				);
			},
			/** response verwerken */
			handleResponse:function(msg){
				/** controleer of de XML goed is geladen door de response status code uit de structuur op te vragen */
				var resultcode = $(msg.responseXML).find("response status").attr("code");
				if(resultcode==="0"){
					config.result.Street = $(msg.responseXML).find("Address Street").text();
					config.result.HouseNr = $(msg.responseXML).find("Address HouseNr").text();
					config.result.Postcode = $(msg.responseXML).find("Address Postcode").text();
					config.result.City = $(msg.responseXML).find("Address City").text();
					config.result.Country = $(msg.responseXML).find("Address Country").text();
					config.completeEvent();
				}else{
					config.handleError(msg);
				}
			},
			/** foutafhandeling via event in aparte methode */
			handleError:function(msg){
				config.errorEvent(msg);
			}
		};
		 /**
		 * Verzend postcode en huisnummer via xml naar de webservice . 
		 * De methode voert private een jQuery Ajax request uit en
		 * vuurt vervolgens een van de twee events af (completeEvent of errorEvent)
		 * geeft bij success via de Adres.Result het resultaat terug
		 * Dit resultaat is een object dat het volledig adres bevat.
		 *
		 * @postcode  		string  een geldige nederlandse postcode (####$$ of #### $$)
		 * @huisnummer  	string  een numeriek huisnummer (zonder toevoeging)
		 * @successEvent	functie een functie uit te voeren bij success
		 * @errorEvent	    functie een functie uit te voeren bij alle errors
		 */
		var Request = function(postcode,huisnummer,successEvent,errorEvent){
			config.postcode = postcode;
			config.huisnummer = huisnummer;
			config.completeEvent = successEvent;
			config.errorEvent = errorEvent;
			config.handleRequest();
		};
		/** methoden public maken */
		return {
			Request: Request,
			Result: config.result
		};
	};
	var GasRegio = function(){
		var config = {
			/** de URL van de "webservice" geeft een xml document terug */
			/** url:"http://www.essent.nl/content/system/GetGasRegion.jsp",*/
			url:"/content/system/GetGasRegion.jsp",
			/** templatefield voor het error event */
			errorEvent:null,
			/** templatefield voor het complete event */
			completeEvent:null,
			postcode:{
				cijfers:null,
				letters:null
			},
			huisnummer:null,
			/** het private resultaat object */
			result:{
				Regio:""
			},
			/** de querystring die met POST verzonden zal worden */
			queryString:function(){
				return "cijfers="+config.postcode.cijfers+"&letters="+config.postcode.letters.toUpperCase()+"&huisnummer="+config.huisnummer;
			},
			/** jQuery ajax request initialiseren en aanroepen */
			handleRequest:function(){
				$.ajax({
					  url: config.url,
					  global: false,
					  type: "POST",
					  data: config.queryString(),
					  dataType: "text",
					  complete: config.handleResponse
					});
			},
			/** response verwerken */
			handleResponse:function(msg){
				var resultcode = $(msg.responseText).text();
				/** controleer of de XML goed is geladen door te contoleren of er alleen een getal in de structuur staat (bij fout een 404 pagina) */
				if(!isNaN(parseInt(resultcode,10))){
					config.result.Regio = resultcode;
					config.completeEvent();
				}else{
					config.handleError(msg);
				}
			},
			/** foutafhandeling via event in aparte methode */
			handleError:function(msg){
				config.errorEvent(msg);
			}
		};
		/**
		 * Verzend postcode en huisnummer via xml naar de webservice . 
		 * De methode voert private een jQuery Ajax request uit en
		 * vuurt vervolgens een van de twee events af (completeEvent of errorEvent)
		 * geeft bij success via de GasRegio.Result het resultaat terug
		 * Dit resultaat is een cijfer dat de gasregio-id bevat.
		 *
		 * @postcode  		string  een geldige nederlandse postcode (####$$ of #### $$)
		 * @huisnummer  	string  een numeriek huisnummer (zonder toevoeging)
		 * @successEvent	functie een functie uit te voeren bij success
		 * @errorEvent	    functie een functie uit te voeren bij alle errors
		 */
		var Request = function(postcode,huisnummer,successEvent,errorEvent){
				config.huisnummer = huisnummer;
				config.completeEvent = successEvent;
				config.errorEvent = errorEvent;
			try{
				/** postcode opsplitesn in cijfers en letters met een regex */
				var match = postcode.match(/^([1-9][0-9]{3})[\s]{0,1}([a-zA-Z]{2})$/);
				config.postcode.cijfers = match[1];
				config.postcode.letters = match[2];		
				config.handleRequest();	
			}catch(err){
				config.handleError("incorrecte postcode");
			}
		};
		/** methoden public maken */
		return {
			Request: Request,
			Result: config.result
		};
	};
	var Tarieven = function(){
		var config = {
			/** de URL van de "webservice" geeft een xml document terug */
			//url:"tarieven.xml",
			url:"http://www.essent.nl/content/static/offertetool_mkb/tarieven.xml",
			/** templatefield voor het error event */
			errorEvent:null,
			/** templatefield voor het complete event */
			completeEvent:null,
			regio:null,
			/** het private resultaat object */
			result:null,
			/** jQuery ajax request initialiseren en aanroepen */
			handleRequest:function(){
				$.ajax({
					  url: config.url,
					  global: false,
					  type: "POST",
					  dataType: "xml",
					  complete: config.handleResponse
					}
				);
			},
			/** response verwerken */
			handleResponse:function(msg){
				/** controleer of de XML goed is geladen door de eerste ID uit de structuur op te vragen */
				var resultcode = $(msg.responseXML).find("regio:first").attr('ID');				
				//alert (resultcode);
				if(!isNaN(parseInt(resultcode,10)) && parseInt(resultcode,10)===1){
					config.result = $(msg.responseXML);
					config.completeEvent();
				}else{
					alert("foute validatie");
					config.handleError(msg);
				}
			},
			/** foutafhandeling via event in aparte methode */
			handleError:function(msg){
			
				config.errorEvent(msg);
			}
		};
		 /**
		 * Roept een url aan. 
		 * De methode voert private een jQuery Ajax request uit en
		 * vuurt vervolgens een van de twee events af (completeEvent of errorEvent)
		 * geeft bij success via de Tarieven.Result het resultaat terug
		 * Dit resultaat is een XML-document dat alle tarieven bevat.
		 *
		 * @successEvent	functie een functie uit te voeren bij success
		 * @errorEvent	    functie een functie uit te voeren bij alle errors
		 */
		var Request = function(successEvent,errorEvent){
			config.completeEvent = successEvent;
			config.errorEvent = errorEvent;
			config.handleRequest();
		};
		var Result = function(){
			return config.result;
		};
		/** methoden public maken */
		return {
			Request: Request,
			Result: Result
		};
	};
	var Offerte = function(){
		var config = {
			  /**
			  * de URL's van de "webservice" geeft een 1 of 0 terug (0 is success)
		      * urlcontact: met de klant wordt contact opgenomen na verzending
		      * urlofferte: met de klant wordt GEEN contact opgenomen na verzending
			  */
			urlcontact:"http://essent2.atof.nl/essent_offerte/sendContactaanvraag",
			urlofferte:"http://essent2.atof.nl/essent_offerte/sendOfferte",
			/** templatefield voor het error event */
			errorEvent:null,
			/** templatefield voor het complete event */
			completeEvent:null,
			xmlDocument:"",
			isContact:true,
			/** het private resultaat object */
			result:{
				Success:false
			},
			/** jQuery ajax request initialiseren en aanroepen */
			handleRequest:function(){
				//alert(config.xmlDocument);
				flashProxySendRequest(config.xmlDocument,config.isContact);
			},
			/** response verwerken */
			handleResponse:function(msg){
				var resultcode = msg.responseXML;
				//alert("de server geeft terug ==> " + msg.responseXML );
			},
			/** foutafhandeling via event in aparte methode */
			handleError:function(msg){
				config.errorEvent(msg);
			}
		};
				 /**
		 * Verstuurt een xml document naar een url. 
		 * De methode voert private een jQuery Ajax request uit en
		 * vuurt vervolgens een van de twee events af (completeEvent of errorEvent)
		 * geeft bij success via de Offerte.Result het resultaat terug
		 * Dit resultaat is een Bool dat aangeeft of de xml succesvol is verzonden en verwerkt .
		 *
		 * @xmlDocument		xml		een document dat naar de service verzonden gaat worden
		 * @isContact		bool	geeft aan welke url aangeroepen gaar worden
		 * @successEvent	functie een functie uit te voeren bij success
		 * @errorEvent	    functie een functie uit te voeren bij alle errors
		 */
		var Request = function(xmlDocument,isContact,successEvent,errorEvent){
			config.isContact = isContact;
			config.xmlDocument = xmlDocument;
			config.completeEvent = successEvent;
			config.errorEvent = errorEvent;
			config.handleRequest();
		};
		/** methoden public maken */
		return {
			Request: Request,
			Result: config.result
		};
	}();
	/** methoden public maken */
	return {
		Adres : Adres,
		GasRegio : GasRegio,
		Tarieven : Tarieven,
		Offerte : Offerte
	};
}();

/*------------------------------------------------------------------------------------------------------
	***Rekenmodule voor de offertetool***
	Caspar Kleijne 12-03-2010 (ckleijne@hotmail.com) voor Essent Online 2010
	Rekenmodule.Bereken	 : 
	geeft de complete berekening terug op basis van het opgegeven verbruik, regio, contracttype en producttype
	info: tarieven belasting over schijven (via jeroen.schilperoort@essent.nl): 
			Gas:
			1 - 5.000 m3 (ct/m3)	 		 15,80	   
			5.001 - 170.000 m3 (ct/m3)	 	 13,85	   
			170.001 - 1 miljoen m3 (ct/m3)	 3,84
			Electriciteit:
			1 - 10.000 kWh (ct/kWh)	 			10,85	12,91	   
			10.001 - 50.000 kWh (ct/kWh)	 	 	3,98	4,74	   
			50.001 - 10 miljoen kWh (ct/kWh)	 	 	1,06	1,26	   
			Heffingskorting EB (€/jaar)	 		-318,62	-379,16	 
------------------------------------------------------------------------------------------------------*/


var KostenBerekening = function(){
	var config = {
		verbruik : 0,
		vasteKosten:0, 
		eenheidKosten:0,
		isGas:false,
		berekening:function(){
			return {
				VerbruiksKosten:config.berekenVerbruiksKosten(),
				VasteKosten:config.berekenVasteKosten(),
				TotaleKosten:config.berekenTotaleKosten(),
				EnergieBelasting:config.berekenEnergieBelasting(),
				BTW:config.berekenBTW(),
				Totaal:config.berekenTotaal()
			};
		},
		berekenVerbruiksKosten:function(){
			return config.verbruik * config.eenheidKosten;
		},
		berekenVasteKosten:function(){
			return config.vasteKosten;
		},
		berekenTotaleKosten:function(){
			return config.berekenVerbruiksKosten() + config.berekenVasteKosten();
		},
		berekenEnergieBelasting:function(){
			var belasting=0;
			if (!config.isGas){
				belasting+=config.berekenRestantWaarde(config.verbruik,0,10000)*0.1114;
				belasting+=config.berekenRestantWaarde(config.verbruik,10000,50000)*0.0406;
				belasting+=config.berekenRestantWaarde(config.verbruik,50000,10000000)*0.0108;
				belasting-=318.62;

			}else{
				belasting+=config.berekenRestantWaarde(config.verbruik,0,5000)*0.1629;
				belasting+=config.berekenRestantWaarde(config.verbruik,5000,170000)*0.1411;
				belasting+=config.berekenRestantWaarde(config.verbruik,170000,1000000)*0.0391;				
			}
			return belasting;
		},
		berekenBTW:function(){
			return (config.berekenTotaleKosten() + config.berekenEnergieBelasting()) *0.19;
			//return config.berekenTotaleKosten()*0.19;
		},
		berekenTotaal:function(){
			
		    var tot = config.berekenTotaleKosten()+config.berekenEnergieBelasting()+config.berekenBTW();
			return tot; //>=0 ? tot: 0;
		},
		berekenRestantWaarde:function(nvalue,min,max){
			return ( nvalue > max ) ?  ( max - min ) : (( nvalue > min ) ?  (nvalue-min) : 0 );
		}
	};
	var Bereken = function(verbruik, vasteKosten,eenheidKosten,isGas){
			config.verbruik= verbruik;
			config.vasteKosten = vasteKosten;
			config.eenheidKosten = eenheidKosten;
			config.isGas=isGas;
			return config.berekening();
	};
	return {
		Bereken : Bereken
	};
};

 /*
	author information:
	
	Wilfred Nas / wnas
	twitter.com/wnas
	wilfred@wnas.nl
	http://wnas.nl
*/
var essentForm = function () {
	var config =  {
		err : 'error',
		cor : 'correct'
	};

	var required = function () {
		$('.required input.required:visible').blur( function (e) {
			validate( e.target );
		});
		/*alert("ok");*/
	};
	var init = function () {
		required();
		//checkSubmit();
	};
	var validate = function ( inp ){
		// get the id...
		var it = $( inp ).attr('id');
		// value
		var v = $(inp).val();
		
		// check the input items to be not empty
		$(inp).each(function (){
			if( v === '') { 
				addError( inp, it );
			}
			// if it's not empty
			else {
				removeError( inp, it );
			}
		});
	
		$('#'+it+'[type="checkbox"]').each( function () {
			// check to see if it isn't empty
			if( $(inp).attr('checked') === false) { 
				addError( inp, it );
			}
			// if it's not empty
			else {
				removeError( inp, it );
			}
		});

		$('#'+it+'.numeric').each( function ( ){
			var r = /^\d{1,11}$/;
			regExpCheck(r,v,inp,it);
		});

		$('#'+it+'.phone').each( function ( ){
			var r = /(^[0-9]{10}$)/;
			regExpCheck(r,v,inp,it);
		});
		$('#'+it+'.email').each( function ( ){
			var r = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/;
			regExpCheck(r,v,inp,it);
		});
		
	};
	
	// add error class
	var addError = function ( inp, it ) {
		$( inp ).parent().find(".errorlabel").css("display","block");
		$( inp ).parent().removeClass( config.cor );
		$( inp ).parent().addClass( config.err );
	};
	// remove error fiels
	var removeError = function( inp, it ){
		$( inp ).parent().find(".errorlabel").css("display","none");
		$( inp ).parent().removeClass( config.err );
		$( inp ).parent().addClass( config.cor );
	};
	// if an input field is required
	var empty = function ( inp, it,v ){
		// check to see if it isn't empty
		if( v === '') { 
			addError( inp, it );
		}
		// if it's not empty
		else {
			removeError( inp, it );
		}
	};

	
	var radio = function ( inp, it) {
		var name = $( inp ).attr('name');
		$('input[name="'+name+'"]').each( function (i) {
			//var c = $(this+':checked');
			if( $(this+':not([checked])') ){
				addError( this, it );
			}
		});
	};
	// check with reg exp
	var regExpCheck = function (r,v,inp,it) {
		if ( !r.test(v) ){
			addError( inp, it );
		}
		else {
			removeError( inp, it );
		}
	};
	var checkSubmit = function (){

			$('form.validate').find('.required input.required:visible').each( function(i){
				validate($(this));
			});
			
			$('.leveringsadres').each(function(){
				$(this).find('.errorlabel:first').css("display","none");
			});
			var c = 0;
			$('.leveringsadres:visible').each(function(){
				var pc = $(this).find(".postcode-cijfers").val() + $(this).find(".postcode-letters").val();
				var pct = /^[1-9][0-9]{3}[a-zA-Z]{2}$/;
				
				if(!pct.test(pc)){
					$(this).find('.errorlabel:first').css("display","block");
					c++;
				}else{
					$(this).find("span").removeClass("error");
					$(this).find("span").addClass("correct");
				}
			});
			
			
			$('span.error').each( function(i){
				c++;
			});
			//return true;
			return c===0;

	};
	return {
		init:init,
		checkSubmit:checkSubmit
	};
}();

essentForm.init();

