
var fp_rpDraggingSep_;

var fp_rpMX_, fp_rpMY_;
var fp_rpSepY_, fp_rpLastDY_;

var fp_IE_; // temp

var fp_rteArr_;
var fp_rteLookup_;

function fp_rteObject(cid, provider, mode, id, name) {
  this.cid = cid;
  this.provider = provider;
  this.mode = mode;
  this.id = id;
  this.name = name;
}

function fp_rteAddObject(cid, provider, mode, id, name) {
  fp_rteArray_[fp_rteArrayIndex_++] = new fp_rteObject(cid, provider, mode, id, name);
}


function fp_initRte() {

  fp_IE_ = document.all ? true : false; // temp
  
  fp_rpDraggingSep_ = false;
  fp_rpSepY_ = 240;
  fp_rpLastDY_ = 0;

  var sep = document.getElementById("fp_rtePanelSeparator");
  document.onmousemove = fp_rpSepMouseMove;
  sep.onmousedown = fp_rpSepMouseDown;
  document.onmouseup = fp_rpSepMouseUp;
  
  fp_rteReadXML();
  //fp_rteLoadArray();
  //fp_rteRefreshTable();
}

function fp_routesLoaded() {
  fp_rteSortTable("p","a");  
  fp_rteRefreshTable();
}

function fp_rteShowAll() {
  document.getElementById('fp_rtesShowAll').checked=true;
  
}

function fp_rteShowClicked() {
  document.getElementById('fp_rtesShowClicked').checked=true;
  
}



// table functions

function fp_rteRefreshTable() {
  var tblBody = document.getElementById("fp_rteTableBody");
  while(tblBody.childNodes.length >= 1) tblBody.removeChild(tblBody.firstChild);  
  for(var i=0; i<fp_rteArr_.length; i++) {
    var row = fp_rteInitTableRow(fp_rteArr_[i]);
    tblBody.appendChild(row);
  }
}

function fp_rteInitTableRow(rteObj) {
  var row = document.createElement("div");
  row.className = "fp_rteTableRow";
  row.onclick = function() { fp_rteSelected(rteObj.fullID()); }
  row.onmouseover = function() { this.style.background='#eee'; }
  row.onmouseout = function() { this.style.background='#fff'; }
  var html = "";
  
  html += "<div class='fp_rteTableCell' style='width:79px;'>"+rteObj.provName()+"</div>"; 
  html += "<div class='fp_rteTableCell' style='width:79px;'>"+rteObj.modeName()+"</div>"; 
  html += "<div class='fp_rteTableCell' style='width:49px;'>"+rteObj.rteID+"</div>"; 
  html += "<div class='fp_rteTableCell' style='width:181px; border: 0px;'>"+rteObj.name+"</div>"; 
  row.innerHTML = html;
  return row;
}

function fp_rteSelected(fullID) {
  var rteObj = fp_rteLookup_[fullID];
  var dispDiv = document.getElementById("fp_rteDisplay");
  var html = "";
  
  html += "<div class='fp_rteDisplayHeader'>"+rteObj.fullName()+"</div>";
  html += "<div class='fp_rteDisplayBody'>";
  html += "<div class='fp_rteDisplayLeftCol'>";
  html += "Hello";
  html += "</div>";
  html += "<div class='fp_rteDisplayMainCol'>";
  html += "<div class='fp_rteDisplayMainColHeader'>ROUTE PATTERNS</div>";
  for(var sub in rteObj.subArr) {
    var subObj = rteObj.subArr[sub];
    html += subObj.getRowHtml();
  }    
  html += "</div>";
  html += "</div>";
  
  dispDiv.innerHTML = html;
}

function fp_rteSortTable(sortby, direction) {
  //fp_dbg(sortby+" "+direction);
  if(sortby == "p" && direction == "a") fp_rteArr_.sort(fp_rteCompareProviderA);
  if(sortby == "p" && direction == "d") fp_rteArr_.sort(fp_rteCompareProviderD);
  if(sortby == "m" && direction == "a") fp_rteArr_.sort(fp_rteCompareModeA);
  if(sortby == "m" && direction == "d") fp_rteArr_.sort(fp_rteCompareModeD);
  if(sortby == "i" && direction == "a") fp_rteArr_.sort(fp_rteCompareIdA);
  if(sortby == "i" && direction == "d") fp_rteArr_.sort(fp_rteCompareIdD);
  if(sortby == "n" && direction == "a") fp_rteArr_.sort(fp_rteCompareNameA);
  if(sortby == "n" && direction == "d") fp_rteArr_.sort(fp_rteCompareNameD);
  fp_rteRefreshTable();
}

function fp_rteCompareProviderA(a,b) { 
  if (a.provName() < b.provName()) return -1; if (a.provName() > b.provName()) return 1; 
  // for a "tie," defer to ID:
  return fp_rteCompareIdA(a,b); 
}
function fp_rteCompareProviderD(a,b) { return fp_rteCompareProviderA(b,a) }

function fp_rteCompareModeA(a,b) { 
  if (a.modeName() < b.modeName()) return -1; if (a.modeName() > b.modeName()) return 1; 
  // for a "tie," defer to Provider:
  return fp_rteCompareProviderA(a,b); 
}
function fp_rteCompareModeD(a,b) { return fp_rteCompareModeA(b,a) }

function fp_rteCompareIdA(a,b) {
  var aNum = parseInt(a.rteID), bNum = parseInt(b.rteID);
  if(!isNaN(aNum) && !isNaN(bNum)) { // both are numbers
    if (aNum < bNum) return -1; if (aNum > bNum) return 1; return 0;
  } 
  if(!isNaN(aNum) && isNaN(bNum)) return -1; // only first is numeric
  if(isNaN(aNum) && !isNaN(bNum)) return 1; // only second is numeric
  // otherwise, compare strings: 
  if (a.rteID < b.rteID) return -1; if (a.rteID > b.rteID) return 1; return 0; 
}
function fp_rteCompareIdD(a,b) { return fp_rteCompareIdA(b,a) }

function fp_rteCompareNameA(a,b) { if (a.name < b.name) return -1; if (a.name > b.name) return 1; return 0; }
function fp_rteCompareNameD(a,b) { return fp_rteCompareNameA(b,a) }

// divider mouse event functions

function fp_rpSepMouseMove(e) {

  if(!fp_rpDraggingSep_) return;
  var x, y;
  if(fp_IE_) {
    x = event.clientX;
    y = event.clientY;
  }
  else {
    x = e.clientX;
    y = e.clientY;
  }
  var dx = x-fp_rpMX_, dy = y-fp_rpMY_;
  
  var newY = fp_rpSepY_+dy; 
  if(newY > 100) {
    
    var sep = document.getElementById("fp_rtePanelSeparator");
    sep.style.top = newY +"px";
    
    // update divs
    var selDiv = document.getElementById("fp_rteSelect");
    selDiv.style.height = newY+"px";

    var dispDiv = document.getElementById("fp_rteDisplay");
    dispDiv.style.top = (newY+12)+"px";

    fp_rpLastDY_ = dy; 

  }
}

function fp_rpSepMouseDown(e) {
  var x, y;
  if (fp_IE_) {
    x = event.clientX;
    y = event.clientY;
  }
  else {
    x = e.clientX;
    y = e.clientY;
  }
  fp_rpMX_ = x;
  fp_rpMY_ = y;
  fp_rpDraggingSep_ = true;

  fp_disableSelection(document.body);
}

function fp_rpSepMouseUp(e) {
  if(!fp_rpDraggingSep_) return;
  fp_rpSepY_ = fp_rpSepY_+fp_rpLastDY_;
  fp_rpDraggingSep_ = false;
  fp_enableSelection(document.body);
}
