Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 9153)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 9154)
@@ -69,7 +69,20 @@
        overwritten
 
+   * datacenter/db/tabs.js:
+     - added (js for tabs.php)
+
+   * datacenter/db/tabs.css:
+     - added (layout for tabs.php)
+
 
 
  2008/11/11 Daniela Dorner
+
+   * datacenter/db/tabs.php:
+     - fixed path for ganymed
+     - added plotdb for ganymed
+
+   * datacenter/db/datasetinfo-aio.php:
+     - added link for plotdb for ganymed
 
    * datacenter/db/datasetinfo-aio.php, datacenter/db/sequinfo-aio.php:, 
Index: /trunk/MagicSoft/Mars/datacenter/db/datasetinfo-aio.php
===================================================================
--- /trunk/MagicSoft/Mars/datacenter/db/datasetinfo-aio.php	(revision 9153)
+++ /trunk/MagicSoft/Mars/datacenter/db/datasetinfo-aio.php	(revision 9154)
@@ -46,4 +46,5 @@
                     $query0 .= ", CONCAT('<A&ws;HREF=\"http://www.astro.uni-wuerzburg.de/datacenter/datasets/' , LEFT(LPAD(CONCAT(DataSets.fDataSetNumber, '.'), 9,'0'),5), '/dataset', LPAD(CONCAT(DataSets.fDataSetNumber , '.txt'), 12,'0') , '\">f</A>' ";
                     $query0 .= ", '&nbsp;<A&ws;HREF=\"tabs.php?t=ganymed&n=' , fDataSetNumber, '\">g</A>'";
+                    $query0 .= ", '&nbsp;<A&ws;HREF=\"tabs.php?t=gplotdb&n=' , fDataSetNumber, '\">pdb</A>'";
 //                    $query0 .= ", '&nbsp;<A&ws;HREF=\"ganymed.php?fDataSetNo=', DataSets.fDataSetNumber, '\">i</A>' ";
                     $query0 .= ") as 'Links'";
Index: /trunk/MagicSoft/Mars/datacenter/db/tabs.css
===================================================================
--- /trunk/MagicSoft/Mars/datacenter/db/tabs.css	(revision 9154)
+++ /trunk/MagicSoft/Mars/datacenter/db/tabs.css	(revision 9154)
@@ -0,0 +1,244 @@
+/* ************************************************** 
+ * Tab support based on http://www.alistapart.com/articles/slidingdoors/
+ * ************************************************** */
+
+body {
+  /* font: x-small sans-serif; */
+  background: #f9f9f9 url(/ewiki/skins/monobook/headbg.jpg) 0 0 no-repeat;
+  color: black;
+/*  margin: 0;
+  padding 0;*/
+}
+
+
+.tabs,.tabs-blue {
+  float:left;
+/*  width:5000;*/  /* STUPID HACK */
+/*  background:#DAE0D2 url("Tab-bg.gif") repeat-x bottom;*/
+  font-size:93%;
+  line-height:normal;
+  margin: 0;
+  padding: 0;
+}
+.tabs-blue {
+/*  background:#CCCCFF url("SDbg.gif") repeat-x bottom;*/
+}
+
+.tabs ul,.tabs-blue ul {
+  margin:0;
+  padding:10px 10px 0px;
+  list-style:none;
+  overflow:hidden;
+/*  display:none;*/
+/*  border-collapse:collapse;*/
+/*  height:2.6ex;*/
+}
+
+.tabs li,.tabs-blue li {
+  background:url("Tab-left.gif") no-repeat left top;
+  margin:0;
+  padding:0 0 0 9px;
+  float:left;
+/*  float:right;
+  direction:rtl;*/
+}
+
+/* MediaWiki automatically removes links for the current page and surrounds it with <strong> tags instead */
+.tabs a,.tabs-blue a,.tabs strong,.tabs-blue strong {
+  float:none;
+  display:block;
+  background:url("Tab-right.gif") no-repeat right top;
+  padding: 3px 8px 2px 0px;
+  text-decoration:none;
+  font-weight:bold;
+  font-family:Arial,Helvetica,Sans-serif;
+  font-size: x-small;
+  color:#765;
+}
+
+.tabs-blue li {
+  background:url("SDleft.gif") no-repeat left top;
+/*  border-bottom: 1px solid #aa9988;*/
+}
+
+.tabs-blue a,.tabs-blue strong {
+  background:url("SDright.gif") no-repeat right top;
+}
+
+.tabs-blue #current {
+  background-image:url("SDleft_on.gif");
+}
+
+.tabs-blue #magnify {
+  background-image:url("Tab-left.gif");
+  margin: 0 7px 0 0;
+}
+.tabs-blue #magnify a,.tabs-blue #current strong {
+  background-image:url("Tab-right.gif");
+}
+
+.tabs-blue #prevnext {
+   background-image:url("Tab-left.gif");
+   float:right;
+}
+.tabs-blue #prevnext a,.tabs-blue #current strong {
+  background-image:url("Tab-right.gif");
+}
+
+.tabs-blue #current a,.tabs-blue #current strong {
+  background-image:url("SDright_on.gif");
+}
+
+.tabs #current {
+  background-image:url("Tab-left_on.gif");
+}
+
+.tabs-blue #current {
+   border-bottom:none;
+}
+
+.tabs #current a,.tabs #current strong,.tabs-blue #current a, .tabs-blue #current strong {
+  background-image:url("Tab-right_on.gif");
+  color:#825;
+  padding-bottom:3px;
+/*  border-bottom:none;*/
+}
+
+.tabcontent {
+  font:             x-small sans-serif;
+/*  border:           1px dashed #aa9988;
+  padding:          5px 7px 5px 5px;
+  border-top:       none;*/
+  border:           1px solid #aa9988;
+  padding: 0;
+
+/*  background-color: #f6f6f0;*/
+background-color: #ffffff;
+  color:            #000;
+  clear:   	    both;
+  /*opacity:          0.8;*/
+  border-collapse:collapse;
+  /*cursor:url("zoomin.cur");*/
+}
+
+.tabcontent #prevtab {
+  float: left;
+  margin-top: -1.5em; 
+  background-color: #DAE0D2; 
+  color: #000; 
+  padding: .2em .6em; 
+  font-size: 130%; 
+  border: 1px solid #765;
+}
+
+.tabcontent #nexttab {
+  float: right; 
+  margin-top: -1.5em; 
+  background-color: #DAE0D2; 
+  color: #000; 
+  padding: .2em .6em; 
+  font-size: 130%; 
+  border: 1px solid #765;
+}
+
+/* Commented Backslash Hack
+   hides rule from IE5-Mac \*/
+.tabs a, .tabs-blue a {float:none;}
+/* End IE5-Mac hack */
+.tabs a:hover, .tabs-blue a:hover {
+  color:#001;
+}
+
+.marstable {
+  font: small sans-serif;
+}
+
+.marstable tr {
+  background-color: #eeeeee;
+}
+
+.marstable #title {
+   text-align:       center;
+   font-weight:      bold;
+   font-size:        150%;
+   background-color: #cccccc;
+   border: 1px solid #bbaa99;
+   background-image:url("box_mtl_ctr.gif");
+}
+
+.marstable #left {
+  text-align: right;
+  padding:0px 5px;
+}
+
+.marstable #middle {
+  text-align: center;
+  padding:1px 5px;
+}
+
+.marstable #right {
+  text-align: left;
+  padding:0px 5px;
+}
+
+.marstable a {
+  font-weight:bold;
+  text-decoration:none;
+  color:#63F;
+}
+
+/* Commented Backslash Hack
+   hides rule from IE5-Mac \*/
+.marstable a {float:none;}
+/* End IE5-Mac hack */
+.marstable a:hover {
+  color:#333;
+}
+
+a.tooltip {
+   text-decoration:none;  
+}                  
+
+.tooltip span.info {
+   display: none;
+}
+
+.tooltip:hover span.info {
+   margin:     20px 5px 5px 5px;
+   padding:    3px 15px 5px 15px;
+   border:     1px solid #808080;
+   background: #F6F6F6;
+   display:    block;
+   position:   absolute;
+   width:      200px;
+   font-size:  small;
+   opacity:    0.94;
+}
+
+.tooltip span.preview {
+   display:none;
+}
+
+.tooltip:hover span.preview {
+   padding:    30px 40px 30px 40px;
+   border:     1px solid #808080;
+   background: #F0F0F8;
+   display:    block;
+   position:   fixed;
+   top:        100;
+   right:      40;
+   opacity:    0.95;
+   text-align: center;
+   font-size:  14;
+}
+
+.tooltip:hover img {
+   border:     1px solid #808080;
+}
+
+.tooltip span.preview div {
+   padding:          4px 0px 4px;
+   background-color: #C0C0C8;
+   border:           1px solid #808080;
+   border-bottom:    none;
+}
Index: /trunk/MagicSoft/Mars/datacenter/db/tabs.js
===================================================================
--- /trunk/MagicSoft/Mars/datacenter/db/tabs.js	(revision 9154)
+++ /trunk/MagicSoft/Mars/datacenter/db/tabs.js	(revision 9154)
@@ -0,0 +1,384 @@
+var gFit    = true;
+var gWidth  = 800;
+var gHeight = 600;
+
+function getStyle(element, strCssRule)
+{
+    if (document.defaultView && document.defaultView.getComputedStyle)
+        return document.defaultView.getComputedStyle(element, "").getPropertyValue(strCssRule);
+
+    if (!element.currentStyle)
+        return "";
+
+    strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1) { return p1.toUpperCase(); });
+    return element.currentStyle[strCssRule];
+}
+
+function getIntStyle(element, strCssRule)
+{
+    if (getStyle(element, strCssRule)=="auto")
+        return 0;
+
+    return parseInt(getStyle(element, strCssRule).replace("px", ""));
+}
+
+function HasClass(element, classname)
+{
+    if (!element)
+        return "";
+
+    var elemClasses = element.className.split(' '); // get list of classes
+    for (var i=0; i<elemClasses.length; i++)
+    {
+        var elemClass = elemClasses[i];
+        if (elemClass.substring(0, classname.length)==classname)
+            return elemClass.substring(classname.length, elemClass.length);
+    }
+    return "";
+}
+
+function GetCurrentTab()
+{
+    var element = document.getElementById('current');
+
+    var sub = HasClass(element, "tabno");
+    return sub ? parseInt(sub) : -1;
+}
+
+function GetFirstVisibleTab()
+{
+    var currentTab = GetCurrentTab();
+    if (currentTab<0)
+        return -1;
+
+    var elems = document.getElementsByTagName("li");
+    for (var i=0; i<elems.length; i++)
+    {
+        var n = HasClass(elems[i], "tabno");
+        if (!n || n=='0')
+            continue;
+
+        if (elems[i].style.display=='none')
+            continue;
+
+        return i;
+    }
+
+    return -1;
+}
+
+function Hide()
+{
+    var tab = GetFirstVisibleTab();
+    if (tab<0)
+        return;
+
+    var elems = document.getElementsByTagName("li");
+    if (tab<elems.length-1)
+        elems[tab].style.display = 'none';
+}
+
+function Show()
+{
+    var tab = GetFirstVisibleTab();
+    if (tab<0)
+        return;
+
+    var elems = document.getElementsByTagName("li");
+    if (tab>0)
+        elems[tab-1].style.display='block';
+}
+
+function Switch(tabnum)
+{
+    var cnt = 0;
+
+    var elems = document.getElementsByTagName("li");
+    for (var i=0; i<elems.length; i++)
+    {
+        if (HasClass(elems[i], "tabno"))
+        {
+            elems[i].id = "";
+            cnt++;
+        }
+    }
+
+    tabnum = (tabnum+cnt)%cnt;
+
+    for (var i=0; i<elems.length; i++)
+    {
+        if (!HasClass(elems[i], "tabno"))
+            continue;
+
+        if (tabnum-->0)
+            continue;
+
+        elems[i].id = 'current';
+        break;
+    }
+
+    var cur = document.getElementById('current');
+    if (!cur)
+        return;
+
+    var elem = cur.getElementsByTagName('a')[0];
+    var type = HasClass(elem, "load_");
+
+    if (type=="png")
+        LoadImg(elem.name);
+    if (type=="html")
+        LoadLog(elem.name);
+    if (type=="rc")
+        LoadRc(elem.name);
+    if (type=="def")
+        Mars();
+}
+
+function Add(i)
+{
+    var currentTab = GetCurrentTab();
+    if (currentTab<0)
+        return;
+
+    Switch(currentTab+i);
+}
+
+function GetWidth()
+{
+    var dw = 0;
+
+    var element1 = document.getElementById('tabcontent');
+    dw += getIntStyle(element1, "padding-right");
+    dw += getIntStyle(element1, "padding-left");
+
+    dw += 2*14;   // width of box_mtl_topl.gif and box_mtl_topr.gif
+
+    return gFit ? document.width-dw : gWidth;
+}
+
+function GetHeight()
+{
+    var element = document.getElementById('tabcontent');
+
+    var dh = 0;
+    dh += getIntStyle(element, "padding-top");
+    dh += getIntStyle(element, "padding-bottom");
+
+    return gFit ? (document.width-dh)*gHeight/gWidth : gHeight;
+}
+
+function ChangeCursor()
+{
+//    document.body.style.cursor='url(magnify-glass.cur)';
+}
+
+function LoadImg(fname)
+{
+    var img = new Image();
+    img.src = fname;
+
+    gWidth  = img.width;
+    gHeight = img.height;
+
+    document.getElementById('tabcontent').innerHTML =
+        "<IMG id='mainpic' "+
+        "onclick='ToggleSize();' style='background-color:#ffffff;' alt='"+fname+"' "+
+        (GetWidth()>0 ?("width='"+GetWidth()+"'"):"")+
+        (GetHeight()>0?("height='"+GetHeight()+"'"):"")+
+        " src='"+fname+"'"+"></IMG>";
+}
+
+function LoadImgTT(fname)
+{
+    var img = new Image();
+    img.src = fname;
+
+    var w = 480;
+    var h = 480*img.height/img.width;
+
+    var elements = document.getElementsByTagName('span');
+    for (var i=0; i<elements.length; i++)
+    {
+        var elemClasses = elements[i].className.split(' '); // get list of classes
+        for (var j=0; j<elemClasses.length; j++)
+        {
+            if (elemClasses[j]=="preview")
+            {
+                elements[i].getElementsByTagName('span')[0].innerHTML =
+                    "<IMG style='background-color:#ffffff;' alt='"+fname+"' width='"+w+"' height='"+h+"' src='"+fname+"'"+"></IMG>";
+                break;
+            }
+        }
+
+    }
+}
+
+function Mars()
+{
+    document.getElementById('tabcontent').innerHTML = "<div style='padding:1 5 5 15;'>"
+        + document.getElementById('default').innerHTML + "</div>";
+    // width:"+GetWidth()+";height:"+GetHeight()+"
+}
+
+function Size(fit)
+{
+    gFit = fit;
+
+    Resize();
+
+    var element = document.getElementById('mainpic');
+    if (!element)
+        return;
+
+    element.width  = GetWidth();
+    element.width  = GetWidth(); /* INTENTIONAL */
+    element.height = GetHeight();
+}
+
+function ToggleSize()
+{
+    Size(!gFit);
+    document.getElementById('magtxt').innerHTML = gFit ? "O" : "Z";
+    Resize();
+}
+
+function Resize()
+{
+    var e = document.getElementById('tabsul');
+    var h = getIntStyle(document.getElementById('magnify'), "height");
+    var p = getIntStyle(e, "padding-right");
+
+    // Order is important!
+    e.style.height = h;  // +1 to show the bottom border
+    e.style.width  = document.width-p*2;
+
+/*
+    var w = 0;
+
+    w += getIntStyle(element, "padding-right");
+    w += getIntStyle(element, "padding-left");
+
+    document.getElementById('myContent').innerHTML = w+" ";
+
+    var elements = document.getElementsByTagName('li');
+    for (var i=0; i<elements.length; i++)
+    {
+        w += getIntStyle(elements[i], "padding-left");
+        w += getIntStyle(elements[i], "padding-right");
+        w += getIntStyle(elements[i], "width");
+    }
+
+    document.getElementById('tabs').style.width = w;*/
+}
+
+var xmlHttpObject = false;
+if (typeof XMLHttpRequest != 'undefined')
+    xmlHttpObject = new XMLHttpRequest();
+
+if (!xmlHttpObject)
+{
+    try { xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }
+    catch(e) 
+    {
+        try { xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }
+        catch(e) { xmlHttpObject = null; }
+    }
+}
+
+function LoadLog(file)
+{
+
+    document.getElementById('tabcontent').innerHTML = 
+        '<iframe style="border-width:1px;border-style:solid;" frameborder="0" height="90%" width="100%" src="'+file+'">'+
+        '<P>Please click <a href="'+file+'">here</a>.</P>'+
+        '</iframe>';
+
+    /*
+    xmlHttpObject.open('get', file);
+    xmlHttpObject.onreadystatechange = handleContentLog;
+    xmlHttpObject.send(null);
+    return false;*/
+}
+
+function handleContentLog()
+{
+    /*
+       0: nicht initialisiert
+       1: objekt bereit aber noch keine daten gesendet
+       3: daten werden empfangen
+       4: alle daten wurden empfangen
+       */
+    if (xmlHttpObject.readyState == 4)
+    {
+        document.getElementById('tabcontent').innerHTML = xmlHttpObject.responseText;
+    }
+}
+
+function LoadRc($file)
+{
+    document.getElementById('tabcontent').innerHTML = 
+        '<iframe style="border-width:1px;border-style:solid;" frameborder="0" height="90%" width="100%" src="'+file+'">'+
+        '<P>Please click <a href="'+file+'">here</a>.</P>'+
+        '</iframe>';
+/*
+    xmlHttpObject.open('get', $file);
+    xmlHttpObject.onreadystatechange = handleContentRc;
+    xmlHttpObject.send(null);
+    return false;*/
+}
+
+function handleContentRc()
+{
+    /*
+     0: nicht initialisiert
+     1: objekt bereit aber noch keine daten gesendet
+     3: daten werden empfangen
+     4: alle daten wurden empfangen
+     */
+    if (xmlHttpObject.readyState == 4)
+    {
+        document.getElementById('tabcontent').innerHTML = "<pre>"+xmlHttpObject.responseText+"<pre>";
+    }
+}
+
+function LoadLogTT(file)
+{
+    return false;
+
+    xmlHttpObject.open('get', file);
+    xmlHttpObject.onreadystatechange = handleContentTT;
+    xmlHttpObject.send(null);
+    return false;
+}
+
+function handleContentTT()
+{
+    /*
+     0: nicht initialisiert
+     1: objekt bereit aber noch keine daten gesendet
+     3: daten werden empfangen
+     4: alle daten wurden empfangen
+     */
+    if (xmlHttpObject.readyState == 4)
+    {
+        var elements = document.getElementsByTagName('span');
+        for (var i=0; i<elements.length; i++)
+        {
+            var elemClasses = elements[i].className.split(' '); // get list of classes
+            for (var j=0; j<elemClasses.length; j++)
+            {
+                if (elemClasses[j]=="preview")
+                {
+                    elements[i].innerHTML = xmlHttpObject.responseText;
+                    break;
+                }
+            }
+
+        }
+    }
+}
+
+function Execute()
+{
+   Size(gFit);
+}
Index: /trunk/MagicSoft/Mars/datacenter/db/tabs.php
===================================================================
--- /trunk/MagicSoft/Mars/datacenter/db/tabs.php	(revision 9153)
+++ /trunk/MagicSoft/Mars/datacenter/db/tabs.php	(revision 9154)
@@ -11,4 +11,5 @@
      "signal"  => "/callisto/",
      "ganymed" => "/ganymed/",
+     "gplotdb" => "/ganymed/",
      "db"      => "/plotdb/",
      "status"  => "/status/",
@@ -23,4 +24,5 @@
      "signal"  => "signal",
      "ganymed" => "ganymed",
+     "gplotdb" => "plotdb",
      "db"      => "plotdb",
      "status"  => "plotstat",
@@ -35,4 +37,5 @@
      "signal"  => "signal",
      "ganymed" => "ganymed",
+     "gplotdb" => "gplotdb",
      "db"      => "plotdb",
      "status"  => "status",
@@ -49,5 +52,8 @@
    $path = $htpath.$paths[$type];
    if ($number>0)
-      $path = sprintf($path."%04d/%08d/", $number/10000, $number);
+       if ($type=="ganymed" || $type=="gplotdb")
+           $path = sprintf($path."%05d/%08d/", $number/1000, $number);
+       else
+           $path = sprintf($path."%04d/%08d/", $number/10000, $number);
 ?>
 <?
