<?php

function EnumQuery($name)
{
    $var  = $name . "Enum";
    $txt  = "";
    switch ($_GET[$var])
    {
    case 0: $txt .= ""; break;
    case 1: $txt .= $name . "='yes' AND "; break;
    case 2: $txt .= $name . "='no' AND "; break;
    case 3: $txt .= ""; break;
    }
    return $txt;
}

function PrintEnumMenu($name, $text)
{
    $var = $name . "Enum";

    if ($_GET[$name]=="On")
        $checked = "checked";
    else
        $checked = "";

    printf("    <input type='checkbox' name='%s' value='On' %s>%s\n", $name, $checked, $text);
    printf("<BR>");

    printf(" <select name='%s'>\n", $var);

    $status = array
        ( 0 => "all",
          1 => "yes",
          2 => "no",
          3 => "group by"
        );

    $stat=$_GET[$var];
    for ($i=0; $i<4; $i++)
    {
        if ($stat==$i)
            printf("<option value='%d' selected>%s</option>\n", $i, $status[$i]);
        else
            printf("<option value='%d'>%s</option>\n", $i, $status[$i]);
    }

    printf(" </select>\n");
    printf(" &nbsp;&nbsp;&nbsp;\n");

}

function StatusQuery($name, $needs)
{
    $var  = $name . "Status";
    $txt  = "";
    switch ($_GET[$var])
    {
    case 0: $txt .= ""; break;
    case 1: $txt .= "NOT (IsNull(" . $name . ") OR " . $name . "='1970-01-01 00:00:00') AND "; break;
    case 2: $txt .= "IsNull(" . $name . ") AND IsNull(fStartTime) AND IsNull(fFailedTime) AND NOT IsNull(" . $needs[$name] . ") AND "; break;
    case 3: $txt .= $name ."='1970-01-01 00:00:00' AND "; break;
    case 4: $txt .= " (IsNull(" . $name . ") AND IsNull(fFailedTime) AND NOT IsNull(fStartTime) AND date_sub(Now(),interval 12 hour) < fStartTime AND NOT IsNull(" . $needs[$name] . ")) AND "; break;
    case 5: $txt .= " (IsNull(" . $name . ") AND NOT IsNull(fFailedTime) AND NOT IsNull(fStartTime) AND NOT IsNull(" . $needs[$name] . ")) AND "; break;
    case 6: $txt .= " (IsNull(" . $name . ") AND IsNull(fFailedTime) AND NOT IsNull(fStartTime) AND date_sub(Now(),interval 12 hour) > fStartTime AND NOT IsNull(" . $needs[$name] . ")) AND "; break;
//    case 6: $txt .= "crashed"; break;
    case 7: $txt .= ""; break;
    }
    return $txt;
}

function PrintStatusMenu($name, $text)
{
    $var = $name . "Status";

    if ($_GET[$name]=="On")
        $checked = "checked";
    else
        $checked = "";

    printf("    <input type='checkbox' name='%s' value='On' %s>%s\n", $name, $checked, $text);
    printf("<BR>");

    printf(" <select name='%s'>\n", $var);

    $status = array
        ( 0 => "all",
          1 => "done",
          2 => "not done",
          3 => "not to be done",
          4 => "running",
          5 => "failed",
          6 => "crashed",
          7 => "group by",
        );

    $stat=$_GET[$var];
    for ($i=0; $i<8; $i++)
    {
        if ($stat==$i)
            printf("<option value='%d' selected>%s</option>\n", $i, $status[$i]);
        else
            printf("<option value='%d'>%s</option>\n", $i, $status[$i]);
    }

    /*
    $status = array("all", "done", "not done", "not to be done");
    $counter = 0;
    foreach ($status as $element)
    {
        if ($counter==$_GET[$var])
            printf("<option value=\"%d\" selected>%3s</option>\n", $counter++, $element);
        else
            printf("<option value=\"%d\">%3s</option>\n", $counter++, $element);
    }*/
    printf(" </select>\n");
    printf(" &nbsp;&nbsp;&nbsp;\n");

}

function PrintPullDown($host, $user, $pw, $db, $table, $name, $index, $descr)
{
    $db_id = mysql_connect($host, $user, $pw);
    if ($db_id==FALSE)
    {
            printf("mysql_connect returned the following error:<br>");
            printf("%s<br>", mysql_error());
            die("");
    }

    $query   = "SELECT " . $index . ", " . $name . " FROM " . $db . "." . $table . " ORDER BY " . $name;
    $result  = mysql_query($query);

    if (!$result)
    {
        printf("-N/A-");
        return;
    }

    $numrows = mysql_num_rows($result);

    if ($_GET[$name]=="On")
        $checked = "checked";
    else
        $checked = "";

    printf("    <input type='checkbox' name='%s' value='On' %s><A HREF='printtable.php?fTable=%s'>%s</A>\n", $name, $checked, $table, $descr);

    printf("   <BR>\n");

    printf("   <select name='%s' size='1' class='Width'>\n", $index);

    if (empty($_GET[$index]) || $_GET[$index]==0)
        printf("    <option value='0' selected>--- ALL ---</option>\n");
    else
        printf("    <option value='0'>--- ALL ---</option>\n");

    if (!empty($_GET[$index]) && $_GET[$index]==-1)
        printf("    <option value='-1' selected>--- GROUP BY ---</option>\n");
    else
        printf("    <option value='-1'>--- GROUP BY ---</option>\n");

    while ($row = mysql_fetch_row($result))
    {
        if (!empty($_GET[$index]) && $_GET[$index]==$row[0])
            printf("    <option value='%s' selected>%s</option>\n", $row[0], $row[1]);
        else
            printf("    <option value='%s'>%s</option>\n", $row[0], $row[1]);
    }
    printf("   </select>\n");
    printf("   &nbsp;\n", $index);
    
    mysql_free_result($result);

    mysql_close($db_id);
}

function GetMin($field, $table, $host, $user, $pw, $db)
{
    $db_id = mysql_connect($host, $user, $pw);
    if ($db_id==FALSE)
    {
            printf("mysql_connect returned the following error:<br>");
            printf("%s<br>", mysql_error());
            die("");
    }

    $query  = "SELECT MIN(" . $field . ") FROM " . $db . "." . $table;
    $result = mysql_query($query);
    if (!$result)
        return "0";

    $row = mysql_fetch_row($result);

    $min = $row[0];

    mysql_free_result($result);
    mysql_close($db_id);

    return $min;
}

function GetMax($field, $table, $host, $user, $pw, $db)
{
    $db_id = mysql_connect($host, $user, $pw);
    if ($db_id==FALSE)
    {
            printf("mysql_connect returned the following error:<br>");
            printf("%s<br>", mysql_error());
            die("");
    }

    $query  = "SELECT MAX(" . $field . ") FROM " . $db . "." . $table;
    $result = mysql_query($query);
    if (!$result)
        return "0";

    $row = mysql_fetch_row($result);

    $max = $row[0];

    mysql_free_result($result);
    mysql_close($db_id);

    return $max;
}

function GetMaxDate($field, $table, $host, $user, $pw, $db)
{
    $db_id = mysql_connect($host, $user, $pw);
    if ($db_id==FALSE)
    {
            printf("mysql_connect returned the following error:<br>");
            printf("%s<br>", mysql_error());
            die("");
    }

    $query  = "SELECT DATE_FORMAT(if(MAX(" . $field . ")<'13:00:00', MAX(" . $field . "), ADDDATE(MAX(" . $field . "), INTERVAL +1 DAY)), '%Y-%m-%d') FROM " . $db . "." . $table;
    $result = mysql_query($query);
    if (!$result)
        return "0";

    $row = mysql_fetch_row($result);

    $maxdate = $row[0];

    mysql_free_result($result);
    mysql_close($db_id);

    return $maxdate;
}

function PrintText($result0)
{
    header("Content-type: application/octet");
    header("Content-Disposition: attachment; filename=query-result.txt");

    while ($row0 = mysql_fetch_assoc($result0))
    {
        foreach ($row0 as $key => $element)
            printf("%s\t", $element);
        printf("\n");
    }
}

function PrintSubmittedQuery($query0, $html, $db, $old)
{
    //diplay query on old websites
    if (empty($old))
        printf("<tr class='Block' id='showquery' style='display:none'><td>");
    else
        printf("<tr class='Block' id='showquery' style='display:block'><td>");
    if ($html=="1")
    {
        printf("<b>DB:</b> %s <br>", $db);
        printf("<U><B>submitted query:</B></U><BR>%s<BR>", htmlspecialchars($query0));
    }
    printf("</td></tr>");
}

function Checkbox($value, $text)
{
    if ($_GET[$value]=="On")
        $checked = "checked";
    else
        $checked = "";

    printf("    <td><input type='checkbox' name='%s' value='On' %s>%s</td>\n", $value, $checked, $text);
}

function Checkbox2($val, $set, $text)
{
    $value=$val.$set;
    switch ($set)
    {
    case  "ON":
        if (!isset($_POST["submit"]) && ereg(" ".$val." ", $_GET["Set"]))
            $_POST[$value]="On";
        break;
    case "Off":
        if (!isset($_POST["submit"]) && ereg(" ".$val." ", $_GET["Set2"]))
            $_POST[$value]="On";
        break;
    }

    if ($_POST[$value]=="On")
        $checked = "checked";
    else
        $checked = "";

    printf("    <td><input type='checkbox' name='%s' value='On' %s>%s</td>\n", $value, $checked, $text);
}

function CheckWhere($column, $_GET)
{
    foreach ($_GET as $key => $element)
    {
        if ($key==$column)
        {
            if ($element>0)
                printf ("FIXED: %s<BR>", $column);
            return $element;
        }
    }
    return 0;
}

function CheckGroup($column, $_GET)
{
    foreach ($_GET as $key => $element)
    {
        if ($key==$column)
        {
            //if ($element==-1)
            //    printf ("GROUP: %s<BR>", $column);
            return $element;
        }
    }
    return 0;
}

function CheckStatusGroup($column, $_GET)
{
    foreach ($_GET as $key => $element)
        if ($key==$column)
            if ($element==7)
                return -1;
    return 0;
}

function CheckEnumGroup($column, $_GET)
{
    foreach ($_GET as $key => $element)
        if ($key==$column)
            if ($element==3)
                return -1;
    return 0;
}

function CreateMenu($rows)
{
    $menu = "";

    if (empty($_GET["fNumResults"]))
        return;

    if ($_GET["fNumStart"]!=0)
    {
        $uri = htmlspecialchars($_SERVER["REQUEST_URI"]);
        $pos = strpos($uri, "fNumStart");
        $amp3=FALSE;
        if ($pos!=FALSE)
        {
            $amp1 = substr($uri, 0, $pos-1);
            $amp2 = substr($uri, $pos);
            $amp3 = strchr($amp2, "&");

            $uri = $amp1;
        }
        $pos = $_GET["fNumStart"]-$rows;
        if ($pos<0)
            $pos=0;
        $uri .= "&fNumStart=" . $pos;
        if ($amp3!=FALSE)
            $uri .= $amp3;

        $menu .= "<A HREF='" . $uri . "'><<< Prev</A>\n";
    }

    $menu .= "&nbsp;&nbsp;&nbsp;---&nbsp;<B>";
    $menu .= $_GET["fNumStart"];
    $menu .= "</B>&nbsp;---&nbsp;&nbsp;&nbsp;\n";

    if ($rows==$_GET["fNumResults"])
    {
        $uri = $_SERVER["REQUEST_URI"];
        $pos = strpos($uri, "fNumStart");
        $amp3=FALSE;
        if ($pos!=FALSE)
        {
            $amp1 = substr($uri, 0, $pos-1);
            $amp2 = substr($uri, $pos);
            $amp3 = strchr($amp2, "&");

            $uri = $amp1;
        }
        $uri .= "&fNumStart=" . ($_GET["fNumStart"]+$rows);
        if ($amp3!=FALSE)
            $uri .= $amp3;

        $menu .= "<A HREF='" . htmlspecialchars($uri) . "'>Next >>></A>\n";
    }
    return $menu;
}

function RemoveSortBy()
{
    $menu = "";

    $uri = $_SERVER["REQUEST_URI"];
    $pos = strpos($uri, "fSortBy");
    $amp3=FALSE;
    if ($pos!=FALSE)
    {
        $amp1 = substr($uri, 0, $pos-1);
        $amp2 = substr($uri, $pos);
        $amp3 = strchr($amp2, "&");

        $uri = $amp1;
    }

    return $uri;
}

function FindAlias($alias, $search)
{
    foreach ($alias as $key => $element)
        if ($element==$search)
            return $key;

    if ($search=="# Runs")
        return "NumRuns";
    if ($search=="# Sequ")
        return "NumSequ";
    if ($search=="# Datasets")
        return "NumDS";
    if ($search=="# days")
        return "NumDays";
    return $search;
    return "";
}

function PrintMagicTable($result0, $alias, $rightalign, $limitsmean, $limitsmin, $limitsmax, $form, $_GET)
{
    $col   = FALSE;
    $first = TRUE;

    $sigma = array
        (
         1    => "#33CC00",
         2    => "#FFFF66",
         3    => "#FF9900",
         5    => "#FF0000",
        );
    $okcolour="#006600";


    $menu = CreateMenu(mysql_num_rows($result0));

    printf("\n<center>\n");
    if ($form)
        printf("<form method='POST'>");
    if (empty($_GET["fPrintTable"]))
        printf("<p>%s<P>\n", $menu);
    printf("<table BORDER='0'>\n");
    while ($row0 = mysql_fetch_assoc($result0))
    {
        if ($first)
        {
            printf(" <tr BGCOLOR='#C0C0C0'>\n");
            $first = FALSE;
            if ($form)
                printf("<td>ON</td><td>Off</td>");
            foreach ($row0 as $key => $element)
            {
                $col = FindAlias($alias, $key);

                $ord="-";
                $issort = "";
                if (!empty($_GET["fSortBy"]) && substr($_GET["fSortBy"], 0, -1)==$col)
                {
                    if (substr($_GET["fSortBy"], -1)=="-")
                    {
                        $ord="+";
                        $issort="&nbsp;<IMG SRC='down.gif'>";
                    }
                    else
                        $issort="&nbsp;<IMG SRC='up.gif'>";
                }
                printf("  <th>&nbsp;<A HREF='%s&amp;fSortBy=%s%s'>%s</A>%s&nbsp;</th>\n",
                       htmlspecialchars(RemoveSortBy()), $col, $ord, $key, $issort);
            }
            printf(" </tr>\n\n");
        }

        if (!$col)
            printf(" <tr BGCOLOR='#E0E0E0'>\n");
        else
            printf(" <tr BGCOLOR='#D0D0D0'>\n");
        $col = !$col;

        if ($form)
        {
            CheckBox2($row0["Sequ"], "ON","");
            CheckBox2($row0["Sequ"], "Off","");
        }
        foreach ($row0 as $key => $element)
        {
            if (empty($rightalign[$key]))
                printf("  <td align='left'>");
            else
                printf("  <td align='right'>");

            $colour='#000000';
            //determine color of text in cell
            if (!empty($limitsmean))
            {
                foreach($limitsmean as $key2 => $element2)
                {
                    $mean=$key2 . "Mean";
                    $rms2=$key2 . "Rms";
                    if ($key==$alias[$element2] && !empty($_GET[$mean]) && !empty($_GET[$rms2]))
                    {
                        $colour=$okcolour;
                        foreach ($sigma as $margin => $newcolour)
                        {
                            $min=$_GET[$mean] - ($margin * $_GET[$rms2]);
                            $max=$_GET[$mean] + ($margin * $_GET[$rms2]);
                            if (!($min < $element && $element < $max))
                                $colour=$newcolour;
                        }
                    }
                }
            }
            if (!empty($limitsmin))
            {
                foreach($limitsmin as $key2 => $element2)
                {
                    $limit1=$key2 . "1";
                    $limit2=$key2 . "2";
                    if ($key==$alias[$element2] && !empty($_GET[$limit1]))
                    {
                        if ($colour=='#000000')
                            $colour=$okcolour;

                        if (!empty($_GET[$limit2]) && $_GET[$limit2] > $element)
                                $colour=$sigma[5];

                        if ($_GET[$limit1] > $element && $_GET[$limit2] <= $element)
                            $colour=$sigma[3];
                    }
                }
            }

            if (!empty($limitsmax))
            {
                foreach($limitsmax as $key2 => $element2)
                {
                    $limit1=$key2 . "1";
                    $limit2=$key2 . "2";
                    if ($key==$alias[$element2] && !empty($_GET[$limit1]))
                    {
                        if ($colour=='#000000')
                            $colour=$okcolour;

                        if (!empty($_GET[$limit2]) && $_GET[$limit2] < $element)
                                $colour=$sigma[5];

                        if ($_GET[$limit1] < $element && $_GET[$limit2] >= $element)
                            $colour=$sigma[3];
                    }
                }
            }
            if ($colour!='#000000' && (!empty($limitsmean) || !empty($limitsmin) || !empty($limitsmax)))
                printf("<font color='%s' style='font-weight:bold'>", $colour);

            //fill text in cell
            printf("&nbsp;%s&nbsp;</td>\n", str_replace("&ws;", " ", str_replace(" ", "&nbsp;", $element)));

            if ($colour!='#000000' && (!empty($limitsmean) || !empty($limitsmin) || !empty($limitsmax)))
                printf("</font>");
        }
        printf(" </tr>\n");
    }
    printf("</table>\n");

    /*
     $info = mysql_info();
     if (!empty($info))
     printf("%s<BR>\n", $info);
     */

    printf("<P><B>Number of displayed results: %d</B><P><P>\n", mysql_num_rows($result0));
    if (empty($_GET["fPrintTable"]))
        printf("%s\n", $menu);
    printf("<P>\n");

    if (!$form)
    {
        printf("</center>\n");
        printf("</td>\n");
        printf("</tr>\n");
    }
}

?>
