//Listviews functions
var tableId = 'programlisting'
var evenClass = 'roweven';
var oddClass = 'rowodd';
var selectedClass = 'info';
var deletedClass = 'deleted';
var detailClass = 'listdetailhide';
var detailheaderClass = 'listheaderhide';
var updateListCompleteUrl = '/tvguide/programsComplete';
var updateListUrl = '/tvguide/programs';

var currentShowDetails = null;

var currentSortIndex = null;
var currentSortOrder = null;
var firstPageLoad = true;
var initialSortIndex = 9;
var initialSortOrder = -1; //ascending = 1, descending = -1

var removedChannel;

function EventObject(element, action, handler){
	this.element = element;
	this.action = action;
	this.eventHandler = handler;
}

var EventCache = {
	events : [],
	addEvent : function(element, action, handler){
		Event.observe(element, action, handler);
		var event = new EventObject(element, action, handler);
		EventCache.events.push(event);
	},
	stopAll : function(){
		var count = EventCache.events.length;
		for(i = 0; i < count; i++){
			var event = EventCache.events[i];
			Event.stopObserving(event.element, event.action, event.eventHandler);
		}
		EventCache.events = [];	
	}
}

function showDetails(contentId){
	if (currentShowDetails == contentId){
		hideDetails(currentShowDetails);
		//return false;
	} else {
	var tableRow = $(contentId);
	if(tableRow != null){
        showLoader();
		new Ajax.Request('/programdetails/viewList?id=' + contentId + '&view=' + currentView, {asynchronous:true, evalScripts:true,
            onSuccess:function(transport){ $('detailsContent' + contentId).update(transport.responseText);
            					if(currentShowDetails != null){
												hideDetails(currentShowDetails);
											}

											currentShowDetails = contentId;
		
											tableRow.removeClassName(evenClass);
											tableRow.removeClassName(oddClass);
											tableRow.addClassName(selectedClass);

											//Onclick hide selection
											var closeOb = $('close' + contentId);
											EventCache.addEvent(closeOb, 'click', function(event){
												Event.stop(event);
												hideDetails(contentId);
											});
											closeOb.show();	
																
											//Onclick remove selection
											var removeOb = $('remove' + contentId);
											if(removeOb != null){
												EventCache.addEvent(removeOb, 'click', function(event){
													Event.stop(event);
													removeMySelectionList(contentId);
												});
											}

											
											$('detailsContent' + contentId).removeClassName(detailClass);			
											
											$('headerContent' + contentId).addClassName(detailheaderClass);		
											
											//Set selected item for EPG view
											var providerOb = $('provider' + contentId);
											var provider = providerOb.innerHTML;
											currentDetails = 'channeldetails_' + provider.substring(24, provider.length-10);
											currentUrl = '/programdetails/view/id/' + contentId + '/view/tvguide';
											currentProgramId = 'epgProgram' + contentId;

                      //Disable tooltip
                      disableTooltip('markSmall_' + contentId);
										},
				onComplete: function(){trackGoogleAnalytics('openProgramDetails');hideLoader();}
				}); 		
		
		}
	}
	
	return false;
}

function setDetails(contentId){
	var tableRow = $(contentId);
	if(tableRow != null){
        showLoader();
		new Ajax.Request('/programdetails/viewList?id=' + contentId + '&view=' + currentView, {asynchronous:true, evalScripts:true,
            
            onSuccess:function(transport){ $('detailsContent' + contentId).update(transport.responseText);
            								currentShowDetails = contentId;
		
											tableRow.removeClassName(evenClass);
											tableRow.removeClassName(oddClass);
											tableRow.addClassName(selectedClass);
											
																					
											//Onclick hide selection
											var closeOb = $('close' + contentId);
											EventCache.addEvent(closeOb, 'click', function(event){
												Event.stop(event);
												hideDetails(contentId);
											});
											closeOb.show();	
											
																
											//Onclick remove selection
											var removeOb = $('remove' + contentId);
											if(removeOb != null){
												EventCache.addEvent(removeOb, 'click', function(event){
													Event.stop(event);
													removeMySelectionList(contentId);
												});
											}
										
											
											$('detailsContent' + contentId).removeClassName(detailClass);
                      
                      //Disable tooltip
                      disableTooltip('markSmall_' + contentId);
									},
			onComplete: hideLoader
			}); 
	}
	
	return false;
}

function hideDetails(contentId){
	var tableRow = $(contentId);
	
	if(tableRow != null){
		currentShowDetails = null;
		
	$('detailsContent' + contentId).addClassName(detailClass);
	tableRow.removeClassName(selectedClass);
	$('headerContent' + contentId).removeClassName(detailheaderClass);
	//Set selected item for EPG view
	currentDetails = null;
	currentUrl = null;
	currentProgramId = null;
	//fixTableLayout();
   //Enable tooltip
   enableTooltip('markSmall_' + contentId);
	}
	
	trackGoogleAnalytics('closeProgramDetails');
	return false;
}


function initListing(){		
		if(currentShowDetails != null){
			setDetails(currentShowDetails);
			$('headerContent' + currentShowDetails).addClassName(detailheaderClass);
		}
		var listRows = $$('.listrow');
		listRows.each(function(listRow){
			var contentId = listRow.id;
			listRow = $(listRow);
			
			//Onclick Row
			EventCache.addEvent(listRow, 'click', function(event){
				//Event.stop(event);
				var element = $(Event.element(event));
				if(element.hasClassName('listrowheader') || element.hasClassName('listcell') || element.hasClassName('recommendation') || element.hasClassName('padding-span') || element.hasClassName('title') || element.hasClassName('duration') || element.hasClassName('date') || element.hasClassName('provider') || element.hasClassName('genre')){
					showDetails(contentId);
				}
			});
		});
}

function highlightGenres(genre,key){
    var genreOb = document.genreselecter["genre[]"][key];
    if(!genreOb) { return; }
    
    if (genreOb.checked)
    {
        new Ajax.Request('/tvguide/addGenreToSession?genre=' + genre);
    }
    else
    {
        new Ajax.Request('/tvguide/removeGenreFromSession?genre=' + genre);
    }
    updateEPG('channelguide');
}
var addedChannel;
var listView = false;

function removeChannel(channel, channelName)
{
    listView = false;
    $("channel_"+channel).hide();
    $("channelRemoved").show();
    $("channelAdded").hide();
    removedChannel = channel;
    url = "/tvguide/removeChannel/channel/"+channel;
    showLoader();
    new Ajax.Request(url, {evalScripts : true, 
    												onSuccess: function(transport) {
                                                        updateName(channelName);
   													},
    									onComplete: function() {
                                                    reloadOtherChannels();
                                                    hideLoader();
                                                }
    									 });
}

function updateName(name)
{
    var removedChannelName = $('removedChannelName');
	
	if(removedChannelName != null){
        $('removedChannelName').update(name);
    }
    var addedChannelName = $('addedChannelName');
	
	if(addedChannelName != null){
        $('addedChannelName').update(name);
    }
}

function showMoreChannels()
{
    toggleElement('otherChannels','on','channelsOff', 'channelsOn');
    window.location.hash="moreChannels"; 
}