#!/usr/bin/perl -w
use strict;
use CGI qw(:standard);

my $sequence = "";

# read data from our data.txt file (with our own demo sequence)
open( INFILE, "data.txt");
                while(<infile>){
                                my $line = $_;
                                chomp $line;
                                $sequence = $sequence . $line;
                }
close(INFILE);


# create a CGI object in order to create the HTML file
my $q = new CGI;


# read the parameters sent thru the form and do necessary initializations
my $new_seq = $q->param("sequence") || "No Sequence";

$new_seq =~ s/[\s\n\t]+//g unless $new_seq =~ /No Sequence/;
$new_seq = "No Sequence" if $new_seq =~ /[^AaCcTtGg]/;
$sequence = $new_seq unless $new_seq =~ /No Sequence/ ;
$sequence = uc $sequence;

# define the dimers
my $aw_dimers = { 'AA' => [0], 'AC' => [0], 'AT' => [0], 'AG' => [0],
                                'GC' => [0], 'GT' => [0], 'GG' => [0], 'GA' => [0],
                                'CT' => [0], 'CG' => [0], 'CC' => [0], 'CA' => [0],
                                'TG' => [0], 'TC' => [0], 'TT' => [0], 'TA' => [0] };


# start printing the HTML file
print $q->header();

# print the sequence that has been pasted
$q->print("<html><head><title>Sequence Results </title></head><body onLoad='javascript:focus()'>");
$q->print("<table border=0 cellpadding=3 cellspacing=2 width=\"700\"><tr width='650'><td width=\"650\">");

my $pp = $sequence;
$pp =~ s/(\w{40})/$1\n/g;
$q->print("$pp<br>\n");
undef $pp;
$q->print("</td></tr></table>");

# parameters initialization
my $no_of_dimers = 0;

#compute the requested parameters
for( my $i=0; $i<$size; $i++){
                my $dimer = substr( $sequence, $i, 2 );

                $aw_dimers->{$dimer}->[0]++ if defined $aw_dimers->{$dimer};
}

# print the dimers
&showDimers($aw_dimers) if ($actions->{'dimers'}->[0] || $actions->{'all'}->[0]);

# close the HTML file
$q->print("</body></html>");


#__subs__#

sub showDimers{
                my $aw_dimers = shift;

                foreach my $duos (sort keys %$aw_dimers){
                        $q->print("$duos $aw_dimers->{$duos}->[0]<br>\n");
                };

                map{$no_of_dimers = $no_of_dimers + $aw_dimers->{$_}->[0]} (keys %$aw_dimers);
                $q->print("The number of dimers is: $no_of_dimers<br>\n");

                return;
}