/*******************************************************************************\

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)

}