<?php

# CMSMS - CMS Made Simple
#
# (c)2004 by Ted Kulp (wishy@users.sf.net)
#
# This project's homepage is: http://cmsmadesimple.org
#
# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# http://en.wikipedia.org/wiki/List_of_holidays_by_country

function smarty_cms_function_holidays($params, &$smarty) {

	$params['year'] = empty($params['year']) ? date('Y') : $params['year'];
	$params['lang'] = empty($params['lang']) ? 'nl_NL' : $params['lang'];
	$holidays = array();


	if ( ctype_digit($params['year']) && $params['year'] >= 1970 && $params['year'] <= 2037 )
	{
		$easterdate = easter_date($params['year']);
		$easterday = date("d", $easterdate);        
		$eastermonth = date("m", $easterdate);        


		switch($params['lang'])
		{
			case 'de_DE':
				$holidays[$params['year'].'-01-01'] = 'Neujahrstag';
				$holidays[$params['year'].'-01-06'] = iconv("ISO-8859-1", "UTF-8", 'Heilige Drei Könige');
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday-2,$params['year']))] = 'Karfreitag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+1,$params['year']))] = 'Ostermontag';
				$holidays[$params['year'].'-05-01'] = 'Tag der Arbeit';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+39,$params['year']))] = 'Christi Himmelfahrt';
				//$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+49,$params['year']))] = 'Pfingsten';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+50,$params['year']))] = 'Pfingstmontag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+60,$params['year']))] = 'Fronleichnam';
				$holidays[$params['year'].'-10-03'] = 'Tag der Deutschen Einheit';
				$holidays[$params['year'].'-10-31'] = 'Reformationstag';
				$holidays[$params['year'].'-11-01'] = 'Allerheiligen';
				$holidays[$params['year'].'-12-25'] = 'Weihnachtstag';
				$holidays[$params['year'].'-12-26'] = 'Zweiter Weihnachtsfeiertag';
				break;

			case 'en_US':
				$holidays[$params['year'].'-01-01'] = 'New Years Day';
				$holidays[date('Y-m-d', mktime(0,0,0,1,(8-Date('w',mktime (0,0,0,1,1,$params['year'])))%7+15,$params['year']))] = 'Martin Luther King Day';
				$holidays[$params['year'].'-01-'.((8-Date('w',mktime (0,0,0,1,1,$params['year'])))%7+15)] = 'Martin Luther King Day';
				/*
				if ( $params['year'] % 4 == 0 )
				{
					if ( Date('w',mktime (0,0,0,1,20,$params['year'])) == 0 )
						$holidays[$params['year'].'-01-21'] = 'Inauguration Day'; // not on a sunday
					else
						$holidays[$params['year'].'-01-20'] = 'Inauguration Day';
				}*/
				$holidays[$params['year'].'-02-'.((8-Date('w',mktime (0,0,0,2,1,$params['year'])))%7+15)] = 'Presidents Day';
				$holidays[$params['year'].'-05-'.((7-Date('w',mktime (0,0,0,5,31,$params['year'])))%7+25)] = 'Memorial Day';
				$holidays[$params['year'].'-07-04'] = 'Independence Day';
				$holidays[$params['year'].'-09-'.((8-Date('w',mktime (0,0,0,9,1,$params['year'])))%7+1)] = 'Labor Day';
				$holidays[$params['year'].'-10-'.((8-Date('w',mktime (0,0,0,10,1,$params['year'])))%7+8)] = 'Columbus Day';
				$holidays[$params['year'].'-11-11'] = 'Veterans Day';
				$holidays[$params['year'].'-11-'.((11-Date('w',mktime (0,0,0,11,1,$params['year'])))%7+22)] = 'Thanksgiving';
				$holidays[$params['year'].'-12-25'] = 'Christmas';
				break;

			case 'fr_FR':
				$holidays[$params['year'].'-01-01'] = 'Jour de l\'an';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday-2,$params['year']))] = 'Vendredi Saint';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+1,$params['year']))] = iconv("ISO-8859-1", "UTF-8", 'Lundi de Pâques');
				$holidays[$params['year'].'-05-01'] = iconv("ISO-8859-1", "UTF-8", 'Fête du Travail');
				$holidays[$params['year'].'-05-08'] = 'Victoire 1945';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+39,$params['year']))] = 'Ascension';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+50,$params['year']))] = iconv("ISO-8859-1", "UTF-8", 'Lundi de Pentecôte');
				$holidays[$params['year'].'-07-14'] = iconv("ISO-8859-1", "UTF-8", '14 Juillet - Fête Nationale');
				$holidays[$params['year'].'-08-15'] = 'Assomption';
				$holidays[$params['year'].'-11-01'] = 'Toussaint';
				$holidays[$params['year'].'-11-11'] = 'Armistice 1918';
				$holidays[$params['year'].'-12-25'] = iconv("ISO-8859-1", "UTF-8", 'Noël');
				break;

			case 'fr_BE':
			case 'nl_BE':
				$ln = $params['lang'] == 'nl_BE';
				$holidays[$params['year'].'-01-01'] = $ln ? 'Nieuwjaarsdag' : 'Nouvel An';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday,$params['year']))] = $ln ? 'Pasen' : iconv("ISO-8859-1", "UTF-8", 'Pâques');
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+1,$params['year']))] = $ln ? 'Paasmaandag' : iconv("ISO-8859-1", "UTF-8", 'Lundi de Pâques');
				$holidays[$params['year'].'-05-01'] = $ln ? 'Dag van de arbeid' : iconv("ISO-8859-1", "UTF-8", 'Fête du Travail');
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+39,$params['year']))] = $ln ? 'Onze Lieve Heer hemelvaart' : 'Ascension';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+49,$params['year']))] = $ln ? 'Pinksteren' : iconv("ISO-8859-1", "UTF-8", 'Pentecôte');
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+50,$params['year']))] = $ln ? 'Pinkstermaandag' : 'Lundi de Pentecôte';
				$holidays[$params['year'].'-07-21'] = $ln ? 'Nationale feestdag' : iconv("ISO-8859-1", "UTF-8", 'Fête nationale');
				$holidays[$params['year'].'-08-15'] = $ln ? 'Onze Lieve Vrouw hemelvaart' : 'Assomption';
				$holidays[$params['year'].'-11-01'] = $ln ? 'Allerheiligen' : 'Toussaint';
				$holidays[$params['year'].'-11-11'] = $ln ? 'Wapenstilstand' : 'Jour de l\'armistice';
				$holidays[$params['year'].'-12-25'] = $ln ? 'Kerstmis' : iconv("ISO-8859-1", "UTF-8", 'Noël');;
				break;

			case 'nl_NL':
			Default:
				$holidays[$params['year'].'-01-01'] = 'Nieuwjaarsdag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday-2,$params['year']))] = 'Goede Vrijdag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday,$params['year']))] = 'Eerste Paasdag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+1,$params['year']))] = 'Tweede Paasdag';
				if ( Date('w',mktime (0,0,0,4,30,$params['year'])) == 0 )
					$holidays[$params['year'].'-04-29'] = 'Koninginnedag'; // not on a sunday
				else
					$holidays[$params['year'].'-04-30'] = 'Koninginnedag';
				if ( $params['year'] % 5 == 0 ) $holidays[$params['year'].'-5-5'] = 'Bevrijdingsdag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+39,$params['year']))] = 'Hemelvaartsdag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+49,$params['year']))] = 'Eerste Pinksterdag';
				$holidays[date('Y-m-d', mktime(0,0,0,$eastermonth,$easterday+50,$params['year']))] = 'Tweede Pinksterdag';
				$holidays[$params['year'].'-12-25'] = 'Eerste Kerstdag';
				$holidays[$params['year'].'-12-26'] = 'Tweede Kerstdag';
		}
	}

	$smarty->assign_by_ref('holidays', $holidays);
	//setlocale(LC_TIME, 'nl_NL');
	//strftime('%A, %d. %B %Y');

}


function smarty_cms_help_function_holidays() {
?>

	<h3>What does this do?</h3>
	<p>Calculate dates for Holidays and put them in a Smarty array. This can be used to display a list of Holidays or mark calendar days with their respective Holiday.</p>
	<h3>How do I use it?</h3>
	<p>Insert the tag into your template or page like: {holidays year=2010}</p>
	<p>After this Smarty-call the array-variable {$holidays} will be filled with the holidays and their dates as key.</p>
	<p>If you want to display a list of Holidays, you can put some Smarty-code after the call. For example:</p>
	<pre>
{holidays year=2010}
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Holiday&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;/tr&gt;
{foreach from=$holidays key=holidaydate item=holidayname}
&lt;tr&gt;&lt;td&gt;{$holidayname}&lt;/td&gt;&lt;td&gt;{$holidaydate|date_format:"%A %e %B %Y"}&lt;/td&gt;&lt;/tr&gt;
{/foreach}
&lt;/table&gt;	
	</pre>
	
	<h3>What parameters does it take?</h3>
	<ul>
		<li><em>(optional)</em> <tt>year</tt> - Default is the current year</li>
		<li><em>(optional)</em> <tt>lang</tt> - Locale string like 'nl_NL'. Currently only Dutch (nl_NL), Belgian (nl_BE/fr_BE), French (fr_FR), German (de_DE) and U.S. (en_US) Holidays are supported.</li>
	</ul>
	</p>


<?php
}


function smarty_cms_about_function_holidays() {
?>
	<p>Author: Jos &lt;josvd@live.nl&gt; </p>
	<p>Version: 1.0</p>
	<p>
	Change History:<br />
        <ul>
         <li>1.0 : initial release, Dutch, Belgian, French, German and U.S. Holidays only</li>
        </ul>
	</p>
<?php
}

?>
