#####################################################################
#!/usr/local/bin/perl -w
# Mode: perl
# Programmer: Kuan Chang
# Date: 07/19/2002
#####################################################################

use strict;
use CGI qw(:standard *table *TR *th *td *ul *ol);
use Gramene::Mutant::MutantSearchDB;
use Gramene::Page;

#####################################################################
# constants

use constant GO_PREFIX => 'GO:';
use constant TO_PREFIX => 'TO:';
use constant PO_PREFIX => 'PO:';
# GR_PREFIX is for mutant
use constant GR_PREFIX => 'GR:';
# my $GR_PREFIX = "GR:";
use constant STUDY_PREFIX => 'GR:ST:';
use constant ALLELE_PREFIX => 'GR:AL:';
use constant GERMPLASM_PREFIX => 'GR:GP:';

use constant DEFAULT_IMAGE_COMMENT => 'No Caption';

use constant EVIDENCE_CODE_HOME => '/plant_ontology/';
use constant EXE_NAME => 'display_mutant_list';
use constant ONTOLOGY_EXE_NAME => 'search_term';
use constant STUDY_EXE_NAME => 'search_study';
use constant ALLELE_EXE_NAME => 'search_allele';
use constant GERMPLASM_EXE_NAME => 'search_germplasm';
use constant SEARCH_PROTEIN_EXE_NAME => 'protein_search';
use constant MUTANT_IMAGE_HOME => '/images/mutant/';
use constant MUTANT_THUMBNAIL_IMAGE_HOME => '/images/mutant/tmb/';
use constant MAX_LENGTH_OF_ACCESSION => 7;
use constant CORNELL_RFLP_2001 => 3;
use constant JRGP_2000 => 6;
#this is for raclette 
use constant RICE_MORPHOLOGICAL_MAP_2000 => 8;

# my $CORNELL_RFLP_2001 = 1;
# my $JRGP_2000 = 2;
# my $RICE_MORPHOLOGICAL_MAP_2000 = 4;

#####################################################################
# Connect to the database
#####################################################################
my $db = Gramene::Mutant::MutantSearchDB->new();
$db->connect_db();
my $page = Gramene::Page->new(Apache->request);

# get input
my $index  = param('index');
my $sort_by = param('sort_by');
undef $sort_by unless $sort_by;

# create CGI object
my $cgi = new CGI;
print $cgi->header;

#######################################################################
my @mutants = $db->get_mutant_list_by_order($index, $sort_by);
undef @mutants unless @mutants;  

print @mutants ? $page->start_html(-title=>"Rice Mutant List") : $page->start_html(-title=>"Cannot find any information about ");
  
print $page->start_body;
# show Gramene search engine
print_mutant_search_area();

# show mutant list
if(@mutants) {
  
  my @exist_letters = $db->get_first_letters();   # Added by Wei.

  print h1("Rice Mutant List: ", $#mutants+1);
  print "< ";
  #for my $letter ('A' .. 'Z'){
  for my $letter ( @exist_letters ){  # Modified by Wei.
    print "  ", a({-href=>EXE_NAME."?index=$letter", -class=>'mediumfontsize'}, $letter), "  |";
  }
  print " >";
 # print h2(
  print start_table({-border=>1, -width=>'98%', -align=>'center', -cellpadding=>4, -cellspacing=>0});
  my $prefix = EXE_NAME . "?index=$index&sort_by=";
  print TR(th({-align=>'center', -class=>'datatitle'}, 
	      ['#', 
	       a({-href=>$prefix."mutant_symbol"} ,'Gene Symbol'), 
		  a({-href=>$prefix."mutant_name"} ,'Gene Name'), 
	       a({-href=>$prefix."mutant_synonym"} ,'Synonym of Gene Symbol'),	     
		 a({-href=>$prefix."chromosome_number"} ,'Chr'),
	       a({-href=>$prefix."mutant_id"} ,'Gramene ID')]));
        
 
  my $count = 1;
  foreach my $mutant (@mutants){
    my($mutant_id,$mutant_name,$mutant_symbol,$mutant_synonym,$chromosome_number)=split( /\t/,$mutant);

    if($count % 2 == 0) {
      print start_TR({-class=>'databody', -align=>'center'});
    } else {
      print start_TR({-align=>'center'}); 
    }

    print td($count);
  
    print td({-align=>'left'}, a({-href=>"search_mutant?id=".get_canonical_accession(GR_PREFIX,$mutant_id)}, $mutant_symbol));

 
     print td({-align=>'left'},$mutant_name);

    if($mutant_synonym){
      print td({-align=>'left'},$mutant_synonym);
    }
    else{
      print td({-align=>'left'}, "&nbsp;&nbsp;");
    }

    if($chromosome_number){
      print td({-align=>'center'},$chromosome_number);
    }
    else{
      print td({-align=>'center'}, "&nbsp;&nbsp;");
    }

   
   # print td(GR_PREFIX.$mutant_id);
    print td (get_canonical_accession(GR_PREFIX,$mutant_id));
    print end_TR;
    $count += 1;
  }
  
  print end_table;
} else {

  print ( "<center><h2>No mutants in this database have gene symbols beginning with $index.</h2></center>" );
}


print $page->end_body;

#####################################################################
# utility functions
#####################################################################
sub extract_ID{
  my $id = shift;
  my $is_GR = 0;
  my $tmp = GR_PREFIX;
  if($id =~ /$tmp/) {
    #$id =~ s/^GR_PREFIX//i;
    $id =~ s/$tmp//;
    $is_GR = 1;
  } 

  undef $id unless(is_digit($id));

  return ($id, $is_GR);
}

sub get_canonical_accession{
  my ($prefix, $id) = @_;
  my $canonical_accession = $prefix;
  my $length = MAX_LENGTH_OF_ACCESSION - length($id);
  for my $x (1 .. $length){
    $canonical_accession .= "0";
  }
  $canonical_accession .= $id;
  return $canonical_accession;
}

sub is_digit{
  my $query = shift;
  $query =~ s/^\s+//;
  $query =~ s/\s+$//;
  if ($query =~ /^\d+$/ ){
    return 1;
  }else{ 
    return 0;
  }
}

sub remove_spaces_on_both_sides{
  my $query = shift;
  $query =~ s/^\s+//;
  $query =~ s/\s+$//;
  return $query;
}

#########################################################################################
sub print_mutant_search_area {
  my $self = url(-relative=>1);
  print start_form(-method=>'GET', -action=>"search_core");

  print <<SEARCH_AREA;
&nbsp;<img src="/images/icons/grain_icon.jpg" alt="grain_icon" height="16" width="16">
<a href="/rice_mutant/index.html" class="gopage">Gene Home</a> |
<a href="/rice_mutant/gene_search.html" class="gopage">Search</a> |
<a href="/rice_mutant/gene_submit.html" class="gopage">Submit</a> |
<a href="/rice_mutant/gene_help.html" class="gopage">Help Documents</a> |
<a href="/tutorials/mutant.html" class="gopage">Tutorial</a> |
<a href="/documentation/faq/mut_faq.html" class="gopage">FAQ</a>
<p></p>
<table align="center" cellspacing="0" cellpadding="3" border="0" width="98%" align=center>
  <th align=center class=searchtitle>Mutant Search</th>
  <tr align=center class=searchbody>
    <td align=center>&nbsp;&nbsp;&nbsp;&nbsp;<input type=text value="" framewidth=4 name=query size=40 maxlength=256>&nbsp;&nbsp;&nbsp;&nbsp;<input name=btn type=submit value="Search">&nbsp;&nbsp;<input name=Clear type=reset value="Clear">
      <br><span class="alert">Search by Gene Symbol, Gene Name, Gramene Accesssion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>[e.g. <a href="/db/mutant/search_mutant?id=GR:0060198">dwarf-15</a> or <a href="/db/mutant/search_mutant?id=GR:0060198">GR:0060198</a>]&nbsp;&nbsp;<a href="/documentation/phenotype_help.html">HELP</a> 
    </td>
  </tr>
</table>
SEARCH_AREA

  
  print end_form();
  print "<hr>";
}
