// Global variables

var inv = new Array(4);
for (var i = 0; i < 4; i++) inv[i] = 0;
var col = 0;



var img = document.createElement('img');
img.src    = 'http://www.rhic.bnl.gov/~fine/fisyak/images/trUp.gif';
img.width  = 11;
img.height = 11;
img.alt    = 'o';

var imgI = document.createElement('img');
imgI.src    = 'http://www.rhic.bnl.gov/~fine/fisyak/images/trDown.gif';
imgI.width  = 11;
imgI.height = 11;
imgI.alt    = 'o';

//________________________________________________________________
function getCellVal(cell)
{
   var out = '';
   if (cell) {
     for (var i = 0; i < cell.childNodes.length; i++)
      {
         var obj = cell.childNodes[i];
         switch(obj.nodeType)
         {
            case 1:    // ELEMENT_NODE = 1
                out += getCellVal(obj);
//                window.alert(this.name + "Element found" + out );
                break;
            case 3:    // TEXT_NODE    = 3
  //             window.alert(this.name + "Text found" + out);
               out += obj.nodeValue;
                break;
         }
    }}
    return out;
}

//________________________________________________________________
function lItem(folder, value)
{
    this.folder = folder;
    this.value = value;
}

//________________________________________________________________
function compItems(f, s)
{
    var i = s.folder - f.folder;
    if (i) return i;

    if (f.value > s.value) return 1;
    else if (f.value == s.value) return 0;
    return -1;
}

//________________________________________________________________
function getVal(row, i)
{
   var d = (row.id.charAt(0) == 'd');
   var obj = new lItem(d, 0);

   if (!(d && i) )
   {  
 
      var v = getCellVal(row.cells[i]);
      switch(i)
      {
          case 0: // file name
              if (5 == 1)
                  v = v.toLowerCase();
              break;
          case 1: // File size
              v = v.replace(/,/g, '');
              v = parseInt(v);
              if (isNaN(v))  v = 0;
              break;
          case 3: // file type
              break;
          case 2: // data
          {
             // window.alert("Data : " + v);
              var re = /([0-9]+)\/([0-9]+)\/([0-9]+) (([0-9]+):([0-9]+))?/;
              var a = v.match(re);
              if (a) {
                if (a.length > 4) {
                   v = new Date(a[3], a[1] - 1, a[2], a[5], a[6], 0);
                }else if (a.length == 4) {
                   v = new Date(a[3], a[1] - 1, a[2]);
                } else 
                   v = 0;
              } else v = 0;
              break;
         }
      }
      obj.value = v;
    }
    return obj;
}


//________________________________________________________________
function sortIt(number)
{
    var t = document.getElementById("table");
    if (!t) return;
    var body = t.tBodies[0];

    var invert = (col == number) ? (!inv[col]) : 0;
    if (col >= 0) unMarkCol(t.tHead.rows[0].cells[col]);
    col = number;
    inv[col] = invert;

    var j, start, end;
    var v, w;
    var count = body.rows.length;
    // window.alert(" Count =" + count + " invert: " + invert + " col:" + col);
    for (var i = 1; i < count; i++)
    {
        // window.alert(" ROW =" + i);
        v = getVal(body.rows[i], col);
        // window.alert(" VALUE:<" + v + ">");

        start = 0;
        end = i - 1;
        for (; end > start + 1; )
        {
            j = start + (end - start) / 2; // does it cast to int ?
            j = parseInt(j); // just in case
            w = getVal(body.rows[j], col);
            w = (invert ? (-1) : 1) * compItems(v, w);
            if (w < 0) end = j;
            else start = j;  
        }

        w = getVal(body.rows[start], col);
        w = (invert ? (-1) : 1) * compItems(v, w);
        if (w < 0)
        {
            body.insertBefore(body.rows[i], body.rows[start]);
            continue;
        }

        w = getVal(body.rows[end], col);
        w = (invert ? (-1) : 1) * compItems(v, w);
        if (w < 0) body.insertBefore(body.rows[i], body.rows[end]);
    }

    for (var i = 0; i < count; i++)
    {
        body.rows[i].className = (i % 2) ? ".even" : ".odd";
    }

    markCol(t.tHead.rows[0].cells[col], invert);
}

//________________________________________________________________
function hl(cell)
{
    cell.className = "headerH";
}

//________________________________________________________________
function uhl(cell)
{
    cell.className = "header";
}

//________________________________________________________________
function markCol(cell, inv)
{
    if (cell.firstChild)
    {
        if (cell.firstChild.tagName != 'IMG')
            cell.insertBefore((inv ? imgI : img), cell.firstChild);
    }
    else
    {
        cell.appendChild((inv ? imgI : img));
    }
}

//________________________________________________________________
function unMarkCol(cell)
{
    if (cell.firstChild && (cell.firstChild.tagName == 'IMG'))
        cell.removeChild(cell.firstChild);
}

//________________________________________________________________
function markFirstCol()
{
    var t = document.getElementById("table");
    if (!t) return;
    markCol(t.tHead.rows[0].cells[0], 0);
}
