#!/usr/local/bin/perl 

package markerview;

use SiteDefs   qw/:ALL :URL/;
use EnsWeb;
use ExtURL;
use GramenePage;

use CGI qw/:standard :form :netscape3/;
use strict;
#use Bio::EnsEMBL::Map::DBSQL::Map;
use Bio::EnsEMBL::ExternalData::GMAPAdaptor;
use Bio::EnsEMBL::Map::DBSQL::Obj;

my $q = new CGI;
my $db= undef;
my $obj = undef;
my $kobj = undef;
my $marker= undef;
my $map = undef;
my $chr=undef;
my $gif;
my $FISH_range=0;
my $RH_range=undef;
my $discrepancy;
my $mapdb;

$marker = $q->param('marker');

$marker  =~ s/\s//g;

my $r = Apache->request();
print header();
$r->err_header_out('ensembl_headers_out'=>1);


my ($head,$onload,$js_divs)=&EnsWeb::cgi_header_info(('initfocus'=>1));
my $grpg=GramenePage->new($r);
print $head,$grpg->start_body(  -ensembl=>1, -bodyattr=>$onload, -bodyfirst=>$js_divs  );
print "<br><br>\n";
print EnsWeb::print_form($marker, "marker");

if ( ! $ENSEMBL_GMAP) {
    print "<p><b>No Map Database!!</B></p>\n";
    print EnsWeb::make_cgi_footer();
    Apache::exit;
}

if (defined $marker){      
    
    &display_clone_info($marker);
}
else{

    print "<p><b>Need to supply a marker name as arguments!</B></p>\n";

}
                            
print $grpg->end_body;
Apache::exit;


1;


###############################################################################

sub display_clone_info {

my $marker = shift;

my $db;
my $mdb;
my $sa;
my @contiglist;

eval {
    my $locator = &EnsWeb::get_locator();
    $db =  Bio::EnsEMBL::DBLoader->new($locator);

    $db or print STDERR "cannot open $locator\n"
     and die "cannot open $locator\n";

    $db->static_golden_path_type($ENSEMBL_GOLD);

    $mdb= Bio::EnsEMBL::ExternalData::GMAPAdaptor->new(       
			-driver => $ENSEMBL_DRIVER,
			-user   => $ENSEMBL_DBUSER,
			-pass   => $ENSEMBL_DBPASS,
			-dbname => $ENSEMBL_GMAP,
			-host   => $ENSEMBL_HOST,
			-port   => $ENSEMBL_HOST_PORT,
			); 
    $mdb or print STDERR "cannot open GMAP\n"
      and die "cannot open Map Database\n";

};
     
if ( $@ ){
    print &ensembl_exception("An error occurred while loading the databases",$@);
    &EnsWeb::ensembl_exit();
}

#also want to open cmap database

# my $marker_obj;
# my $orig_marker;
# 
# eval {
#     my $mr	= $mdb->get_Marker_Synonym($marker);
#     # the first synonym should be the RH marker...it's done this way in mapview
#     # too.
#     $orig_marker = $marker;
#     $marker	= $mr->[0]->id, "\n";
#     $marker_obj = Bio::EnsEMBL::Map::DBSQL::Marker->new( $mdb, $marker);
# };
# 
# if ( $@ ){
#     print &ensembl_exception("Either $marker does not exist in our database, or there was a problem retrieving it.",$@,1);
#     &EnsWeb::ensembl_exit();
# }

###########################
# Get Sequence Information
###########################

# my $sf_ref = $marker_obj->get_Marker_SeqFeatures;
# 
# foreach my $sf (@$sf_ref){
#     my $contigid = $sf->seqname;
#     if ($sa->is_golden_static_contig($contigid, $sf->start)){
# 	push(@contiglist, { 'name'  =>	$contigid,
# 			    'start' =>	$sf->start,
# 			    'end'   =>	$sf->end,
# 			    });
#     }
# }
    my @sf=$mdb->get_SeqFeatures_by_Marker($marker);

# ######################
# # Get Map Information
# ######################
 
  my @maplinks=$mdb->cmap_links_by_marker($marker);
#  print map { "$_<br>\n" } @maplinks;



# my @maps = @{$marker_obj->chromosomeMaps};
# my ($map, $mapchr);
# eval {
#     foreach my $mrrk (@{$marker_obj->maps}){
# 	unless ($mrrk->id eq 'FISH'){ $map=$mrrk->id;}
#     }
#     if ($map){
# 	$mapchr = $maps[0]->name;
#     }
# };
# 
# if ($marker ne $orig_marker){
#     print "<h3>Chromosome Map Marker $marker ($orig_marker)</h3>";
#     print qq(<p>Ensembl marker $marker is synonymous with $orig_marker.<p>);
# }    
# else {
#     print qq(<h3>Chromosome Map Marker $marker</h3>);
# }

#######################
# Sequence Information
#######################
my $urls = ExtURL->new;

my $gramene=$ENSEMBL_EXTERNAL_URLS->{'GRAMENE_HOME'};

if (scalar(@sf)){
    (my $idl=$marker) =~ s/\..*//;
    #<B>Sequence information:</b>
    print qq{<p> <a href="$gramene/gramene/map/marker?name=$idl&class=Marker">$marker</a>};
    print qq{ (click <a href="$gramene/maps/marker_search?markers=$idl">here</a> for genetic maps) };
    print qq{ (sequence <a href="}
    	, $urls->get_url('EMBL', $sf[0]->hseqname),qq{">},$sf[0]->hseqname,qq{</a>)}
	if($marker ne $sf[0]->hseqname);
    print qq{ is currently mapped to the following clone(s):<p>};

    print <<EOH;
    <table align="center" width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr> 
	<td colspan="13" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td> 
    </tr>
    <tr valign="middle" class="yellow2">
      <th><img src="/gfx/blank.gif" width="15" height="22"></th>
      <th align="center" class="arial">View Clone </th>
      <th class="arial">&nbsp;</th>
      <th align="center" class="arial">Position in clone (bp)</th>
      <th class="arial">&nbsp;</th>
      <th align="center" class="arial">Chromosome</th>
      <th class="arial">&nbsp;</th>
      <th align="center" class="arial">Flat file</th>
      <th class="arial">&nbsp;</th>
      <th align="center" class="arial">Genbank</th>
      <th><img src="/gfx/blank.gif" width="15" height="22"></th>
    </tr>
    <tr> 
	<td colspan="13" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td>
    </tr>

EOH
      #<th align="center" class="arial">db</th>
      #<th class="arial">&nbsp;</th>


    foreach my $f (@sf) {
	my $name = $f->seqname; 
	my $start = $f->start;
	my $end = $f->end;
	my $chr = "-";

	my $c = $db->get_Clone($name);
	my $clone = $name;
	$clone =~s/\.\d*//;

	$chr = $c->chromosome;
	#$chr =~ s/chr//;
	$chr =~ s/_$clone//;
       
	#if ($map && $mapchr){
	#    $chr = qq(<a href="/perl/mapview?searchmarker=$marker">$chr</a>);
	#}

	print qq(<TR class="yellow1">\n);
       
        print qq(<td><img src="/gfx/blank.gif" width="5" height="22"></td>);
	print qq(<td align="center"><a href="/perl/contigview?clone=$name">$name</a></td>\n);
        print qq(<td class="arial">&nbsp;</td>);
	print qq(<td align="center">$start - $end</td>\n);
        print qq(<td class="arial">&nbsp;</td>);
	print qq(<td align="center">$chr</td>\n);
        print qq(<td class="arial">&nbsp;</td>);
	print qq(<td align="center"><a href="/perl/dumpcfgview?type=clone&id=$name">Dump clone</a></td>\n);
        print qq(<th class="arial">&nbsp;</th>);
	print qq(<td align="center"><A HREF=").
	    ( $c->gi ? $urls->get_url('ENTREZPRO',$c->gi)
		     : $urls->get_url('EMBL',$clone))
		     				.qq(">$clone</A></td>\n);
        print qq(<td><img src="/gfx/blank.gif" width="5" height="22"></td>);
	print "</tr>\n";
    }
	print<<EOS;
	<tr>
	    <td colspan="13" class="grey1"><img src="/gfx/blank.gif" width="1" height="1"></td>
	</tr>
    </table><br><br>
EOS
}
else {
    if(@maplinks) {
	print qq(<p><B>Marker <a href="$gramene/gramene/map/marker?name=$marker&class=Marker">$marker</a>);
        print qq{ (click <a href="$gramene/maps/marker_search?markers=$marker">here</a> for genetic maps)};
	print qq( is not currently mapped to any clones.</B> </p>);
    } else {
	print "<p><B>Marker $marker is not currently mapped to any clones.</B> </p>";
    }
}

# ##################
# # Map Information
# ##################
#     print "<p> <B>Map information:</b> $marker is located on the following maps:<p>";
# 
#     print <<EOH;
#     <table align="center" border="0" cellspacing="0" cellpadding="0">
#     <tr> 
# 	<td colspan="5" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td> 
#     </tr>
#     <tr valign="middle" class="yellow2">
#       <th><img src="/gfx/blank.gif" width="15" height="22"></th>
#       <th align="center" class="arial">Chromosome</th>
#       <th class="arial">&nbsp;&nbsp;</th>
#       <th align="center" class="arial">Map name</th>
#       <th><img src="/gfx/blank.gif" width="15" height="22"></th>
#     </tr>
#     <tr> 
# 	<td colspan="5" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td>
#     </tr>
# EOH
# 
# foreach my $markermap (@maps){
# 
#     my $mapname = $markermap->name;
#     my $maptype = $markermap->get_Map->id;
#     unless ($maptype eq 'FISH'){
# 	$mapname = qq(<a href="/perl/mapview?chr=$mapname&marker=$marker&map=$maptype">$mapname</a>);
#     }
# 
#     print qq(<TR class="yellow1">\n);
#     print qq(<td><img src="/gfx/blank.gif" width="5" height="22"></td>\n);
#     print qq(<td align="center">$mapname</td>\n);
#     print qq(<td class="arial">&nbsp;&nbsp;</td>\n);
#     print qq(<td align="center">$maptype</td>\n);
#     print qq(<td><img src="/gfx/blank.gif" width="5" height="22"></td>);
#     print "</tr>\n";
# }
# 	print<<EOS;
# 	<tr>
# 	    <td colspan="5" class="grey1"><img src="/gfx/blank.gif" width="1" height="1"></td>
# 	</tr>
#     </table>
#     </p>
#     <br>
# EOS
# 
# my ($l,$r) = $marker_obj->get_primer;
# 
# # get synonyms (if any)
# my $syn_ref = $marker_obj->synonyms;
# 
# #   There are 2 entries for each synonym, and 2 for the RH marker itself
# my $count = (scalar(@$syn_ref)/2) - 1;
# 
# 
# if ($count > 0){
#     print <<EOS;
#     <B>Marker $marker has $count synonym(s):</B>
#     <p>
# EOS
# 
# print <<EOS;
#     <table align="center" WIDTH="50%" border="0" cellpadding="0" cellspacing="0">
#     <tr> 
# 	<td colspan="5" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td> 
#     </tr>
#     <tr class="yellow2">
# 	<th><img src="/gfx/blank.gif" width="15" height="22"></th>
# 	<th class="arial">Name</th>
# 	<th class="arial">&nbsp;&nbsp;</th>
# 	<th class="arial">Database</th>
# 	<th><img src="/gfx/blank.gif" width="15" height="22"></th>
#    </tr> 
#     <tr> 
# 	<td colspan="5" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td> 
#     </tr>
# EOS
#    my %syn_hash = @$syn_ref;	# hash of synonym=>database of synonym
#     my $urls = ExtURL->new;
#     foreach my $syn(keys %syn_hash) {
# 	my $name  = $syn;
# 	my $db    = $syn_hash{$syn};
# 	next if ($name eq $marker);
# 	
# 	if ($name =~ /^D\d+S.*/){
# 	    $name = '<A HREF="'.$urls->get_url('DS',$name).'">'.$name.'</A>';	
# 	}
# 	elsif ($name =~ /^SHGC.*/){
# 	    $name = '<A HREF="' . $urls->get_url('SHGC',$name).'">'.$name.'</A>';	
# 	}
# 	elsif ($db =~ /EMBL/i && $name =~ /^\w+\d+/){
# 	    $name = '<A HREF="'.$urls->get_url('EMBL',$name).'">'.$name.'</A>';	
# 	}
# 	elsif ($db =~ /RH/i && $name =~ /^\w+\d+/){
# 	    $name = '<A HREF="'.$urls->get_url('RHDB',$name).'">'.$name.'</A>';	
# 	}
# 	
# 	if ($urls->is_linked(uc("${db}_HOME"))){
# 	    $db = '<A HREF="'.$urls->get_url(uc("${db}_HOME"),'').'">'.$db.'</A>';
# 	}
# 
# 	print qq(<tr class="yellow1">\n);
# 	print qq(<th><img src="/gfx/blank.gif" width="15" height="22"></th>\n);
# 	print qq(<td align="center">$name</td>\n);
# 	print qq(<th class="arial">&nbsp;&nbsp;</th>\n);
# 	print qq(<td align="center">$db</td>\n);
# 	print qq(<th><img src="/gfx/blank.gif" width="15" height="22"></th>\n);
# 	print qq(</tr>\n);
#     }
#     print qq(<tr> <td colspan="5" class="grey1"><img src="/gfx/blank.gif" width="1" height="1"></td> </tr>\n);
#     print("</TABLE><BR clear=\"left\">\n");
#    
#    print "<p><b>Marker $marker primers:</b></p>\n";
#     print <<EOS;
#     <table align="center" WIDTH="100%" border="0" cellpadding="0" cellspacing="0">
#     <tr> 
# 	<td colspan="5" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td> 
#     </tr>
#     <tr class="yellow2">
# 	<th><img src="/gfx/blank.gif" width="15" height="22"></th>
# 	<th class="arial">Left Primer</th>
# 	<th class="arial">&nbsp;&nbsp;</th>
# 	<th class="arial">Right Primer</th>
# 	<th><img src="/gfx/blank.gif" width="15" height="22"></th>
#    </tr> 
#     <tr> 
# 	<td colspan="5" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td> 
#     </tr>
# 	<tr class="yellow1">
# 	<th><img src="/gfx/blank.gif" width="15" height="22"></th>
# 	<td align="center">$l</td>
# 	<th class="arial">&nbsp;&nbsp;</th>
# 	<td align="center">$r</td>
# 	<th><img src="/gfx/blank.gif" width="15" height="22"></th>
# 	</tr>
#     <tr>
#     <tr> 
# 	<td colspan="5" class="grey1"><img src="/gfx/blank.gif" width="1" height="1"></td>
#     </tr>
#     </table>
#     <br clear="left">
# 
# EOS
# }

# $mdb->deleteObj;

}

###############################################################################








