<?php if (!defined('PmWiki')) exit();
/*  Copyright 2006 Hans Bracker, modified from dictindex.php
    Copyright 2004 Patrick R. Michaud (pmichaud@pobox.com) 
    This file is toggledictindex.php; 
    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 file adds a "toggledictindex" (dictionary index) format for
    the (:pagelist:) and (:searchresults:) directives.  To see results
    in dictionary format, simply add fmt=toggledictindex to the directive, as in

        (:pagelist group=Main fmt=toggledictindex name=-{$Name}:)
        
    (the last name=... excludes the current page from appearing at the top of the list)

    By default the items are display as a simple definition list, but
    this can be controlled by $FPLToggleDictIndex...Fmt variables:

        $FPLToggleDictIndexHeadFmt    - string for html header to initially hide divisions
        $FPLToggleDictIndexStartFmt   - start string
        $FPLToggleDictIndexEndFmt     - end string
        $FPLToggleDictIndexLFmt       - string to output for each new letter
        $FPLtoggleDictIndexIFmt       - string to output for each item in list
        $FPLToggleDictIndexHeaderLink - string for the link list at the upper page

    To enable this module, simply add the following to config.php:

        include_once("$FarmD/cookbook/toggledictindex.php');
*/
define(TOGGLEDICTINDEX_VERSION, '2006-08-01-b');

$FPLFunctions['toggledictindex'] = 'FPLToggleDictIndex';

function FPLToggleDictIndex($pagename,&$matches,$opt) {
global $FPLToggleDictIndexStartFmt,$FPLToggleDictIndexEndFmt,
    $FPLToggleDictIndexLFmt,$FPLToggleDictIndexIFmt, $FPLToggleDictIndexHeaderLink, $FmtV, $HTMLStylesFmt;
  $opt['order']='title';
  $matches = MakePageList($pagename, $opt);
  SDV($FPLToggleDictIndexHeadFmt,"#\$IndexLetter {display:none} \n");
  SDV($FPLToggleDictIndexStartFmt,"<a name='dictindexheader'></a><div class='fpldictindex'><span style='font-size:144%'>\$IndexLinks</span><hr><p class='vspace'></p></div>\n");
  SDV($FPLToggleDictIndexEndFmt,'</dl></div>');
  SDV($FPLToggleDictIndexLFmt,"</dl></div>\n<div id='\$IndexLetter'><a class=\"wikilink\" href=\"javascript:toggleObj('\$IndexLetter','show','\$IndexLetter','\$IndexLetter','')\" > &#9650;</a> \$IndexLetter <dl>\n");
  SDV($FPLToggleDictIndexIFmt,"<dt><dd><a href='\$PageUrl'> \$Titlespaced </a></dd></dt>\n");
  SDV($FPLToggleDictIndexHeaderLink,"<span id='\$IndexLetter-tog'><a class=\"wikilink\" href=\"javascript:toggleObj('\$IndexLetter','hide','\$IndexLetter','\$IndexLetter','')\" >\$IndexLetter</a></span>");

  $out = array();
  $headerlinks= array();
  foreach($matches as $item) {
    $pletter = substr($item['title'],0,1);
    $FmtV['$IndexLetter'] = $pletter;
    if (strcasecmp($pletter,@$lletter)!=0) { 
      $out[] = FmtPageName($FPLToggleDictIndexLFmt,$item['pagename']);
      $headerlinks[] = FmtPageName($FPLToggleDictIndexHeaderLink,$item['pagename']);
      $HTMLStylesFmt[] = FmtPageName($FPLToggleDictIndexHeadFmt,$item['pagename']);
      $lletter = $pletter; 
    }
    $out[] = FmtPageName($FPLToggleDictIndexIFmt,$item['pagename']);
  }
  $FmtV['$IndexLinks']=implode('&middot;',$headerlinks);
  return FmtPageName($FPLToggleDictIndexStartFmt,$pagename).implode('',$out).
    FmtPageName($FPLToggleDictIndexEndFmt,$pagename);
}

$HTMLHeaderFmt['toggleobj'] = "
   <script type=\"text/javascript\">
      function toggleObj(obj,init,lshow,lhide,swap) {
           var Ar = new Array(obj,init,lshow,lhide,swap);
           var elstyle = document.getElementById(obj).style;
           if (Ar[4]) var swstyle = document.getElementById(swap).style;
           var text    = document.getElementById(obj + \"-tog\");
           if (Ar[1]=='show') {
                Ar[1]='hide';
                elstyle.display = 'none';
                if(Ar[4]) swstyle.display = 'block';
                copy='<a class=\"wikilink\" ';  
                copy+='href=\"javascript:toggleObj(\''+Ar[0]+'\',\''+Ar[1]+'\',\'';
                copy+= Ar[2]+'\',\''+Ar[3]+'\',\''+Ar[4]+'\');\">'+Ar[2]+'</a>'; 
                text.innerHTML = copy;
                }
           else if (Ar[1]=='hide') {
                Ar[1]='show';
                elstyle.display = 'block';
                if(Ar[4]) swstyle.display = 'none';
                copy='<a class=\"wikilink\" ';  
                copy+='href=\"javascript:toggleObj(\''+Ar[0]+'\',\''+Ar[1]+'\',\''
                copy+= Ar[2]+'\',\''+Ar[3]+'\',\''+Ar[4]+'\');\">'+Ar[3]+'</a>'; 
                text.innerHTML = copy;               
           }
        }
    </script>";