(function() { this.songKickWidget = function(filter) { var artist_id = filter.artistId; var apiKey = filter.apiKey; var page = filter.page; var element_id = filter.element_id; var date_filter = filter.date; var url = 'https://api.songkick.com/api/3.0/artists/' + artist_id + '/calendar/managed_performances.json?apikey=' + apiKey + '&per_page=' + page; var xmlhttp = new XMLHttpRequest(); var data; var row_number = 0; var view_more; var buildData = function(data) { var container = document.getElementById(element_id); for (var i = 0 + row_number; i < data.length; i++) { //Creating widget_row var widget_row = document.createElement('div'); widget_row.className = 'widget_row'; container.appendChild(widget_row); row_number++; //Creating date Field widget_row.appendChild(buildDate(data[i], date_filter)); //Creating location_container var location_container = document.createElement('div'); location_container.className = 'event_location'; widget_row.appendChild(location_container); row_number++; //Creating event Name Field location_container.appendChild(buildSpecialEvent(data[i])); //Creating venue Field location_container.appendChild(buildVenue(data[i])); //Creating Location Field location_container.appendChild(buildLocation(data[i])); //Creating participating Artists Field widget_row.appendChild(buildParticipatingArtists(data[i])); //Creating links_container var links_container = document.createElement('div'); links_container.className = 'event_links'; widget_row.appendChild(links_container); row_number++; //Creating Tickets link links_container.appendChild(buildTicket(data[i])); //Creating Additional link links_container.appendChild(buildAdditionalLink(data[i])); } //Creating ViewMore link if (row_number == page) { view_more = document.createElement('a'); view_more.innerHTML = 'View More'; view_more.setAttribute('href', "javascript:void(0);"); view_more.addEventListener('click', view_more_fn); container.appendChild(view_more); } } var buildDate = function(data, date_filter) { var date_filter = date_filter.split('/'); var months = [ ['Jan', 'January'], ['Feb', 'February'], ['Mar', 'March'], ['Apr', 'April'], ['May', 'May'], ['Jun', 'June'], ['Jul', 'July'], ['Aug', 'August'], ['Sep', 'September'], ['Oct', 'October'], ['Nov', 'November'], ['Dec', 'December'] ]; var event_date = document.createElement('div'); event_date.className = 'event_date'; var date_field = document.createElement('div'); date_field.className = 'date'; date_field.style.display = 'inline'; var month_field = document.createElement('div'); month_field.className = 'month'; month_field.style.display = 'inline'; var year_field = document.createElement('div'); year_field.className = 'year'; year_field.style.display = 'inline'; var date_instance = new Date(data.event.start.date.split("-")); for (var i = 0; i < date_filter.length; i++) { switch (date_filter[i].toUpperCase()) { case "MM": var month = date_instance.getMonth() + 1 < 10 ? "0" + String(date_instance.getMonth() + 1) : String(date_instance.getMonth() + 1); month_field.innerHTML = month; event_date.appendChild(month_field); break; case "MON": var month = months[date_instance.getMonth()][0]; month_field.innerHTML = month; event_date.appendChild(month_field); break; case "MONTH": var month = months[date_instance.getMonth()][1]; month_field.innerHTML = month; event_date.appendChild(month_field); break; case "DD": var date = date_instance.getDate() < 10 ? "0" + String(date_instance.getDate()) : String(date_instance.getDate()); date_field.innerHTML = date; event_date.appendChild(date_field); break; case "YY": var year = String(date_instance.getFullYear()).substring(2); year_field.innerHTML = year; event_date.appendChild(year_field); break; case "YYYY": var year = String(date_instance.getFullYear()); year_field.innerHTML = year; event_date.appendChild(year_field); break; } } return event_date; } var buildSpecialEvent = function(data) { var special_event = document.createElement('div'); special_event.className = 'special-event'; if (data.event.type == "Festival") { special_event.innerHTML = data.event.displayName; } return special_event; } var buildVenue = function(data) { var venue = document.createElement('div'); venue.innerHTML = ' ' + data.event.venue.displayName + ' '; venue.className = 'venue'; return venue; } var buildLocation = function(data) { var location = document.createElement('div'); location.innerHTML = data.event.location.city; location.className = 'location'; return location; } var buildParticipatingArtists = function(data) { var featuring_artists = document.createElement('div'); if ((data.event.performance.length > 1) && (data.event.performance.length < 4)) { for (var i = 0; i < 3; i++) { if (data.event.performance[i].artist.id != artist_id) { if (i == 0) { featuring_artists.innerHTML = 'with ' + data.event.performance[i].displayName; } else { featuring_artists.innerHTML += ' and '; featuring_artists.innerHTML += data.event.performance[i].displayName; } } } } else if (data.event.performance.length > 3) { for (var i = 0; i < 4; i++) { if (data.event.performance[i].artist.id != artist_id) { if (i == 0) { featuring_artists.innerHTML = 'with ' + data.event.performance[i].displayName; } else { featuring_artists.innerHTML += ', '; featuring_artists.innerHTML += data.event.performance[i].displayName; } } } featuring_artists.innerHTML += ' and more'; } featuring_artists.className = 'featuring-artists'; return featuring_artists; } var buildTicket = function(data) { var ticket = document.createElement('a'); ticket.className = 'ticket_link'; ticket.setAttribute('target', '_blank'); if (data.directTicketLabel) { if (data.directTicketLabel == "Tickets") { ticket.innerHTML = 'Tickets'; if (data.directTicketLink) { ticket.setAttribute('href', data.directTicketLink); } else { ticket.setAttribute('href', data.event.uri); } } else if (data.directTicketLabel == "SOLD OUT") { ticket.innerHTML = 'Sold Out'; ticket.setAttribute('href', 'javascript:void(0);'); ticket.className += ' sold-out'; } } else { ticket.innerHTML = 'Tickets'; ticket.setAttribute('href', data.event.uri); ticket.setAttribute('data-track','songkick-tickets'); } return ticket; } var view_more_fn = function() { url = url = 'https://api.songkick.com/api/3.0/artists/' + artist_id + '/calendar/managed_performances.json?apikey=' + apiKey + '&per_page=' + 100; xmlhttp.open("GET", url, true); xmlhttp.send(); document.getElementById('sk-widget').removeChild(view_more); } var buildAdditionalLink = function(data) { var addl_link = document.createElement('a'); addl_link.className = 'additional_link'; addl_link.setAttribute('target', '_blank'); if (data.additionalLabel) { addl_link.innerHTML = data.additionalLabel; addl_link.setAttribute('href', data.additionalUrl); } if(data.additionalLabel == "vip"){ addl_link.setAttribute('data-track','songkick-vip'); }else if(data.additionalLabel == "rsvp"){ addl_link.setAttribute('data-track','songkick-rsvp'); } return addl_link; } xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { data = JSON.parse(this.responseText).resultsPage.results.performance; buildData(data); } }; xmlhttp.open("GET", url, true); xmlhttp.send(); } })();