/*******************************************************************************\
Countdown Timer JavaScript Module
Version 2.2.5 (kept in step with fergcorp_countdownTimer.php)
Copyright (c) 2007-2008 Andrew Ferguson
---------------------------------------------------------------------------------
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
\*******************************************************************************/

function rtrim(stringToTrim) {
    return stringToTrim.replace(/..$/,"");
}

function fergcorp_countdownTimer_js ()
{
    var r = 0;
    for (var i=0; i < fergcorp_countdownTimer_js_events.length; i++)
    {
	var nowDate = new Date();
	var targetDate = new Date(fergcorp_countdownTimer_js_events[i]["targetDate"]*1000);
	//alert(document.getElementById(fergcorp_countdownTimer_js_events[i]["id"]).innerHTML);
	if ((targetDate - nowDate) < 0)
	{
	    document.getElementById(fergcorp_countdownTimer_js_events[i]["id"]).innerHTML = sprintf(fergcorp_countdownTimer_js_language['ago'], fergcorp_countdownTimer_fuzzyDate(nowDate, targetDate, getOptions));                        
	}
	else if ((targetDate - nowDate) >= 0 )
	{
	    document.getElementById(fergcorp_countdownTimer_js_events[i]["id"]).innerHTML = sprintf(fergcorp_countdownTimer_js_language['in'],fergcorp_countdownTimer_fuzzyDate(targetDate, nowDate, getOptions));
	}
    }
        
    window.setTimeout('fergcorp_countdownTimer_js()', 1000);
}


function fergcorp_countdownTimer_fuzzyDate(targetDate, nowDate, getOptions)
{
    // As parts of the date difference are formatted into string data, refDate is updated to reflect the change.  For instance, when measuring the time difference between 2002-3-11 and 2010-1-7, if years are displayed, there will be a calculation that there's seven full years in between those two dates, plus some additional time...  refDate will start at 2002-3-11 and be updated to 2009-3-11 (seven full years advance) in order to account for that seven years.
    var refDate = new Date(nowDate);
    var vars = '';
    var sigNumHit = false;

    var s = '';
        
//Year
    if (getOptions['showYear'])
    {
	var resultantYear = targetDate.getFullYear() - nowDate.getFullYear();
	refDate.setFullYear(targetDate.getFullYear());

	// If target occurs earlier in the year than "now", then we need to back off by one year...
	if (refDate.getTime() > targetDate.getTime())
	{
	    refDate.setFullYear(targetDate.getFullYear() - 1);
	    resultantYear -= 1;
	}

	if (sigNumHit || !getOptions['stripZero'] || resultantYear)
	{
	    if (resultantYear == 1)
	    {
		s = sprintf(fergcorp_countdownTimer_js_language['year'], resultantYear) + ' ';
	    } else{
		s = sprintf(fergcorp_countdownTimer_js_language['years'], resultantYear) + ' ';
	    }
	    sigNumHit = true;
	}
    }

//Month 
    if (getOptions['showMonth'])
    {
	var resultantMonth = (((targetDate.getFullYear() - refDate.getFullYear()) * 12) +
			      (targetDate.getMonth() - refDate.getMonth()));
	refDate.setMonth(targetDate.getMonth());
	refDate.setFullYear(targetDate.getFullYear());
	if (refDate.getTime() > targetDate.getTime())
	{
	    resultantMonth -= 1;
	    refDate.setMonth(targetDate.getMonth() - 1);
	}

	if (sigNumHit || !getOptions['stripZero'] || resultantMonth)
	{
	    if (resultantMonth==1)
	    {
		s = s + sprintf(fergcorp_countdownTimer_js_language['month'], resultantMonth) + ' ';
	    } else {
		s = s + sprintf(fergcorp_countdownTimer_js_language['months'], resultantMonth) + ' ';
	    }
	    sigNumHit = true;
	}
    }

//Week (weeks are counted differently becuase we can just take 7 days and call it a week...so we do that)
    if (getOptions['showWeek'])
    {
	var weekCount = parseInt((targetDate.getTime() - refDate.getTime()) / (1000 * 3600 * 24 * 7));
	refDate.setTime(refDate.getTime() + (weekCount * 1000 * 3600 * 24 * 7));
	
	if (sigNumHit || !getOptions['stripZero'] || weekCount)
	{
	    if (weekCount == 1)
	    {
		s = s + sprintf(fergcorp_countdownTimer_js_language['week'], weekCount) + ' ';
	    } else{
		s = s + sprintf(fergcorp_countdownTimer_js_language['weeks'], weekCount) + ' ';
	    }
	    sigNumHit = true;
	}
    }
        
//Day
    if (getOptions['showDay'])
    {
	var resultantDay = parseInt((targetDate.getTime() - refDate.getTime()) / (1000 * 3600 * 24));
	refDate.setTime(refDate.getTime() + (resultantDay * 1000 * 3600 * 24));
	if (sigNumHit || !getOptions['stripZero'] || resultantDay){
	    if (resultantDay == 1)
	    {
		s = s + sprintf(fergcorp_countdownTimer_js_language['day'], resultantDay) + ' ';
	    } else {
		s = s + sprintf(fergcorp_countdownTimer_js_language['days'], resultantDay) + ' ';
	    }
	    sigNumHit = true;
	}
    }
        
//Hour
    if (getOptions['showHour'])
    {
	var resultantHour = parseInt((targetDate.getTime() - refDate.getTime()) / (1000 * 3600));
	refDate.setTime(refDate.getTime() + (resultantHour * 1000 * 3600));

	if (sigNumHit || !getOptions['stripZero'] || resultantHour){
	    //if (resultantHour==1){
	    //s = s + sprintf(fergcorp_countdownTimer_js_language['hour'], resultantHour) + ' ';
	    //} else{
	    //s = s + sprintf(fergcorp_countdownTimer_js_language['hours'], resultantHour) + ' ';
	    //}
	    s = s + resultantHour;
	    sigNumHit = true;
	}
    }
        
//Minute
    if (getOptions['showMinute'])
    {
	var resultantMinute = parseInt((targetDate.getTime() - refDate.getTime()) / (1000 * 60));
	refDate.setTime(refDate.getTime() + (resultantMinute * 1000 * 60));

	if (sigNumHit || !getOptions['stripZero'] || resultantMinute)
	{
	    //if (resultantMinute==1){
	    //s = s + sprintf(fergcorp_countdownTimer_js_language['minute'], resultantMinute) + ' ';
	    //} else{
	    //s = s + sprintf(fergcorp_countdownTimer_js_language['minutes'], resultantMinute) + ' ';
	    //}
	    s = s + ':' + ((resultantMinute < 10)?'0':'') + resultantMinute;
	    sigNumHit = true;
	}
    }
        
//Second
    if (getOptions['showSecond'])
    {
	var resultantSecond = parseInt((targetDate.getTime() - refDate.getTime()) / 1000);
	refDate.setTime(refDate.getTime() + (resultantSecond * 1000));

//if (resultantSecond==1){
//s = s + sprintf(fergcorp_countdownTimer_js_language['second'], resultantSecond) + ' ';
//} else{
//s = s + sprintf(fergcorp_countdownTimer_js_language['seconds'], resultantSecond) + ' ';
//}
	s = s + ':' + ((resultantSecond < 10)?'0':'') + resultantSecond;
    }
        
    return s.replace(/(,? *)$/, ""); //...and return the result (a string)
}
