/* ------------------------------------------------------------------------------------
	author information:
	caspar kleijne
	cekleijne@gmail.com
	http://twitter.com/caspar_kleijne
------------------------------------------------------------------------------------- */

essent.ui  = {};
(essent.ui.page = function (){
	var config, init, update, initeventlisteners, eventhandlers, controls, updateText;
	config={
		tempbesparing:0
	};
	init=function (){
		
		$("#tussen").attr("checked","checked");
		$("#hoekwoning").attr("checked","checked");
		$("#kruipruimte-ja").attr("checked","checked");	
		$("input").parent().removeClass("selected");
		$("input:radio:checked").parent().addClass("selected");
		
		controls.sliders.init();
		initeventlisteners();
		update();
		
	};
	initeventlisteners = function (){
		controls.radiobuttons.all.bind("change", eventhandlers.radiobuttonall_change);
		$("input[name='woning']").bind("change", eventhandlers.radiobuttonwoning_change);
		controls.anchors.berekenmuur.bind("click", eventhandlers.anchorberekenmuur_click);
		controls.anchors.toonresultaat.bind("click", eventhandlers.anchorresultaat_click);
		controls.anchors.toonresultaatlink.bind("click", eventhandlers.anchorresultaat_click);
		controls.anchors.sluitresultaat.bind("click", eventhandlers.anchorresultaat_click);
		controls.anchors.zendemail.bind("click", eventhandlers.anchorzendemail_click);
	};
	update=function(e, ui){
			var rekenwaarden, resultaat;
		
			rekenwaarden = {
				bouwjaar:controls.radiobuttons.bouwjaar().val(),
				woning:controls.radiobuttons.woning().val(),
				kruipruimte:controls.radiobuttons.kruipruimte().val(),
				vloeroppervlak:parseInt($("#vloeroppervlakte-waarde span:first").text(),10),
				muuroppervlak:parseInt($("#muuroppervlakte-waarde span:first").text(),10)
			};
			
			resultaat = essent.isolatietest.bereken(rekenwaarden);
			updateText(parseInt(rekenwaarden.bouwjaar,10) + ((parseInt(rekenwaarden.kruipruimte,10)===0) ? 3 : 0));
			$("#resultaat").teller(config.tempbesparing,parseInt(resultaat.totaal.besparing,10));	
			config.tempbesparing = parseInt(resultaat.totaal.besparing,10);
			controls.table(resultaat);
			essent.cookie.write(rekenwaarden,resultaat);
		
	}; 
    updateText = function (index) {
		if(config.textindex!=index){
			$("#info-lang").children("p").hide();
			$("#info-lang").children('p:nth-child('+(index+1)+')').fadeIn('slow');
			$("#support-text").html($("#info-lang").children('p:nth-child('+(index+1)+')').html());
			config.textindex = index;
		}
	};
	eventhandlers={
 		radiobuttonall_change:function(e, ui){
			$("input").parent().removeClass("selected");
			$("input:radio:checked").parent().addClass("selected");
			update();
		},
		radiobuttonwoning_change:function(e, ui){
			var vloermatrix = [80,54,45];
			var oppervlakvloer =  (vloermatrix[parseInt($("input[name='woning']:checked").val(), 10)]);
			$("#vloeroppervlakte-waarde span:first").text(parseInt(oppervlakvloer,10));
			$("#handle_vloeroppervlakte").attr("style","left:"+((oppervlakvloer-20)*0.76923)+"%");
			eventhandlers.anchorberekenmuur_click(e, ui);

		},
		anchorberekenmuur_click:function(e, ui){
			var muurmatrix =  [parseInt($("#vloeroppervlakte-waarde span:first").text(),10) > 80 ? 1.60 : 1.90,1.90,0.85];
			var valu = parseInt($("#vloeroppervlakte-waarde span:first").text(),10) * muurmatrix[parseInt($("input[name='woning']:checked").val(), 10)];
			$("#muuroppervlakte-waarde span:first").text(parseInt(valu,10));
			$("#handle_muuroppervlakte").attr("style","left:"+(valu/3)+"%");
			update();
		},
		anchorresultaat_click:function(e, ui){
			$("#overzicht").toggleClass("show");
			$("#berekening").toggleClass("noshow");
			$("#resultaatwrapper").toggleClass("nostyle");
			$("#mailform").slideDown("fast");
			$("#mailform-thankyou").hide();
			update();
		},
		dropdownmuuroppervlakte_change:function(e, ui){
			$("#muuroppervlakte-waarde span:first").text(ui.value);
			update();
		},
		dropdownvloeroppervlakte_change:function(e, ui){
			$("#vloeroppervlakte-waarde span:first").text(ui.value);
			update();
		},
		dropdownmuuroppervlakte_slide:function(e, ui){
			$("#muuroppervlakte-waarde span:first").text(ui.value);
		},
		dropdownvloeroppervlakte_slide :function(e, ui){
			$("#vloeroppervlakte-waarde span:first").text(ui.value);

		},
		anchorzendemail_click :function(e, ui){
			var email = $("#e-mail-response").val();
			var emailvalid = /^[a-za-z0-9._%+\-]+@[a-za-z0-9.\-]+\.[a-za-z]{2,4}$/;
			
				var berekening = essent.isolatietest.bereken({
				bouwjaar:controls.radiobuttons.bouwjaar().val(),
				woning:controls.radiobuttons.woning().val(),
				kruipruimte:controls.radiobuttons.kruipruimte().val(),
				vloeroppervlak:$("#vloeroppervlakte-waarde span:first").text(),
				muuroppervlak:$("#muuroppervlakte-waarde span:first").text()});

				
				
				
				var urlstr = "";

				
				switch(controls.radiobuttons.woning().val()){
					case "0":
						urlstr += "&tp="+escape("Vrijstaande woning");    
						break;
					case "1":
						urlstr += "&tp="+escape("Hoekwoning / twee onder een kap");   
						break;
					case "2":
						urlstr += "&tp="+escape("tussenwoning");   
						break;
					
				}
			
				switch(controls.radiobuttons.bouwjaar().val()){
					case "0":
						urlstr += "&bj="+escape("ouder dan 1930");    
						break;
					case "1":
						urlstr += "&bj="+escape("1930-198");   
						break;
					case "2":
						urlstr += "&bj="+escape("jonger dan 1983");   
						break;
					
				}
				
				urlstr += "&kr="+escape( controls.radiobuttons.kruipruimte().val() === "1" ? "Ja" : "Nee"  );     
				urlstr += "&og="+escape( $("#vloeroppervlakte-waarde span:first").text() );      
				urlstr += "&om="+escape( $("#muuroppervlakte-waarde span:first").text() );  
				 
				urlstr += "&so="+ escape(berekening.muur.oppervlak) ;    
				urlstr += "&sg="+ escape(berekening.muur.reductie) ;     
				urlstr += "&si="+ escape(berekening.muur.investering) ;      
				urlstr += "&sb="+ escape(berekening.muur.besparing);     
				 
				urlstr += "&vo="+ escape(berekening.vloer.oppervlak);     
				urlstr += "&vg="+ escape(berekening.vloer.reductie) ;      
				urlstr += "&vi="+ escape(berekening.vloer.investering);      
				urlstr += "&vb="+ escape(berekening.vloer.besparing) ;     
				 
				urlstr += "&tg="+ escape(berekening.totaal.reductie) ;      
				urlstr += "&tb="+ escape(berekening.totaal.besparing) ;      
			if(emailvalid.test(email)){
				$("#mailform").slideUp("fast");
				$.get('http://essent.inform.atof.nl/isolatietest.inform?em='+escape(email)+urlstr, function(data) {
				  $("#mailform-thankyou").slideDown("fast");
				});
				wa.email = 'adviespdf';
				wa.track();
				//---------------google conversion----------------------
				var google_conversion_id = 1031066319;
				var google_conversion_language = "nl";
				var google_conversion_format = "3";
				var google_conversion_color = "ffffff";
				var google_conversion_label = "EvPBCL_jqQEQz6XT6wM";
				var google_conversion_value = 0;
				$(String.fromCharCode(60)+'img/'+String.fromCharCode(62)).attr('height','1').attr('width','1').css('border-style','none').attr('src','http://www.googleadservices.com/pagead/conversion/'+google_conversion_id+'/?value='+google_conversion_value+String.fromCharCode(38)+'label='+google_conversion_label+String.fromCharCode(38)+'guid=ON'+String.fromCharCode(38)+'script=0').appendTo('body');
				//---------------google conversion----------------------
				}		}
	};
	controls={
 		body:$("#rekenmodule"),
		anchors:{
			berekenmuur:$("#berekenmuur"),
			toonresultaat:$("#toonresultaat"),
			toonresultaatlink:$("#toon-resultaat-link"),
			sluitresultaat:$("#sluitresultaat"),
			zendemail:$("#zendemail")
		},
		radiobuttons:{
			all:$("input:radio"),
			woning:function(){return $("input[name='woning']:checked");},
			bouwjaar:function(){return $("input[name='bouwjaar']:checked");},
			kruipruimte:function(){return $("input[name='kruipruimte']:checked");}
		},
		panels:{
		
			overzicht:$("#overzicht"),
			berekening:$("#overzicht"),
			resultaat:$("#resultaatwrapper")
		}, 
		table:function(val){
			$("#spouwmuur-oppervlak").text(parseInt(val.muur.oppervlak,10));
			$("#spouwmuur-reductie").text(parseInt(val.muur.reductie,10));
			$("#spouwmuur-investering").text(parseInt(val.muur.investering,10)+",00");
			$("#spouwmuur-besparing").text(parseInt(val.muur.besparing,10)+",00");
			$("#vloer-oppervlak").text(parseInt(val.vloer.oppervlak,10));
			$("#vloer-reductie").text(parseInt(val.vloer.reductie,10));
			$("#vloer-investering").text(parseInt(val.vloer.investering,10)+",00");
			$("#vloer-besparing").text(parseInt(val.vloer.besparing,10)+",00");
			$("#totaal-reductie").text(parseInt(val.totaal.reductie,10));
			$("#totaal-besparing").text(parseInt(val.totaal.besparing,10)+",00");
		},
		sliders:{
			init:function(){
				controls.sliders.muuroppervlakte();
				controls.sliders.vloeroppervlakte();
			},
			muuroppervlakte:function(){ 
				$('#muuroppervlakte').accessibleUISlider({
				width:440,
				animate:true,
				value:103,
				min:10,
				max:290,
				labels:10,
				slide : eventhandlers.dropdownmuuroppervlakte_slide,
				change: eventhandlers.dropdownmuuroppervlakte_change
				});
			},
			vloeroppervlakte:function(){ 
				$('#vloeroppervlakte').accessibleUISlider({
				width:440,
				animate:true,
				value:54,
				min:20,
				max:150,
				labels:7,
				slide : eventhandlers.dropdownvloeroppervlakte_slide,
				change: eventhandlers.dropdownvloeroppervlakte_change
				});
			}
		}  
	};
	return{
		init:init
	};
}());/* lazy instantiation! */

(essent.isolatietest = function () {
	// private vloer calulatie
	var vloer = {
		besparing:7.00,
		kosten:0.55,
		getinvesteringsprijs : function (oppervlak) {
			var retvalue = 34;
			if(oppervlak>60){retvalue = 27;}
			if(oppervlak>80){retvalue = 25;}
			if(oppervlak>100){retvalue = 24;}
			return retvalue;
		},
		getbesparing : function (oppervlak) {
			return oppervlak * vloer.besparing * vloer.kosten;
		},
		getreductie : function (oppervlak) {
			return  oppervlak * vloer.besparing;
		},
		getinvestering : function (oppervlak) {
			return  oppervlak * vloer.getinvesteringsprijs(oppervlak);
		},
		bereken : function (oppervlak) {
			return{
				oppervlak:getInt(oppervlak),
				reductie:getInt(vloer.getreductie(oppervlak)),
				investering:getInt(vloer.getinvestering(oppervlak)),
				besparing:getInt(vloer.getbesparing(oppervlak))
			};
		}
	};
	//private muur calculatie
	var muur = {
		besparing:8.00,
		kosten:0.55,
		getinvesteringsprijs : function (oppervlak) {
			return oppervlak>=50 ? 16 : 848 ;
		},
		getbesparing : function (oppervlak) {
			return oppervlak * this.besparing * this.kosten;
		},
		getreductie : function (oppervlak) {
			return  oppervlak * this.besparing;
		},
		getinvestering : function (oppervlak) {
			return this.getinvesteringsprijs(oppervlak) * ( oppervlak >=50 ? oppervlak : 1 );
		},
		bereken : function (oppervlak) {
			return{
				oppervlak:getInt(oppervlak),
				reductie:getInt(this.getreductie(oppervlak)),
				investering:getInt(this.getinvestering(oppervlak)),
				besparing:getInt(this.getbesparing(oppervlak))
			};
		}
	};
	var getInt = function(val){
		var r = parseInt(val,10);
		return isNaN(r) ? 0 : r;
	};
	// priveledged function
	var bereken = function (val) {
		val.vloeroppervlak = val.kruipruimte == 1 ? val.vloeroppervlak : 0;
		return {
			vloer:vloer.bereken(getInt(val.vloeroppervlak)),
			muur:muur.bereken(getInt(val.muuroppervlak)),
			totaal:{
				reductie:(vloer.getreductie(getInt(val.vloeroppervlak))+muur.getreductie(getInt(val.muuroppervlak))),
				besparing:(vloer.getbesparing(getInt(val.vloeroppervlak))+muur.getbesparing(getInt(val.muuroppervlak)))
			}
		};
	};
	// expose stuff with return
	return {
		bereken: bereken
	};
}());// direct invokation

/*----------------------------------------------------------
	jquery plugin teller
*---------------------------------------------------------*/
(function($) {
    $.fn.teller = function(startvalue,endvalue) {
    var config = {
		that:null,
		tellerlabel : "teller-update",
		interval:10,
		vector:1,
		max:9999,
		ticks:120,
		ticker :0,
		start:0,
		end:0,
		current:0,
		spanindex : [1,2,3,4]
	};
	var helpers = {
		validate : function(startvalue,endvalue){
			 
				 config.start = startvalue;
				 config.current = startvalue;
				 config.end = endvalue;
			     config.vector =  helpers.getvector();		
				 config.interval = helpers.getinterval();
				 return true;
		},
		getvector : function (){
			return config.start <=  config.end ?  1 : -1;	
		},
		getinterval : function (){
			return Math.floor((config.end >= config.start ? (config.end- config.start) : (config.start -  config.end))/(config.ticks)) ;
		},
		gettellertext : function (){
			var retvalue = String(config.current);
			retvalue = (new Array( 5-retvalue.length ).join( "0" )) + retvalue + "00";
			return retvalue;
		},
		updateui : function (){
			for(var element in config.spanindex){					
				$(config.that).children('span:nth-child('+(config.spanindex[element])+')').attr('class','teller-'+  helpers.gettellertext().charAt(config.spanindex[element]-1));
			}
		}
	};
	var timer={
		start:function(){
			
			$(config.that).stopTime(config.tellerlabel);
			//config.current = config.end;
			//helpers.updateui();
			//return;
			
			$(config.that).everyTime(config.interval,config.tellerlabel,function(){
				 if((config.ticker < config.ticks)){
					config.current += (config.vector * config.interval);
					helpers.updateui();
					config.ticker ++;
				 }
				 else{
					 timer.stop();
					 config.ticker  = 0;
					 config.current = config.end;
					 helpers.updateui();
				 }
			},config.ticks*2);
		},
		stop:function(){
			$(config.that).stopTime(config.tellerlabel);
		}
	};
  	$(this).each(function(){
			config.that = this;
			if(helpers.validate(startvalue,endvalue)){
				timer.start();
			}else{
				throw "invalidargumentsexception";
			}
   	 });
	return this;
  };
})($);



essent.ui.page.init();
