var page = document.getElementById('main');
var birthday = new Date("1990-07-25T21:45:00");

var secsPer = {};
secsPer.second = 1;
secsPer.minute = 60;
secsPer.hour = secsPer.minute * 60;
secsPer.day = secsPer.hour * 24;
secsPer.week = secsPer.day * 7;
secsPer.year = secsPer.day * 365.2425;
secsPer.month = secsPer.year /  12;

function cumDiff(t1, t2) {
    // x years, x weeks, x days, x hours, x minutes, x seconds
    let diff = Math.abs(t2 - t1);

    let seconds = diff / 1000;
    let counts = {
        'year': 0,
        'week': 0,
        'day': 0,
        'hour': 0,
        'minute': 0,
        'second': 0
    };

    for (let count in counts) {
        while (seconds >= secsPer[count]) {
            counts[count] += 1;
            seconds -= secsPer[count];
        }
    }
    return counts;
}

function init() {
    page.innerHTML = "";
    var title = document.createElement("h1");
    title.textContent = "How old am I?";
    page.appendChild(title);

    var cumAgeP = document.createElement('p');
    cumAgeP.setAttribute('id', 'cumAge');
    page.appendChild(cumAgeP);

    var countdownTitle = document.createElement("h2");
    countdownTitle.textContent = "How long til my next birthday?";
    page.appendChild(countdownTitle);

    var bdccP = document.createElement('p');
    bdccP.setAttribute('id', 'bdcc');
    page.appendChild(bdccP);

    update();
}

function updateCumAge(t, el) {
    var cumAge = document.createElement("p");
    cumAge.setAttribute('id', 'cumAge');
    cumAge.setAttribute('class', 'cumulative');
    var cumAgeDiff = cumDiff(t, birthday);
    for (let count in cumAgeDiff) {
        if (cumAgeDiff[count] > 0) {
            let dat = document.createElement("span");
            dat.setAttribute('class', 'age');
            dat.textContent = cumAgeDiff[count];
            let postCount = '';
            if (cumAgeDiff[count] > 1) { postCount += 's'; }
            let str = document.createElement('span');
            str.setAttribute('class', 'desc');
            str.textContent = " "+count+postCount;

            cumAge.appendChild(dat);
            cumAge.appendChild(str);
        }
    }
    el.replaceWith(cumAge);
}

function updateBdayCumCountdown(t, el) {
    var bdcc = document.createElement("t");
    bdcc.setAttribute('id', 'bdcc');
    bdcc.setAttribute('class', 'cumulative');
    let yearAdjust = 0;
    if (t.getMonth() > birthday.getMonth()
        || (t.getMonth() == birthday.getMonth()
            && t.getDate() >= birthday.getDate())) {
        yearAdjust = 1;
    }
    var nextBirthday = new Date(
        t.getFullYear() + yearAdjust,
        birthday.getMonth(),
        birthday.getDate());
    bdccDiff = cumDiff(t, nextBirthday);

    for (let count in bdccDiff) {
        if (bdccDiff[count] > 0) {
            let dat = document.createElement("span");
            dat.setAttribute('class', 'countdown');
            dat.textContent = bdccDiff[count];
            let postCount = '';
            if (bdccDiff[count] > 1) { postCount += 's'; }
            if (count !== 'second') { postCount += ', '; }
            let str = document.createTextNode(" "+count+postCount);

            bdcc.appendChild(dat);
            bdcc.appendChild(str);
        }
    }
    el.replaceWith(bdcc);
}

function update() {
    now = new Date();

    updateCumAge(now, document.getElementById('cumAge'));
    updateBdayCumCountdown(now, document.getElementById('bdcc'));
}
