function loadShows(elem, callback) {
  $.ajax({
      url: "/shows.xml",
      success: function(data) { parseShowsXML(data, elem); if (callback) callback(); },
      //dataType: "xml",
      error: function(jqXHR, textStatus, errorThrown) { alert(textStatus); }
  });
}

function parseShowsXML(xml, elem)
{
  xml = parseXML(xml);
  
  $(xml).find("show").each(function() {
    var show = $(this);
    
    var other_artists = [];
    
    show.find('otherArtists').each(function() {
      other_artists.push($(this).children('name').text());
    });
    
    other_artists = other_artists.join(', ');

    var ticketURI = show.find('ticketURI').text();
    
    var c = '<div class = "show">';
      c += '<h3 class="date">' + dateFormat(parseDate(show.children('date').text()), 'mmmm d') + '</h3>';
      c += '<div class="club_city">'
        c += '<div class="club">' + show.children('name').text() +
            ' (' + formatTime(show.children('timeSet').text()) + ')' + '</div>';
      
        if (other_artists != '')
          c += '<div class="other_artists">' + 'w/ ' + other_artists + '</div>';
      
        c += '<div class="city">' + show.children('city').text() + ', ' + show.children('stateAbbreviation').text() + '</div>';
      c += '</div>';

      if (ticketURI) {
        c += '<div class="tickets"><a target="_blank" href="' + ticketURI + '">Buy tickets</a></div>';
      }
    c += '</div>';
    elem.append(c);
  });
}

function parseXML(xml) {
  var doc;

  if(window.DOMParser) {
    var parser = new DOMParser();
    doc = parser.parseFromString(xml, "text/xml");
  }
  else if(window.ActiveXObject) {
    doc = new ActiveXObject("Microsoft.XMLDOM");
    doc.async = "false";
    doc.loadXML(xml);
  }
  else {
    throw new Error("Cannot parse XML");
  }

  return doc;
}

// From http://stackoverflow.com/questions/3085937/safari-js-cannot-parse-yyyy-mm-dd-date-format
function parseDate(input, format) {
  format = format || 'yyyy-mm-dd';
  var parts = input.match(/(\d+)/g),  i = 0, fmt = {};  
  format.replace(/(yyyy|dd|mm)/g, function(part) { fmt[part] = i++; });
  return new Date(parts[fmt['yyyy']], parts[fmt['mm']]-1, parts[fmt['dd']]);
}

function formatTime(time) {
  var t = time.match(/([0-9]+):([0-9]+):.*/);
  var h = parseInt(t[1]);
  var m = parseInt(t[2]);
  var s = 'am';
  
  if (h == 12) {
    s = 'pm';
  }
  
  if (h > 12) {
    h -= 12;
    s = 'pm';
  }
  
  if (m == 0)
    m = '';
  else
    m = ':' + t[2];
  
  return '' + h + m + s;
  
  return 'x';
}
