<?php if (!defined('PmWiki')) exit();
/**
	A thumbnail gallery generator for PmWiki
	Written by (c) Petko Yotov 2006-2007

	This script is POSTCARDWARE, if you like it or use it,
	please send me a postcard. Details at
	http://www.pmwiki.org/Profiles/Petko

	This text is written for PmWiki; 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 3 of the License, or
	(at your option) any later version. See pmwiki.php for full details
	and lack of warranty.

	Copyright 2007 Petko Yotov http://5ko.fr
	Copyright 2004-2006 Patrick R. Michaud http://pmwiki.org
*/
# Version date
$RecipeInfo['TimeZones']['Version'] = '2007-10-28d';
SDV($HandleActions['tz'],'HandleSetTZ');
SDV($ActionTitleFmt['tz'],'| $[Select timezone]');
SDV($TzCookieDays, 30);
SDV($TzStoreFmt, '%Y%m%dT%H%M%SZ');

$FmtPV['$LastModifiedStamp'] = '$page["time"]';
$FmtPV['$LastModified'] = 'stamp2markup($page["time"])';
$FmtPV['$CurrentTime'] = 'stamp2markup(time())';
$FmtPV['$TimeZonesVersion'] = "'TimeZones_{$RecipeInfo['TimeZones']['Version']}'";

Markup('datetimeutc', 'block',
  '/\\(:(\\d{8}T\\d{6}(?:Z|[+-]\\d{4}|)|@\\d+):\\)/e',
  "FmtDateTime(\$pagename,'$1')");
Markup('tzform', 'inline',  '/\\(:tzform:\\)/ei',
  "FmtTZform(\$pagename)");

function FmtTZform($pagename)
{
	global $Now, $HTMLHeaderFmt, $TimeFmt;
	$time = gmstrftime('%H:%M', $Now);
	$localtime = (@$_COOKIE['tz_offset']>'')?
		gmstrftime('%H:%M', $Now+60*$_COOKIE['tz_offset']) : $time;
	$fmt = IsEnabled($_COOKIE['FMT'], $TimeFmt);

	$HTMLHeaderFmt['timezone']=<<<EOF
<script type='text/javascript'>
<!--
// Timezone code borrowed from MediaWiki
// in [-]HH:MM format...
function fetchTimezone() {
	// FIXME: work around Safari bug
	var localclock = new Date();
	// returns negative offset from GMT in minutes
	var tzRaw = localclock.getTimezoneOffset();
	var tzHour = Math.floor( Math.abs(tzRaw) / 60);
	var tzMin = Math.abs(tzRaw) % 60;
	var tzString = ((tzRaw >= 0) ? "-" : "")
		+ ((tzHour < 10) ? "0" : "") + tzHour +
		":" + ((tzMin < 10) ? "0" : "") + tzMin;
	return tzString;
}
function guessTimeoffset() {
	document.timeoffset.offset.value = fetchTimezone();
}
//--></script>
EOF;
	$wiki = <<<EOF
<form name='timeoffset' action='{\$ScriptUrl}' method='post'>
<input type='hidden' name='action' value='tz' />
<input type='hidden' name='n' value='{\$FullName}' />
<p>
$[Current UTC time is]: $time.<br/>
$[Your local time is]: $localtime.<br/>
$[Offset] ([-]HH:MM): <input type='text' name='offset' value='$offset' size='10'/>
<input type='button' value='$[Guess from browser]' onclick='guessTimeoffset();'/><br/>
$[Time format]:
<input type='text' name='tzFmt' size='30' value='$fmt'/>
(<a href='http://php.net/strftime' class='ext'>help</a>)
<br/>
<input type='submit' name='save' value='$[Save]'/>
<input type='submit' name='reset' value='$[Revert to defaults]'/>
</p></form>
EOF;

	return Keep(FmtPageName($wiki, $pagename));
}

function stamp2markup($t)
{
	global $TzStoreFmt;
	$func=preg_match("/[^%]Z$/", $TzStoreFmt)? 'gmstrftime':'strftime';
	return "(:".$func($TzStoreFmt,$t).":)";
}
function FmtDateTime($pagename, $stamp)
{
	global $TimeFmt;
	$fmt = IsEnabled($_COOKIE['FMT'], $TimeFmt);
	$time = strtotime($stamp);
	$func='strftime';
	if(@$_COOKIE['tz_offset']>'')
	{
		$time+=60*$_COOKIE['tz_offset'];
		$func='gmstrftime';
	}
	return "<span title='(:$stamp:)'>". $func($fmt, $time) . "</span>";
}
function HandleSetTZ($pagename)
{
	global $HTMLStartFmt,$HTMLEndFmt,$TimeFmt, $TzCookieDays;
	$offset = @$_POST["offset"];
	$tzFMT = IsEnabled($_POST["tzFmt"], @$_COOKIE["FMT"]);
	if(IsEnabled($_POST["save"], 0))
	{
		if(preg_match("/^(\\+|-|)(\\d\\d):(\\d\\d)$/", $offset, $m))
		{
			$minutes =  $m[2]*60+$m[3];
			if($m[1]=='-')$minutes = (-1)*$minutes;
			setcookie('tz_offset', $minutes, strtotime("+$TzCookieDays days"), '/');
		}
		if($tzFMT>'') setcookie('FMT', $tzFMT, strtotime("+$TzCookieDays days"), '/');
		Redirect($pagename);
	}
	elseif(IsEnabled($_POST["reset"], 0))
	{
		setcookie('tz_offset', '0', -1, '/');
		if($tzFMT>'') setcookie('FMT', $TimeFmt, -1, '/');
		Redirect($pagename);
	}
	else
	{
		$wiki = MarkupToHTML($pagename, '(:tzform:)');
		PrintFmt($pagename,$HTMLStartFmt);
		echo $wiki;
		PrintFmt($pagename,$HTMLEndFmt);
	}
}