>id=divisionname<< 
    text can be hidden/shown 
    >><< 
    Necessary parameters: (:toggle id=divname:) 
    Alternative: (:toggle divname:)
    Alternative with options: 
    (:toggle hide divname:) initial hide
    (:toggle hide divname button:) initial hide, button
    (:toggle name1 name2:) toggle between name1 and name2
    Optional parameters:
    init=hide  hides the division initially (default is show)
    show=labelname  label of link or button when div is hidden (default is Show)
    hide=labelname label of link or button when div is shown (default is Hide)
    label=labelname label of link or button for both toggle states
    id2=objname second object (div), for toggling betwen first and second object
    set=1 sets a cookie to remember toggle state
*/ 
# Version date
$RecipeInfo['Toggle']['Version'] = '2010-12-06';
# declare $Toggle for (:if enabled $Toggle:) recipe installation check
global $Toggle; $Toggle = 1;
Markup('toggle', 'directives',
  '/\\(:toggle\\s*(.*?):\\)/ei',
  "ToggleMarkup(\$pagename, PSS('$1'))");
  
# all in one function
function ToggleMarkup($pagename, $args) {
  # javascript for toggling and cookie setting
  global $HTMLFooterFmt, $HTMLStylesFmt, $ToggleConfig, $UploadUrlFmt, $UploadPrefixFmt;
  SDVA($ToggleConfig, array(
    'init' => 'show',       //show div 
    'show' => XL("Show"),  //link text 'Show'
    'hide' => XL("Hide"),  //link text 'Hide'
    'ttshow' => XL("Show"),  //tooltip text 'Show'
    'tthide' => XL("Hide"),  //tooltip text 'Hide'
    'set' => false,         //set no cookie to remeber toggle state
    'id' => '',            //no default div name
    'id2' => '',           //no default div2 name
    'set' => false,         //set no cookie to remeber toggle state
    'printhidden' => true,  // hidden divs get printed
  ));   
  $HTMLStylesFmt['toggle'] .= " @media print{ .toggle{ display:none; } } .toggle img{ border:none; } ";
   
  $HTMLFooterFmt['toggleobj'] = "
  ";    
  $args = ParseArgs($args); 
  //get parameters without keys
  if(is_array($args[''])) {
    while (count($args['']) > 0) {
      $par = array_shift($args['']);
      if($par == 'button') $args['button'] = 1;
      elseif($par == 'hide') $args['init'] = 'hide';
      elseif($par == 'show') $args['init'] = 'show';
      elseif(!isset($args['id'])) $args['id'] = $par;
      elseif(!isset($args['id2'])) $args['id2'] = $par;     
    }
  }
  $args = array_merge($ToggleConfig, $args);
  $id = (isset($args['div'])) ? $args['div'] : $args['id'];
  $id2 = (isset($args['div2'])) ? $args['div2'] : $args['id2'];
  if ($id == '') return "//!Error:// no object id specified!"; 
  $tog = $args['init'];
  $ts = array();
  if(isset($args['label'])) 
    $ts['show'] = $ts['hide'] = $args['label'];
  else {
    $ts['show'] = (isset($args['lshow'])) ? $args['lshow'] : $args['show'];
    $ts['hide'] = (isset($args['lhide'])) ? $args['lhide'] : $args['hide'];  
  }
  $ipat = "/\.png|\.gif|\.jpg|\.jpeg|\.ico/";
  foreach($ts as $k => $val) {
    //check for image, make image tag
    if(preg_match($ipat, $val)) {
      $prefix = (strstr($val, '/')) ? '/' : $UploadPrefixFmt; 
      $path = FmtPageName($UploadUrlFmt.$prefix, $pagename);
      $ts[$k] = "![{$args['tt'.$k]} $id]($path/$val) ";
      $args['button'] = '';
    }
    //apostrophe encoding
    else $ts[$k] = str_replace("'","’",$val);
  }  
  $show = $ts['show']; $hide = $ts['hide'];
  //check cookie if set=1
  if($args['set'] == 1) { 
    global $CookiePrefix, $SkinName;
    $cookie = $CookiePrefix.$SkinName.'_toggle_'.$id;
    if(isset($_COOKIE[$cookie])) $tog = $_COOKIE[$cookie];
  }      
   
  //toggle state 
  if($tog == 'show') { 
    $style = 'block';
    $altstyle = 'none';
    $label = $hide;
    $tog = 'hide';
  } else {
    $style = 'none';
    $altstyle = 'block';
    $label = $show;
    $tog = 'show';
  }
  //set initial toggle link or button (later it is build with javascript)
  $act = "javascript:toggleObj('{$id}','{$tog}','{$show}','{$hide}','{$id2}','{$args['set']}','{$cookie}','{$args['button']}')";
  $out = "";
  if($args['button'] == 1 || $args['button'] == 'button')
    $out .= "";
  else
    $out .= "{$label}";
  $out .= "";
  $HTMLStylesFmt['toggle'] .= " #{$id}{ display:{$style}; } ";
  if($args['printhidden'] == 1) $HTMLStylesFmt['toggle'] .= " @media print{ #{$id}{ display:block; } } ";
  if($id2) { 
    $HTMLStylesFmt['toggle'] .= " #{$id2}{ display:{$altstyle}; } ";
    if($args['printhidden'] == 1) $HTMLStylesFmt['toggle'] .= " @media print { #{$id2}{ display:block; } } ";
  }
  return Keep($out);
}
#EOF
";
      $args['button'] = '';
    }
    //apostrophe encoding
    else $ts[$k] = str_replace("'","’",$val);
  }  
  $show = $ts['show']; $hide = $ts['hide'];
  //check cookie if set=1
  if($args['set'] == 1) { 
    global $CookiePrefix, $SkinName;
    $cookie = $CookiePrefix.$SkinName.'_toggle_'.$id;
    if(isset($_COOKIE[$cookie])) $tog = $_COOKIE[$cookie];
  }      
   
  //toggle state 
  if($tog == 'show') { 
    $style = 'block';
    $altstyle = 'none';
    $label = $hide;
    $tog = 'hide';
  } else {
    $style = 'none';
    $altstyle = 'block';
    $label = $show;
    $tog = 'show';
  }
  //set initial toggle link or button (later it is build with javascript)
  $act = "javascript:toggleObj('{$id}','{$tog}','{$show}','{$hide}','{$id2}','{$args['set']}','{$cookie}','{$args['button']}')";
  $out = "";
  if($args['button'] == 1 || $args['button'] == 'button')
    $out .= "";
  else
    $out .= "{$label}";
  $out .= "";
  $HTMLStylesFmt['toggle'] .= " #{$id}{ display:{$style}; } ";
  if($args['printhidden'] == 1) $HTMLStylesFmt['toggle'] .= " @media print{ #{$id}{ display:block; } } ";
  if($id2) { 
    $HTMLStylesFmt['toggle'] .= " #{$id2}{ display:{$altstyle}; } ";
    if($args['printhidden'] == 1) $HTMLStylesFmt['toggle'] .= " @media print { #{$id2}{ display:block; } } ";
  }
  return Keep($out);
}
#EOF