﻿//
// be sure to obfuscate before pushing live
//

// flag to enable channel view
var bSCL = true;

var bWelcomeFlag = false;

var bCountTabsAsPageViews = false;

// new grid logo variables
var imgGridIcons = null;
var arrayIconData = null;
var xmlHttpIconData = null;
var bUseImageStrips = false;

//
// variables for ads
//
var iGridAds            = 0;
var iInGridAdFrequency  = 15;
var iFirstGridAdRow     = 5;

// defines for ads check-in
var bFireCheckinAd		= false;
//var magicChannelLocation = "top";
//var franchiseCheckin	= new Object();

var TopRowPromoImage	= "mod-grid-promo.gif";
var TopRowPromoLink		= "http://movies.tvguide.com/movies-on-demand";
var TopRowPromoDrawn	= false;
var enableTopRowPromo	= true;

var bTopRowNotDrawnYet	= false;		

var iSingleSourceID = 0;
var SingleSourceChannel = "";
var SingleSourceLetters = "";
var iSingleSourceDays = 14;
var SingleSourceIDString = "";
var bTabsDisabled = false;

// set grid preferences here
var iGridSpanMinutes	= 120;
var iTimebarIncrements	= 30;
var iTotalDays			= 15;
var iMinPerBlock		= 5;
var iChannelWidthPx		= 110;

var iGridWidthPixels	= 1600;
var iScrollBarWidth		= 20;
var iGridRowHeight		= 40;
var enableSorting		= false;

var newGenre = -1;

var gridIconWidth = 30;
var gridIconHeight = 20;


var optTimeSelectOptions = null;
var optChanSelectOptions = null;

var strCurrentProgramTitle = "";

var objGenreSelect = null;

// array of strings for timebar
var strTimebarHeaders = null;

// global debug flag
var bDebug = false;

// grid scroll position
var iGridScrollTop = -1;

// track drawing for scrolling
var sclScrollCount = 0;
var sclScrollTarget = 0;

// flag to turn off tracking during redraw
var bTrackScrollPos = true;

//
// if true, proxy calls through www
// if false, call tvlistings directly
//
var bGetDataFromSource = true;

//
// flag to control old or new ads
//
var UseScriptAds = false;

// flag to indicate at least one grid data pull
var bhasGridData = false;

//
// "Find-In-Grid" Variables
//
var figFlag = false;
var figObjectID = 0;
var figProgramID = 0;
var figTimestamp = null;
var figChannel = "";
var figIndex = -1;
var figRow = -1;
var figOffsetFudge = 0;

var v2bgColor = "#eee";

// the grid type will be tvgrid, movies, or sports
var strGridType = "tvgrid";

//
// this is the cookie version
//
var iCurrentCookieVer   = 4;

//
// allow pref override for mini grids
//
boolIgnorePrefs         = false;

//
// the "Found" magic ID - the one returned back from data
//
var magicSourceID = 0;

//
// globals that are calculated later
//
var iSliceWidthPx		= 0;
var iTotalCellsAcross	= 0;
var iProgramCellsAcross	= 0;

//
// User-Control Options
//
var bShowDateTimeSelect = true;
var bShowGenreSelect = true;
var bShowProviderSelect = true;

var availChannels;
var selectChannels;

var strGridLoadType = "Page Load";
var strActiveFilter = "";

var iAjaxBytes = 0;
var iAjaxRender = 0;
var iAjaxLoadTime = 0;
var iAjaxMillisecs = 0;
var iResponseBytes = 0;
var strDataServer = "";


//
// new keyword filter
//
var strKeyword = "";
var bUseKeywordFilter = false;

//
// list of providers to "cache" by calling www with an "aspx" extension
//
var cachedProviders = [ 0, 80001, 80004 ];


//
// National grid needs special handling due to lack of channel numbers
//
var isNationalGrid = false;
var iServiceID = 0;
var strProviderName = null;

//
// current local datetime and grid local datetime 
//
var dtGridLocalStartTime	= new Date();
var dtCurrentLocalDate		= new Date();

//
// global xmlhttp objects
//
var xmlHttp;
var xmlDetailData;
var xmlPrefsData;
var xmlSearchData;
var xmlSingleChannelData;

//
// global counters
//
var iChannelCount=0;
var iProgramCount=0;
var iCurrentProgram;
var iCurrentSourceID;
var strCurrentChannel;
var iRowCount=0;

//
// cookie names
//
var cookieSelectedChannels = "favchan";
var cookieOptions = "ajaxopts";
var rawChannelsCookie = null;
var arSelectedChannels = null;

//
// Master output string
//
var strHTML = "";

var strDays = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var strLongDays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var strLongMonths = ["January","February","March","April","May","June","July","August","September","October","November","December"];

//
// the main "body" div
//
var objBodyDiv = null;

//
// global holder of raw grid data
//
var objRawData = null;

//
// data holder for sorted and filtered grids
//
var objDisplayData = null;

//
// pointer to current data set
//
var objGridData = null;

//
// Search Results DIV
//
var divSearchResults = null;
var divSearchTextBox = null;

//
// current flyover
//
var nFlyoverIndex = -1;
var nFlyoverRow = 0;
var nFlyoverDelay = 750;
var lastFlyColor = "";


//
// datetime variables used for performance monitoring
//
var dtDataLoadStart;
var dtDataLoadEnd;

//
// data columns returned from web service
//
var colSortOrder        = 0;
var colChannelNumber 	= 1;
var colCallLetters 		= 2;
var colNetworkID 		= 3;
var colProgramTitle 	= 4;
var colBlockCount 		= 5;
var colCategory			= 6;
var colSubCategory 		= 7;
var colSourceType 		= 8;
var colStartBefore 		= 9;
var colEndAfter 		= 10;
var colAttributes 		= 11;
var colProgramID 		= 12;
var colSourceID 		= 13;
var colStartTime 		= 14;
var colDuration         = 15;
var colTVObjectID       = 16;
var colHasVideo         = 17;
var colRating			= 18;

//
// colums for channel data in name/value pairs
//
var colSort     = 0;
var colSource   = 1;
var colNumber   = 2;


//
// these hold the current values of parameters to be sent via querystring to the server
//
var paramServiceID 		= "";
var paramZipCode 		= "";
var paramSuppressMusic	= 1;
var paramSuppressPPV    = 1;
var paramSuppress24Hour = 1;
var paramGridMins 		= 0;

var paramGridYear       = "";     
var paramGridMonth      = "";
var paramGridDay        = "";
var paramGridHour       = "";
var paramGridMinute     = "";

//
// these hold the values of user-settable options
//
var optionShowMusic 	  = false;
var optionShowPPV         = false;
var optionShow24Hour      = false;
var optionHideIcons  	  = false;
var optionTruncateText 	  = true;
var optionScrollGrid	  = true;
var optionEnableGridSelect = true;
var optionGridHeightPx	  = 1000;
var optionTimebarRepeat	  = 20;
var optionGridMinutes	  = 0;
var optionGridStart       = "-1";
var optionDisableFlyovers = true;
var optionPopNewWindows   = false;

var optionCloseupsFooter  = false;

var optionFavChannels	  = true;

var bHDTVOnlyFilter       = false;

var optionDontUseGoButton     = false;

//
// 0=none; 2=movies; 3=sports; 4=family; 5=ppv; 6=news (declared in tvguide.js)
//
optionGenreFilter   = 0;

// change flags - change is good!
var bFilterChanged = false;
var bOptionsChanged = false;

//
// array of selected channels
//
var SelectedChannels = null;
var strAvailChanSelect = "";
var strSelectedChanSelect = "";

//
// Array of Closeup Details
//
var PastCloseups = null;

//
// this holds the index of the last match - saves excess looping
// but channels MUST be in numerical order ascending or we're hosed
//
var iLastFilterMatch = 0;

//
// flag to force the options div creation on page load
//
var forceOptionsCreate = true;

// this gets filled in later
var nBrowserVersion = 0.0;

// Internet Explorer Flag
var isIE = document.all?true:false;
if(isIE){bUseImageStrips = false;}

// firefox flag
var isFF = (navigator.userAgent.toLowerCase().indexOf("firefox")>=0);

// Safari Flag
var isSafari = (navigator.userAgent.toLowerCase().indexOf("safari")>=0);

// Safari Flag
var isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")>=0);

// flag for ipad / iphone
var isAppleMobile = (navigator.userAgent.toLowerCase().indexOf("ipad")>=0) || (navigator.userAgent.toLowerCase().indexOf("iphone")>=0);

if(isAppleMobile) {optionScrollGrid=false;optionDontUseGoButton=true;}


//
// holds the last selected genre index so we can bounce back
// when user selects grid preferences from the drop down
//
var iLastGenreValue = 0;

//
// mouse stuff
//
var mouseX,mouseY;
var dragOn		= 0;
var dragDiv		= null;
var dragX		= 0;
var	dragY		= 0;
var zMax		= 0;
var dragInit	= 0;

//
// which version to draw (old or new)
//
var strDocLocation = document.URL;


var colAjaxProgramID = 0;
var colAjaxTitle     = 1;
var colAjaxEpisode   = 2;
var colAjaxEpDesc    = 3;
var colAjaxSeriesID  = 4;
var colAjaxMovieID   = 5;
var colAjaxDuration  = 6;
var colAjaxTvRating  = 7;
var colAjaxMvRating  = 8;
var colAjaxReleaseYr = 9;
var colAjaxCategory  = 10;
var colAjaxSubCategory = 11;
var colAjaxCountry = 12;
var colAjaxDirector = 13;
var colAjaxCastInfo = 14;
var colAjaxRemoteRecordURL = 15;
var colAjaxShowBadgeURL = 16;
var colAjaxObjectUrl = 17;
var colAjaxDvrLink = 18;
var colAjaxCategoryId = 19;
var colAjaxIsSportsNonEvent = 20;


var rowCloseupData = 0;
var rowAmazonAds = 1;
var rowObjectTabs = 2;
var rowCastList = 3;
var rowEpisodeList = 4;
var rowPhotoList = 5;
var rowVideoList = 6;
var rowRecaps = 7;
var rowNews = 8;
var rowBlog = 9;
var rowSynopsis = 10;
var rowReview = 11;

var iSearchResultCount = 0;
var iCurrentSearchPage = 0;
var iTotalSearchPages = 0;
var iResultsPerPage = 25;
var objSearchData = null;
var strSearchTerm = "";

//
// column indexes for search data
//
var srchcolDateTime     = 0;
var srchcolCallLetter   = 1;
var srchcolChannelNum   = 2;
var srchcolNetworkID    = 3;
var srchcolProgramTitle = 4;
var srchcolEpisodeTitle = 5;
var srchcolDescription  = 6;
var srchcolCast         = 7;
var srchcolObjectID     = 8;
var srchcolProgramID    = 9;
var srchcolDummyID      = 10;
var srchcolDuration     = 11;
var srchcolIsNew        = 12;
var srchcolIsHD         = 13;
var srchcolIsLive       = 14;
var srchcolIsRepeat     = 15;
var srchcolIsCC         = 16;
var srchcolIsStereo     = 17;
var srchcolIsAdult      = 18;
var srchcolIsFamily     = 19;
var srchcolIsOscar      = 20;
var srchcolStarRating   = 21;
var srchcolIsDescOpen   = 22;

var msecsLoad, msecsProcess, msecsSort;

var sortAscending = true;
var sortColumn = -1;

var tabsOn = [ ];
var tabsOff = [ ];
var tabsHov = [ ];
var tabsGry = [ ];
var dummy1 = 0;
var dummy2 = 0;
var dummy3 = 0;
var dummy4 = 0;
var iCurrentTab = parseInt(optionGenreFilter,10);

var strLastFoTab = "";

// these are strings we "float" to the metrics call via global variables
var wtdtCategory="", wtdtSubCategory="", wtdtShowTitle="", wtdtProgramID="", wtdtSeriesID="", wtdtObjectID="";

