/**
 * @author eric.buhman
 */
function handleEventsResponse(data){

    // Check if the returned data contains xml (to parse)
    if (data.xml) {
        var doc = parseXMLFromString(data.xml);
        parseEventsXML(doc.documentElement);
    }
    
    // Otherwise, show an error message
    else {
        //var error = data.error_message ? data.error_message : 'An unknown error occured'
		$('error_div').show(); 
		$('loading_div').hide();
    }
}

var allLayerIds = [];

function parseEventsXML(parentNode){

    // Get all the event elements
    var eventElements = parentNode.getElementsByTagName("event");
    
    // Create template for each event type
    var eventTemplate = new Template("<div class='upNext1'><font color='#9C9C9C'><b>#{start_time} - #{start_timeDayString} #{start_timeMonthString} #{start_timeDay}</b></font><div class='title'>#{title}</div><p class='description'>#{description}</p><p class='links'> <a name='a_#{event_id}'/><a onclick=showReal('#{reminderLayer_id}') href='#a_#{event_id}'>Set Reminder</a> | <a onclick=showReal('#{atcLayer_id}') href='#a_#{event_id}'>Add To Calendar</a> | <a <a onclick=showReal('#{inviteLayer_id}') href='#a_#{event_id}'>Email Friend</a></p></div>");
    var eventTemplateInProgress = new Template("<div class='upNext1'><font color='#9C9C9C'><b> #{start_time} - #{start_timeDayString} #{start_timeMonthString} #{start_timeDay} - </b></font><font color='red'><b>In Progress </b></font><div class='title'>#{title}</div><p class='description'>#{description}</p><p class='links'> <a name='a_#{event_id}'/><a onclick=showReal('#{reminderLayer_id}') href='#a_#{event_id}'>Set Reminder</a> | <a onclick=showReal('#{atcLayer_id}') href='#a_#{event_id}'>Add To Calendar</a> | <a <a onclick=showReal('#{inviteLayer_id}') href='#a_#{event_id}'>Email Friend</a></p></div>");
	var pastEventTemplate = new Template("<div class='liveSchedulePast'><font color='#9C9C9C'><b>Previously Aired - #{start_time} - #{start_timeDayString} #{start_timeMonthString} #{start_timeDay}</b></font><div class='title'>#{title}</div><p class='description'>#{description}</p></div>");
	var reminderLayerTemplate = new Template("<div id='#{reminderLayer_id}' style='position:absolute; z-index:1000; width:375px; background-color:white; visibility:hidden; display:none;'><div style='float:left; background-color:white; padding:3px; border:1px solid black'><span style='float:right; background-color:black; color:white; font-weight:bold; font-family:arial; width=20px; text-align:center; cursor:pointer' onclick=hideReal('#{reminderLayer_id}')>&nbsp;X&nbsp;</span><iframe id='#{reminderLayer_id}_iframe' width='375px' height='110px' src='"+loadingPageSrc+"' real_src='http://spongecell.com/event_page/remind/#{event_id}?disable_sms_reminders=true ' scrolling=no frameborder=no></iframe><br><span class='style3'>The information submitted will be available to CNN.  CNN  will use the information in a manner consistent with our Privacy Policy.  If you indicate that you wish to receive messages from Spongecell, the information submitted will be subject to Spongecell's privacy policy.  Please note that CNN does not control the use of this information by Spongecell.  For more information on CNN's policies regarding user information, please read our <a href=http://www.cnn.com/privacy.html>CNN Privacy Policy</a>.  For more information on Spongecell's  policies regarding user information, please read <a href=http://spongecell.com/legal/privacy>Spongecell's Privacy Policy</a>.<br><br>Problems with feature? <a href='mailto:support@spongecell.com'><b>support@spongecell.com</b></a></span></div></div>");
    var atcLayerTemplate = new Template("<div id='#{atcLayer_id}' style='position:absolute; z-index:1000; width:350px; background-color:white; visibility:hidden; display:none;'><div style='float:left; background-color:white; padding:3px; border:1px solid black'><span style='float:right; background-color:black; color:white; font-weight:bold; font-family:arial; width=20px; text-align:center; cursor:pointer' onclick=hideReal('#{atcLayer_id}')>&nbsp;X&nbsp;</span><iframe id='#{atcLayer_id}_iframe' width='350px' height='150px' src='"+loadingPageSrc+"' real_src='http://spongecell.com/event_page/atc/#{event_id}' scrolling=no frameborder=no></iframe><br><span class='style3'>The information submitted will be available to CNN.  CNN  will use the information in a manner consistent with our Privacy Policy.  If you indicate that you wish to receive messages from Spongecell, the information submitted will be subject to Spongecell's privacy policy.  Please note that CNN does not control the use of this information by Spongecell.  For more information on CNN's policies regarding user information, please read our <a href=http://www.cnn.com/privacy.html>CNN Privacy Policy</a>.  For more information on Spongecell's  policies regarding user information, please read <a href=http://spongecell.com/legal/privacy>Spongecell's Privacy Policy</a>.<br><br>Problems with  feature? <a href='mailto:support@spongecell.com'><b>support@spongecell.com</b></a></span></div></div>");
    var inviteLayerTemplate = new Template("<div id='#{inviteLayer_id}' style='position:absolute; z-index:1000; width:350px; background-color:white; visibility:hidden; display:none;'><div style='float:left; background-color:white; padding:3px; border:1px solid black'><span style='float:right; background-color:black; color:white; font-weight:bold; font-family:arial; width=20px; text-align:center; cursor:pointer' onclick=hideReal('#{inviteLayer_id}')>&nbsp;X&nbsp;</span><iframe id='#{inviteLayer_id}_iframe' height='260px' src='"+loadingPageSrc+"' real_src='http://spongecell.com/event_page/invite/#{event_id}' scrolling=no frameborder=no></iframe><br><span class='style3'>The information submitted will be available to CNN.  CNN  will use the information in a manner consistent with our Privacy Policy.  If you indicate that you wish to receive messages from Spongecell, the information submitted will be subject to Spongecell's privacy policy.  Please note that CNN does not control the use of this information by Spongecell.  For more information on CNN's policies regarding user information, please read our <a href=http://www.cnn.com/privacy.html>CNN Privacy Policy</a>.  For more information on Spongecell's  policies regarding user information, please read <a href=http://spongecell.com/legal/privacy>Spongecell's Privacy Policy</a>.<br><br>Problems with feature? <a href='mailto:support@spongecell.com'><b>support@spongecell.com</b></a></span></div></div>");
	
	if(eventElements.length == 0){
		//If there are no events
		$('noevents_div').show();
	}
	else {
		var totalEventsAll = eventElements.length; //Count of all events
		var totalEventsOld = 0;  //Count of old events
		var totalEventsOldToShow = 0; //Adjustment - Count of old events to show
		var totalEventsFuture = 0; //Count of future events
		var totalEventsInProgress = 0;
		var oldEventIndexArray = new Array();
		var counterA = 0;
		
		for (var i = 0; i < eventElements.length; i++) {
			var eventElement = eventElements[i];	
			var _yearStart = getYearFromStartDate(selectXML(eventElement, 'start_time')); //e.g. 2007
			var _monthStart = getMonthFromStartDate(selectXML(eventElement, 'start_time'));
			var _dayStart = getDayFromStartDate(selectXML(eventElement, 'start_time'));
			var _hourStart = getHourFromStartDate(selectXML(eventElement, 'start_time'));
			var _minuteStart = getMinuteFromStartDate(selectXML(eventElement, 'start_time'));
			var _yearEnd = getYearFromStartDate(selectXML(eventElement, 'end_time')); //e.g. 2007
			var _monthEnd = getMonthFromStartDate(selectXML(eventElement, 'end_time'));
			var _dayEnd = getDayFromStartDate(selectXML(eventElement, 'end_time'));
			var _hourEnd = getHourFromStartDate(selectXML(eventElement, 'end_time'));
			var _minuteEnd = getMinuteFromStartDate(selectXML(eventElement, 'end_time'));
			var startTimeCounterCheck = new Date(_yearStart, _monthStart - 1, _dayStart, _hourStart, _minuteStart);
			var currentTimeCounterCheck = new Date();
			var endTimeCounterCheck = new Date(_yearEnd, _monthEnd - 1, _dayEnd, _hourEnd, _minuteEnd);
			
			//adjust timezone offset
			startTimeCounterCheck = adjustTimezoneOffset(startTimeCounterCheck);
			endTimeCounterCheck = adjustTimezoneOffset(endTimeCounterCheck);
			
			//Get count of old events and future events
			if(endTimeCounterCheck < currentTimeCounterCheck){
				//increase count of old events
				totalEventsOld++;
				
				//push index into array;
				oldEventIndexArray.push(i);
			}
			else {
				if(startTimeCounterCheck > currentTimeCounterCheck){
					//increase count of new events
					totalEventsFuture++;
				}
				else {
					//increase count of in progress events
					totalEventsInProgress++;
				}	
			}
		}
		
		// Iterate through all the events, parsing the event data from the xml, and using the template to insert the html
	    for (var i = 0; i < eventElements.length; i++) {
	        var eventElement = eventElements[i];
			
	        var eventData = {
	            title: selectXML(eventElement, 'title'),
	            event_page_url: selectXML(eventElement, 'event_page_url'),
				event_id: selectXML(eventElement, 'id'),
				description: selectXML(eventElement, 'description'),
				start_timeLong: selectXML(eventElement, 'start_time'),
				start_time: getTimeFromStartDate(selectXML(eventElement, 'start_time')),
				start_timeDayString: getDayStringFromStartDate(selectXML(eventElement, 'start_time')),
				start_timeMonthString: getMonthStringFromStartDate(selectXML(eventElement, 'start_time')),
				start_timeDay: getDayFromStartDate(selectXML(eventElement, 'start_time')),
				start_timeYear: getYearFromStartDate(selectXML(eventElement, 'start_time')),
				end_timeLong: selectXML(eventElement, 'end_time'),
				end_time: getTimeFromStartDate(selectXML(eventElement, 'end_time')),
				end_timeDayString: getDayStringFromStartDate(selectXML(eventElement, 'end_time')),
				end_timeMonthString: getMonthStringFromStartDate(selectXML(eventElement, 'end_time')),
				end_timeDay: getDayFromStartDate(selectXML(eventElement, 'end_time')),
				end_timeYear: getYearFromStartDate(selectXML(eventElement, 'end_time')),
				tag_list: selectXML(eventElement, 'tag_list'),
				reminderLayer_id: "reminderLayer_" + selectXML(eventElement, 'id'),
				atcLayer_id: "atcLayer_" + selectXML(eventElement, 'id'),
				inviteLayer_id: "inviteLayer_" + selectXML(eventElement, 'id')	
	        }

			var _year = getYearFromStartDate(selectXML(eventElement, 'start_time')); //e.g. 2007
			var _month = getMonthFromStartDate(selectXML(eventElement, 'start_time'));
			var _day = getDayFromStartDate(selectXML(eventElement, 'start_time'));
			var _hour = getHourFromStartDate(selectXML(eventElement, 'start_time'));
			var _minute = getMinuteFromStartDate(selectXML(eventElement, 'start_time'));
			var _yearEnd = getYearFromStartDate(selectXML(eventElement, 'end_time')); //e.g. 2007
			var _monthEnd = getMonthFromStartDate(selectXML(eventElement, 'end_time'));
			var _dayEnd = getDayFromStartDate(selectXML(eventElement, 'end_time'));
			var _hourEnd = getHourFromStartDate(selectXML(eventElement, 'end_time'));
			var _minuteEnd = getMinuteFromStartDate(selectXML(eventElement, 'end_time'));
			var startTimeCheck = new Date(_year, _month - 1, _day, _hour, _minute);
			var currentTimeCheck = new Date();
			var endTimeCheck = new Date(_yearEnd, _monthEnd - 1, _dayEnd, _hourEnd, _minuteEnd);
			
			//adjust timezone offset
			startTimeCheck = adjustTimezoneOffset(startTimeCheck);
			endTimeCheck = adjustTimezoneOffset(endTimeCheck);
			
						
			allLayerIds.push(selectXML(eventElement, 'id'));
			
			//If there are more than 10 events, find out how to only show 10 most relevent events!
			if(totalEventsAll > 10) {
				//If there are 10 or more in progress and/or future events, only show the first 10	
				if((totalEventsFuture + totalEventsInProgress) >= 10){			
					if(counterA < 10){
						if(endTimeCheck >= currentTimeCheck){
						//if event is not old (i.e. its in progress or future)
							if(startTimeCheck < currentTimeCheck){
								$('livevideo_div').insert({before: eventTemplateInProgress.evaluate(eventData)});	
							}
							else {
								$('livevideo_div').insert({before: eventTemplate.evaluate(eventData)});
							}
							counterA++;
						}
					}	
				}
				//If there are less than 10 new (or current events), show all new events, and only show adjusted count of old events
				else{
					totalEventsOldToShow = totalEventsOld - (totalEventsAll - 10);
					
					if(endTimeCheck >= currentTimeCheck){
					//if event is not old (i.e. its in progress or future)
						if(startTimeCheck < currentTimeCheck){
							$('livevideo_div').insert({before: eventTemplateInProgress.evaluate(eventData)});	
						}
						else {
							$('livevideo_div').insert({before: eventTemplate.evaluate(eventData)});
						}
					}
					else {
						for(s = (oldEventIndexArray.length - 1); s >= (oldEventIndexArray.length - totalEventsOldToShow); s--){
							if(i == oldEventIndexArray[s]){
								$('livevideo_div').insert({after: pastEventTemplate.evaluate(eventData)});
							}
						}
					}					
				}
			}
			//Else, just show all the events!
			else {
				if(endTimeCheck < currentTimeCheck){
					$('livevideo_div').insert({after: pastEventTemplate.evaluate(eventData)});
				}
				else {
					if(startTimeCheck < currentTimeCheck){
						$('livevideo_div').insert({before: eventTemplateInProgress.evaluate(eventData)});	
					}
					else {
						$('livevideo_div').insert({before: eventTemplate.evaluate(eventData)});
					}
				}
			}
			$('livevideo_div').insert({before: reminderLayerTemplate.evaluate(eventData)});
			$('livevideo_div').insert({before: atcLayerTemplate.evaluate(eventData)});  
			$('livevideo_div').insert({before: inviteLayerTemplate.evaluate(eventData)}); 
	    }	
	}
	$('loading_div').hide();
}

// Get the element with the specified tag name under the parent
// and then get the value for it's child
function selectXML(parentNode, tagName){
    elements = parentNode.getElementsByTagName(tagName)
    
    if (elements.length == 1) {
		if (elements[0].firstChild) {
			return elements[0].firstChild.nodeValue;
		}
    }
	
    return '';
}

function parseXMLFromString(text){
    var doc = null;
    
    // code for IE
    if (window.ActiveXObject) {
        doc = new ActiveXObject("Microsoft.XMLDOM");
        doc.async = "false";
        doc.loadXML(text);
    }
    // code for Mozilla, Firefox, Opera, etc.
    else {
        var parser = new DOMParser();
        doc = parser.parseFromString(text, "text/xml");
    }
	
    return doc;
}
