function openViewer( object, filter, file) {
  
  var image = object.getAttribute( "href");
  image = image.slice( image.lastIndexOf("/") + 1, image.lastIndexOf("."));
  var url = "viewer.php?image="+image+",filter="+filter+",path="+file;
  openNoMenuWindow( url, "review", 760, 620);
}

function redrawGallery( selectForm, xmlPath){
  var path = xmlPath.slice( xmlPath.lastIndexOf("/") + 1);
  loadXML( xmlPath , drawTable, selectForm.options[ selectForm.selectedIndex].value, path);
}

function createGallery( xmlDoc, filter, path){

  if(!filter) {
     filter = "all";
  }

  drawForm( xmlDoc, filter);
  drawTable( xmlDoc, filter, path);

  xmlDoc = null;

}

function drawForm( xmlDoc, filter){
  var formReplace = document.getElementById( 'categories'); 
  if(!formReplace) {
    document.write("<p>broken, span - form placeholder doesn't exist</p>");
    return;
  }
   
  formReplace.parentNode.replaceChild( createForm( xmlDoc, filter, formReplace), formReplace);
}

function drawTable( xmlDoc, filter, path){
  var galleryReplace = document.getElementById( 'gallery');
  if(!galleryReplace) {
    document.write("<p>broken, span - form or gallery placeholder doesn't exist</p>");
    return;
  }
  if(!filter) {
     filter = "all";
  }
   
  galleryReplace.parentNode.replaceChild( createTable( xmlDoc, filter, path), galleryReplace);
  xmlDoc = null;
}

function createForm( xmlDoc, filter, formDiv) {
  var selecta = formDiv.getElementsByTagName( "select")[0];
  var images = xmlDoc.getElementsByTagName( "image");
  var categoryHash = new Object;
  categoryHash[ "all"] = images.length;
  var categories = xmlDoc.getElementsByTagName( "category");
 
  for( var i = 0; i < categories.length; i++) {
    var category = categories[i];
    var data = category.firstChild.data;
     if(!categoryHash[ data]) {
      categoryHash[ data] = 1;
    }
    else {
      categoryHash[ data] += 1;
    }
  }
  for ( category in categoryHash) {
    var option = document.createElement( "option");
    option.setAttribute( "value", category);
    option.appendChild( document.createTextNode( category+" ("+categoryHash[ category]+")"));
    if( category == filter) {
      option.setAttribute( "selected", "selected");
    }
    selecta.appendChild( option);
  }
  
  return formDiv;
}

function createTable( xmlDoc, filter, path) {
  var WIDTH = 4;
  var gallery = document.createElement( "div");
  gallery.setAttribute( "id", "gallery");
  var table = document.createElement( "table");
  gallery.appendChild( table);
  var images = xmlDoc.getElementsByTagName( "image");
  var imageArray = getFilteredImages( images, filter);

  var row = table.insertRow(0);
  var cell = 0;
  for( var i = 0; i < imageArray.length; i++) {
    var img = document.createElement( "img");
    img.setAttribute( "src", "../img/thumbs/"+imageArray[i]+".JPG");
    img.setAttribute( "Alt", "Click to launch viewer");

    var link = document.createElement( "a");
    link.setAttribute( "href", "../img/"+imageArray[i]+".JPG");
//    link.setAttribute( "href", "javascript:openViewer(\'"+imageArray[ i]+"\',\'"+filter+"\',\'"+path+"\')");
    var iesucks = imageArray[i];
    link.onclick = function(){ openViewer( this, filter, path); return false;} 
	link.setAttribute( "alt", imageArray[ i]+" - Click to open viewer");

    link.appendChild( img);
    row.insertCell(cell).appendChild( link);
    cell++;
    if( cell == WIDTH){
      row = table.insertRow( i/WIDTH + 1);
      cell = 0;
    }    
  }
  return gallery;
}

function getFilteredImages( images, filter) {
 
  var imageArray = new Array();
  
  for( var i = 0; i < images.length; i++) {
    var image = images[i];
    var categories = image.getElementsByTagName( "category");
    if( matchCategories( filter, categories)) {
      var name = image.getElementsByTagName( "name")[0].firstChild.data;
      imageArray.push( name);  
    }
  }
  return imageArray; 
}

function getImageDescription( images, imageName) {
  var description;
  for( var i = 0; i < images.length; i++) {
    var image = images[i];
    var name = image.getElementsByTagName( "name")[0].firstChild.data;
    if( name == imageName) {
      var descNode = image.getElementsByTagName( "description"); 
      if( descNode.length != 0) {
        description = image.getElementsByTagName( "description")[0].firstChild.data;
      }
    }
  }
  //now, remove all the newlines and carriage returns.
  //enter regular expression magic
  return tidyText( description);
}

function getImageCategories( images, imageName) {
  var categoryArray = new Array();
  for( var i = 0; i < images.length; i++) {
    var image = images[i];
    var name = image.getElementsByTagName( "name")[0].firstChild.data;
    if( name == imageName) {
      var categoryNodes = image.getElementsByTagName( "category"); 
      for( var x = 0; x < categoryNodes.length; x++ ){
        categoryArray.push( categoryNodes[x].firstChild.data);
      }
      break;
    }
  }
  return categoryArray;
}

function matchCategories( filter, categories) {
  var retVar = false;
  if( filter == "all"){
    retVar = true;
  }
  else {
    for( var i = 0; i < categories.length; i++ ){
      var category = categories[i];
      if( filter == category.firstChild.data) {
        retVar = true;
      }  
    }
  }
  return retVar;
}

function createDVDList ( xmlDoc){
  var divReplace = document.getElementById( 'movieList');
  if(!divReplace) {
    document.write("<p>broken, span - form or gallery placeholder doesn't exist</p>");
    return;
  }
  var WIDTH = 3;
  var movieTable = document.createElement( "div");
  movieTable.setAttribute( "id", "movieList");
  var table = document.createElement( "table");
  movieTable.appendChild( table);
  var movies = xmlDoc.getElementsByTagName( "Data");

  var row = table.insertRow(0);
  var cell = 0;
  for( var i = 0; i < movies.length; i++) {
    var movie = movies[i];
    var name = document.createElement( "p");  
    name.appendChild( document.createTextNode( movie.firstChild.data));
    
    row.insertCell(cell).appendChild( name);
    cell++;
    if( cell == WIDTH){
      row = table.insertRow( i/WIDTH + 1);
      cell = 0;
    }    
  }
  divReplace.parentNode.replaceChild( movieTable, divReplace);
} 

function createMusicList ( xmlDoc){
  var divReplace = document.getElementById( 'musicList');
  if(!divReplace) {
    document.write("<p>broken, span - form or gallery placeholder doesn't exist</p>");
    return;
  }
  var WIDTH = 4;
  var musicTable = document.createElement( "div");
  musicTable.setAttribute( "id", "musicList");
  var table = document.createElement( "table");
  musicTable.appendChild( table);
  var albums = xmlDoc.getElementsByTagName( "album");
//  var nodeIter = document.createTreeWalker( xmlDoc, NodeFilter.FILTER_ACCEPT, null, true);
  var row = table.insertRow(0);
  var cell = 0;

  for( var i = 0; i < albums.length; i++) {
   var album = albums[i];
//while( nodeIter.nextNode() != null) {
    var name = document.createElement( "p");
    name.appendChild( document.createTextNode( album.getElementsByTagName( "name")[0].firstChild.data));
//    name.appendChild( document.createTextNode( i));

    var artist = document.createElement( "p");
    artist.appendChild( document.createTextNode( album.getElementsByTagName( "artist")[0].firstChild.data));
//    artist.appendChild( document.createTextNode( i));
        
    row.insertCell(cell).appendChild( artist);
    cell++;
    row.insertCell(cell).appendChild( name);
    cell++;
    row = table.insertRow( i + 1);
    cell = 0;        
  }
  divReplace.parentNode.replaceChild( musicTable, divReplace);
}

function onRemoteEvent( keyChar)
{
    // this switch tests to see which button on the remote is pressed
 //   alert( keyChar);
        switch (keyChar)
        {
        case 0x26:  // Up button selected
            break;
        case 0x28:  // Down button selected
            break;
        case 0x25:  // Left button selected
            window.location = document.links[0];
            break;
        case 0x27:  // Right button selected
            window.location = document.links[1];
            break;
        case 0x0D:    // Enter button selected, execute link to content/page
            break;
        case 0x08:  // Keyboard Backspace selected
            break;

        default:
        }
}

