﻿
function setDateTimeSelect(dt)
{
    var objSelect = document.getElementById("dateSelect");
    var strSelection = "";
    if(objSelect)
    {
        strSelection = dt.getFullYear() + "," + (dt.getMonth()+1) + "," + dt.getDate();
        objSelect.value = strSelection;
    }	    

    objSelect = document.getElementById("timeSelect");
    if(objSelect)
    {
        strSelection = dt.getHours() + ":" ;
        strSelection += formatInt(dt.getMinutes(),2);
        objSelect.value = strSelection;    	    
    }
}

function drawListings()
{
	var dtStartTime = new Date();
	
	var theGridDiv = document.getElementById("TvGridDiv");

	iChannelCount = 0;
	iProgramCount = 0;
	bTopRowNotDrawnYet = true;
	bFireCheckinAd = false;

	setupOptions();

	strHTML = "";

	if(theGridDiv)
	{				
		strHTML = "<div class='masterGridDiv' id='masterGridDiv'>";
		
		// fill in selectors on the client
	    drawNewGridSelectors();
	    
		if(optionScrollGrid)
		{
			drawTimeBar(true);
		}

		drawGrid();
				
		strHTML += "<\/div>";
                
        if(optionCloseupsFooter)
        {
            // IE shows/hides with the DISPLAY value -- FF does it with VISIBILITY value
            var trclass = "icuie";
            if((isFF)||(isSafari)) { trclass = "icuff"; }
            strHTML += "<table cellpadding='0' cellspacing='0' border='0' width='100%' style='border: solid 1px #999999'>";
            strHTML += "<tr class='" + trclass + "' id='icrCloseup'><td class='icutd' id='icdCloseup'></td></tr><\/table>";      
        }
        
        var iHtmlLength = strHTML.length;
	    theGridDiv.innerHTML = strHTML;
		
        // initialize selctors AFTER we get data from server
        setDateTimeSelect(dtGridLocalStartTime);
        
        var objSelect = objGenreSelect;
        if(objSelect)
        {
            if(optionGenreFilter>0)
            {
                // if(bDebug){ alert('setting optionFavChannels to FALSE [00]'); }
                // select genre in selector
                optionFavChannels = false;
                objSelect.value = optionGenreFilter;
                iLastGenreValue = optionGenreFilter;
            }
            if(optionFavChannels)
            {
                objSelect.selectedIndex = 1;
            }
			disableTabs(false,true);
            tabHiLite(objSelect.value);                                
        }
        
        objSelect = document.getElementById("providerSelect");
        if(objSelect)
        {
            objSelect.value = iServiceID;
        }
	}

	bOptionsChanged = false;
	var dtEndTime = new Date();

    if(bDebug)
    {
        var iSeconds = (dtEndTime.getTime()-dtStartTime.getTime())/1000;
        var iDataSeconds = (dtDataLoadEnd.getTime()-dtDataLoadStart.getTime())/1000;
            
        var strStatusText = "Data: " + iDataSeconds + " secs, ";
        strStatusText += parseInt(xmlHttp.responseText.length/1000,10) + "KB --- ";
        strStatusText += "Render: " + iSeconds + " secs, ";
        strStatusText += "Chans=" + iChannelCount + ", ";
        strStatusText += "Progs=" + iProgramCount + " --- ";
        strStatusText += "Html=" + iHtmlLength + " bytes";
        window.status = strStatusText;
        document.title = strStatusText;
	}
    
	iAjaxMillisecs = dtDataLoadEnd.getTime()-dtDataLoadStart.getTime();
    iAjaxLoadTime = iAjaxMillisecs / 1000;
    iAjaxRender = (dtEndTime.getTime()-dtStartTime.getTime())/1000;
    iAjaxBytes = parseInt(xmlHttp.responseText.length/1000,10);
    iResponseBytes = parseInt(xmlHttp.responseText.length, 10);
	

    if(!boolIgnorePrefs)
    {
        setCookie("LastGrid", getQueryParameters(0), 0);
    }

    var prlnk = document.getElementById("printlinkv2");
    if(prlnk){ prlnk.style.display="block"; prlnk.href = "/print/listings.ashx?type=listings"; prlnk.onclick=new Function("pdfPrintOmni('listings')");}

	// count the page view
	if(bCountTabsAsPageViews) { countListingsView(); }
    

	/* for IE only - need to scroll the grid icon strip to the correct offset */
	if(isIE && bUseImageStrips)
	{
		for(var c=0; c<arrayIconData.length; c++)
		{
			var idx = "gi" + arrayIconData[c];
			var obj = document.getElementById(idx);
			if(obj) { obj.scrollLeft = c*gridIconWidth; }
		}
	}
    
	if(bFireCheckinAd) {
		bFireCheckinAd = false;
		// setTimeout("getCheckIns()",1);  
	}
	
    // wait 2 seconds then draw ad calls
    if(bEnableDelayedAds) {
		try { setTimeout("refreshAllAdsEx(true)", (iDelayedAdSeconds * 1000)); }
		catch(e) { setTimeout("refreshAllAdsEx(true)", (2 * 1000));  }
    } else {
		setTimeout("drawAdCalls(5)",1000);  
	}

}

function drawChannelCellEx(objRowData, checkit) 
{
	var strChannelNo    = objRowData[colChannelNumber];
	var strCallLetter   = objRowData[colCallLetters];	
	var iNetworkID      = objRowData[colNetworkID];
	var iSourceID		= objRowData[colSourceID];
    var favIcon         = "heart-off.gif";
    var sclink          = "";    
    var txt				= "";
    var ftext			= "";
	var itext			= "";
	  
    var strCellText     = strCallLetter;
    
    
    if( (isSpecialRow(objRowData)) && ((iChannelCount===0)||(magicRepeat)) )
    {
        strHTML += "<td onclick='javascript:gotoMagicUrl()' style='cursor:pointer;border:none;color:#FFFFFF;text-align:right;vertical-align:bottom;padding: 0px 2px 0px 0px;background-image: url(" + magicLogo + "); background-repeat: no-repeat; background-color:" + magicBkgnd + ";'>";
		if(magicTrackingPixel) {
			if(magicTrackingPixel.length>0) {
				var ord = new Date();			
				var pixel = magicTrackingPixel.replace(/\[timestamp\]/i, ord.getTime());	
				strHTML += "<img src='"+pixel+"' height='1' width='1' border='0'>";
				magicLink = magicLink.replace(/\[timestamp\]/i, ord.getTime());
			}
		}
		return;
	}
  
	if(strChannelNo.length>0) {
		strCellText = "<b>" + strChannelNo + "<\/b><br>" + strCellText;
	}
	
	sclink = "javascript:scl(\"" + objRowData[colChannelNumber] + "\"," + objRowData[colSourceID] + ",\"" + objRowData[colCallLetters] + "\")";
	
	if( (strGridType=="tvgrid") && ((optionEnableGridSelect)&&(!optionFavChannels)) )
    {
        if(checkit.length>0)
        {
            favIcon = "heart-on.gif";
        }
        var strChanVal = objRowData[colSortOrder] + "|" + objRowData[colSourceID] + "|" + strChannelNo;
        ftext = "<img alt='click to add to favorite channels' style='cursor:pointer;' id='cc" + strChanVal + "' src='/listings/images/v2/"+favIcon+"' onclick='addfav(this)'>";
    }
	
	if(bUseImageStrips)
	{		
		/* walk the icon data array and see if this source ID is present */	
		for(var c=0; c<arrayIconData.length; c++)
		{
			if(objRowData[colSourceID] == parseInt(arrayIconData[c],10))
			{
				var imgStripUrl = "/HandlerCache/img_gridlogos.ashx?returntype=image&bgcolor=EDEEDE&serviceid=" + paramServiceID;
				if(isIE)
				{
					/* for IE - we set an id for the icon - so we can scroll the parent div later in the load cycle */
					var tmpid = "gi" + objRowData[colSourceID];
					itext =	"<div id='"+tmpid+"' class='grdIco_IE' onresize='this.scrollLeft=50'><img src='"+imgStripUrl+"'/></div>";
				}
				else
				{
					itext =	"<div class='grdIco'><img src='"+imgStripUrl+"' style='left:"+(-gridIconWidth*c)+"px;'/></div>";
				}
			}
		}
		if(itext.length<=0){itext="<div class='grdIco'></div>";}	
	}
	else
	{
		if(document.location.hostname.toLowerCase().indexOf("www")>=0) 
		{
			// Use Source ID for network icons on www site
			itext = "<img class='nci' src='http://static.tvguide.com/icon/src_" + iSourceID + ".gif'>";
		}
		else
		{
			// test call-letter based icons everywhere else
			var cluIco = objRowData[colCallLetters];
			cluIco = cluIco.replace(/[\.\,\/\\\@ \-\+\&\!\*]/g,"").toLowerCase();
			itext = "<img class='nci' src='http://static.tvguide.com/icon/1/"+cluIco.substring(0,1)+"/"+cluIco+".gif'>";
		}
	}
	

	// txt = "<table cellpadding='0' cellspacing='0' style='width:"+iChannelWidthPx+"px;height:"+iGridRowHeight+"px'><tr>";
	txt = "<table cellpadding='0' cellspacing='0' style='width:100%;height:"+iGridRowHeight+"px'><tr>";

	if(strGridType=="tvgrid")
	{
		// Clickable Channels
		
		// left cell with logo
		txt += "<td id='lcnc"+iChannelCount+"' class='nlc' onclick='"+sclink+"'  onmouseover='javascript:c3(this,"+iChannelCount+")' onmouseout='javascript:c4(this,"+iChannelCount+")'>";
		txt += itext;
		
		// center cell with call letters and number
		txt += "<\/td><td id='lccc"+iChannelCount+"' class='nch' onclick='"+sclink+"' onmouseover='javascript:c1(this,"+iChannelCount+")' onmouseout='javascript:c2(this,"+iChannelCount+")'>";
		txt += strCellText;


		
		// right cell with favorites
		if((optionEnableGridSelect)&&(!optionFavChannels))
		{
			txt += "<td id='lcfv"+iChannelCount+"' class='gfav' onmouseover='javascript:c5(this,"+iChannelCount+")' onmouseout='javascript:c6(this,"+iChannelCount+")'>"+ftext;
		}
		txt += "<\/td><\/tr>";
		// close the table
	}
	else
	{
		// NON-Clickable Channels (movies.tvguide.com)
		// left cell with logo and  center cell with call letters and number
		txt += "<td id='lcnc"+iChannelCount+"' class='nlc' style='cursor:default;'>"+itext+"<\/td><td id='lccc"+iChannelCount+"' class='nch' style='cursor:default;'>"+strCellText+"<\/td><\/tr>";
	}
	
	txt += "<\/table>";
	
	strHTML += "<td class='ch'>" + txt + "<\/td>";

	iChannelCount++;    
}

function getTruncatedTitle(strTitle, nBlocks)
{
	var len = 0;		
	var ttlBlocks = iGridSpanMinutes/iMinPerBlock;
	var blockwidth = (iGridWidthPixels-iChannelWidthPx)/ttlBlocks;
	var maxLength = parseInt(((nBlocks-1) * blockwidth) + (blockwidth/3), 10);
	
	// document.title = "gridwidth: "+iGridWidthPixels+" chanwidth=" + iChannelWidthPx+ " iGridSpanMinutes=" + iGridSpanMinutes + " blockwidth=" + parseInt(blockwidth,10)  ;

	if (maxLength<=0) { return "..."; }
	
	for(var n=0; n<strTitle.length; n++)	
	{
		switch(strTitle.substring(n,n+1))
		{
			case 'I': case 'i': case 'l': case '!': case '|': case ':': case ';': case '.': case ',':
				len+=1; break;
			case 'j': case '[': case ']':
				len+=2; break;			
			case 'f': case 'r': case 't': case '1': case '*': case '(': case ')': case '{': case '}': case '\\': case '/':
				len+=3; break;			
			case 'J': case 'k': case ' ':
				len+=4; break;
			//case 'E': case 'F': case 'N': case 'P': case 'T': case 'U': case 'a': case 'b': case 'c': case 'd': case 'e': case 'g': case 'h': case 'n': case 'o': case 'p': case 'q': case 's': case 'u': case 'v': case 'x': case 'y': case 'z': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': case '#': case '$': case '^': case '+': case '=': case '<': case '>': case '?':
			//	len+=5; break;
			case 'B': case 'C': case 'D': case 'H': case 'K': case 'L': case 'M': case 'R': case 'S': case 'X': case 'Z': case '&': case '_': case '-':
				len+=6; break;
			case 'A': case 'G': case 'O': case 'Q': case 'V': case 'Y': case 'm':
				len+=7; break;
			case 'w': case '%':
				len+=9; break;
			case '@':
				len+=10; break;
			case 'W':
				len+=11; break;
			default:
				len +=5; break;
		}
		// add spacer
		len++;
		
		if(len>=maxLength){ return strTitle.substring(0,n)+"..."; }
	}	
	return strTitle;
}

function getProgramCellText(objRowData)
{
	var strCellText			= "";
	var strTitle			= objRowData[colProgramTitle];
	var iProgramColspan		= objRowData[colBlockCount]; 
	// var iMaxTitleLen		= ( (iProgramColspan-1)*(iProgramColspan/2) );

	// strTitle = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";	
	// strTitle = "!@#$%^&*()_-+={}[]|\:;'<>,.?/";

	//if(iMaxTitleLen<=0){iMaxTitleLen = 2;}

	// if((strTitle.length > iMaxTitleLen) && (optionTruncateText) && (!(iSingleSourceID>0)))
	if((optionTruncateText) && (!(iSingleSourceID>0)))
	{
		// strCellText = strTitle.substring(0,iMaxTitleLen) + "...";
		strCellText = getTruncatedTitle(strTitle,iProgramColspan);
	}
	else
	{
		strCellText = strTitle;
	}
    
	var attrib = objRowData[colAttributes];
	var notNew = true;
	
	if((iProgramColspan>1)||(iSingleSourceID>0))
	{
    	var strFlags = "";
		if((attrib & 1) == 1)
		{
    		if(strFlags.length>0){strFlags+="&nbsp;";}
			strFlags += "<font class='par'>Live<\/font>";
			notNew = false;
		}    	
		if((attrib & 2) == 2)
		{
    		if(strFlags.length>0){strFlags+="&nbsp;";}
			strFlags += "<font class='par'>Repeat<\/font>";
		}
		if(((attrib & 4) == 4) && (notNew))
		{
    		if(strFlags.length>0){strFlags+="&nbsp;";}
			strFlags += "<font class='par'>New<\/font>";
		}
		if((attrib & 8) == 8)
		{
    		if(strFlags.length>0){strFlags+="&nbsp;";}
			strFlags += "<font class='cc'>(CC)<\/font>";
		}
		if(strFlags.length>0)
		{
		    strCellText += "<br>" + strFlags;
	    }
	}
	//else
	//{
	//		strCellText = "...";
	//}  
	
	if(!(iSingleSourceID>0))
	{ 
		switch(objRowData[colStartBefore])
		{
			case 1: strCellText = "&lt; " + strCellText;
				break;			
			case 2: strCellText = "&lt;&lt; " + strCellText;
				break;
			default: break;
		}
		switch(objRowData[colEndAfter])
		{
			case 1: strCellText += " &gt;";
				break;			
			case 2: strCellText += " &gt;&gt;";
				break;
			default: break;
		}
	}
	    
    return strCellText;
}

function getProgramCellClass(objRowData)
{
	var iCategory = objRowData[colCategory];
	var strClassName = "pc2";
    var bShowProgram = 0;
	
    switch(optionGenreFilter)
    {
        case 2:
            // movies
            if((iCategory & 64) == 64){ bShowProgram = 1; strClassName += "m"; }
            break;
        case 3:
            // sports
            if((iCategory & 1024) == 1024){ bShowProgram = 1; strClassName += "s"; }
            break;
        case 4:
            // family
            if((iCategory & 2) == 2){ bShowProgram = 1; strClassName += "f"; }
            break;
        case 5:
            // ppv
            break;
        case 6:
            // news
            if((iCategory & 256) == 256){ bShowProgram = 1; strClassName += "n"; }
            break;
        default:
            if((iCategory & 64) == 64){ strClassName += "m"; }
            else if((iCategory & 1024) == 1024){ strClassName += "s"; }
            else if((iCategory & 2) == 2){ strClassName += "f"; }
            else if((iCategory & 256) == 256){ strClassName += "n"; }
            bShowProgram = 1;
            break;
    }
    
    return (bShowProgram + "\t" + strClassName);
}

function drawProgramCell(objRowData)
{
	iProgramCount++;
	var iSourceID			= objRowData[colSourceID];
	var iNetworkID          = objRowData[colNetworkID];    
	var iProgramColspan		= objRowData[colBlockCount]; 
    	
    var rCount = iRowCount + 1;
    var strProgramLink = "f3(" + iCurrentProgram + "," + rCount + ")";
	
    // set variables to open this guy
    if(isSearchTarget(objRowData))
    {
        figIndex = iCurrentProgram;
        figRow = rCount;
    }
    
    //
    var ab = getProgramCellClass(objRowData).split('\t');
    var bShowProgram = (ab[0]!==0);
    var strClassName = ab[1];
	
	var strTopBorder = "";
	
	// no line for top row only
    if((iRowCount===0)&&(!( (isSpecialRow(objRowData)) && ((iChannelCount===0)||(magicRepeat)) )))
	{
		strTopBorder = " style='border-top:none;' ";
	}
		
	if(bShowProgram)
	{
        strHTML += "<td onclick='"+strProgramLink+"' id='q"+iCurrentProgram+"' class='"+ strClassName + " pc2height' " + "colspan='" + iProgramColspan + "'" + strTopBorder + ">" + getProgramCellText(objRowData) + "<\/td>";
    }
    else
    {
	    strHTML += "<td class='"+ strClassName + "' " + "colspan='" + iProgramColspan + "'" + strTopBorder + "><\/td>";
    }	   
	iCurrentProgram++;
}


function drawGridRow()
{
	var hideChannel 		= false;
	var objOneRow 			= objGridData[iCurrentProgram];
	var strCurrentLetters 	= objOneRow[colCallLetters];
	var checkit				= "";
	
    //
    // get the current chanel - may not  be numeric
    //
    strCurrentChannel = objOneRow[colChannelNumber];
	
	//
	// get the current source id
	//
	iCurrentSourceID = objOneRow[colSourceID];
	
	if((!strCurrentLetters)||(strCurrentLetters.length<=0))
	{
		// need to process message channels here
		iCurrentProgram++;
		return;
	}
		
	var theOption = document.createElement("OPTION");
	
	//
	// set the VALUE of the channel in availableChannels select box
	//
	theOption.value = objOneRow[colSortOrder] + "|" + objOneRow[colSourceID] + "|" + strCurrentChannel;
	
	//
	// set the text in the select box - add channel number if present
	//
	if(strCurrentChannel.length>0)
	{
	    theOption.text = strCurrentChannel + " " + strCurrentLetters;
	}
	else
	{
		theOption.text = strCurrentLetters;
	}

	if (!isSelectedChannel(iCurrentSourceID,strCurrentChannel))
	{
        //
        // channel is not selected but may need to be added to the select list
        //
        if((forceOptionsCreate)&&(availChannels))
        {
            availChannels.options[availChannels.options.length] = theOption;
        }
        
        //
        // **BUG**
        // optionFavChannels is always false on initial page load of a cached page from akamai
        // the workaround is to check the selectedIndex of the genre selector as a backup
        // this value IS getting set properly at the top of the page even when cached
        // someday this should probably get fixed by figuring out why optionFavChannels
        // is broken for cached pages
        //
        if( (optionFavChannels) || (getSelectListIndex("genreSelect")==1))
        {
            hideChannel = true;
        }
	}
	else
	{
		if((forceOptionsCreate)&&(selectChannels))
		{
			selectChannels.options[selectChannels.options.length] = theOption;
		}
		checkit = "CHECKED";
	}
	
	//
	// Perform Genre Filtering
	//
	if(optionGenreFilter>0)
	{
	    hideChannel = ! checkGenreFilter();
	}
	
	//
	// HDTV filter
	//
	var srctype = objOneRow[colSourceType];
	if((bHDTVOnlyFilter)&&((srctype&16)!=16))
	{
	    hideChannel = true;
	}
	
	var iAdFreq = iInGridAdFrequency;
	
	if(bHDTVOnlyFilter) { iAdFreq = 10; }
	
	/* this is the movies promo row at the top */
	if((iRowCount===0)&&(optionGenreFilter==2)&&(!TopRowPromoDrawn)&&(enableTopRowPromo)&&(!bTopRowGridAd))
	{
		strHTML += "<tr class='gridAdRow'><td onclick='doPromoClick()' colspan='" + iTotalCellsAcross + "' style='cursor:pointer; height:40px; background-image:url(/listings/images/ads/"+TopRowPromoImage+")'></td></tr>";      
		TopRowPromoDrawn = true;
	}
	
	if(!hideChannel)
	{
		if((!optionScrollGrid)&&((iRowCount%optionTimebarRepeat)===0))
		{
			drawTimeBar((iRowCount===0));
		}
	}
	
    if((GridAds)&&(iGridAds<MaxGridAds))
    {
        if (((iRowCount-iFirstGridAdRow) > 0) && ((iRowCount-iFirstGridAdRow) % iAdFreq === 0) && (!hideChannel) || ((iRowCount==iFirstGridAdRow)&&(iGridAds===0)) || ((iRowCount===0)&&(bTopRowGridAd)&&(bTopRowNotDrawnYet)) )
        {
			var strAdID = "adframe_"  + iGridAds + "_mid_banner";
            strHTML += "<tr class='gridAdRow'><td colspan='" + iTotalCellsAcross + "' style='padding-top:5px; padding-bottom:5px; background-color: #DCDDCB; border-left: solid 1px #DCDDCB'>";      
            
            if(bEnableDelayedAds) {
				strHTML += "<center><iframe align=center valign=middle id='"+strAdID+"' frameborder='no' scrolling='no' style='width:728px; height:90px; border: none;'><\/iframe><\/center>";
				frameArray.push(strAdID);
			} else {
				strHTML += "<center><iframe align=center valign=middle id='inGridAdCell" + iGridAds + "' frameborder='no' scrolling='no' style='width:728px; height:90px; border: none;'><\/iframe><\/center>";
			}

            strHTML += "<\/td><\/tr>";
            iGridAds++;                
            if((figIndex<0)&&(figRow<0)) { figOffsetFudge += 100; }
            if(iRowCount===0){ bTopRowNotDrawnYet = false; }
        }
    }

    var closeSpecialRow = false;
    var tmpMagicChannelNumber = ""; 

	var bCheckinDrawn = false;
	
	if(!hideChannel)
	{
		if ((isSpecialRow(objOneRow)) && ((iChannelCount === 0) || (magicRepeat))) 
		{
			tmpMagicChannelNumber = objOneRow[colChannelNumber];	
    		strHTML += "<tr><td colspan='" + iTotalCellsAcross + "' style='overflow:hidden; text-align:left; vertical-align:middle; padding:0px 0px 0px 0px; height:25px; background-image: url(" + magicTopImage + ");background-repeat: no-repeat; border-right:solid 1px #DDDDDD; background-color:" + magicBkgnd + ";'>";
			
            // Franchise CHANNEL NUMBER on TOP
    	    if ((tmpMagicChannelNumber.length > 0) && (magicChannelLocation == "top")) {
				strHTML += "<div onclick='javascript:gotoMagicUrl()' style='float:left; padding:0px 0px 0px 0px; height:24px; width:" + magicLeftOffset + "px; cursor:pointer'></div>";
				strHTML += "<div style='float:left; color:" + magicTextClr + ";font-size:13px;font-weight:bold;padding:4px 0px 0px 0px;'>ch " + tmpMagicChannelNumber + "</div>";
            }
			// Franchise Check-In
			else if(franchiseCheckin.ProgramID>0) { 
				strHTML += "<div onclick='javascript:gotoMagicUrl()' style='border:none 1px #CC0000; float:left; padding:0px 0px 0px 0px; height:24px; width:" + franchiseCheckin.LeftOffset + "px; cursor:pointer'></div>";
				strHTML += getFranchiseCheckinDiv(); 
				bFireCheckinAd = true;
				bCheckinDrawn = true;
			}
			else {
				strHTML += "<div onclick='javascript:gotoMagicUrl()' style='float:left; padding:0px 0px 0px 0px; height:24px; width:100%; cursor:pointer'></div>"; 
			}

            strHTML += "</td></tr>";
            if((figIndex<0)&&(figRow<0)) { figOffsetFudge += 25; }
		    closeSpecialRow = true;
        } 
        strHTML += "<tr class='gridRow' id='gr" + iRowCount + "'>";
		drawChannelCellEx(objOneRow, checkit);
	}

	while( (iCurrentSourceID>=0) && (iCurrentSourceID==objOneRow[colSourceID]) && (strCurrentChannel==objOneRow[colChannelNumber]) )
	{
		if(!hideChannel)
		{
			drawProgramCell(objOneRow);
		}
		else
		{
			iCurrentProgram++;
		}
		
		if(objGridData[iCurrentProgram])
		{
			objOneRow = objGridData[iCurrentProgram];
		}
		else
		{
			iCurrentSourceID = -1;
		}
	}

	if(!hideChannel)
	{	
		strHTML += "<\/tr>";				
		iRowCount++;
	    if(closeSpecialRow)
        {
		    strHTML += "<tr><td colspan='" + iTotalCellsAcross + "' style='cursor:pointer;height:25px; padding:0px 0px 0px 0px; background-image: url(" + magicBotImage + ");background-repeat: no-repeat;border-right:solid 1px #DDDDDD;background-color:" + magicBkgnd + ";'>";

            /* Franchise CHANNEL NUMBER */
		    if ((tmpMagicChannelNumber.length > 0) && (magicChannelLocation == "bottom")) {
				strHTML += "<div onclick='javascript:gotoMagicUrl()' style='float:left; padding:0px 0px 0px 0px; height:24px; width:" + magicLeftOffset + "px; cursor:pointer'></div>";
				strHTML += "<div style='float:left; color:" + magicTextClr + ";font-size:13px;font-weight:bold;padding:4px 0px 0px 0px;'>ch " + tmpMagicChannelNumber + "</div>";
            }
			/* Franchise Check-In */
			else if((franchiseCheckin.ProgramID>0)&&(!bCheckinDrawn)) { 
				strHTML += "<div onclick='javascript:gotoMagicUrl()' style='border:none 1px #00FFFF; float:left; padding:0px 0px 0px 0px; height:24px; width:" + franchiseCheckin.LeftOffset + "px; cursor:pointer'></div>"; 
				strHTML += getFranchiseCheckinDiv(); 
				bFireCheckinAd = true;
				bCheckinDrawn = true;
			}
			else {
				strHTML += "<div onclick='javascript:gotoMagicUrl()' style='float:left; padding:0px 0px 0px 0px; height:24px; width:100%; cursor:pointer'></div>"; 
			}

			strHTML += "</td></tr>";
            if((figIndex<0)&&(figRow<0)) { figOffsetFudge += 25; }            
        }		
        if((iRowCount>0)&&(!optionCloseupsFooter))
        {   
            // IE shows/hides with the DISPLAY value -- FF does it with VISIBILITY value
		    var trclass = "icuie";
            if((isFF)||(isSafari)) { trclass = "icuff"; }
            strHTML += "<tr class='" + trclass + "' id='icr" + iRowCount + "'><td class='icutd' colspan='" + iTotalCellsAcross + "' id='icd" + iRowCount + "'></td></tr>";      
            strHTML += "";    
        }
	}    
}


function drawSpacerRow(bIsTimebar)
{
	strHTML += "<tr class='sr'>";
	strHTML += "<td class='sc' style='width:" + iChannelWidthPx + "px;'><\/td>";
	
	for(var n=0; n<iProgramCellsAcross; n++)
	{
		strHTML += "<td class='sc' style='block;width:" + iSliceWidthPx + "px;'><\/td>";
	}	
	strHTML += "<\/tr>";
}



function drawNewGridSelectors()
{
	var tmpDate = new Date();
	var bSelected = false;
	var value = "";
	var text = "";
		
	tmpDate.setTime(dtCurrentLocalDate.getTime()-(24*60*60*1000));
	    	
	var objSelect = document.getElementById("dateSelect");
	if(objSelect)
	{
	    objSelect.options.length = 0;
	    for(var n=0; n<=15; n++)
	    {
	        value = tmpDate.getFullYear() + "," + (tmpDate.getMonth()+1) + "," + tmpDate.getDate();
	        text = getDateStub(tmpDate) + " " + strLongDays[tmpDate.getDay()];	        
	        objSelect.options[objSelect.length] = new Option(text, value, false, false);    
            tmpDate.setTime(tmpDate.getTime()+(24*60*60*1000));
	    }
	    objSelect.style.display = "block";
    }
        
    tmpDate = new Date(dtCurrentLocalDate.getFullYear(), dtCurrentLocalDate.getMonth(), dtCurrentLocalDate.getDate(), 0, 0, 0);
    objSelect = document.getElementById("timeSelect");

    var iMinuteInterval = 60;

    if (objSelect !== null) 
    {
        objSelect.options.length = 0;
        var tmpOpt = new Option("Now", "-1", false, false);
        objSelect.options[objSelect.length] = tmpOpt;
        tmpOpt = new Option("Morning", "8:00", false, false);
        objSelect.options[objSelect.length] = tmpOpt;
        tmpOpt = new Option("Noon", "12:00", false, false);
        objSelect.options[objSelect.length] = tmpOpt;
        tmpOpt = new Option("Primetime", "20:00", false, false);
        objSelect.options[objSelect.length] = tmpOpt;
 
        for(var h=0; h<1440/iMinuteInterval; h++)
        {
            var hr = tmpDate.getHours();
            var mn = tmpDate.getMinutes();
            var ap = "am";
            if(hr===0)
            {
                hr = 12;
            }
            else if(hr==12)
            {
                ap = "pm";
            }
            else if(hr>12)
            {
                ap = "pm";
                hr -= 12;
            }
            
            if(mn===0){ mn = "00"; }
            if(hr<10){ hr = "  " + hr; }
          
            value = tmpDate.getHours() + ":" + mn;
            text = hr + ":" + mn + ap;
            var option = new Option(text, value, false, false);
            option.style.textAlign = "right";
            objSelect.options[objSelect.length] = option;
            
            tmpDate.setTime(tmpDate.getTime()+(iMinuteInterval*60*1000));
        }
        objSelect.onchange = function(){doTimeSelectChange(this);};

    }
}


function drawTimeBar(isTop) 
{	
    var rowClass = "timebarRow";

	var rArrow1='rightarrow.gif';
	var lArrow1='leftarrow.gif';
	var rArrow2='rightarrow2.gif';
	var lArrow2='leftarrow2.gif';

	if(isSafari)
	{
		rArrow1='mac-btn-r_up.gif';
		lArrow1='mac-btn-l_up.gif';
		rArrow2='mac-btn-r2_up.gif';
		lArrow2='mac-btn-l2_up.gif';
	}

	if(isAppleMobile)
	{
			rArrow1='ipad-btn-right1.gif';
			lArrow1='ipad-btn-left1.gif';
			rArrow2='';
			lArrow2='';
	}	
	
	//if(isTop)
	//{
    //	rowClass = "timebarRowTop";
	//}    

	if(optionScrollGrid)
	{
		strHTML += "<div class='timebarDiv' id='timebarDiv'>";	
		strHTML += "<table class='timebarTable' cellpadding='0' cellspacing='0' border='0'>";
		drawSpacerRow(true);
	}
    
    strHTML += "<tr class='" + rowClass + "' style='height:auto;'>";
	
	//
	// first cell with PREVIOUS arrow
	//
	strHTML += "<td class='timebarCell' style='width:" + iChannelWidthPx + "px; vertical-align:middle;'>";
    
    if(!boolDisableArrows)
    {
        // table holding 2 previous arrows
	    strHTML += "<table cellpadding=2 cellspacing=0 border=0>";
	    if(!isAppleMobile) {
			strHTML += "<td style='text-align:left;vertical-align:middle;'><a href=\"javascript:doArrowClick(-1,1)\"><img alt='Previous Day' src='/listings/images/"+lArrow2+"' border='0' style='padding-right:4px'\/><\/a><\/td>";
	    }
	    strHTML += "<td style='text-align:left;vertical-align:middle;'><a href=\"javascript:doArrowClick(-1,0)\"><img alt='Previous Timespan' src='/listings/images/"+lArrow1+"' border='0' \/><\/a><\/td>";
	    strHTML += "<\/table>";
    }
    
	var selected = "";
	var iHeaderCnt = 0;
	
	strHTML += "<\/td >";
	
	var iTimeCellCount = iGridSpanMinutes/iTimebarIncrements;
	var iTimeCellColSpan = iTimebarIncrements / iMinPerBlock;
				
	for(var n=0; n<iTimeCellCount; n++)
	{				
		strHTML += "<td class='timebarCell' style='vertical-align:middle;' colspan='" + iTimeCellColSpan + "'>";
		
		if((n==iTimeCellCount-1)&&(!boolDisableArrows))
		{
			//
			// last cell with NEXT arrows - need to do this as a 2 cell table
			//
		    strHTML += "<table cellpadding='0' cellspacing='0' border='0' width='100%'>";
		    strHTML += "<tr>";
		    strHTML += "<td class='timebarCell' style='text-align:left;'>" + strTimebarHeaders[iHeaderCnt] + "<\/td>";
		    strHTML += "<td style='text-align:right; vertical-align:middle;'>";	
		    iHeaderCnt++;
		       
			strHTML += "<table align='right' cellpadding='2' cellspacing='0' border='0'><tr>";
			strHTML += "<td style='text-align:right;vertical-align:middle;'><a href=\"javascript:doArrowClick(1,0)\"><img alt='Next Timespan' src='/listings/images/"+rArrow1+"' border='0' \/><\/a><\/td>";
			if(!isAppleMobile) {
				strHTML += "<td style='text-align:right;vertical-align:middle;'><a href=\"javascript:doArrowClick(1,1)\"><img alt='Next Day' src='/listings/images/"+rArrow2+"' border='0' style='padding-left:4px;'\/><\/a><\/td>";
			}
			strHTML += "<\/tr><\/table>";
			
			strHTML += "<\/td><\/tr><\/table>";	
		}
		else
		{
			if(n===0)
			{
				strHTML += "<table cellpadding=0 cellspacing=0 border=0 class='timebarCell'><td class='timebarCell' style='text-align:left;'>" + strTimebarHeaders[iHeaderCnt] + "<\/td>";
				strHTML += "<td style='vertical-align:middle; padding:0px 0px 0px 4px'>";
				strHTML += "<\/td><\/table>";					
    		    iHeaderCnt++;
			}
			else
			{
				strHTML += strTimebarHeaders[iHeaderCnt];
    		    iHeaderCnt++;				
			}
		}
	}
	
	strHTML += "<\/tr>";
	
	if(optionScrollGrid)
	{
		strHTML += "<\/table>";	
		strHTML += "<\/div>";
	}
}


function drawGridLegend()
{
	strHTML += "<center class='gridLegend'><img border='0' hspace='0' vspace='0' src='images/gridlegend.gif' \/><\/center>";
}

function drawGrid()
{
	if(!optionScrollGrid)
	{
	    strHTML += "<div name='gridDiv' id='gridDiv' style='height:auto; overflow:hidden;'>";
	}
	else
	{
		strHTML += "<div class='gridDiv' name='gridDiv' id='gridDiv' style='height:" + optionGridHeightPx + "px;";
		if(isOpera)
		{
		    strHTML += " overflow:scroll;";
		}
		else
		{
            strHTML += " overflow-y:scroll; overflow-x:hidden;";
	    }
		strHTML += " border-bottom: solid 1px #DCDDCB;' onScroll='javascript:trackScroll(this)'>";
	}
	
	strHTML += "<table class='gridTable' name='gridTable' id='gridTable' style='border:solid 1px #000000;'>";

	
	// skip row 0 and 1 in data
	iCurrentProgram = 1;
	iRowCount = 0;
	
	// reset promo drawn flag
	TopRowPromoDrawn = false;

	drawSpacerRow(false);

	iLastFilterMatch = 0;
			iGridAds = 0;

    if(objGridData)
    {
        while(iCurrentProgram < objGridData.length)
        {
			drawGridRow();
        }
    }
    
	strHTML += "<\/table>";	
	strHTML += "<\/div>";
	
	// clear flag
	forceOptionsCreate = false;
	
	// reset program descriptions array
	PastCloseups = new Array(objGridData.length);
	
	bTrackScrollPos = true;

    if((figIndex>=0)&&(figRow>=0))
    {
        setTimeout("autoOpenCloseup()", 0);
    }
    else
    {
        if((optionScrollGrid)&&(iGridScrollTop>=0))
        {
            setTimeout("scrollTheGrid()", 0);
        }
    }
    hideLocalize();
}

