﻿
function showLoadingScreen()
{
	var theGridDiv = document.getElementById("gridDiv");
	var loadingString = "<div style='font-size:22px;color:#CC0000;padding-top:20px;'>Loading Grid...</div>";
	
	if(theGridDiv) 
	{
		theGridDiv.innerHTML = loadingString;
	}
	else
	{
		theGridDiv = document.getElementById("TvGridDiv");
		if(theGridDiv) 
		{
			theGridDiv.innerHTML = loadingString;
		}
	}
}


function loadSingleChannel() 
{   
    // suspend tracking while we scroll
    figOffsetFudge = 0;
    bTrackScrollPos = false;
	showLoadingScreen();
	setTimeout("getGridData(1)", 1);
}

function reloadGrid() 
{ 
    // suspend tracking while we scroll
    figOffsetFudge = 0;
    bTrackScrollPos = false;
	showLoadingScreen();
	setTimeout("getGridData(0)", 1);
}

function getGridData(dataType)
{
    var qparams = null;
	dtDataLoadStart = new Date();
	
	
	if(dataType===0)
	{
		iSingleSourceID = 0;
		SingleSourceChannel = "";
	}
	
    //
    // paramServiceID isn't populated until AFTER the first grid call returns
    // if it is empty we know this is the first call and we check the cookie
    //
    if(paramServiceID==="")
    {
        if(iServiceID!==0)
        {
            paramServiceID = iServiceID;
        }
        else
        {
            // check the official service id cookie
            if((paramServiceID=readCookie("ServiceID"))===null)
            {
                // look for the temp cookie too
                if((paramServiceID=readCookie("srvid"))===null)
                {
                    // finally, check the querystring (cookies off)
                    if((paramServiceID=getQueryParam(document.location.search, "ServiceID"))==="")
                    {
                        paramServiceID = 80001;
                    }
                }
            }
        }
        
        //
        // see if we've visited the grid in this session
        //
        qparams = readCookie('LastGrid');
        if((qparams)&&(!boolIgnorePrefs))
        {
            //
            // read non-cookied state options and setup options
            //
            optionFavChannels = (getQueryParam(qparams,'favchan')=='true');
            if(optionFavChannels)
            {
                setSelectByValue("genreSelect",1);
                optionGenreFilter=0;
            }
            else
            {
                optionGenreFilter = parseInt(getQueryParam(qparams,'genre'),10);
                setSelectByValue("genreSelect", optionGenreFilter);
            }
            bHDTVOnlyFilter = (getQueryParam(qparams,'HDTVOnly')=='true');
            if(bHDTVOnlyFilter)
            {
                // initialize the HD checkbox
                var hdchk = document.getElementById("HdOnlyChk");
                if(hdchk)
                {
                    hdchk.checked = true;
                    toggleHDTV(hdchk);
                }
            }
        }
        else
        {
            //
            // no previous grid - get querystring
            //
            qparams = getQueryParameters(dataType);
        }
    }
    else
    {
        //
        // standard grid reload - just grab the parameters
        //
        qparams = getQueryParameters(dataType);
    }
    
    if(bUseImageStrips){ loadGridIcons(); }	
    
    // datafile here
    var dataPage = "ajaxcache.ashx";
    
    if(dataType==1)
    {
		dataPage = "ajaxchan.ashx";
    }

    // this is the path on the x64 listings servers                
	var urlData = "/ListingsWeb/listings/data/" + dataPage;
	
	//
	// New! fix qparams double encode
	//
	qparams = fixQueryString(qparams);
	
	//
	// we call the iframe ajax version first, if it fails -
	// it will set bGetDataFromSource to true and fall through
	//	
    if(!bGetDataFromSource)
    {
        if(!useGridCache(paramServiceID))
        {
            getListingsDataWrapper(urlData, qparams, dataType);
        }
    }
  	
    if((bGetDataFromSource)||(useGridCache(paramServiceID)))
    {
        //
        // only gets executed if there was an error making
        // the remote ajax call through the iframe script
        //
        dataPage = "ajaxcache.ashx";

		if(dataType==1)
		{
			dataPage = "ajaxchan.ashx";
		}        
        
        // build full URL to data
        urlData = "/listings/data/" + dataPage + "?" + qparams;
      	
      	// get our XMLHttpObject
      	switch(dataType)
      	{
      		case 1 :
				xmlHttp = GetXmlHttpObject(xmlChannelEvent);
				break;
      		
      		default :	
				xmlHttp = GetXmlHttpObject(xmlDataEvent);
				break;
		}
        
        if(xmlHttp)
        {
            xmlHttp.open("GET", urlData , true);
            xmlHttp.send(null);
        }
    }
}

function onDataComplete(dataType)
{
	processGridData(dataType);

	
	if((dataType===0)&&(newGenre!=-1))
	{
	    var i = newGenre;
	    newGenre = -1;
	    tabClick(null,i);
	    return;
	}
	
	switch(dataType)
	{
		case 0:
			drawListings();
			bhasGridData = true;    
			break;
		case 1:
			drawSingleChannelGrid();
			bhasGridData = false;    
			break;
		default: break;
	}	

	if(!bCountTabsAsPageViews){ countListingsView(); }
}

function xmlDataEvent()
{
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
        dtDataLoadEnd = new Date();	
		setTimeout("onDataComplete(0)", 1);
	}
}

function xmlChannelEvent()
{
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
        dtDataLoadEnd = new Date();	
		setTimeout("onDataComplete(1)", 1);
	}
}

function countListingsView()
{
    switch(optionGenreFilter)
    {
        case 0 :
            if(optionFavChannels) { strActiveFilter = "Favorite Channels"; }
            else { strActiveFilter = "All Channels"; }
            break;
        case 2 :
            strActiveFilter = "Movie Filter";
            break;
        case 3 :
            strActiveFilter = "Sports Filter";
            break;
        case 4 :
            strActiveFilter = "Family Filter";
            break;
        case 5 :
            strActiveFilter = "PPV Filter";
            break;
        case 6 :
            strActiveFilter = "News Filter";
            break;
        case 7:
            strActiveFilter = "Keyword Filter";
            break;            
        default:
            strActiveFilter = "All Channels";
            break;
    }
        
    var strProvType = "National Grid";
    
    if((iServiceID!=80001)&&(iServiceID!=80004))
    {
        var tmpPR = strProviderName.toLowerCase();
        if(tmpPR.indexOf("dish")>=0)
        {
            strProvType = "Dish Network";
        }
        else if(tmpPR.indexOf("directv")>=0)
        {
            strProvType = "DirecTV";
        }  
        else
        {
            strProvType = "Cable/Other";
        } 
    }
         
    var nAjaxLoadTime = new Number(iAjaxLoadTime);
    var nAjaxRender = new Number(iAjaxRender);
    
    countGridViewEx(strGridLoadType, strActiveFilter, strProvType, iChannelCount, iGridSpanMinutes, nAjaxLoadTime.toFixed(1), nAjaxRender.toFixed(0), iAjaxBytes);
	// urchinTracker('/listings/data/ajaxdata.ashx');

    strGridLoadType = "Ajax Load";
}

function processGridData(dataType)
{
    try 
    {
	    objRawData = xmlHttp.responseText.split("\n");
	} 
	catch(err) 
	{ 
	}

	if(objRawData.length<1)
	{
	    // some error occurred
	    alert("Error retrieving data");
	    return;
	}
	
	objGridData = objRawData;	

	var metaRow = objGridData[0].split("\t");

	for(var x=0; x<objGridData.length; x++)
	{
		objGridData[x] = objGridData[x].split("\t");

		if( ((x>0)&&(dataType===0)) || ((x>1)&&(dataType==1)) )
		{
			objGridData[x][colSortOrder]    = parseInt(objGridData[x][colSortOrder],10);
			objGridData[x][colNetworkID] 	= parseInt(objGridData[x][colNetworkID],10);
			objGridData[x][colBlockCount] 	= parseInt(objGridData[x][colBlockCount],10);
			objGridData[x][colCategory]		= parseInt(objGridData[x][colCategory],10);
			objGridData[x][colSubCategory]	= parseInt(objGridData[x][colSubCategory],10);
			objGridData[x][colSourceType] 	= parseInt(objGridData[x][colSourceType],10);
			objGridData[x][colStartBefore] 	= parseInt(objGridData[x][colStartBefore],10);
			objGridData[x][colEndAfter] 	= parseInt(objGridData[x][colEndAfter],10);
			objGridData[x][colAttributes] 	= parseInt(objGridData[x][colAttributes],10);
			objGridData[x][colProgramID] 	= parseInt(objGridData[x][colProgramID],10);
			objGridData[x][colSourceID]		= parseInt(objGridData[x][colSourceID],10);
			objGridData[x][colDuration]     = parseInt(objGridData[x][colDuration],10);
			objGridData[x][colTVObjectID]	= parseInt(objGridData[x][colTVObjectID],10);
			objGridData[x][colHasVideo]     = parseInt(objGridData[x][colHasVideo],10);	
			if(objGridData[x][colChannelNumber]) {			
				objGridData[x][colChannelNumber]= objGridData[x][colChannelNumber].replace(/\s+/g,"");
			}
				
		}
	}
	
	// this is the found magic source id
	if(metaRow[12]!=null) 
	{
		var mid = metaRow[12].replace("magic=","");
		if(mid.length>0)
		{
			try {
				magicSourceID = parseInt(mid,10);
			}
			catch(e)
			{
				magicSourceID = 0;
			}
		}
	}
	
	// get first row holding global data
	var objOneRow   = objGridData[0];
	var arLocalTime = objOneRow[0].split("-");
	var arGridTime  = objOneRow[1].split("-");

	dtGridLocalStartTime 	= new Date(arGridTime[0], arGridTime[1]-1, arGridTime[2], arGridTime[3], arGridTime[4], 0, 0);
	dtCurrentLocalDate 		= new Date(arLocalTime[0], arLocalTime[1]-1, arLocalTime[2], arLocalTime[3], arLocalTime[4], 0, 0);
	
	iGridSpanMinutes	= parseInt(objOneRow[2],10);	
	iServiceID		    = parseInt(objOneRow[7],10);	
	strProviderName	    = objOneRow[8];
		
    var svid = iServiceID;
    
    if((svid>=80000)&&(svid<=80010))	
	{
		isNationalGrid = true;
	}
	else
	{
		isNationalGrid = false;
	}
	
	//
	// fill in provider name
	//
    var objSpan = document.getElementById("spanProviderName");
    if(objSpan)
    {
        objSpan.innerHTML = strProviderName;
    }
    	
	//
	// get selected channels from cookie now that we have service id
	//
    readChannelsCookie();
	
    if(dataType===0)
    {
		paramGridYear       = dtGridLocalStartTime.getFullYear();   
		paramGridMonth      = dtGridLocalStartTime.getMonth()+1;
		paramGridDay        = dtGridLocalStartTime.getDate();
    
		paramGridHour       = dtGridLocalStartTime.getHours();
		paramGridMinute     = dtGridLocalStartTime.getMinutes();
	}
	        	
	iProgramCellsAcross 	= iGridSpanMinutes/iMinPerBlock;
	iTotalCellsAcross 		= iProgramCellsAcross + 1;	
	iSliceWidthPx 			= Math.round((iGridWidthPixels-iScrollBarWidth-iChannelWidthPx) / iProgramCellsAcross)-2;
	
	//
	// *NEW* - get Timebar headers
	//
	var tbh = objOneRow[10];
	strTimebarHeaders = null;
	
	if(tbh)
	{
	    if(tbh.length>0)
	    {
	        strTimebarHeaders = tbh.split('|');
	    }
	}
	
	//
	// *NEW* server name
	//
	strDataServer = objOneRow[11];	
}

function setChannelsCookie(selChans)
{
	//
	// set channel filter cookie
	//
    var strCookieValue = "";
    var arrUniqueChannel = new Array();
	for(var n=0; n<selChans.length; n++)
	{
	    if (n > 0) { strCookieValue += "|"; }
        var bln =false;

	    var str = selChans[n].value;
	    var val = str.split('|');
	    // NEW! cookie is SourceID + "_" + ChannelNumber
        var curVal = val[colSource] + "_" + val[colNumber];
        for (j = 0; j < arrUniqueChannel.length; j++) {
            if (arrUniqueChannel[j] == curVal) {
                bln = true;
            }
        }
        if (!bln) {
            strCookieValue += curVal;
            arrUniqueChannel.length += 1;
            arrUniqueChannel[arrUniqueChannel.length - 1] = curVal;
        }
    }
	setCookie(cookieSelectedChannels + iServiceID, strCookieValue, 365);
	setChannelFavorites(iServiceID, strCookieValue);
}

function callRSI(rsiTitle, rsiCategory, rsiSubCategory)
{
    try {
	DM_addToLoc("CloseUpMasterTitle", rsiTitle);
	DM_addToLoc("CloseUpCategory0", rsiCategory);
	DM_addToLoc("CloseUpCategory1", rsiSubCategory);
	DM_tag();
	} catch(err) { }
}

function dataCallback(objXML,dataType)
{
    xmlHttp = objXML;
    dtDataLoadEnd = new Date();	
	setTimeout("onDataComplete("+dataType+")", 1);
}

function getListingsDataWrapper(strURL, strQuery, dataType)
{
    try
    {
        window.frames['ajaxwrap'].window.getListingsDataEx2(strURL, strQuery, "GET", dataType);
    }
    catch(e)
    {
        // alert("Warning: Direct data call failed. Using proxy data page.\n\n(" + e + ")");
		bGetDataFromSource = true;
    }       
}

function xmlIconDataCallback()
{
	if (xmlHttpIconData.readyState==4 || xmlHttpIconData.readyState=="complete")
	{
		arrayIconData = xmlHttpIconData.responseText.split("\t");
	}
}

function loadGridIcons()
{
	if(!arrayIconData)
	{
		xmlHttpIconData = GetXmlHttpObject(xmlIconDataCallback);
		if(xmlHttpIconData)
		{
			var urlData = "/HandlerCache/img_gridlogos.ashx?returntype=data&serviceid=" + paramServiceID;
			xmlHttpIconData.open("GET", urlData, true);
			xmlHttpIconData.send(null);
		}
	}
}


function trackScroll(theDiv)
{
    if(bTrackScrollPos)
    {
        iGridScrollTop = theDiv.scrollTop;
    }
}

function scrollTheGrid()
{
    var obj = document.getElementById("gridDiv");
    if(obj)
    {
        if(obj.offsetHeight>0)
        {        
            obj.scrollTop = iGridScrollTop;
        }
    }
    else
    {
        alert('No Div to scroll');
    }
    bTrackScrollPos = true;
}

function SetGridMode(i)
{
    newGenre=i;    
}


function checkKeywordFilter()
{
    //
    // check the given row for a matching filter value
    //
    var iTmpCounter = iCurrentProgram;
	var objOneRow = objGridData[iTmpCounter];	
	var thisChannel = objOneRow[colSourceID]+objOneRow[colChannelNumber];
    
    while(iTmpCounter<objGridData.length)
    {
        var strTitle = objOneRow[colProgramTitle];
        
        if(strTitle.toLowerCase().indexOf(strKeyword.toLowerCase())>=0)
        {
            return true;
        }
        
        iTmpCounter++;
        objOneRow = objGridData[iTmpCounter];
        
        //
        // make sure we're still in the same channel
        //
        if(thisChannel!=(objOneRow[colSourceID]+objOneRow[colChannelNumber]))
        {
            return false;
        }
    }
    return false;
}

function checkGenreFilter()
{
    //
    // check the given row for a matching filter value
    //
    var iTmpCounter = iCurrentProgram;
	var objOneRow = objGridData[iTmpCounter];	
	var thisChannel = objOneRow[colSourceID]+objOneRow[colChannelNumber];
    
    while(iTmpCounter<objGridData.length)
    {
        var iCategory = objOneRow[colCategory];
        switch(optionGenreFilter)
        {
            case 2:
                // movies
                if((iCategory&64)==64){ return true; }
                break;
            case 3:
                // sports
                if((iCategory&1024)==1024){ return true; }
                break;
            case 4:
                // family
                if((iCategory&2)==2){ return true; }
                break;
            case 5:
                // ppv
                break;
            case 6:
                // news
                if((iCategory&256)==256){ return true; }
                break;
            default:
                return true;
        }
        
        iTmpCounter++;
        objOneRow = objGridData[iTmpCounter];
        
        // make sure we're still in the same channel
        if((objOneRow)&&(thisChannel!=(objOneRow[colSourceID]+objOneRow[colChannelNumber])))
        {
            return false;
        }
    }
    return false;
}




