var books_parsed=false;

var el;
var elements = new Array();
var sort_order = new Array();

// element_values is single hash with element id, book title and book year
var element_values = new Object();

function GetElements()
{
  el = document.getElementById("book_list");

  var children = el.childNodes;

  for (var i=0,j=0;i<children.length;i++) {
    if (children[i].nodeType == 1) {
      elements[j] = children[i];
      ParseBook(elements[j].innerHTML, j);
      j++;
    }
  }
  books_parsed=true;
}

function ParseBook(BookData, id)
{
  // parse each book record to pull titles and years out of the <div>s for sorting
  var fields = new Array();
  fields = BookData.split(">");

  var title=fields[1].substring(0,fields[1].indexOf("<"));

  // clean up title field for accurate sort
  title=StringReplace(title, "A ", "");
  title=StringReplace(title, "An ", "");
  title=StringReplace(title, "The ", "");
  title=StringReplace(title, "\"", "");
  title=StringReplace(title, "'", "");
  title=StringReplace(title, ":", "");

  var year=fields[2].substring(0,fields[2].indexOf("<"));
  year=StringReplace(year, "- ", "");

  element_values[id] = [id,title,year];
}

function Sort(sort_by)
{
  // for whatever reason, page is not fully loading so we need to run GetElements()
  // by a user-triggered event--run it one time the first time user resorts
  if(!books_parsed) GetElements();

  SetSortOrder(sort_by);

  var nd = document.createElement("div");
  nd.setAttribute("id","remainder");

  for (k=0; k < elements.length; k++) {
    sort_id=sort_order[k];
    nd.appendChild(elements[sort_id]);
  }

  el.appendChild(nd);
}

// starting sort direction
title_sort_direction="desc";
year_sort_direction="desc";

function SetSortOrder(sort_by)
{
  // sort the element_values hash on the sort_by field
  sort_order.length=0;

  var data_field;
  if(sort_by == "title")
  {
    data_field=1;
    sort_direction=title_sort_direction;
    title_sort_direction=SwitchSortDirection(title_sort_direction);
  }
  if(sort_by == "year")
  {
    data_field=2;
    sort_direction=year_sort_direction;
    year_sort_direction=SwitchSortDirection(year_sort_direction);
  }

  // nested loop is necessary for bubble sort to work
  for(x = 0; x < elements.length; x++) {
    for(y = 0; y < (elements.length-1); y++) {

      if(sort_direction == "asc")
      {
        if(element_values[y][data_field] > element_values[y+1][data_field]) {
          holder = element_values[y+1];
          element_values[y+1] = element_values[y];
          element_values[y] = holder;
        }
      }


      if(sort_direction == "desc")
      {
        if(element_values[y][data_field] < element_values[y+1][data_field]) {
          holder = element_values[y+1];
          element_values[y+1] = element_values[y];
          element_values[y] = holder;
        }
      }
    }
  }

  // loop through sorted element_values hash and assign sort_order array
  for(z=0; z < elements.length; z++)
  {
    sort_order[sort_order.length]=element_values[z][0];
  }
}

function SwitchSortDirection(dir)
{
  if(dir=="asc") returnValue="desc";
  else returnValue="asc";
  return returnValue;
}


function toggleLayer(whichLayer)
{
if (document.getElementById)
{
// this is the way the standards work
var style2 = document.getElementById(whichLayer).style;
style2.display = style2.display? "":"inline";
}
else if (document.all)
{
// this is the way old msie versions work
var style2 = document.all[whichLayer].style;
style2.display = style2.display? "":"inline";
}
else if (document.layers)
{
// this is the way nn4 works
var style2 = document.layers[whichLayer].style;
style2.display = style2.display? "":"inline";
}
}

function toggleLayerOff(whichLayer)
{
if (document.getElementById)
{
// this is the way the standards work
var style2 = document.getElementById(whichLayer).style;
style2.display = style2.display? "":"none";
}
else if (document.all)
{
// this is the way old msie versions work
var style2 = document.all[whichLayer].style;
style2.display = style2.display? "":"none";
}
else if (document.layers)
{
// this is the way nn4 works
var style2 = document.layers[whichLayer].style;
style2.display = style2.display? "":"none";
}
}

