#! /usr/local/bin/perl
use Getopt::Long;

@optionset_names = qw( gps.statnames.full gps.statnames.short );
@optionset_names{ @optionset_names } = qw( ADVANCED BASIC );
@version_names = qw(gs2_oo13_gold52);
$numcols = $numcols || 10;
@default_display = qw(barge_size.sum clone_size.number raft_size.mean clone_size.mean);

if (defined $ENV{QUERY_STRING}) {
#	print "<BLINK>$ENV{QUERY_STRING}</BLINK>";
	while ($ENV{QUERY_STRING} =~ /column[\ds]*=([^&]+)/g) {push(@display,split (/,/,$1))};
	if ($ENV{QUERY_STRING} =~ /action=([^&]+)/i) {$action = $1};
	if ($ENV{QUERY_STRING} =~ /version=([^&]+)/i) {$version = $1};
	if ($ENV{QUERY_STRING} =~ /statnames=([^&]+)/i) {$statnames = $1};
#	print "[",join ("+", @display),"]";
	}
#else {print "No Query String Detected..."};

GetOptions( 	"rowheadcolorAlpha=s" => \$rowheadcolorAlpha,
		"rowheadcolorBeta=s" => \$rowheadcolorBeta,
		"rowcolorBeta=s" => \$rowcolorBeta,
		"rowcolorAlpha=s" => \$rowcolorAlpha,
		"version=s" => \$version,
		"statnames=s" => \$statnames
		);

@chromos = ('all',1..22,qw(X Y NA UL));

$presetviews = << "__end_presets__";
<UL>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=barge_size.sum&column2=finished_clone_size.sum&column3=deep_raft_size.sum&column4=draft_raft_size.sum&column5=finished_raft_size.mean&column6=deep_raft_size.mean&column7=draft_raft_size.mean&column8=dk_fin.wmed&column9=dk_deep.wmed&column10=dk_draft.wmed">
Jim Kent's 'Top Ten' Hits</A>
<LI><A HREF="http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml?column1=contig_size.lander_median&column2=raft_size.median&column3=raft_size.lander_median&column4=finished_raft_size.lander_median&column5=deep_raft_size.lander_median&column6=draft_raft_size.lander_median&column7=not_finished_raft_size.lander_median">
Some 'Weighted Medians' of Interest</A>
</A>
</UL>
<CENTER><B>Some Quick Definitions</B>(more to come)</CENTER>
<PRE>
   <B>FPC</B> - a fingerprint contig from the WashU map
   <B>barge</B> - a series of clones within an FPC contig that
      show sequence overlap and can be ordered linearly
   <B>raft</B> - a set of fragments from overlapping clones that
      is assembled by ooGreedy into a continuous stretch of
      sequence
   <B>fragment</B> - a sequence contig inside of a clone (BAC, PAC 
      or cosmid). A fragment is assembled from reads usually
      by Phrap.
   <B>read</B> - a (typically 300-1000) base sequence that was
      produced by a single lane or capillary on a sequencing 
      machine. (No assembly required).
</PRE>
__end_presets__

$version = $version || 'oo15_gold75';
$statnames = $statnames || 'gps.statnames.short';

if ( open(STATNAMES,"$statnames") ) { 
	while (<STATNAMES>) {if (/(\S+)\s*=([^\n]+)\n/) {$statnames{$1} = $2}; push (@statopts,$1); };
	close STATNAMES;
	}
else {print "Ack!";die("Can't open file: '$statnames' for Stat definitions...\n")};

if ( $display[0] eq 'all' ) {print "<blink>USING ALL COLS[$display[0]][@display]</BLINK>" if $verbose;@display = sort keys %statnames}

if ($action eq 'configure') {
	print "<CENTER>Please select a statistic to display in any/all of the Chromosome Comparator Columns below...<HR>";
	print "<TABLE WIDTH='90%'><TR><TH>Preset Views</TH><TH>Custom View</TH></TR>\n";
	print "<TR><TD ALIGN='LEFT'>$presetviews</TD><TD>";

	print "<CENTER><FONT SIZE=+1><FORM ACTION='tester.shtml' METHOD='GET'><INPUT TYPE=HIDDEN NAME='action' VALUE='configure'>\n";
	print "(<INPUT TYPE=SUBMIT VALUE='Use'> </FONT>";
	print "(<SELECT NAME='statnames'>\n";
	for (@optionset_names) {
		print "<OPTION VALUE='$_'";
		if ($statnames eq $_) {print "SELECTED"};
		print ">$optionset_names{$_}</OPTION>"};
	print "</SELECT> options)</FORM>\n"; 

	print "<TABLE border=0>";
	print "<FORM ACTION='http://genome-test.cse.ucsc.edu/goldenPath/statistics/tester.shtml' METHOD='GET'>";
	for $colnum (1..$numcols) {
		print "<TR><TD ALIGN='RIGHT'>Column $colnum: </TD>";
		print "<TD ALIGN='LEFT'><SELECT NAME='column$colnum'><OPTION VALUE=''>NONE</OPTION>";
		print map {"<OPTION VALUE='$_'>$statnames{$_}</OPTION>\n";} @statopts;
		print "</SELECT></TD></TR>";
		}

	print "<TR><TD ALIGN='CENTER' COLSPAN=2>Version : <SELECT NAME='version'>";
	for (@version_names) {print "<OPTION VALUE='$_'>$_</OPTION>"};
	print "</SELECT></TD></TR>\n"; 

	print "<INPUT TYPE=HIDDEN NAME='statnames' VALUE='gps.statnames.full'>";

	print "<TR><TD ALIGN='CENTER' COLSPAN=2><INPUT TYPE=SUBMIT></TD></TR></FORM></TABLE></TD></TR></TABLE></CENTER><HR>";
	}
 else {
	if ($#display == -1) {@display = @default_display};
	for $chr (@chromos) {$stats{$chr} = &GetChromoStats($chr,\@display)};


	print "<CENTER><B><FONT SIZE=+1><FORM ACTION='tester.shtml' METHOD='GET'><INPUT TYPE=HIDDEN NAME='action' VALUE='configure'>\n";
	print "<INPUT TYPE=SUBMIT VALUE='Configure'> the statistics diplayed in this table</B></FONT><BR>\n";

	print "(use <SELECT NAME='statnames'>";
	for (@optionset_names) {
		print "<OPTION VALUE='$_'";
		if ($statnames eq $_) {print "SELECTED"};
		print ">$optionset_names{$_}</OPTION>"};
	print "</SELECT> options)</FORM>\n"; 

	print "<TABLE border=1>\n","<TR align='center'><TH>Chromo</TH>\n";
	for (@display) {print "<TH>",$statnames{$_},"</TH>";}
	print "</TR>\n";
	for $chr (@chromos) {
		$rowcolor = ($i++ % 2 == 0) ? $rowcolorAlpha || '#CCBBBB' : $rowcolorBeta || '#BBCCBB';
		$rowheadcolor = ($i % 2 == 1) ? $rowheadcolorAlpha || '#DDCCCC' : $rowheadcolorBeta ||'#CCDDCC' ;
		print "<TR align='right'><TH bgcolor = '$rowheadcolor' >$chr</TH>\n";
		for (@display) {
			print "<TD bgcolor = '$rowcolor'>",commify( $stats{$chr}{$_} ),"</TD>\n";
			}
		print "</TR>\n";
		}
	print "</TABLE>\n";
	print "</CENTER></BODY></HTML>\n";
	}
sub commify {
	my ($num) = @_;
	my $text = reverse $num;
	$text =~ s|(\d\d\d)(?=\d)(?!\d*\.)|$1,|g;
	return scalar reverse $text;
	}

sub GetChromoStats {

	my ($chr,$arrayref) =@_;
	@stats = @{ $arrayref };
	open(GPS,"$version/$chr/gps.shtml") || die ("Can't open $chr/gps.shtml\n");
	while (<GPS>) {
		for $target (@stats) {
			if (/var='$target' value='([^']+)'/) {$found{$target} = $1}
			}
		}
	close GPS;
	return { %found };

	}


