#!/usr/bin/perl
######################################################################
# chartcgi.pl
######################################################################
# Perl Power! - Michael Schilli 1998
######################################################################

@days    = qw/Mo Tu We Th Fr Sa Su/;      # X value set
@sales_a = qw/ 3  4  3  6  8 10 15/;      # 1st Y value set
@sales_b = qw/ 5  5  5  6  6  7  7/;      # 2nd Y value set

use CGI qw/:standard/;

# called without parameters - output HTML page
if(!defined param("graph")) {

    print header, start_html(-title => 'Chart Test');
    for (qw/bars stackedbars pie lines points linespoints pareto/) {
        print img({src => "$ENV{SCRIPT_NAME}?graph=$_",
                   border => 3, 
                   hspace => 3,
                   vspace => 3}), "\n";
    }
    print end_html;

} elsif(param("graph") eq "bars") {         ### bar chart

    use Chart::Bars;                          # include package
    my $g = Chart::Bars->new(200,200);        # create object
    $g->set('title' => 'Chart::Bars');        # set title
    $g->add_dataset(@days);                   # X data set
    $g->add_dataset(@sales_a);                # 1st Y data set
    $g->add_dataset(@sales_b);                # 2nd Y data set
    $g->cgi_gif();                            # output gif

} elsif(param("graph") eq "stackedbars") {  ### stacked bars

    use Chart::StackedBars;                   # include package
    my $g = Chart::StackedBars->new(200,200); # create object
    $g->set ('title' => 'Chart::StackedBars');# set title
    $g->set('x_label' => "Week");             # legend X axix
    $g->set('y_label' => "Sales");            # legend Y axis
    $g->set('grid_lines' => "true");          # draw grid
    $g->set('max_val' => 30);                 # max. Y value
                                              # colors: red and green
    $g->set('colors' => [[255,0,0], [0,255,0]]);
    $g->add_dataset(@days);                   # X data set
    $g->add_dataset(@sales_a);                # 1st Y data set
    $g->add_dataset(@sales_b);                # 2nd Y data set
                                              # legend data sets
    $g->set('legend_labels' => ["Product A", "Product B"]);
    $g->cgi_gif();

} elsif(param("graph") eq "pie") {          ### pie chart

    use Chart::Pie;                           # include package
    my $g = Chart::Pie->new(200,200);         # create object
    $g->set ('title' => 'Chart::Pie');        # set title
    $g->add_dataset(@days);                   # share legends
    $g->add_dataset(@sales_a);                # share values
    $g->cgi_gif();                            # output gif

} elsif(param("graph") eq "lines") {        ### lines

    use Chart::Lines;
    my $g = Chart::Lines->new(200,200);
    $g->set ('title' => 'Chart::Lines');
    $g->add_dataset(@days);
    $g->add_dataset(@sales_a);
    $g->add_dataset(@sales_b);
    $g->cgi_gif();                            # output gif

} elsif(param("graph") eq "points") {       ### points

    use Chart::Points;
    my $g = Chart::Points->new(200,200);
    $g->set ('title' => 'Chart::Points');
    $g->add_dataset(@days);
    $g->add_dataset(@sales_a);
    $g->add_dataset(@sales_b);
    $g->cgi_gif();                            # output gif

                                            ### lines with
} elsif(param("graph") eq "linespoints") {  ### anchor points

    use Chart::LinesPoints;                   # include package
    my $g = Chart::LinesPoints->new(200,200); # create object
    $g->set ('title' => 'Chart::LinesPoints');# set title
    $g->add_dataset(@days);                   # X data set
    $g->add_dataset(@sales_a);                # 1st Y data set
    $g->add_dataset(@sales_b);                # 2nd Y data set
    $g->cgi_gif();                            # output gif


} elsif(param("graph") eq "pareto") {       ### pareto

    use Chart::Pareto;                        # include package
    my $g = Chart::Pareto->new(630,200);      # create object
    $g->set ('title' => 'Chart::Pareto');     # set title
    $g->set ('cutoff' => 3);                  # abort after 3 values
    $g->add_dataset(@days);                   # X data set
    $g->add_dataset(@sales_a);                # 1st Y data set
    $g->cgi_gif();                            # output gif
}
