//show_url("http://mysite.com/kkk")
//show_url()
//show_url(window.location.url)
//alert("My name  is " + name);
/*
alert("Frame count: " + window.length);
document.clear();
document.close();
document.open();
document.write("<frameset rows=\"300,* \">");
document.write("  <frame name=\"top_frame\" src=\"show_top.html\" />");
document.write("  <frameset cols=\"50%,50%\">");
document.write("    <frame name=\"sel_frame\" />");
document.write("    <frame name=\"plot_frame\" />");
document.write("  </frameset>");
document.write("</frameset>");
document.close();
alert("Frame count: " + window.length);
*/
var use_frames = top.length;
var topdoc = document;
var seldoc = document;
var plotdoc = document;
if ( use_frames ) {
  topdoc = top.top_frame.document;
  seldoc = top.sel_frame.document;
  seldoc.close();
  seldoc.open();
  plotdoc = top.plot_frame.document;
  plotdoc.close();
  plotdoc.open();
}
topdoc.close();
topdoc.open();
var inurl = parse_url();
var base = inurl.dir + "/results";
//var base = "results";
var rel = "";
var ds = "";
var sel = "";
var plot = "";
var gurl = "";
var bigspace = "&nbsp;&nbsp;&nbsp;";
var dbg = 0;
if ( inurl.queries.length == 0 ) {
  topdoc.writeln("One or more performance plots may be displayed");
  topdoc.writeln("with the following syntax:<br>");
  topdoc.writeln(bigspace + inurl.page + "&field=value?field=value?.../draw/...<br>");
  topdoc.writeln("where field is any of the following:<br>");
  topdoc.writeln(bigspace + "rel = release name<br>");
  topdoc.writeln(bigspace + "ds = dataset name<br>");
  topdoc.writeln(bigspace + "sel = muon selection<br>");
  topdoc.writeln(bigspace + "plot = plot name<br>");
  topdoc.writeln("A plot is drawn for each draw command using the preceding");
  topdoc.writeln("release, dataset, selection and plot.<br>");
  topdoc.writeln("Append show=plot to view the current plot<br>");
  topdoc.writeln("Append show=index to view the current index of plots<br>");
  topdoc.writeln("<br>");
  topdoc.writeln("For example:<br>");
  exurl = inurl.page + "?rel=12.0.3?ds=mc12.007233.simul_reco_ideal0.mu_pt100GeV.aod?sel=muid?plot=feff_reta?plot=geff_reta?draw?sel=staco?draw";
  document.writeln(bigspace + "<a href=" + exurl + ">" + exurl + "</a><br>");
  document.writeln("<br>");
  gurl = inurl.url + "?ls";
  document.writeln("Plots may also be constructed <a href=" + gurl + ">interactively</a>.");
}
levnames = new Array();
levnames[0] = "top";
levnames[1] = "release";
levnames[2] = "dataset";
levnames[3] = "selection";
levnames[4] = "plot";
levfields = new Array();
levfields[0] = "";
levfields[1] = "rel";
levfields[2] = "ds";
levfields[3] = "sel";
levfields[4] = "plot";
var level = 0;
drawurls = new Array();       // URL for each plot.
drawtitles = new Array();     // Title for each plot.
drawdescs = new Array();       // Description of each plot.
var ndraw = 0;                // Number of plots.
var dodraw = 1;
var showplot = "";            // Either plot to show the last plot or index
                              // to show the index of plots.
topdoc.writeln("<table cellspacing=\"20\"><tr><td colspan=\"2\">");
/*
topdoc.writeln("<tgroup cols=\"2\">");
topdoc.writeln("<colspec colnum=\"1\" colname=\"col1\">");
topdoc.writeln("<colspec colnum=\"2\" colname=\"col2\">");
topdoc.writeln("<entry namest=\"col1\" nameend=\"col2\" align=\"left\">")
topdoc.writeln("</entry>");
*/

for ( i=0; i<inurl.queries.length; ++i ) {
  query = inurl.queries[i];
  vals = query.split("=");
  lhs = vals[0];
  rhs = "";
  if ( vals.length > 1 ) rhs = vals[1];
  gurl = base + ds + "/" + sel + "/" + plot;
  if ( dbg ) document.writeln("Query: " + lhs + " " + rhs + "</br>");
  if ( lhs == "rel" ) {
    rel = rhs;
    level = 1;
  } else if ( lhs == "ds" ) {
    ds = rhs;
    level = 2;
  } else if ( lhs == "sel" ) {
    sel = rhs;
    level = 3;
  } else if ( lhs == "plot" ) {
    plot = rhs;
    level = 4;
  // Directory listing for the current level.
  } else if ( lhs == "ls" ) {
    if ( rhs == "rel" ) level = 0;
    if ( rhs == "ds" && rel.length ) level = 1;
    if ( rhs == "sel" && rel.length && ds.length ) level = 2;
    if ( rhs == "plot" && rel.length && ds.length && sel.length ) level = 3;
    // Strip ls query from base URL.
    baseurl = inurl.url;
    lsquery = "";
    for ( ic=(baseurl.length-3); ic>=0; --ic ) {
      if ( baseurl.substring(ic,ic+3) == "?ls" ) {
        lsquery = baseurl.substring(ic, baseurl.length);
        baseurl = baseurl.substring(0,ic);
        break;
      }
    }
    // Strip show query from base URL.
    shquery = "";
    for ( ic=(baseurl.length-5); ic>=0; --ic ) {
      if ( baseurl.substring(ic,ic+5) == "?show" ) {
        shquery = baseurl.substring(ic, baseurl.length);
        baseurl = baseurl.substring(0,ic);
        break;
      }
    }
    // Show the defined plots.
    if ( ndraw ) {
      topdoc.writeln("The following plots have been defined:<br>");
      for ( id=0; id<ndraw; ++id ) {
        topdoc.writeln(bigspace + drawdescs[id] + "<br>");
      }
      topdoc.writeln("<a href=" + baseurl + ">Show plots" + "</a><br><br>");
    }
    // Show the current plot description.
    crel = rel;
    if ( ! rel.length ) crel = "NO_RELEASE";
    cds = ds;
    if ( ! ds.length ) cds = "NO_DATASET";
    csel = sel;
    if ( ! sel.length ) csel = "NO_SELECTION";
    cplot = plot;
    if ( ! plot.length ) cplot = "NO_PLOT";
    topdoc.writeln("Current release/dataset/selection/plot: <br>");
    topdoc.writeln(bigspace);
    topdoc.writeln("<a href=" + baseurl + shquery + "?ls=rel>" + crel + "</a>");
    topdoc.writeln(bigspace);
    topdoc.writeln("<a href=" + baseurl + shquery + "?ls=ds>" + cds + "</a>");
    topdoc.writeln(bigspace);
    topdoc.writeln("<a href=" + baseurl + shquery + "?ls=sel>" + csel + "</a>");
    topdoc.writeln(bigspace);
    topdoc.writeln("<a href=" + baseurl + shquery + "?ls=plot>" + cplot + "</a>");
    topdoc.writeln("<br>");
    cwd = "";
    // Build the directory name and URL for this level.
    if ( level > 0 ) cwd += rel;
    if ( level > 1 ) cwd += "/" + ds;
    if ( level > 2 ) cwd += "/" + sel;
    //if ( level > 3 ) cwd += "/" + plot;
    gurlbase = base;
    if ( cwd.length ) gurlbase += "/" + cwd;
    // Define document reader.
    docreader = new DocReader;
    docreader.ntry = 4;
    docreader.timeout = 2;
    docreader.dtimeout = 2;
    docreader.dbg = dbg;
    docreader.errlev = dbg;
    if ( dbg ) ++docreader.errlev;
    // Fetch the index.
    idxurl = gurlbase + "/index.html";
    index = docreader.read(idxurl);
    if ( index.length ) {
      //window.open(idxurl, "plot_frame");
    }
    // Links to add the current plot, show the current plot and show the current index of plots.
    if ( rel.length && ds.length && sel.length && plot.length ) {
      addmsg = "Add plot with this description";
      topdoc.writeln("<a href=" + baseurl + "?draw" + shquery + lsquery +">" + addmsg +"</a><br>" );
      if ( showplot ) 
        topdoc.writeln("<a href=" + baseurl + lsquery + ">Do not show current plot</a><br>");
      else
        topdoc.writeln("<a href=" + baseurl + "?show=plot" + lsquery + ">Show current plot</a><br>");
    }
    if ( rel.length && ds.length && sel.length ) {
      if ( index.length ) {
        idxurl = inurl.page + "?rel=" + rel + "?ds=" + ds + "?sel=" +
                 sel + "?plot=" + plot + "?draw" + lsquery;
        topdoc.writeln("<a href=" + baseurl + "?show=index" + lsquery + ">Show index of plots</a><br>");
      }
    }
    topdoc.writeln("<br>" );
    // Fetch the directory listing.
    gurl = gurlbase + "/ls.dat";
    docreader.errlev = 1;
    listing = docreader.read(gurl);
    if ( level < 3 ) {
      nextlev = levnames[level+1];
      nextfield = levfields[level+1];
    } else {
      nextlev = "plot";
      nextfield = "plot";
    }
    topdoc.writeln("<tr><td valign=\"top\">");
    if ( listing.length == 0 ) {
      seldoc.writeln("No " + nextlev + "s found.<br>");
    } else {
      dirs = listing.split("\n");
      cnew = "";
      seldoc.writeln("Select a " + nextlev + ":<br>");
      for ( i=0; i<dirs.length; ++i ) {
        newurl = baseurl;
        // Drop the last selection for this field unless it is part of a saved plot.
        pattern = "?" + nextfield + "=";
        lpat = pattern.length;
        // Index to start search for pattern.
        icp0 = newurl.length - lpat - 1;
        // Index to start search for draw query.
        icd0 = newurl.length - 5;
        // Start at max of these.
        ic0 = icd0>icp0 ? icd0 : icp0;
        for ( ic=ic0; ic>base.length; --ic ) {
          //dbg seldoc.writeln("XXXX" + newurl.substring(ic, ic+5) + "<br>");
          if ( newurl.substring(ic, ic+5) == "?draw" ) break;
          if ( ic > icp0 ) continue;
          if ( newurl.substring(ic, ic+lpat) == pattern ) {
            // Find the end of the query--next '?' or end of string.
            for ( jc=ic+lpat; jc<newurl.length; ++jc ) {
              if ( newurl.substring(jc,jc+1) == "?" ) break;
            }
            newurl = newurl.substring(0,ic) + newurl.substring(jc);
            break;
          }
        }
        newurl += "?" + nextfield + "=" + dirs[i];
        newurl += shquery;
        newurl += lsquery;
        tag = "<a href=" + newurl + ">";
        seldoc.writeln(bigspace + tag + dirs[i] + "</a><br>");
      }
    }
    //location.href = gurl;
    dodraw = 0;
    break;
  // Set flag to show index or current plot.
  } else if ( lhs == "show" ) {
    showplot = rhs;
  // Draw the plots.
  } else if ( lhs == "draw" ) {
    serr = "";
    if ( rel.length == 0 ) serr = "Release";
    else if ( ds.length == 0 ) serr = "Dataset";
    else if ( sel.length == 0 ) serr = "Selection";
    else if ( plot.length == 0 ) serr = "Plot";
    if ( serr.length ) {
      topdoc.writeln("ERROR: " + serr + " is not defined<br>");
      break;
    }
    // Add extension if not provided.
    filename = plot;
    parts = filename.split(".");
    if ( parts.length == 1 ) filename += ".gif";
    gurl = base + "/" + rel + "/" + ds + "/" + sel + "/" + filename;
    title = sel + bigspace + ds + bigspace + rel;
    desc = rel + bigspace + ds + bigspace + sel + bigspace + plot;
    drawurls[ndraw] = gurl;
    drawtitles[ndraw] = title;
    drawdescs[ndraw] = desc;
    ++ndraw;
    if ( dbg ) plotdoc.writeln(bigspace + "<a href=" + gurl + ">" + gurl + "</a><br>");
  } else if ( lhs == "dbg" ) {
    dbg = 1;
    if ( rhs.length ) dbg = rhs;
  } else {
    topdoc.write("ERROR: Invalid query: " + query);
    break;
  }
}
topdoc.writeln("<td valign=\"top\">");
// Add drawings.
if ( dodraw ) {
  for ( i=0; i<ndraw; ++i ) {
    gurl = drawurls[i];
    title = drawtitles[i];
    if ( i ) plotdoc.writeln("<hr>");
    plotdoc.writeln("<img align=\"top\" src=\"" + gurl + "\"></img>");
    plotdoc.writeln("<br><b>" + title + "</b><br>");
  }
}
// Show current plot or index.
if ( !dodraw && showplot ) {
  var shurl;
  if ( showplot == "index" ) {
    shurl = base + "/"  + rel + "/" + ds + "/" + sel + "/index.html";
    plotdoc.location.href = shurl;
  } else {
    filename = plot;
    parts = filename.split(".");
    imgfile = 1;
    if ( parts.length == 1 ) filename += ".gif";
    else if ( parts[1] == "dat" ) imgfile = 0;
    shurl = base + "/"  + rel + "/" + ds + "/" + sel + "/" + filename;
    if ( imgfile ) {
      plotdoc.writeln("<img src=\"" + shurl + "\">");
    } else {
      plotdoc.writeln("<pre>");
      txtreader = new DocReader;
      txtreader.errlev = 0;
      txtreader.read(shurl);
      if ( txtreader.stat ) {
        plotdoc.writeln("Unable to read " + filename);
        plotdoc.writeln(txtreader.msg);
      } else {
        plotdoc.writeln(txtreader.text);
      }
      plotdoc.writeln("</pre>");
    }
  }
}
topdoc.writeln("</table>");
if ( use_frames ) {
  topdoc.close();
  seldoc.close();
  plotdoc.close();
}

