// Settings:
var projectsJSONPath = "projects.json"
var projectClassName = "demo";
// Assorted other globals:
var sortOrder;
var projectsXML;
var projectElements = new Array();
var projectElementsByID = new Array();
var projectArray;
var projectParent;  
var initialized = false;

function sortProjects(foo) {
  sortOrder = foo;
  
  // Grab all the "demo" (or whatever projectClassName is) class elements 
  if(typeof document.getElementsByClassName == "function") {
    var demoElements = document.getElementsByClassName(projectClassName); }
  else if (typeof document.getElementsByClassName == "undefined")  {
    // For IE 
    var foo = "." + projectClassName;
    var demoElements = $(foo);
    }
  else { var foo = "." + projectClassName;
    var demoElements = $(foo); }
   
    
  if(!initialized) {       
         
    // Grab projects via AJAX
    $.getJSON( projectsJSONPath,
             function(json){ // On success
  projectArray = json.project;
                  
  // Remember where the elements were attached (assume it's one node)
  projectParent = demoElements[0].parentNode;    
  // Remove from the document 
  if(typeof document.getElementsByClassName == "function") { // Not IE
    while(demoElements.length) {               
    var thisElement = projectParent.removeChild(demoElements[0]);
    projectElementsByID[thisElement.id] = thisElement; } }
  else { // IE doesn't shift arrays like the other browsers do
    for(var p=0;p<demoElements.length;p++) {
    var thisElement = projectParent.removeChild(demoElements[p]);
    projectElementsByID[thisElement.id] = thisElement; } }   
   
  initialized = true;   
                           
  sortProjects(sortOrder); }
      );
    // We'll get to the else after the AJAX call returns                
  } 
  else {       
    // Strip out whatever project elements are on the page currently
    if(typeof document.getElementsByClassName == "function") {
      while(demoElements.length) {               
        projectParent.removeChild(demoElements[0]); } }
    else {
      for(var p=0;p<demoElements.length;p++) {
        projectParent.removeChild(demoElements[p]); } }
         
    switch(sortOrder) {
      case 'Most Recent': 
        // Sort projects by year, descending
        projectArray.sort(function(a, b){
            return b.year-a.year
            });
        for(foo=0;foo<projectArray.length;foo++) {
          projectParent.appendChild(projectElementsByID[projectArray[foo].friendlyid]);
        }   
      break;  
      case 'Oldest First':        
        // Sort projects by year, ascending
        projectArray.sort(function(a, b){
            return a.year-b.year
            });
        for(foo=0;foo<projectArray.length;foo++) {
          projectParent.appendChild(projectElementsByID[projectArray[foo].friendlyid]);
        }         
      break;  
      case 'Random':
        // Use the non-associative array for this.
        projectArray.sort(function() {
          return 0.5 - Math.random()
          });
        for(foo=0;foo<projectArray.length;foo++) {
         projectParent.appendChild(projectElementsByID[projectArray[foo].friendlyid]);
        }
      break;
      case 'Collaboration':
        insertProjectsByArtist('Collaboration' );
      break;
      case 'Preemptive Media':
        insertProjectsByArtist('Preemptive Media');
      break;
      case 'Brooke Singer':                 
        insertProjectsByArtist('Brooke Singer');
      break;
      case 'Photography':
        insertProjectsByCategory('Photography');
      break;
      case 'Print':       
        insertProjectsByCategory('Print');
      break;
      case 'Video':
        insertProjectsByCategory('Video');
      break;
      case 'Participatory':
        insertProjectsByCategory('Participatory');
      break;
      case 'Web':
        insertProjectsByCategory('Web');
      break;
      case 'Data Viz':
        insertProjectsByCategory('Data Viz');
      break;  
      default:
        for(foo=0;foo<projectArray.length;foo++) {
         projectParent.appendChild(projectElementsByID[projectArray[foo].friendlyid]);
        }
    }
  }
}

function insertProjectsByCategory(catString) {
  for(foo=0;foo<projectArray.length;foo++) {
    for(x=0;x<projectArray[foo].category.length;x++) {
      if(projectArray[foo].category[x].indexOf(catString) >= 0) {
        projectParent.appendChild(projectElementsByID[projectArray[foo].friendlyid]);
  } } } 
}

function insertProjectsByArtist(artistString) {
  for(foo=0;foo<projectArray.length;foo++) {
    if(projectArray[foo].artist == artistString) {
      projectParent.appendChild(projectElementsByID[projectArray[foo].friendlyid]);
      } }
}
