﻿var timestamp;
var localTimestamp;
var ratio;
var formula;
var mooncount;
var offset2;
var moonstart;
var newmoon;
var waxcrescent;
var firstquarter;
var waxgibbous;
var fullmoon;
var wangibbous;
var lastquarter;
var wancrescent;
var currentMoon = '';
var largeMoon = '';
function RunEorzeaClock(serverTimestamp) {

	serverTimestamp = new Date().getTime() / 1000;
    //Adjusting the time
    serverTimestamp = (serverTimestamp + 5) * 1000;
    //Setting timestamp to that of the server
    timestamp = serverTimestamp;
    //Settting local time stamp to current dates time
    localTimestamp = new Date().getTime();
    updateEorzeaTime();

    //Information for moonphases
    ratio = 1440 / 70;
    formula = 1000 * 60 * 60 * 24 * 4 / ratio;
    mooncount = new Date();
    offset2 = 21 - mooncount.getTimezoneOffset() / 60;
    moonstart = new Date(2010, 7, 15, offset2, 20, 0);

    newmoon = new Date(moonstart.getTime());
    waxcrescent = new Date(moonstart.getTime() + formula);
    firstquarter = new Date(moonstart.getTime() + formula * 2);
    waxgibbous = new Date(moonstart.getTime() + formula * 3);
    fullmoon = new Date(moonstart.getTime() + formula * 4);
    wangibbous = new Date(moonstart.getTime() + formula * 5);
    lastquarter = new Date(moonstart.getTime() + formula * 6);
    wancrescent = new Date(moonstart.getTime() + formula * 7);
    UpdateMoons();

    LeveRefresh();

}

function updateEorzeaTime() {

    var now = new Date();

    //Converting current time to Eorzean
    //getTime function returns UNIX UTC timestamp
    var tmpTime = ((timestamp + now.getTime() - localTimestamp) / 1000) * 4188615725;

    var EorzeanYear = parseInt(tmpTime / 562949953421312);
    EorzeanYear -= 9519;
    EorzeanYear /= 12;
    EorzeanYear = parseInt(EorzeanYear);

    var EorzeanMonth = parseInt(tmpTime / 562949953421312);
    EorzeanMonth = EorzeanMonth % 12;
    EorzeanMonth++;
    EorzeanMonth = parseInt(EorzeanMonth);

    var EorzeanDay = parseInt(tmpTime / 17592186044416);
    EorzeanDay &= 31;
    EorzeanDay++;
    EorzeanDay = parseInt(EorzeanDay);

    var tmpTime = ((timestamp + now.getTime() - localTimestamp) / 1000) * 24
    var EorzeanHour = parseInt(tmpTime / 4200);
    EorzeanHour %= 24;

    tmpTime = ((timestamp + now.getTime() - localTimestamp) / 1000) * 1440;
    var EorzeanMinute = parseInt(tmpTime / 4200);
    EorzeanMinute -= 10;
    EorzeanMinute %= 60;

    //adding '0' before hours and minutes if less than 10
    if (EorzeanHour < 10) EorzeanHour = "0" + EorzeanHour;
    if (EorzeanMinute < 10) EorzeanMinute = "0" + EorzeanMinute;

    document.getElementById("EorzeaTime").innerHTML = 'Eorzea Time: ' + EorzeanHour + ':' + EorzeanMinute + ', ' + EorzeanMonth + '/' + EorzeanDay + '/' + EorzeanYear + ' ' + currentMoon;
	if (document.getElementById("CurrentLargeMoon"))
    		document.getElementById("CurrentLargeMoon").innerHTML = largeMoon;

    t = setTimeout('updateEorzeaTime()', 1000);
}

function UpdateMoons() {

    //gets the value per moon
    var moon1 = LunarCalendarRefresh(newmoon, 'moon1');
    var moon2 = LunarCalendarRefresh(waxcrescent, 'moon2');
    var moon3 = LunarCalendarRefresh(firstquarter, 'moon3');
    var moon4 = LunarCalendarRefresh(waxgibbous, 'moon4');
    var moon5 = LunarCalendarRefresh(fullmoon, 'moon5');
    var moon6 = LunarCalendarRefresh(wangibbous, 'moon6');
    var moon7 = LunarCalendarRefresh(lastquarter, 'moon7');
    var moon8 = LunarCalendarRefresh(wancrescent, 'moon8');

    //transfer the content to the dom respectively
    if (document.getElementById("lunar_m1"))
        document.getElementById("lunar_m1").innerHTML = moon1;
    if (document.getElementById("lunar_m2"))
        document.getElementById("lunar_m2").innerHTML = moon2;
    if (document.getElementById("lunar_m3"))
        document.getElementById("lunar_m3").innerHTML = moon3;
    if (document.getElementById("lunar_m4"))
        document.getElementById("lunar_m4").innerHTML = moon4;
    if (document.getElementById("lunar_m5"))
        document.getElementById("lunar_m5").innerHTML = moon5;
    if (document.getElementById("lunar_m6"))
        document.getElementById("lunar_m6").innerHTML = moon6;
    if (document.getElementById("lunar_m7"))
        document.getElementById("lunar_m7").innerHTML = moon7;
    if (document.getElementById("lunar_m8"))
        document.getElementById("lunar_m8").innerHTML = moon8;

    //if moons' value is default then we need much faster refresh to get the proper time the soonest
    if (moon1 == '00 : 00 : 00' && moon2 == '00 : 00 : 00' && moon3 == '00 : 00 : 00' && moon4 == '00 : 00 : 00' && moon5 == '00 : 00 : 00' && moon6 == '00 : 00 : 00' && moon7 == '00 : 00 : 00' && moon8 == '00 : 00 : 00')
        m = setTimeout('UpdateMoons()', 1);
    else
        m = setTimeout('UpdateMoons()', 500);
}

function LunarCalendarRefresh(adjust, moon) {
    //00 : 00 : 00 set as the default value
    var value = '00 : 00 : 00';
    var now = new Date();
    // difference will be the countdown time for each moon
    difference = adjust.getTime() - (timestamp + now.getTime() - localTimestamp);
    if (difference > 0) {
        //translate to hours
        hours = Math.floor(difference / (60 * 60 * 1000));
        difference -= hours * 60 * 60 * 1000;
        //translate to min
        minutes = Math.floor(difference / (60 * 1000));
        difference -= minutes * 60 * 1000;
        //translate to sec
        seconds = Math.floor(difference / 1000);

        //if single digit then add padding-left '0'
        if (hours < 10) hours = "0" + hours;
        if (minutes < 10) minutes = "0" + minutes;
        if (seconds < 10) seconds = "0" + seconds;

        value = hours + " : " + minutes + " : " + seconds;
    }
    else {
        if ((adjust.getTime() + formula) < (timestamp + now.getTime() - localTimestamp)) {
            temp = adjust.getTime();
            adjust.setTime(temp + formula * 8);
        }
        else {
            //if difference <= 0 then the moon will be the current moon
            value = '<span class="current_moon">&nbsp&nbsp;&nbsp;&nbsp;Current&nbsp;&nbsp;&nbsp;</span>';
		currentMoon = '<img src="images/moons/' + moon + '.png" style="width:15px;height:15px;vertical-align:middle">';
		largeMoon = '<img src="images/moons/' + moon + '.png" style="width:45px;height:45px;vertical-align:middle">';


        }
    }
    return value;
}

function LeveRefresh() {
    var now = new Date();
    //compute time passed between a UNIX timestamp when we had a guild refresh and the current UNIX timestamp
    var difference = (timestamp + now.getTime() - localTimestamp) - Date.UTC(2010, 11, 10, 12);
    if (isNaN(difference))
        return;

    //resets happens every 36 hrs, so find out how many resets we had in the passed time
    var resetsSoFar = Math.floor(difference / (36 * 60 * 60 * 1000));
    //compute the next reset
    var nextReset = (resetsSoFar + 1) * 36 * 60 * 60 * 1000;
    //next reset will occur in
    difference = nextReset - difference;

    //translate to hours
    var hours = Math.floor(difference / (60 * 60 * 1000));
    difference -= hours * 60 * 60 * 1000;
    //translate to min
    var minutes = Math.floor(difference / (60 * 1000));
    difference -= minutes * 60 * 1000;
    //translate to sec
    var seconds = Math.floor(difference / 1000);

    //if single digit then add padding-left '0'
    if (hours < 10) hours = "0" + hours;
    if (minutes < 10) minutes = "0" + minutes;
    if (seconds < 10) seconds = "0" + seconds;

    //refresh the lunar clock with current value
    if (document.getElementById("leverefreshdiv"))
        document.getElementById("leverefreshdiv").innerHTML = hours + "h " + minutes + "m " + seconds + "s";

    setTimeout('LeveRefresh()', 200);
}

