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

Countdown Timer JavaScript Module

Version 2.3.1 (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(targetTime, nowTime, getOptions){

	var rollover = 0;

	var vars = '';

	var sigNumHit = false;



	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){

			if(resultantYear==1){

				s = sprintf(fergcorp_countdownTimer_js_language['year'], resultantYear) + ' ';

			} else{

				s = sprintf(fergcorp_countdownTimer_js_language['years'], resultantYear) + ' ';

			}

			sigNumHit = true;

		}

	}

	else{

		rollover = resultantYear*31536000;

	}



	//Month	

	if(getOptions['showMonth']){

		if(sigNumHit || !getOptions['stripZero'] || resultantMonth){

			resultantMonth = resultantMonth + parseInt(rollover/2628000);

			if(resultantMonth==1){

				s = s + sprintf(fergcorp_countdownTimer_js_language['month'], resultantMonth) + ' ';

			} else{

				s = s + sprintf(fergcorp_countdownTimer_js_language['months'], resultantMonth) + ' ';

			}

			rollover = rollover - parseInt(rollover/2628000)*2628000;

			sigNumHit = true;

		}

	}

	else{

		rollover = rollover + resultantMonth*2592000;

	}

	

	//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);

			if((parseInt( (resultantDay + parseInt(rollover/86400) )/7))==1){

				s = s + sprintf(fergcorp_countdownTimer_js_language['week'], (parseInt( (resultantDay + parseInt(rollover/86400) )/7))) + ' ';

			} else{

				s = s + sprintf(fergcorp_countdownTimer_js_language['weeks'], (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){

			resultantDay = resultantDay + parseInt(rollover/86400);

			if(resultantDay==1){

				s = s + sprintf(fergcorp_countdownTimer_js_language['day'], resultantDay) + ' ';

			} else{

				s = s + sprintf(fergcorp_countdownTimer_js_language['days'], resultantDay) + ' ';

			}

			rollover = rollover - parseInt(rollover/86400)*86400;

			sigNumHit = true;

		}

	}

	else{

		rollover = rollover + resultantDay*86400;

	}

	

	//Hour

	if(getOptions['showHour']){

		if(sigNumHit || !getOptions['stripZero'] || resultantHour){

			resultantHour = resultantHour + parseInt(rollover/3600);

			if(resultantHour==1){

				s = s + sprintf(fergcorp_countdownTimer_js_language['hour'], resultantHour) + ' ';

			} else{

				s = s + sprintf(fergcorp_countdownTimer_js_language['hours'], resultantHour) + ' ';

			}

			rollover = rollover - parseInt(rollover/3600)*3600;

			sigNumHit = true;

		}

	}

	else{

		rollover = rollover + resultantHour*3600;

	}

	

	//Minute

	if(getOptions['showMinute']){

		if(sigNumHit || !getOptions['stripZero'] || resultantMinute){

			resultantMinute = resultantMinute + parseInt(rollover/60);

			if(resultantMinute==1){

				s = s + sprintf(fergcorp_countdownTimer_js_language['minute'], resultantMinute) + ' ';

			} else{

				s = s + sprintf(fergcorp_countdownTimer_js_language['minutes'], resultantMinute) + ' ';

			}

			rollover = rollover - parseInt(rollover/60)*60;

			sigNumHit = true;

		}

	}

	else{

		rollover = rollover + resultantMinute*60;

	}

	

	//Second

	if(getOptions['showSecond']){

		if(resultantSecond==1){

			s = s + sprintf(fergcorp_countdownTimer_js_language['second'], resultantSecond) + ' ';

		} else{

			s = s + sprintf(fergcorp_countdownTimer_js_language['seconds'], 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)

}