(function(){var $=window.jQuery;var numberRe=/^[0-9\.]+$/;var rangeRe=/^ *([0-9]+) *- *([0-9]+) *$/;var commaDecimalRe=/^ *([0-9]+) *, *([0-9]+) *$/;function commaToDot(s){var m=commaDecimalRe.exec(s);if(!m){return s}return m[1]+"."+m[2]}function toPostiveFloat(s){if(typeof s==="number"){return s}return Math.max(0,parseFloat(commaToDot(s.replace(/ /g,""),10)))}function parseRange(s){var m=rangeRe.exec(s);if(!m){throw new Error("Invalid range: "+s)}return[parseInt(m[1],10),parseInt(m[2],10)]}function isInRange(range,i){if(typeof range==="string"){range=parseRange(range)}return i>=range[0]&&i<=range[1]}function parseTSVNumbers(text){return text.split("\n").map(function(row){return row.split("\t").map(function(n){return numberRe.test(n)?toPostiveFloat(n):n})})}var CO2DATA=parseTSVNumbers($("#co2").text());var MASSA_RANGES=parseTSVNumbers($("#massan-mukaan").text().trim());var AUTOVERO_2017=parseTSVNumbers($("#autovero-2017").text().trim());var FORM=$("form#trafilaskuri");var CO2_INPUT=$("#input_co2");var POLTTOAINEVERO_BENSA=.6813;var POLTTOAINEVERO_DIESEL=.5061;var UUSI_PERUSOSA_KERROIN=.179;var UUSI_POLTTOAINEVERO_KERROIN=.924;var VEROVUOSI=1997;var ALV_KERROIN=.24;function formObject(){return FORM.serializeArray().reduce(function(ob,item){ob[item.name]=toPostiveFloat(item.value)||0;return ob},{})}function intEquals(a,b){return parseInt(a,10)===parseInt(b,10)}function getMassaItem(massa,index){var begin=MASSA_RANGES[0];var end=MASSA_RANGES[MASSA_RANGES.length-1];if(begin[0]>=massa){return begin[index]}if(end[0]<=massa){return end[index]}var row=MASSA_RANGES.slice(1,-1).filter(function(row){return isInRange(row[0],massa)})[0];return row&&row[index]||0}function findAutovero(co2){if(co2>=360){return.5}var row=AUTOVERO_2017.filter(function(row){return intEquals(row[0],co2)})[0];return(row&&row[1]||0)/100}function findOldCarNykAjoneuvovero(massa){return getMassaItem(massa,1)}function findOldCarAikaperustainenAjoneuvovero(massa){return getMassaItem(massa,2)}function findOldCarKmperustainenAjoneuvovero(massa){return getMassaItem(massa,3)}function getCO2Item(co2,index){var row=CO2DATA.filter(function(row){return intEquals(row[0],co2)})[0];return row&&row[index]||0}function findNykAjoneuvovero(co2){return getCO2Item(co2,2)}function findAikaperustainenAsiakasmaksu(co2){return getCO2Item(co2,3)}function findKmPerustainenAsiakasmaksu(co2){return getCO2Item(co2,4)}function sumMatching(re,source){return Object.keys(source).reduce(function(acc,key){if(re.test(key)){return acc+(source[key]||0)}return acc},0)}var labelMapping={"Sähkö":0,Bensiini:POLTTOAINEVERO_BENSA,"Sähkö ja bensiini":POLTTOAINEVERO_BENSA,Diesel:POLTTOAINEVERO_DIESEL,"Sähkö ja diesel":POLTTOAINEVERO_DIESEL};function calculateCosts(userInput){userInput.massa=Math.min(3500,userInput.massa);userInput.co2=Math.min(400,userInput.co2||0);var useMass=userInput.vuosi&&userInput.vuosi<2002;var kayttoVoimaLabel=$("select[name=voimavero] option:selected").text();var polttoaineVero=labelMapping[kayttoVoimaLabel]||0;if(userInput.massa<=2500&&userInput.vuosi===2001){useMass=false}if(useMass){console.log("käytetään massaa");CO2_INPUT.hide()}else{CO2_INPUT.show();console.log("Käytetään CO2")}var nykPerusosa=findNykAjoneuvovero(userInput.co2);if(useMass){nykPerusosa=findOldCarNykAjoneuvovero(userInput.massa)}var polttoainevero=userInput.ajosuorite/100*userInput.kulutus*polttoaineVero;var voimavero=userInput.voimavero/100*(Math.floor(userInput.massa/100)+1)*365;var aikaPerustainenAsiakasmaksu=findAikaperustainenAsiakasmaksu(userInput.co2);if(useMass){aikaPerustainenAsiakasmaksu=findOldCarAikaperustainenAjoneuvovero(userInput.massa)}var aikaAsiakasmaksut=aikaPerustainenAsiakasmaksu/(1+ALV_KERROIN);var kmPerustainenAsiakasmaksu=findKmPerustainenAsiakasmaksu(userInput.co2);if(useMass){kmPerustainenAsiakasmaksu=findOldCarKmperustainenAjoneuvovero(userInput.massa)}var kmAsiakasmaksut=userInput.ajosuorite*(userInput.osuusValtionTieverkolla/100)*(kmPerustainenAsiakasmaksu/100)/(1+ALV_KERROIN);var autoveroProsentti=0;if(!useMass){autoveroProsentti=findAutovero(userInput.co2)}return{nykPerusosa:nykPerusosa,kmPerusosa:nykPerusosa*UUSI_PERUSOSA_KERROIN,aikaPerusosa:nykPerusosa*UUSI_PERUSOSA_KERROIN,nykVoimavero:voimavero,kmVoimavero:voimavero,aikaVoimavero:voimavero,nykPolttoainevero:polttoainevero,kmPolttoainevero:polttoainevero*UUSI_POLTTOAINEVERO_KERROIN,aikaPolttoainevero:polttoainevero*UUSI_POLTTOAINEVERO_KERROIN,nykAutovero:userInput.arvo*autoveroProsentti/(userInput.vuosi-VEROVUOSI),kmAutovero:0,aikaAutovero:0,kmAsiakasmaksut:kmAsiakasmaksut,kmAsiakasmaksutAlv:kmAsiakasmaksut*ALV_KERROIN,aikaAsiakasmaksut:aikaAsiakasmaksut,aikaAsiakasmaksutAlv:aikaAsiakasmaksut*ALV_KERROIN}}function injectResultsToDOM(res){Object.keys(res).forEach(function(key){var val=res[key];if(isReallyNaN(val)){val="?"}else{val=val.toFixed(2)}$("."+key).text(val)})}function isReallyNaN(n){return typeof n==="number"&&isNaN(n)}function debounce(func,wait,immediate){var timeout;return function(){var context=this,args=arguments;var later=function(){timeout=null;if(!immediate)func.apply(context,args)};var callNow=immediate&&!timeout;clearTimeout(timeout);timeout=setTimeout(later,wait);if(callNow)func.apply(context,args)}}var render=debounce(function(){var res=calculateCosts(formObject());res.kmYhteensa=sumMatching(/^km/,res);res.aikaYhteensa=sumMatching(/^aika/,res);res.nykYhteensa=sumMatching(/^nyk/,res);injectResultsToDOM(res)},100);FORM.on("change",render);$("input").on("keyup",render)})(); var laskuritDialogInitialized = false; $(document).ready(function(){ $('#tienkaytto-laskuri label i').each(function(){ $(this).click(function(e){ e.preventDefault(); e.stopPropagation(); var title = false; var info = false; if('undefined' != typeof TR_LASKURI_TEXTS[$(this).attr('data-info-field')]){ title = $(this).parents('label:first').find('span').text(); info = TR_LASKURI_TEXTS[$(this).attr('data-info-field')]; } if(title && info){ dialog = getDialog({'title': title, 'description': info}); // open modal dialog.dialog('open'); } }); }); }); function getDialog(info){ var width = $(window).width() - 40; var maxWidth = 700; if(width > maxWidth){ width = maxWidth; } if(laskuritDialogInitialized !== true){ $('#laskuri_dialog').dialog({ bgiframe: false, width: width, //height: height, modal: false, autoOpen: false, position: ['center', 100], resizable: false, draggable: false, dialogClass: 'laskuri_dialog', closeText: '', close: function(event, ui){ // empty content $('#laskuri_dialog .content').empty(); // clear title $('#laskuri_dialog').dialog('option', 'title', ''); } }); this.dialogInitialized = true; } else{ $('#laskuri_dialog').dialog('option', 'width', width); } // clear title $('#laskuri_dialog').dialog('option', 'title', ''); if('undefined' != typeof info){ $('#laskuri_dialog').dialog('option', 'title', info['title']); $('#laskuri_dialog .content').html(info['description']); } return $('#laskuri_dialog'); }