/*******************************************************************************\
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);
		//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(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)
}
