/* variable declaration */
var _registeredEvents = [];
var _tvGuideUi = null;
        
function onChangeProvider(headend)
{
    var headendstring = "";
    var headendName;
    var headendZip;
    var headendIsDefault;
    if (headend != null)
    {
        headendName = headend.FriendlyName;
        headendZip = headend.PostalCode;
        headendIsDefault = headend.IsDefault;
    }
    else
    {
        headendIsDefault = true;
    }
    
    if (headendIsDefault)
    {
        headendstring = "No local listings provider chosen";
        
        _changeHeadendLink.innerHTML = "Enter your zip code";
        _changeHeadendLink.id = "TVPgetList";
        _changeHeadendLink.style.display = "block";
        
        _headendLoadingDiv.style.display = "none";
        _headendDiv.style.display = "block";
        _headendDiv.innerHTML = headendstring;
        _headendDiv.id = "TVPmsg";
        
        // add link for changing the headend
        _changeHeadendLink.href = "javascript:void(0)"
        _changeHeadendLink.innerHTML = "Enter your zip code";
        
        var linkAction = _tvGuideUi.changeHeadend;
        doAttach(_changeHeadendLink, "click", linkAction);
    }
    else
    {
        headendstring = "<b>Provider:</b> " + headendName + "<br><br>";
        if(headendZip != "")
        {
            headendstring += "<b>Zip Code:</b> " + headendZip + "<br>";
        }
        
        _changeHeadendLink.innerHTML = "Change provider";
        _changeHeadendLink.id = "TVPchgProv";
        _changeHeadendLink.style.display = "block";

        _headendLoadingDiv.style.display = "none";
        _headendDiv.style.display = "block";
        _headendDiv.innerHTML = headendstring;
        
        // add link for changing the headend
        _changeHeadendLink.href = "javascript:void(0)"
        _changeHeadendLink.innerHTML = "Change provider";

        var linkAction = _tvGuideUi.changeHeadend;
        doAttach(_changeHeadendLink, "click", linkAction);
    }
}

var gridCallbacks =
{
    "ON_CHANGE_HEADEND":onChangeProvider
};

function onLoadPage()
{
    setUpTVProviderVariables();

    var gridDiv = GE("maincontent");
    var providerDiv = GE("tvgp_main");
    var rrDiv = GE("tvgr_main");
    var pageGroupHidden = GE("tvgr_pagegroup");
    
    var pagegroupValue = "";
    if (pageGroupHidden != null)
    {
        pagegroupValue = pageGroupHidden.value;
    }
        
    try
    {
        _tvGuideUi = new Microsoft.Msn.Tv.GuideUiMgr(gridDiv, null, null, rrDiv);

        if (_tvGuideUi != null)
        {
            _tvGuideUi.setPreference("TvTagCallbacks", tvTagCallbacks);
            _tvGuideUi.setPreference("GridCallbacks", gridCallbacks);
            _tvGuideUi.setPreference("BaseFontSize", 63);
            _tvGuideUi.setPreference("HistoryHelperPage", "/tv/Microsoft.Msntv.HistoryManagerFrame.aspx");
            if (pagegroupValue != "")
            {
                _tvGuideUi.setPreference("TvTagDetailsAdPrefs", {"type":2, "PG":pagegroupValue, "AP":"1007"});
            }
            _tvGuideUi.initialize();
        }
        else
        {
            gridDiv.innerHTML = "Sorry, there was an error retrieving listings information. Please try again later.";
            updateHeadendDisplayForError();
        }
    }
    catch(e)
    {
        gridDiv.innerHTML = "Sorry, there was an error retrieving listings information. Please try again later.";
        updateHeadendDisplayForError();
    }
}

function onUnLoadPage()
{
    detachAll();
    if (_tvGuideUi != null)
    {
        _tvGuideUi.dispose();
    }
}

function doAttach(el, evtObj, fn) 
{
    doDetach(el, evtObj, fn);
    if (window.attachEvent)
    {
        el.attachEvent("on" + evtObj, fn);
    }
    else
    {
        el.addEventListener(evtObj, fn, false);     
    }
    _registeredEvents.push([el, evtObj, fn]);
}

function doDetach(el, evtObj, fn) 
{
    if (window.detachEvent)
    {
        el.detachEvent("on" + evtObj, fn);
    }
    else
    {
        el.removeEventListener(evtObj, fn, false);     
    }
}

function detachAll()
{
    var e;
    for (var i=0; i<_registeredEvents.length; i++)
    {
        e = _registeredEvents[i];
        doDetach(e[0], e[1], e[2]);
    }
    _registeredEvents = [];
}
