$(function(){

var cat1_sec1 = 0.291792603;
var cat1_sec2 = 0.624075058;
var cat1_sec3 = 0.826725554;


/* PI */
var performanceIndex;

/* 目標ゴールタイム */
var targetTime;
var targetTime_h;
var targetTime_m;

/* 目標ゴール時刻 */
var targetTime2_h;
var targetTime2_m;


/* 各区間の予想タイム */
var expectedTime_sec1_h;
var expectedTime_sec2_h;
var expectedTime_sec3_h;
var expectedTime_sec4_h;

var expectedTime_sec1_m;
var expectedTime_sec2_m;
var expectedTime_sec3_m;
var expectedTime_sec4_m;

var expectedTime_sec1_s;
var expectedTime_sec2_s;
var expectedTime_sec3_s;
var expectedTime_sec4_s;

var num;

/* 各区間の予想時刻 */
var expectedTime_h;
var expectedTime_m;

/* スタート時刻 */
var startTime_h;
var startTime_m;
startTime_h = 20;
startTime_m = 0;

/* モード */
var mode;


/**********************************/

$('input[type=number]').on('keydown', function(e){
    if(e.key==='Enter'||e.keyCode===13){
        $(this).nextAll('input[type=button]').trigger('click');
        return false;
    }
})

$('.performanceIndex input[type="button"]').click(function() {
    pi();
    var position = $('.result').offset().top;
    $('body,html').animate({scrollTop:position}, 400, 'swing');
    return false;
});

function pi(){
    mode = 'pi';

    performanceIndex = $('.performanceIndex input').val();
        if(performanceIndex.length !== 0){
        targetTime = 44966340 * Math.pow(performanceIndex , -1);

        targetTime_h = Math.floor(targetTime / 3600);
        targetTime_m = Math.floor(targetTime / 60 - targetTime_h * 60);
        
        var sec = [cat1_sec1, cat1_sec2, cat1_sec3];
        
        var expectedTime_sec_h = [expectedTime_sec1_h, expectedTime_sec2_h, expectedTime_sec3_h, expectedTime_sec4_h];
        
        var expectedTime_sec_m = [expectedTime_sec1_m, expectedTime_sec2_m, expectedTime_sec3_m, expectedTime_sec4_m];
        
        var expectedTime_sec_s = [expectedTime_sec1_s, expectedTime_sec2_s, expectedTime_sec3_s, expectedTime_sec4_s];
        
        for (let i = 1; i <= sec.length; i++) {
            expectedTime_sec_h[i - 1] = Math.floor((targetTime) * sec[i - 1] / 3600);
            expectedTime_sec_m[i - 1] = Math.floor((targetTime) * sec[i - 1] / 60) - Math.floor((targetTime) * sec[i - 1] / 3600) * 60;
            num = (targetTime) * sec[i - 1] / 60;
            expectedTime_sec_s[i - 1] = Math.floor(decimalPart(num) * 60);
            $('.expectedTime_sec'+ i +' td').html(expectedTime_sec_h[i - 1].toString().padStart(2, '0') + ':' + expectedTime_sec_m[i - 1].toString().padStart(2, '0') + ':' + expectedTime_sec_s[i - 1].toString().padStart(2, '0'));
            
            
            expectedTime_h = expectedTime_sec_h[i - 1] + startTime_h;
            expectedTime_m = expectedTime_sec_m[i - 1] + startTime_m;
            if(expectedTime_m >= 60){
                expectedTime_m = (expectedTime_m - 60).toString().padStart(2, '0');
                expectedTime_h = expectedTime_h + 1;
            }else{
                expectedTime_m = expectedTime_m.toString().padStart(2, '0');
            }
            expectedTime_h = Math.round(decimalPart(expectedTime_h / 24) * 24);
            $('.expectedTime'+ i).html(expectedTime_h + ':' + expectedTime_m);
        }
        $('.expectedTime_sec4 td').html(targetTime_h.toString().padStart(2, '0') + ':' + targetTime_m.toString().padStart(2, '0') + ':00');
        
        
        targetTime2_h = targetTime_h + startTime_h;
        targetTime2_m = targetTime_m + startTime_m;
        if(targetTime2_m >= 60){
            targetTime2_m = (targetTime2_m - 60).toString().padStart(2, '0');
            targetTime2_h = targetTime2_h + 1;
        }else{
            targetTime2_m = targetTime2_m.toString().padStart(2, '0');
        }
        targetTime2_h = Math.round(decimalPart(targetTime2_h / 24) * 24);
        $('.expectedTime4').html(targetTime2_h + ':' + targetTime2_m);
        
        /* Xにポストボタン */
        var title = $("h1").text();
        
        $('.x').html('<a href="https://twitter.com/intent/tweet?url=' + location.href + '&text=' + title + 'のゴールタイムは'+ targetTime_h.toString().padStart(2, '0') + ':' + targetTime_m.toString().padStart(2, '0') + 'です！%0a（Performance index : '+ performanceIndex +'）%0a" data-url="' + location.href + '" target="_blank">タイムをXにポスト</a>');
    }else{
        alert('Performance indexを入力してください。')
    }
}
 
 
$('.targetTime input[type="button"]').click(function() {
    tt();
    var position = $('.result').offset().top;
    $('body,html').animate({scrollTop:position}, 400, 'swing');
    return false;
});

function tt(){
    mode = 'tt';
    
    targetTime_h = $('.targetTime .targetTime_h').val();
    targetTime_m = $('.targetTime .targetTime_m').val();
    
    targetTime = targetTime_h * 3600 + targetTime_m * 60;
    performanceIndex = Math.round(44966340 / targetTime);

    if(targetTime_h.length !== 0 && targetTime_m.length !== 0){
        var sec = [cat1_sec1, cat1_sec2, cat1_sec3];
        
        var expectedTime_sec_h = [expectedTime_sec1_h, expectedTime_sec2_h, expectedTime_sec3_h, expectedTime_sec4_h];
        
        var expectedTime_sec_m = [expectedTime_sec1_m, expectedTime_sec2_m, expectedTime_sec3_m, expectedTime_sec4_m];
        
        var expectedTime_sec_s = [expectedTime_sec1_s, expectedTime_sec2_s, expectedTime_sec3_s, expectedTime_sec4_s];
        
        for (let i = 1; i <= sec.length; i++) {
            expectedTime_sec_h[i - 1] = Math.floor((targetTime) * sec[i - 1] / 3600);
            expectedTime_sec_m[i - 1] = Math.floor((targetTime) * sec[i - 1] / 60) - Math.floor((targetTime) * sec[i - 1] / 3600) * 60;
            num = (targetTime) * sec[i - 1] / 60;
            expectedTime_sec_s[i - 1] = Math.floor(decimalPart(num) * 60);
            $('.expectedTime_sec'+ i +' td').html(expectedTime_sec_h[i - 1].toString().padStart(2, '0') + ':' + expectedTime_sec_m[i - 1].toString().padStart(2, '0') + ':' + expectedTime_sec_s[i - 1].toString().padStart(2, '0'));
            
            
            expectedTime_h = expectedTime_sec_h[i - 1] + startTime_h;
            expectedTime_m = expectedTime_sec_m[i - 1] + startTime_m;
            if(expectedTime_m >= 60){
                expectedTime_m = (expectedTime_m - 60).toString().padStart(2, '0');
                expectedTime_h = expectedTime_h + 1;
            }else{
                expectedTime_m = expectedTime_m.toString().padStart(2, '0');
            }
            expectedTime_h = Math.round(decimalPart(expectedTime_h / 24) * 24);
            $('.expectedTime'+ i).html(expectedTime_h + ':' + expectedTime_m);
        }
        $('.expectedTime_sec4 td').html(targetTime_h.toString().padStart(2, '0') + ':' + targetTime_m.toString().padStart(2, '0') + ':00');
        
        targetTime2_h = parseFloat(targetTime_h) + startTime_h;
        targetTime2_m = parseFloat(targetTime_m) + startTime_m;
        if(targetTime2_m >= 60){
            targetTime2_m = (targetTime2_m - 60).toString().padStart(2, '0');
            targetTime2_h = targetTime2_h + 1;
        }else{
            targetTime2_m = targetTime2_m.toString().padStart(2, '0');
        }
        targetTime2_h = Math.round(decimalPart(targetTime2_h / 24) * 24);
        $('.expectedTime4').html(targetTime2_h + ':' + targetTime2_m);
        
        /* Xにポストボタン */
        
        var title = $("h1").text();
        
        $('.x').html('<a href="https://twitter.com/intent/tweet?url=' + location.href + '&text=' + title + 'のゴールタイムは'+ targetTime_h.toString().padStart(2, '0') + ':' + targetTime_m.toString().padStart(2, '0') + 'です！%0a（Performance index : '+ performanceIndex +'）%0a" data-url="' + location.href + '" target="_blank">タイムをXにポスト</a>');
    }else{
        alert('予想ゴールタイムを入力してください。')
    }
}

function decimalPart(num){
  numStr = num+'';
  dotIdx  = numStr.indexOf("."),
  result  = "0." + (dotIdx > -1 ? numStr.substring(dotIdx + 1) : "0");
  return  parseFloat( ((num>0)?'+':'-') + result );
}

$(".startTime select").change(function() {
    if(mode == 'pi'){
        pi();
    }else if(mode == 'tt'){
        tt();
    }
});

});


// 画面キャプチャー
$(document).on('click', '#download-btn', () => {
  html2canvas(document.querySelector('.target'), {
    }).then(canvas => {
      canvas.toBlob(blob => {
        $("#download").attr('download', 'ontake100_2024_100mile.png').attr('href', window.URL.createObjectURL(blob));
        $('a#download')[0].click();
    })
  })
})