var checkIt = true;
var selectedRows = 0;
var rowCount = 0;

function convert(sValue, sDataType) {
   switch(sDataType) {
      case "int" :
            return (sValue == "n/a") ? 0 : parseInt(sValue.replace(/[,$]/g,""));
      case "float" :
            return (sValue == "n/a") ? 0 : parseFloat(sValue);
      case "date" :
            return new Date(Date.parse(sValue));
      default: 
            return sValue.toString();
   }
}

function findText(aNode) {
   if (aNode.nodeValue) {
      return aNode.nodeValue;
   } else if (aNode.firstChild) {
      return findText(aNode.firstChild);
   } else {
      return "";
   }
}

function generateCompareTRs(iCol, sDataType) {
   return function(oTR1,oTR2) {
             var vValue1 = convert(findText(oTR1.cells[iCol].firstChild), sDataType);
             var vValue2 = convert(findText(oTR2.cells[iCol].firstChild), sDataType);
             if (vValue1 < vValue2) return -1;
             if (vValue1 > vValue2) return 1;
             return 0;
          }
}

function sortTable(sTableID, iCol, oHeader, sDataType) {
      var oTable = $(sTableID);
      var oTBody = oTable.tBodies[0];
      var colDataRows = oTBody.rows;
      var aTRs = new Array;
      for (var i=0; i<colDataRows.length; i++) {
         aTRs[i] = colDataRows[i];
      }
   
      if (oTable.sortCol == iCol)
         aTRs.reverse();
      else
         aTRs.sort(generateCompareTRs(iCol, sDataType));
      
      var oFragment = document.createDocumentFragment();
      for (var i=0; i<aTRs.length; i++) {
         oFragment.appendChild(aTRs[i]);
      }
      oTBody.appendChild(oFragment);
      oTable.sortCol = iCol;
   
      initStripes(sTableID);
      hilightHed(oHeader);
}

function hilightHed(oHeader) {
   oHeader = $(oHeader);
   if (oHeader.className == "sortCol") {
      if (oHeader.parentNode.nodeName=="TR") {
         momNode = oHeader.parentNode;
         for (var i=0; i<momNode.childNodes.length; i++) {
            var kidNode = momNode.childNodes[i];
            if (Element.hasClassName(kidNode,"down")) {
               Element.removeClassName(kidNode,"down");
               break;
            }
            if (Element.hasClassName(kidNode,"up")) {
               Element.removeClassName(kidNode,"up");
               break;
            }
         }
         Element.addClassName(oHeader,"down");
      }
   } else if (Element.hasClassName(oHeader,"down")) {
         Element.removeClassName(oHeader,"down");
         Element.addClassName(oHeader,"up");
   } else {
         Element.removeClassName(oHeader,"up");
         Element.addClassName(oHeader,"down");
   }
}

function expColWin(tableShellID,aNode) {
   var shell = $(tableShellID);
   if (Element.hasClassName(shell,"window")) {
      Element.removeClassName(shell,"window");
      aNode.innerHTML = "Show fewer";
   } else {
      Element.addClassName(shell,"window");
      aNode.innerHTML = "Show all";
   }
}

function initStripes() {
   for (var x=0; x<arguments.length; x++) {
      if ($(arguments[x]) && $(arguments[x]).nodeName == "TABLE") {
         var oTable = $(arguments[x]);
         var oTBody = oTable.tBodies[0];
         var colDataRows = oTBody.rows;
    
         for (var i=0; i<colDataRows.length; i++) {
            if (i%2) {
              if (!Element.hasClassName(colDataRows[i],"odd")) {
                 Element.addClassName(colDataRows[i],"odd");
              }
            } else {
              if (Element.hasClassName(colDataRows[i],"odd")) {
                 Element.removeClassName(colDataRows[i],"odd");
              }
            }
         }
      }
   }
}

function updateSelects(add) {
   selectedRows = (add) ? selectedRows+1 : selectedRows-1;
   $("selectedRows").innerHTML = selectedRows;
}

function initTable(table) {
   for (var x=0; x<arguments.length; x++) {
      var oTable = $(arguments[x]);
      if (oTable && oTable.nodeName == "TABLE") {
         var oTBody = oTable.tBodies[0];
         var colDataRows = oTBody.rows;

         for (var i=0; i<colDataRows.length; i++) {
            rowCount++;
            colDataRows[i].onclick = function() {
               if (!Element.hasClassName(this,"marked")) {
                     Element.addClassName(this,"marked");
                     updateSelects(true);
               } else {
                     Element.removeClassName(this,"marked");
                     updateSelects(false);
               }
            }
         }
         initStripes(arguments[x]);
         try { $("rowCount").innerHTML = rowCount; } catch(e) {};
      }
   }
}

function genNum100(num) {
   var numParts = num.split(".");
   var tot = numParts[0]*100;
   tot = tot +(numParts[1]-0);
   return tot;
}

function genNumDec(num) {
   var numString = "";
   var ints = Math.floor(num/100);
   var dec = num-(ints*100);
   dec = (dec < 10) ? "0"+dec : dec+"";
   numString=ints+"."+dec;
   return numString;
}

function clearSelects(which) {
   var tableRoot = $(which);
   var tableBody = tableRoot.getElementsByTagName("TBODY")[0];
   var tRows = tableBody.rows;
   for (var i=0; i< tRows.length; i++)
         Element.removeClassName(tRows[i],"marked");
   selectedRows=0;
   $("selectedRows").innerHTML = selectedRows;
}

function selectByDrop(value, col) {
   if (value == 0) return;
   clearSelects("travel");
   
   var tableRoot = $("travel");
   var tableBody = tableRoot.getElementsByTagName("TBODY")[0];
   var tRows = tableBody.rows;
   for (var i=0; i< tRows.length; i++)
      if (tRows[i].cells[col].firstChild.data == value) {
         Element.addClassName(tRows[i],"marked");
         updateSelects(true);
      }
}

function formatDollars(num) {
   num = (Math.round(num*100)/100)+'';
   var x = num.split('.');
   var x1 = x[0];
   var x2 = (x.length == 1) ? '.00' : (x[1].length == 1) ? '.'+x[1]+'0' : '.'+x[1];
   var rgx = /(\d+)(\d{3})/;
   while (rgx.test(x1)) {
      x1 = x1.replace(rgx, '$1' + ',' + '$2');
   }
   return "$" + x1 + x2;
}

function formatDollarz(num) {
   num += '';
   var x = num.split('.');
   var x1 = x[0];
   var x2 = (x.length > 1) ? '.'+(Math.round(('.'+x[1])*100)+'') : '.00';
   var rgx = /(\d+)(\d{3})/;
   while (rgx.test(x1)) {
      x1 = x1.replace(rgx, '$1' + ',' + '$2');
   }
   return "$" + x1 + x2;
}


function launchReport() {
   if ($("popReport")) closeWindow($("popReport"));
   var report = document.createElement("DIV");
   report.id = "popReport";
   report.innerHTML = getReportData();
   document.getElementsByTagName("BODY")[0].appendChild(report);
   addShadowBox(report,10);
}


function addShadowBox(elem,opacity,distance,spread) {
   Position.prepare();
   elem = $(elem);
   opacity = (opacity) ? opacity : 25;
   distance = (distance) ? distance : 0;
   spread = (spread) ? spread : 5;
   var parent = elem.parentNode;
   var container = document.createElement("DIV");
   
   Position.clone(elem,container);
   container.style.position = (Element.getStyle(elem,"position") ) ? Element.getStyle(elem,"position") : "relative";
   elem.style.position = "absolute";
   elem.style.top="0";
   elem.style.left="0";

   elem = elem.parentNode.removeChild(elem);
   container.appendChild(elem);
   parent.appendChild(container);

   for (var i=0; i<spread; i++) {
     var shadow = document.createElement("DIV");
     Position.clone(elem,shadow);
     shadow.style.position = "absolute";
     shadow.style.top = (distance + i) + "px";
     shadow.style.left = (distance + i) + "px";

     shadow.style.opacity = opacity/100;
     shadow.style.filter = "alpha(opacity="+opacity+")";
     shadow.style.backgroundColor = "#000";
     container.insertBefore(shadow,elem);
   }
}

function closeWindow(elem) {
   elem = $(elem);
   Element.remove(elem.parentNode);
}
