<?php if (!defined('PmWiki')) exit(); 

$RecipeInfo['datepicker']['1.03'] = '2010-02-09'; 

/*
  pmwiki recipe
  add a datepicker-button to a form
 
  based on javascript-code written by Julian Robichaux -- http://www.nsftools.com ,version 1.5, December 4, 2005
  
  more info see pmwiki.org/Cookbook/Datepicker
  
  author: Knut Alboldt
 
  changes:
    6.2.2010 - first implementation
    7.2.2010 - error corrections:
               - parsing of multiple marksups in one line (greedy match)
               - translation of weekdays and monthnames was missing
    7.2.2010 - error corrections
               - placed css and js into pub/datapicker
               - name of $DatepickerImg file
             - var to decide if the javascript and css code is generated only on datapicker-pages or general
    9.2.2010 - added class="inputbutton" to the <input>-tags 

  t.b.d's:
  - check date values using javascript function datePickerClosed(dateField)
  - try to interpret incomplete date formats like "1." "1.8."  "2.2010" etc
  - add year selector to calendarbox
*/
  
  // @DEBUG(__file__,1);

#-------------
# conguration section - change as you like - but best in you config.php !

# url of where datepicker-files (accessible form webbrowser) are placed (must NOT end with an / )
SDV($DatepickerDirUrl,"$FarmPubDirUrl/datepicker");

# Style of datepicker-box can be changed in these files:
SDV($DatepickerCSS,'datepicker-default.css');

# use image instead of text-button, iconfile must be placed in pub-dir
#SDV($DatepickerImg,""); // dont't use a datapicker image 
SDV($DatepickerImg,"$DatepickerDirUrl/datepickerselect.gif");

# language specific formats

# date formats
# see http://en.wikipedia.org/wiki/Calendar_date#List_of_the_world_locations_by_date_format_in_use
SDV($DatepickerFormat,'d.m.Y');
#SDV($DatepickerFormat,'Ymd'); 
#SDV($DatepickerFormat,'Y-m-d'); HTMLStylesFmt
#SDV($DatepickerFormat,'d-m-Y'); 
#SDV($DatepickerFormat,'d/m/Y'); 
#SDV($DatepickerFormat,'m/d/Y'); 
// these formats must also be defined within function getDateString(dateVal) in file datepicker-nsftool.js !


/* you have to change translations as well (e.g. on page PmWikiDe.XLPageLocal)
*/

# end of user configuration
#-------------

# markup-format: (:datepicker field=FIELDNAME [ button=today|tomorrow ] [ usetextbutton=1 ]:)

Markup('datepicker',
       'directives',
       '/\(:datepicker\s*(.+?):\)/e',
       'datepicker("$1")');

$HTMLHeaderFmt['datepicker'] = "\n<!-- datepicker nsftools -->\n"
    ."<script type='text/javascript' language='JavaScript1.2'>".datepicker_translate()."</script>\n"
    ."<script type='text/javascript' language='JavaScript1.2' src='$DatepickerDirUrl/datepicker.js'></script>\n"
    ."<link rel='stylesheet' type='text/css' href='$DatepickerDirUrl/$DatepickerCSS' />\n"
    ."<!-- datepicker nsftools end -->\n";

function datepicker_translate()
// translate the languagespecific content of the javascript-part
// the corresponding language-specific text has to be translated in a local XLate-Page (page PmWikiXX.XLPageLocal):
/* sample section for german translations:
   # für datepicker
   'select' => 'Datum auswählen'
   'today' => 'heute'
   'tomorrow' => 'morgen'
   'press to select date' => 'Auswahl des Datums aus Kalender'
   'Su' => 'So'
   'Mo' => 'Mo'
   'Tu' => 'Di'
   'We' => 'Mi'
   'Th' => 'Do'
   'Fr' => 'Fr'
   'Sa' => 'Sa'
   'Sunday' => 'Sonntag'
   'Monday' => 'Montag'
   'Tuesday' => 'Dienstag'
   'Wednesday' => 'Mittwoch'
   'Thursday' => 'Donnerstag'
   'Friday' => 'Freitag'
   'January' => 'Januar'
   'February' => 'Februar'
   'March' => 'März'
   'April' => 'Apil'
   'May' => 'Mai'
   'June' => 'Juni'
   'July' => 'Juli'
   'August' => 'August'
   'September' => 'September'
   'October' => 'Oktober'
   'November' => 'November'
   'December' => 'Dezember'
*/
{
  $jscode  = "var text_TodayIs   = '".XL('Today is')."';\n"; 
  $jscode .= "var text_ThisMonth = '".XL('this month')."';\n"; 
  $jscode .= "var text_Close     = '".XL('close')."';\n"; 

  // weekday and month strings
  $jscode .= "var dayArrayShort = new Array('".XL('Su')."', '".XL('Mo')."', '".XL('Tu')."', '".XL('We')."', '".XL('Th')."', '".XL('Fr')."', '".XL('Sa')."');\n";
  $jscode .= "var dayArrayLong = new Array('".XL('Sunday')."', '".XL('Monday')."', '".XL('Tuesday')."', '".XL('Wednesday')."', '".XL('Thursday')."', '".XL('Friday')."', '".XL('Saturday')."');\n";
  $jscode .= "var monthArrayShort = new Array('".XL('Jan')."', '".XL('Feb')."', '".XL('Mar')."', '".XL('Apr')."', '".XL('May')."', '".XL('Jun')."', '".XL('Jul')."', '".XL('Aug')."', '".XL('Sep')."', '".XL('Oct')."', '".XL('Nov')."', '".XL('Dec')."');\n";
  $jscode .= "var monthArrayLong = new Array('".XL('January')."', '".XL('February')."', '".XL('March')."', '".XL('April')."', '".XL('May')."', '".XL('June')."', '".XL('July')."', '".XL('August')."', '".XL('September')."', '".XL('October')."', '".XL('November')."', '".XL('December')."');\n";

  return $jscode;
}

function datepicker($args)
{
  global $DatepickerFormat;
  global $DatepickerImg;
  global $FarmPubDirUrl;

  $args = ParseArgs($args);
  # @DEBUG($args,1);

  $button    = $args['button'];
  $format    = $args['format'];
  $fieldname = $args['field'];

  if (empty($format))
    $format = $DatepickerFormat;

  /*
  // TODO: why did I that ? has to do with fox-fields ...
  $fieldname2 = str_replace('[','_',$fieldname);
  $fieldname2 = str_replace(']','_',$fieldname2);
  */

  // if button= specified, create a button to set today's or tommorow's date
  if ($button == 'today')
    $buttondate = date($format);
  elseif ($button == 'tomorrow')
    $buttondate = date($format,time()+(24*60*60));
   
   
  $code = "\n<!-- DATEPICKER NFSTOOLS -->\n";

  // if icon is defined show image (if not overwritten by option usetextbutton=1
  // <input type="image" ...> does not work (starts reloading, so calendarbox disapears after a second) ! so use <a> + <img> instead
  if (!empty($DatepickerImg) and empty($args['usetextbutton']))
    $code .= '<img src="'.$DatepickerImg.'" alt="['.XL('select').']" ';
  else // text button
    $code .= '<input class="inputbutton" type="button" value="'.XL('select').'" ';
    
  $code .= ' title="'.XL('press to select date').'" onclick="displayDatePicker(\''.$fieldname.'\', this,\''.$format.'\');" >'."\n";
  
  if (!empty($button))
    $code .= '<input class="inputbutton" type="button" value="'.XL($button).'" onclick="updateDateField(\''.$fieldname.'\',\''.$buttondate.'\');">';
    
  $code .= "\n<!-- DATEPICKER NFSTOOLS END -->\n";
 
  return keep($code);
}
?>