<?php
    /* currentSun.php
    author: Sydney D'Silva

    Returns a montage of daily images of the Sun taken from 
    Solar Observatories all around the world. 

    The program parses a XML file sunToday.xml that contains the data. 
    Presents the client with a montage of 3x6 images/page.
    Future: Put the data in MySQL.

    Setting generate=true generates a set of html files, one
    for each page. These pages can be put on any server which 
    does not have PHP.

    Another version of currentSun.php 
    downloads the daily images of the Sun,
    converts them using ImageMagick to thumbnails
    retrieves them and renders them as a montage.
    This can be set as a cron job. 
    The disadvantage is that this methods is usually slow,
    since all the thumbnails have to come from the same server. 
    
    This version is faster because the images are downloaded 
    in a parallel fashion from the various servers around the
    world.
    */

    require_once ("xmlParser.php");
    $dir_name = dirname(realpath($PHP_SELF))."/";

    $generate=false;// set true to generate html files of each page
    if($generate)
    {
        $current_sun="current_sun";
        $page_num=$argv[1];
        ob_start();
    }
    //Matrix parameters
    $n_col_img=6; // number of columns
    $n_row_img=3; // number of rows
    $n_page_img=$n_col_img*$n_row_img; // number of images in page
    $cell_width=130;
    $cell_padding=2;
    $cell_spacing=0;
    $table_border=0;
    $table_width=($cell_width+2.*$cell_padding+2.*$cell_spacing)*$n_col_img;

    // Parser XML file
    $xml = new xmlParser("sunToday.xml");
    $xml->getArray("thumb");
    $keys=array("thumb","hires","caption","copywrite","description","thumbURL","hiresURL");
    $n_keys=count($keys);
    for($i_col=0; $i_col<$n_keys; $i_col++){
        $xml->getArray($keys[$i_col]);
        $img_arr[$keys[$i_col]] = $xml->returnArray;
    }


    //Read data into array $img_arr
    /*
    $lines=file($dir_name."image_data");
    $i_row=0;
    $i_col=0;
    foreach($lines as $line)
    {
        $line=rtrim($line);
        $img_arr[$i_row][$keys[$i_col]]=$line;
        $i_col++;
        if($i_col % $n_keys == 0)
        {
            $i_col=0;
            $i_row++;
        }
    }
    */
    $n_img = count($img_arr["thumb"]); // Total number of images

    //css data string
    $header_string = "<head>
                     <style type='text/css'>
                     h1
                     {
                         color:green;
                         text-align:center;
                     }
                     div.turn_page
                     {
                         align:right;width:{$table_width}px;color:green;text-align:right;
                     }
                     div.caption
                     {   
                         align:left; font-face:Tahoma; color:#ffffff; font-size:12px; font-style=normal
                     }

                     div#img a span {display: none;}
                     div#img a {text-decoration:none; color:white;}
                     div#img a.img:link {color: #0000ff}
                     div#img a.img:visited {color: #00ff00} 
                     div#img a.img:hover {color: #ffcc00}
                     div#img a:hover span 
                     {
                         display: block;
                         position: fixed; /*absolute; top: 0px; left: 0*/; 
                         width: 225px;
                         padding: 5px; margin: 10px; z-index: 100;
                         color: #ff0000; background:rgb(200,200,200);
                         font: 12px Verdana, sans-serif; text-align: left;
                     }
                     td.img
                     {
                         background-color:#000000;
                     }
                         a.img:link {color: #ff0000}
                         a.img:visited {color: #0000ff} 
                         a.img:hover {color: #ffcc00}
                     .popup
                     {
                         COLOR: #ffffff;
                         CURSOR: help;
                         TEXT-DECORATION: none
                     }
                     </style>
                     </head>
                     ";



    //js string for popup
    $script= <<<END
             <script type="text/javascript" language="javascript">
             <!--
             var newWindow='';
             function PopUp(mylink, windowname)
             {
                 if (! window.focus)return true;
                 var href;

                 if (typeof(mylink) == 'string')
                 href=mylink;
                 else
                 href=mylink.href;

                 newWindow = window.open(href, windowname, 'width=500,height=500,scrollbars=yes,left=0,top=100,resizable=yes');
                 if (window.focus) {newWindow.focus()}
                 return false;
             }
                 //--> 
                 </script>
END;
    $open_html = "<html>";
    $open_table=<<<END
                <table cellpadding="{$cell_padding}" cellspacing="{$cell_spacing}"
                       border="{$table_border}" style="text-align: left; width: {$table_width}px; 
                       margin-left: auto; margin-right: auto;">
                <tbody>
                <tr>
END;
    $open_td=<<<END
             <td class="img" width="{$cell_width}" valign="middle" align="center" height="7">;
END;
    $title = "<h1>The Sun Today</h1>";

    // If calling sequence is current_sun.php?display=hires&ref_string=http://... then open popup window with 
    // the given url
    $ref_string = $_GET['ref_string'];
    $display = $_GET['display'];
    $page_num = $_GET['page_num'];
    //print $display;exit;
    if($display == hires)
    {
        $xtract_xtension = explode(".",$ref_string);
        $file_type=$xtract_xtension[count($xtract_xtension)-1];
        if($file_type == "html")
        {
            header("Location:{$ref_string}");
        }
        else
        {
            print <<<END
                  <a href="javascript:self.close()"><img src="{$ref_string}"/></a>
END;
        }
        if($ref_string == '')print "Calling sequence is 'current_sun.php?display=hires&ref_string=http://...'";
    }
    else
    {

        // The main page with image matrix
        // Start HTML
        print $open_html;
        print $header_string;
        print "<body>";
        print $script;
        print $title;
        $page_num = !empty($page_num) ? $page_num : 0;
        $next_page=$page_num+1;
        $prev_page=$page_num-1;
        $img_indx = $page_num*$n_page_img;
        $n_page  = (int)($n_img/$n_page_img);    //Total number of pages
        $n_this_page_img = ($img_indx+$n_page_img > $n_img)? $n_img : $n_page_img*(1.+$page_num);
        if($img_indx > $n_page_img-1)
        {
            if($generate)
            {
                $turn_page = "<div class=\"turn_page\">
                       <a href=\"$current_sun$prev_page.html\" style=\"text-decoration:none\">Prev page |</a>";
            }
            else
            {
                $turn_page = "<div class=\"turn_page\">
                       <a href=\"{$GLOBALS['PHP_SELF']}?page_num=$prev_page\" style=\"text-decoration:none\">Prev page |</a>";
            }
        }
        else
        {
            $turn_page = "<div class=\"turn_page\">Prev page |";
        }

        if($n_img > $n_this_page_img)
        {
            if($generate)
            {
                $turn_page .= "
                       <a href=\"{$current_sun}$next_page.html\" style=\"text-decoration:none\"> Next page</a></div>";
            }
            else
            {
                $turn_page .= "
                       <a href=\"{$GLOBALS['PHP_SELF']}?page_num=$next_page\" style=\"text-decoration:none\"> Next page</a></div>";
            }
        }
        else
        {
            $turn_page .= " Next page</div>";
        }
        print $open_table;

        $value=array();
        $i_cnt = 0;
        for($i_img=$img_indx; $i_img<$n_this_page_img; $i_img++)
        {
            $url_thmb  = "http://".$img_arr['thumbURL'][$i_img];
            $url_hires = "http://".$img_arr['hiresURL'][$i_img];
            $thumb = $img_arr['thumb'][$i_img];
            $hires = $img_arr['hires'][$i_img];
            $src        = $url_thmb.$thumb ;
            $ref_string = $url_hires.$hires ;

            $caption = "<span title=\"".$img_arr['copywrite'][$i_img]."\" class='popup'>".$img_arr['caption'][$i_img]."</span>";
            $span = "<span><center>".$img_arr['copywrite'][$i_img]."</center>".$img_arr['description'][$i_img]."</span>";
            $caption = "<a href=\" \">".$img_arr['caption'][$i_img].$span."</a>";

            print $open_td;
            if($generate)
            {
                print <<<END
            <div id="img">
               <a class="img" href="{$ref_string}" onclick="return PopUp(this,$i_img)">
              <img src="{$src}" width="100" height="100"/>{$span}
               </a>
               <br />
               {$caption}
               <br />
            </div>
            </td>
END;
            }
            else
            {
                print <<<END
            <div id="img">
               <a class="img" href="{$GLOBALS['PHP_SELF']}?display=hires&ref_string={$ref_string}" onclick="return PopUp(this,$i_img)">
              <img src="{$src}" width="100" height="100"/>{$span}
               </a>
               <br />
               {$caption}
               <br />
            </div>
            </td>
END;
            }
            if (($i_cnt+1) % $n_col_img == 0)
            {
                print "</tr><tr>";
            }
            $i_cnt++;
        }
        // Adds " " to prevent netscape from complaining
            if (($i_cnt+1) % $n_col_img != 1)
            {
        for($i_img=0;$i_img<($n_col_img - $n_this_page_img % $n_col_img); $i_img++)
        {
            print $open_td;
            print "</td>";
        }
    }
        print "</tr>
           <th colspan=\"{$n_col_img}\" frame=\"above\">{$turn_page}</th>
                   </tbody>
           </table>
           </body>
           </html>
           ";
    }// if statement


    function img_dimensions($url)
    {
        list($img_w,$img_h,$type,$attr)=getImageSize($url);
        if($img_w != $img_h)
        {
            $img_side = ($img_w < $img_h) ? $img_w : $img_h;
        }
        return $img_side;
    }
    //clip:rect(0px 100px 200px 0px)


    if($generate)
    {
        $temp_file="$dir_name$current_sun$page_num.html";
        $fp = fopen($temp_file, "w");
        fwrite($fp, ob_get_contents());
        fclose($fp);
        ob_end_flush();

         `rsync -avz --stats --rsh=ssh  $temp_file sdsilva@polaris.umuc.edu:www/Sun/`;
    }
?>