/*******************************************************************************\
Countdown Timer JavaScript Module
Version 2.4.2 (kept in step with fergcorp_countdownTimer.php)
Copyright (c) 2007-2010 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 _n(singular, plural, count){
if(count == 1){
return singular;
}
else{
return plural;
}
}
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);

if(document.getElementById(fergcorp_countdownTimer_js_events[i]["id"]) != null) {
	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(targetTime, nowTime, getOptions){
var rollover = 0;
var vars = '';
var sigNumHit = false;
var totalTime = 0;
var nowDate = nowTime;
var targetDate = targetTime;
var s = '';
var nowYear = nowDate.getFullYear();
var nowMonth = nowDate.getMonth() + 1;
var nowDay = nowDate.getDate();
var nowHour = nowDate.getHours();
var nowMinute = nowDate.getMinutes();
var nowSecond = nowDate.getSeconds();
var targetYear = targetDate.getFullYear();
var targetMonth = targetDate.getMonth() + 1;
var targetDay = targetDate.getDate();
var targetHour = targetDate.getHours();
var targetMinute = targetDate.getMinutes();
var targetSecond = targetDate.getSeconds();
var resultantYear = targetYear - nowYear;
var resultantMonth = targetMonth - nowMonth;
var resultantDay = targetDay - nowDay;
var resultantHour = targetHour - nowHour;
var resultantMinute = targetMinute - nowMinute;
var resultantSecond = targetSecond - nowSecond;
if(resultantSecond < 0){
resultantMinute--;
resultantSecond = 60 + resultantSecond;
}
if(resultantMinute < 0){
resultantHour--;
resultantMinute = 60 + resultantMinute;
}
if(resultantHour < 0){
resultantDay--;
resultantHour = 24 + resultantHour;
}
if(resultantDay < 0){
resultantMonth--;
resultantDay = resultantDay + 32 - new Date(nowYear, nowMonth-1, 32).getDate();
}
if(resultantMonth < 0){
resultantYear--;
resultantMonth = resultantMonth + 12;
}
//Year
if(getOptions['showYear']){
if(sigNumHit || !getOptions['stripZero'] || resultantYear){
s = sprintf(_n(fergcorp_countdownTimer_js_language['year'], fergcorp_countdownTimer_js_language['years'], resultantYear), resultantYear) + ' ';
sigNumHit = true;
}
}
else{
rollover = resultantYear*31536000;
}
//Month	
if(getOptions['showMonth']){
if(sigNumHit || !getOptions['stripZero'] || (resultantMonth + parseInt(rollover/2628000)) ){
resultantMonth = resultantMonth + parseInt(rollover/2628000);
s = s + sprintf(_n(fergcorp_countdownTimer_js_language['month'], fergcorp_countdownTimer_js_language['months'], resultantMonth), resultantMonth) + ' ';
rollover = rollover - parseInt(rollover/2628000)*2628000;
sigNumHit = true;
}
}
else{
//If we don't want to show months, let's just calculate the exact number of seconds left since all other units of time are fixed (i.e. months are not a fixed unit of time)		
totalTime = parseInt(targetTime.getTime() - nowTime.getTime())/1000;
//If we showed years, but not months, we need to account for those.
if(getOptions['showYear']){
totalTime = totalTime - resultantYear*31536000;
}
//Re calculate the resultant times
resultantWeek = 0;//parseInt( totalTime/(86400*7) );
resultantDay = parseInt( totalTime/86400 );
resultantHour = parseInt( (totalTime - resultantDay*86400)/3600 );
resultantMinute = parseInt( (totalTime - resultantDay*86400 - resultantHour*3600)/60 );
resultantSecond = parseInt( (totalTime - resultantDay*86400 - resultantHour*3600 - resultantMinute*60) );
//and clear any rollover time
rollover = 0;
}
//Week (weeks are counted differently becuase we can just take 7 days and call it a week...so we do that)
if(getOptions['showWeek']){
if(sigNumHit || !getOptions['stripZero'] || parseInt( (resultantDay + parseInt(rollover/86400) )/7)){
resultantDay = resultantDay + parseInt(rollover/86400);
s = s + sprintf(_n(fergcorp_countdownTimer_js_language['week'], fergcorp_countdownTimer_js_language['weeks'], (parseInt( (resultantDay + parseInt(rollover/86400) )/7))), (parseInt( (resultantDay + parseInt(rollover/86400) )/7))) + ' ';
rollover = rollover - parseInt(rollover/86400)*86400;
resultantDay = resultantDay - parseInt( (resultantDay + parseInt(rollover/86400) )/7 )*7;
sigNumHit = true;
}
}
//Day
if(getOptions['showDay']){
if(sigNumHit || !getOptions['stripZero'] || (resultantDay + parseInt(rollover/86400)) ){
resultantDay = resultantDay + parseInt(rollover/86400);
s = s + sprintf(_n(fergcorp_countdownTimer_js_language['day'], fergcorp_countdownTimer_js_language['days'], resultantDay), resultantDay) + ' ';
rollover = rollover - parseInt(rollover/86400)*86400;
sigNumHit = true;
}
}
else{
rollover = rollover + resultantDay*86400;
}
//Hour
if(getOptions['showHour']){
if(sigNumHit || !getOptions['stripZero'] || (resultantHour + parseInt(rollover/3600)) ){
resultantHour = resultantHour + parseInt(rollover/3600);
s = s + sprintf(_n(fergcorp_countdownTimer_js_language['hour'], fergcorp_countdownTimer_js_language['hours'], resultantHour), resultantHour) + ' ';
rollover = rollover - parseInt(rollover/3600)*3600;
sigNumHit = true;
}
}
else{
rollover = rollover + resultantHour*3600;
}
//Minute
if(getOptions['showMinute']){
if(sigNumHit || !getOptions['stripZero'] || (resultantMinute + parseInt(rollover/60)) ){
resultantMinute = resultantMinute + parseInt(rollover/60);
s = s + sprintf(_n(fergcorp_countdownTimer_js_language['minute'], fergcorp_countdownTimer_js_language['minutes'], resultantMinute), resultantMinute) + ' ';
rollover = rollover - parseInt(rollover/60)*60;
sigNumHit = true;
}
}
else{
rollover = rollover + resultantMinute*60;
}
//Second
if(getOptions['showSecond']){
s = s + sprintf(_n(fergcorp_countdownTimer_js_language['second'], fergcorp_countdownTimer_js_language['seconds'], resultantSecond), resultantSecond) + ' ';
}
//Catch blank statements
if(s==''){
if(getOptions['showSecond']){
s = sprintf(fergcorp_countdownTimer_js_language['seconds'], 0);
}
else if(getOptions['showMinute']){
s = sprintf(fergcorp_countdownTimer_js_language['minutes'], 0);
}
else if(getOptions['showHour']){
s = sprintf(fergcorp_countdownTimer_js_language['hours'], 0);
}	
else if(getOptions['showDay']){
s = sprintf(fergcorp_countdownTimer_js_language['days'], 0);
}
else if(getOptions['showWeek']){
s = sprintf(fergcorp_countdownTimer_js_language['weeks'], 0);
}
else if(getOptions['showMonth']){
s = sprintf(fergcorp_countdownTimer_js_language['months'], 0);
}
else{
s = sprintf(fergcorp_countdownTimer_js_language['years'], 0);
}
}
return s.replace(/(,? *)$/, ""); //...and return the result (a string)
}