/* variable declaration */
var _rrMgr = null;
var _allAirings = null;

var _intWmid;
var _name;
var _tmsId;
var _airingUrl;
var _oldShowtime;
var _oldNetwork;
var _airtitleDiv;
var _showtimeDiv;
var _summaryDiv;
var _titlelink;
var _seriesName = null;
var _nextAiringIndices;
var _recordAiringDiv;
var _recordAiringLink;
var _recordAiringImageLink;
var _recordSeriesDiv;
var _recordSeriesLink;
var _recordSeriesImageLink;

/* constants */
var _noneFoundMessage = "Sorry, no airings of this series were found in the next ten days.";

function onLoadPage()
{
    // hidden input fields
    _intWmid = GE("tsno_intwmid");
    _name = GE("tsno_name");
    _tmsId = GE("tsno_tmsid");
    _airingUrl = GE("tsno_airingurl");
    _oldShowtime = GE("tsno_oldshowtime");
    _oldNetwork = GE("tsno_oldnetwork");
    _loadingImgSrc = GE("tsno_loadingimgsrc");
    _loadingImgStyle = GE("tsno_loadingimgstyle");
    
    _viewUpcomingAiringsLink = GE("tsno_upcomingairingslink");
    
    _viewUpcomingAiringsLink.innerHTML = "";
    
    // episode description fields
    _airtitleDiv = GE("tsno_airtitle");
    _showtimeDiv = GE("tsno_showtime");
    _summaryDiv = GE("tsno_summary");
    _titlelink = GE("tsno_titlelink");
    
    // remote record fields
    _recordAiringDiv = GE("tsno_recordairingdiv");
    _recordAiringLink = GE("tsno_recordairinglink");
    _recordAiringImageLink = GE("tsno_recordairingimagelink");
    _recordSeriesDiv = GE("tsno_recordseriesdiv");
    _recordSeriesLink = GE("tsno_recordserieslink");
    _recordSeriesImageLink = GE("tsno_recordseriesimagelink");
    
    // tv provider fields
    setUpTVProviderVariables();
    
    _messageDiv = _airtitleDiv;
    _loadingImageDiv = GE("tsno_loadingimagediv");
    
    _rrMgr = createRRObject();
}

function callAllAiringsFunction()
{
    // search on either intWmid or Name/TmsId (never both)
    if (_intWmid != null)
    {
        getNextAiringIndices(null, _intWmid.value, null);
    }
    else if (_tmsId != null)
    {
        getNextAiringIndices(null, null, _tmsId.value);
    }
    else
    {
        getNextAiringIndices(_name.value, null, null);
    }

    _seriesName = _name.value;
    
    setTimeout("timeout();", _util_timeOutTime);
}

function handleError()
{
    _loadingImageDiv.style.display = "none";
    if (_oldShowtime != null)
    {
        _airtitleDiv.style.display = "inline";
        _airtitleDiv.innerHTML = "Airs:";
        
        _showtimeDiv.innerHTML = "";
        var showTimeString = _oldShowtime.value;
        if (_oldNetwork != null && _oldNetwork.value != "")
        {
            showTimeString += "<br>" + _oldNetwork.value;
        }
        showTimeString += "<br>Time & channel not available"
                    
        _showtimeDiv.innerHTML = showTimeString;
    }
    else
    {
        _airtitleDiv.style.display = "block";
        _airtitleDiv.innerHTML = "<div id=\"tsno_nonefounddiv\">" + _timeOutMessage + "</div>";
    }
    
    updateHeadendDisplayForError();
}

function handleNoData()
{
    _loadingImageDiv.style.display = "none";
    if (_oldShowtime != null)
    {
        _airtitleDiv.style.display = "inline";
        _airtitleDiv.innerHTML = "Airs:";
        
        _showtimeDiv.innerHTML = "";
        
        var showTimeString = _oldShowtime.value;
                                
        if (_oldNetwork != null && _oldNetwork.value != "")
        {
            showTimeString += "<br>" + _oldNetwork.value;
        }

        showTimeString += "<br>Time & channel not available"
                    
        _showtimeDiv.innerHTML = showTimeString;
    }
    else
    {
        _airtitleDiv.style.display = "block";
        _airtitleDiv.innerHTML = "<div id=\"tsno_nonefounddiv\">" + _noneFoundMessage + "</div>";
    }
}

function setUpcomingAiringsLinkText (result)
{
    var numAiringsString = getNumberOfFutureAirings(result, _name.value)
    var airingOrAirings, allOrThe;
    if (numAiringsString == " 1")
    {
        airingOrAirings = "airing";
        allOrThe = "the";
    }
    else
    {
        airingOrAirings = "airings";
        allOrThe = "all";
    }
    
    _seriesName = elipseText(_seriesName, 60);
    
    _viewUpcomingAiringsLink.style.display = "block";
    _viewUpcomingAiringsLink.innerHTML = 
        "View " + allOrThe + numAiringsString + " " + airingOrAirings + " of '" + _seriesName + "'";
        
    _searchingForNumAirings = false;
}

function getNumAiringsForSeries()
{
    if (_seriesName == null)
    {
        return;
    }

    if (_intWmid == null && _allAirings != null)
    {
        setUpcomingAiringsLinkText(_allAirings);
    }
    else
    {
        _searchingForNumAirings = true;
        if (_tmsId != null)
        {
            _rrMgr.getAllAiringsWithEncode(_seriesName, null, setUpcomingAiringsLinkText, _tmsId.value);
        }
        else
        {
            _rrMgr.getAllAiringsWithEncode(_seriesName, null, setUpcomingAiringsLinkText);
        }
    }
}

function handleErrorInGettingNumAirings()
{
    _viewUpcomingAiringsLink.style.display = "block";
    _viewUpcomingAiringsLink.innerHTML = "View all airings of '" + _name.value + "'";
}

function recordAiring(episodeIndex, airingIndex, recordSeries)
{
    _rrMgr.doRecord(_allAirings, episodeIndex, airingIndex, recordSeries, null);
}

function renderResults()
{
    if (_allAirings.shows.length == 0)
    {
        // if this is a new episode that is not in SVC, still need to show the view upcoming airings link
        if (_intWmid != null)
        {
            getNumAiringsForSeries(_name.value);
            setTimeout("timeout();", _util_elipsisTimeoutTime);
        }
        handleNoData();
        return;
    }

    var episode, airing;
    /* Episode and Airing object members: 
        *   episode:("Title", "LeadActors", "ProgramID", "Actors", "Description",
        *            "Directors", "EpisodeTitle", "Hosts", "LeadHost", "MPAA",
        *            "OtherCredits", "StarRating", "Year");
        *
        *   airing:("ChanID", "Affiliate", "CallLetters", "Duration",
        *           "StartTime", "Repeat", "TVRating", "Channel");
        */
    
    // no future airings found with the correct name
    if (_nextAiringIndices[0] == -1)
    {
        handleNoData();
        return;
    }
    
    episode = _allAirings.shows[_nextAiringIndices[0]];
    airing = episode.Schedule[_nextAiringIndices[1]];
    
    // get number of airings of the series for the view upcoming airings link
    getNumAiringsForSeries();
    setTimeout("timeout();", _util_elipsisTimeoutTime);
    
    // if title link is not already complete, create it
    if (_titlelink.innerHTML == "")
    {
        _titlelink.href = _airingUrl.value + "?progId=" + episode.ProgramID;
        
        if (episode.EpisodeTitle != null)
        {
            _titlelink.innerHTML = "\"" + episode.EpisodeTitle + "\"";
        }
        else
        {
            _titlelink.innerHTML = "Untitled";
        }    
    }
    
    var d = new Date();
    d.setTime(airing.StartTime);
    d = getLocalTime(d);
                        
    // fill in the showtime                
    _loadingImageDiv.style.display = "none";
    _airtitleDiv.style.display = "inline";                    
    _airtitleDiv.innerHTML = "Airs:";
    _showtimeDiv.innerHTML = "";
    var showTimeString = getDateString(d) + " " + getTimeString(d) + "<br>";
                                    
    showTimeString += getChannelOrNetworkInfo(_rrMgr, airing)

    showTimeString += "<br> " + airing.Duration + " mins";
                
    _showtimeDiv.innerHTML = showTimeString;
    
    // fill in the summary if it is not already filled and not a null value
    if (_summaryDiv.innerHTML == "" && episode.Description != null)
    {
        _summaryDiv.innerHTML = episode.Description;
    }
    
    if (_recordAiringDiv != null && _recordSeriesDiv != null)
    {
        // record airing div
        _recordAiringDiv.style.display = "block";
        _recordAiringLink.href = "javascript:recordAiring("+_nextAiringIndices[0]+","+_nextAiringIndices[1]+",false)";
        _recordAiringImageLink.href = "javascript:recordAiring("+_nextAiringIndices[0]+","+_nextAiringIndices[1]+",false)";
                                
        // record series div
        _recordSeriesDiv.style.display = "block";
        _recordSeriesLink.href = "javascript:recordAiring("+_nextAiringIndices[0]+","+_nextAiringIndices[1]+",true)";
        _recordSeriesImageLink.href = "javascript:recordAiring("+_nextAiringIndices[0]+","+_nextAiringIndices[1]+",true)";
    }
    
    d = null;
}