#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use Net::DNS;

$szPath = $ENV{PATH_TRANSLATED};
$szPath =~ s/pp_.*//;
require $szPath . "pp_config.pl";
require $szPath . "pp_common.pl";




################################################################################
#   This software is Copyright Wild Systems P/L 2005. All rights reserved.
#
################################################################################
sub ParseQuery
{
	my ($szQuery) = @_;
	my ($szKey, $szValue, $szPair, @aTemp);

	@aTemp = split(/\&/, $szQuery);
	foreach $szPair (@aTemp)
  {
    ($szKey, $szValue) = split(/\=/, $szPair);
    if ($szKey eq "db")
    {
        $szDatabase = $szValue;
    }
    elsif ($szKey eq "name")
    {
	    $szPattern = unescape($szValue);
	    $szPattern =~ s/\+/ /g;
	    $szPattern =~ s/'/''/g;# MySQL escape for single quotes
    }
    elsif ($szKey eq "gens")
    {
		$nGens = $szValue;
    }
  }
}

sub AddLayerId
{
	my ($layerId) = @_;
    if ($layerId != -1 && !exists($hashDetails{$layerId}))
    {
        push(@anUnresolvedIDs, $layerId);
    }
}

sub PrintNode
{
    my ($szNodeId) = $_[0];
    my ($szNodeGen) = $_[1];

    my ($szNodeDetails) = $hashDetails{$szNodeId};
    my ($szRowspan) = $aPowers[$szNodeGen];
    my ($nNodeHeight) = $nHeight * $szRowspan;
    my ($szColWidth) = $aWidths[$szNodeGen - 1];
    if ($szRowspan == 1)
    {
        print "<td width='$szColWidth%' height='$nNodeHeight'>\n";
    }
    else
    {
        print "<td width='$szColWidth%' height='$nNodeHeight' rowspan='$szRowspan'>\n";
    }
    if ($szNodeId != -1)
    {
      my (@aNodeDetails) = split('~', $szNodeDetails);

$szNazwaPsa = escape($aNodeDetails[3]);

      print "<a href='pp_pedigree_ext.pl?db=pedigree&name=$szNazwaPsa&gens=4'>";
      print "<font color='#FF0000'>$aNodeDetails[7]</font> " if ($aNodeDetails[7]);# PreTitle
      print "<font color='#000000'><b>$aNodeDetails[3]</b></font>" if ($aNodeDetails[3]);# Name
      print " <font color='#FF0000'>$aNodeDetails[8]</font>" if ($aNodeDetails[8]);# PostTitle
      print "</a><br><font size=-1>";
      print " $aNodeDetails[6]" if ($aNodeDetails[10]);# DOB
      print "<br>" if ($szNodeGen ne $nGens);# new line if not last gen
      print " $aNodeDetails[9]" if ($aNodeDetails[9]);# RegNo
      print " $aNodeDetails[5]" if ($aNodeDetails[5]);# Color
      print "</font>\n";
      if ($aNodeDetails[15] and $szNodeGen <= $nPictureGens)
      {
        # Photo exists so print if in first two gens
        print "<a href='$szPhotoPath$aNodeDetails[15]'><img src='$szPhotoPath$aNodeDetails[15]' width='$nPhotoWidth' border='2'></a>";
      }
      print "</td>\n";
      if ($szNodeGen < $nGens)
      {
        PrintNode($aNodeDetails[1], $szNodeGen + 1);
        print "</tr>\n<tr class=Pedigree>\n";
        PrintNode($aNodeDetails[2], $szNodeGen + 1);
      }
    }
    else
    {
      if ($szNodeGen < $nGens)
      {
        PrintNode(-1, $szNodeGen + 1);
        print "</tr>\n<tr class=Pedigree>\n";
        PrintNode(-1, $szNodeGen + 1);
      }
    }
}

# main
$db_handle = DBI->connect("dbi:mysql:database=$DatabaseName;host=$DatabaseHost;user=$DatabaseAccount;password=$DatabasePassword")
  or print "Couldn't connect to database: $DBI::errstr\n" and exit;

$nGens = 4;
$nId = 11491;
$nHeight = 18;
$szDatabase = "pedigree";
$szQuery = $ENV{"QUERY_STRING"};
&ParseQuery ($szQuery);

$sql = "SELECT pedigreeid FROM $szDatabase where name='$szPattern'";#
$statement = $db_handle->prepare($sql)
  or print "Couldn't prepare query '$sql': $DBI::errstr\n" and exit;
$statement->execute()
  or print "Couldn't execute query '$sql': $DBI::errstr\n" and exit;
@aRow = $statement->fetchrow_array;

print "Content-type:text/html\n\n";
print ("<html>\n<head>\n<STYLE type=text/css' href='../pp_style.css' />A {	TEXT-DECORATION: none}</STYLE>\n</head>\n<body bgcolour='#2E4A3B' oncontextmenu='return false;'>\n");

 


print ("<HTML><HEAD>\n");



print ("<link rel='stylesheet' type='text/css' href='../pp_style.css' />\n");
print ("<META NAME=\"ROBOTS\" CONTENT=\"INDEX, FOLLOW, NOARCHIVE\" />\n"); # Notice to Robots & Spiders
print ("<META NAME='COPYRIGHT' CONTENT='Web scripts Copyright © 2005 Wild Systems. All Rights Reserved.'>\n");





 my $czasutworzenia = gmtime 1182100000;
 my $czasmodyfikacji = localtime time - 50000;
print ("<META HTTP-EQUIV='Last-Modified' CONTENT=\"$czasmodyfikacji\">\n");		# Ostatnia modyfikacja
print ("<META HTTP-EQUIV='Creation-Date' CONTENT=\"$czasutworzenia\">\n");		# Data utworzenia






print ("<META HTTP-EQUIV='pragma' CONTENT='no-cache'>\n");	# Do not cache pages
print ("<META HTTP-EQUIV='expires' CONTENT='-1'>\n");		# Expire pages immediately
print ("<META HTTP-EQUIV='imagetoolbar' CONTENT='no'>\n");	# Hide Image Toolbar
print ("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Cp1250\">\n");
print ("</HEAD><body bgcolour='#2E4A3B' oncontextmenu='return false;'>\n");














if ($nGens < 3 || $nGens > 10)
{
	print "Invalid number of generations." and exit;
}
if (@aRow)
{
	$nId = $aRow[0];
}
else
{
    print "Record for '$szPattern' not found." and exit;
}
# Initialise widths - idea is each generation from left is
# width W+G.A.W where G is generation, and G=1 for left most generation.
# This means total width is N.W + W.A.N.(N+1)/2 = 100.
# Plugging in N and A then W = 100/(N + (N.N + N).A/2)
# Select an A=0.05 then
$A = 0.2;
$W = 100.0/($nGens + $A*($nGens*$nGens + $nGens)/2.0);
$sumWidth = 0.0;
for ($i = 0;$i < $nGens;$i++)
{
	$width = int($W*(($i + 1)*$A + 1));
	if ($i == $nGens - 1)
	{
	   push(@aWidths, 100 - $sumWidth);
  }
	else
	{
		push(@aWidths, $width);
		$sumWidth += $width;
	}
}

	# Initialise powers
$pow = 1;
for ($i = 0;$i <= $nGens;$i++)
{
    $aPowers[$nGens - $i] = $pow;
    $pow = $pow * 2;
}
# Build up query string - include user defined fields

# $szExtraFields = get_extra_fields($db_handle, $szDatabase);


# $szUserFields = "user1=COI~user2=Country of Origin";
# @aExtraFields = split('~', $szUserFields);
#                               0       1     2     3    4     5          6                                 7         8        9
$szBasicQuery = "SELECT pedigreeid, sireid, damid, name, sex, color, DATE_FORMAT(dob, '$szDateFormat'), pretitle, posttitle, regno, if(dob='0000-00-00', 0, 1), COI, Video, Cert, DNA, photo FROM $szDatabase where pedigreeid in (";



# Build map of ID to details string in layers starting at gen 1
#@anUnresolvedIDs;
push(@anUnresolvedIDs, $nId);
for ($i = 0;$i <= $nGens;$i++)
{
    # build query for details = id, sireId, damId, etc  for every id in  @anUnresolvedIDs
    # and if sireId and damId are valid then add to @anUnresolvedIDs
    $sql = $szBasicQuery;
    $nIdList = join(",", @anUnresolvedIDs);
    last if (!$nIdList);
    $sql =  $sql . $nIdList . ")";

    $statement = $db_handle->prepare($sql)
        or print "Couldn't prepare query '$sql': $DBI::errstr\n" and exit;

    $statement->execute()
        or print "Couldn't execute query '$sql': $DBI::errstr\n" and exit;

    @anUnresolvedIDs = ();
    while (@row=$statement->fetchrow_array)
    {
      $temp = join("~", @row);
      $hashDetails{$row[0]} = $temp; #map id to its details

      # add sire and dam to next layer
      AddLayerId($row[1]);
      AddLayerId($row[2]);
    }
}

# map is now constructed, next step is build tree
# the tree must be followed to the last gen even if there is no ancestor
$szDetails = $hashDetails{$nId};
@details = split('~', $szDetails);




$szExtraFields = get_extra_fields($db_handle, $szDatabase);

$szDetails = $hashDetails{$nId};
@details = split('~', $szDetails);
$szHtmlName = escape($details[3]);
@aExtraFields = split(',', $szExtraFields);
shift(@aExtraFields); # remove initial ,



print ("<TITLE>");
print "$details[3]";
print (" : Baza rodowodow wilczarzy irlandzkich - Republika Marzen, Irish Wolfhound Pedigree database");
print ("</TITLE>\n");


print"<script language=\"JavaScript\" type=\"text/javascript\" src=\"http://www.republika-marzen.pl/pphlogger.js\"></script>\n";

print"<noscript><img alt=\"\" src=\"http://www.republika-marzen.pl/pphlogger/pphlogger.php?id=republika&st=img\"></noscript>\n";





print "<table border=2 width='100%'>\n<tr class=Pedigree>\n";
print "<td height=60 colspan='$nGens' bgcolor='#FFFFCC'><p align='center'><img src='/republika_rodowody.jpg'><p align='center'><b><font face='Arial' size='4'>";
print "<a href='$szPhotoPath$details[15]' TARGET='blanck'><img border='2' src='$szPhotoPath$details[15]' align='left' width='150' ></a>" if ($details[15]);




print"
<object id=\"player\" type=\"application/x-shockwave-flash\" data=\"http://www.republika-marzen.pl/flv_db/player_flv_maxi.swf\" width='400' height='300' align='left'> 
 
<param name=\"movie\" value=\"http://www.republika-marzen.pl/flv_db/player_flv_maxi.swf\" /> 
<param name=\"FlashVars\"value=\"flv=http://www.republika-marzen.pl/flv_db/$details[12].flv&width=400&height=300&autoplay=0&autoload=0&buffer=5&playercolor=BEB886&loadingcolor=a7a7a7&buttoncolor=ffffff&slidercolor=ffffff&phpstream=0&showfullscreen=0&loop=0&showplayer=autohide&buffershowbg=0&volume=0&showvolume=0&title=$details[12]&bgcolor=BEB886&startimage=http://www.republika-marzen.pl/start_frame.gif\"/></object>
" if ($details[12]);

print "<a href='http://www.republika-marzen.pl/cert/$details[13].jpg' TARGET='blanck'><img border='0' src='http://www.republika-marzen.pl/Heart.gif' align='left' width='89'></a>" if ($details[13]);

print "<a href='http://www.republika-marzen.pl/DNA/$details[14].jpg' TARGET='blanck'><img border='0' src='http://www.republika-marzen.pl/DNA.gif' align='left' width='78'></a>" if ($details[14]);




print "$details[7] " if ($details[7]);# PreTitle
print "$details[3]";
print " $details[8]" if ($details[8]);# PostTitle
print "</font></b><br>\n";
print "($details[4]) " if ($details[4]);# Sex
print "$details[6], " if ($details[6] ne '0000-00-00');
print "$details[9], " if ($details[9]);

print "COI=$details[11] 10 gen., " if ($details[11]);


print "<p align='left'><font face='Arial' size='2'>";



print "</p></td></tr>\n<tr class=Pedigree>\n";

$szSire = $details[1];
$szDam = $details[2];
PrintNode($szSire, 1);
print "<tr class=Pedigree>\n";
PrintNode($szDam, 1);

print "</tr>\n<tr><td height=40 colspan='$nGens' bgcolor='#C0C0C0'><font face='Arial' size='1'>";
print "Web scripts Copyright © 2005 Wild Systems. All Rights Reserved. Visit <a href='http://www.pedigreepoint.com'>www.pedigreepoint.com</a>.<br>\n";
print "Use of web harvester robots or any other means of copying the contents of this page, in whole or in part, for any commercial purpose is expressly prohibited.";

print "Copyright © 2008-2018 Republika Marzen.<br>Kopiowanie zabronione. 
Wszystkie prawa zastrzezone na podstawie ustawy o ochronie baz danych Dz.U. z 2001 r. Nr 128, poz. 1402.
  <br><a href='http://www.republika-marzen.pl'>www.republika-marzen.pl</a><br><a href='http://rodowody.republika-marzen.pl'>rodowody.republika-marzen.pl</a><br>\n";


 

print "</font></td></tr></table>\n<p><font face='Arial' size='1'>";
print "</font></body bgcolour='#2E4A3B' oncontextmenu='return false;'>\n</html>\n";

$db_handle->disconnect();
$nReturn = 1;
