#!/usr/bin/perl
#############################
# bm -- Global Bookmarks CGI
# Mike Schilli, 2004
# (m@perlmeister.com)
#############################
use warnings;
use strict;

my $DB_FILE = "/tmp/bm.sto";

use CGI qw(:all *table);
use CGI::Carp qw(
            fatalsToBrowser);
use Bookmarks;

my $bm = Bookmarks->new();

$bm = Bookmarks->restore(
    $DB_FILE) if -f $DB_FILE;

if(param('t') and param('a')
   and param('s')) {

  my $f = param('f');

    # String overrides select
  $f = param('fnew') 
            if param('fnew');
  die "No folder defined" 
           unless length($f);
    
  $bm->insert(param('t'),
             param('a'), $f);
}

$bm->delete(param('del')) if
                param('del');
$bm->move_up(param('mvu')) if
                param('mvu');
$bm->move_down(param('mvd'))
             if param('mvd');

print header(),
      start_html(
      -title => "Bookmarks");

print $bm->as_html(\&nav);
$bm->save($DB_FILE);

print start_form(),
  start_table(),
  TR(td("Title"), 
     td(textfield(
          -name => 't', 
          -size => 80))),
  TR(td("URL"), td(textfield(
          -name => 'a', 
          -size => 80))),
  TR(td("Folder"), 
     td(popup_menu(
          -name => 'f', 
          -values =>
            [$bm->folders()]
     ))),
  TR(td("New Folder"), 
     td(textfield(
          -name => 'fnew',
          -size => 80))),
  end_table(),
  hidden(s => 1),
  submit(),
  end_form(), end_html(),
  ;
 
print "Use this in your " .
      "toolbar: ", pre(
  "javascript:void(win=" .
  "window.open('" .
    url(-path_info => 1) .
  "?a='+location.href+'&t='".
  "+document.title))");

#############################
sub nav {
#############################
  my($n) = @_;

  return " [" .
    a({href => url() . 
     "?mvu=$n"}, "+") . " " .
    a({href => url() .
     "?mvd=$n"}, "-") . " " .
    a({href => url() .
     "?del=$n"}, "x") . "]";
}