//=================================================================
// This file contains FPAS/FSI tvSchedule ajax functionality.
// This section contains the API function to navigate through the app.
//=================================================================
//global variables
var tvSite;
var tvLang;
var tvTodaysDate;
var tvTomorrowsDate;
var tvYesterdaysDate;
var tvTodaysDateUnchanged;
var tvWeekDayDate;
var tvTab;
var tvShowName;
/*BEGIN: pagination global variable for shows views*/
var tvSeriesPaginationCurrentPage = 0;
var itemsPerPage = 10;
/*END: pagination global variable for shows views*/
var todaysProgrammingText      = 'todaysProgramming';
var yesterdaysProgrammingText  = 'yesterdaysProgramming';
var tomorrowsProgrammingText   = 'tomorrowsProgramming';
var tabWeeklyProgrammingText   = 'tabWeeklyProgramming';
var lastWeekProgrammingText    = 'lastWeekProgramming';
var nextWeekProgrammingText    = 'nextWeekProgramming';
var currentWeekDirectURLText   = 'currentWeekDirectURL';
var tabShowsProgrammingText    = 'tabShowsProgramming';
var tabShowsDirectURLText      = 'tabShowsDirectURL';
var nextPageShowsViewText      = 'nextPageShowsView';
var previousPageShowsViewText  = 'previousPageShowsView';

//-----------------------------------------------------
//Wrapping function to determine which content to load.
//-----------------------------------------------------
function DisplayProgramming(requestedPage){
  if(requestedPage==todaysProgrammingText){//today tab
     _getTvListings(tvTodaysDateUnchanged);
   }
   else if(requestedPage==yesterdaysProgrammingText){//left arrow on todays view
     _getTvListings(tvYesterdaysDate);
   }
   else if(requestedPage==tomorrowsProgrammingText){//right arrow on todays view
     _getTvListings(tvTomorrowsDate);
   }
   else if(requestedPage==tabWeeklyProgrammingText){//weekly tab
     _getWeekListings(tvTodaysDateUnchanged,'executeHbxCall');
   }
   else if(requestedPage==lastWeekProgrammingText){//left arrow on week view
     _getAnotherWeekListings('lastWeek');
   }
   else if(requestedPage==nextWeekProgrammingText){//right arrow on week view
     _getAnotherWeekListings('nextWeek');
   }
   else if(requestedPage==currentWeekDirectURLText){//current week programming accessed directly from the URL
     _getWeekListings(tvTodaysDateUnchanged,'notExecutingHbxCall');
   }
   else if(requestedPage==tabShowsProgrammingText){//shows tab
     _getTvShows('executeHbxCall');
   }
   else if(requestedPage==tabShowsDirectURLText){//shows tab accessed directly from the URL
    _getTvShows('notExecutingHbxCall');
   }
   else if(requestedPage==nextPageShowsViewText){//next page in shows view from the pagination
    _getAnotherSeriesPage(1);
   }
   else if(requestedPage==previousPageShowsViewText){//previous page in shows view from the pagination
    _getAnotherSeriesPage(-1);
   }
}

//----------------------------------------------------------------------
//Wrapping function to diplay shows specific page from the expanded view
//----------------------------------------------------------------------
function DisplaySpecificShowsPage(seriesID,seriesTitle){
  $.unblockUI()//from jquery.blockUI.js
  jQuery(document).trigger('close.facebox');//close expanded view window
  _getTvShows('notExecutingHbxCall');//Initialize pagination and drop down options
  ShowsViewExpandedViewContent(seriesID,seriesTitle,'executeHbxCall');//displays specific shows page
}

//=================================================================
//                    AJAX FUNCTIONS
//=================================================================
//Shows view for previous/current/next day when clicking left/right arrows, tabs or a date from the calendar popup on the 
//default view. Also, adjusts the previous, current and next dates (with the setTVScheduleDates function) based on the yyyymmddDate value
function _getTvListings(yyyymmddDate) {
  AdjustOnOffTabs('tvScheduleFront');
  setTVScheduleDates(yyyymmddDate);//always set date first and use global tvTodaysDate to get data
  TodaysViewPreviousNextDayContent(yyyymmddDate);//Ajax functionality
  TvScheduleHbxSetParams('tvScheduleFront');//Hitbox code
  FSITVScheduleAdsRefresh();//Refresh ads	
}

//Shows week view when clicking this week tab. Also, adjusts the previous, current and next dates (with the setTVScheduleDates function)
//based on the yyyymmddDate value
function _getWeekListings(yyyymmddDate,isHbxCallExecuted) {
  AdjustOnOffTabs('weeklyListings');
  setTVScheduleDates(tvTodaysDateUnchanged);//always set date first and use global tvTodaysDate to get data
  setTvWeekDayDate(tvTodaysDateUnchanged);
  WeekViewContent(yyyymmddDate);//Ajax functionality
  if(isHbxCallExecuted == 'executeHbxCall'){//this will avoid double hbx call and double ads refreshing
    TvScheduleHbxSetParams('weeklyListings');//Hitbox code
    FSITVScheduleAdsRefresh();//Refresh ads
  }
}

//This function is called when clicking previous/next week (arrows)
//This functions is called when clicking previous/next week (arrows)
function _getAnotherWeekListings(lastOrNextWeek){
  var thisYear  = tvWeekDayDate.substring(0,4);
  var thisMonth = (tvWeekDayDate.substring(4,6) - 1); //January = 0
  var thisDay   = tvWeekDayDate.substring(6,8);
  var dateObj   = new Date(thisYear, thisMonth, thisDay);
  //-- Correct way to add/subtract a week
  if(lastOrNextWeek=='lastWeek' || lastOrNextWeek==-1){
    tvWeekViewDate = dateObj.clone().add(-7).days().toString("yyyyMMdd");
  }
  else if(lastOrNextWeek=='nextWeek' || lastOrNextWeek==1){
    tvWeekViewDate = dateObj.clone().add(7).days().toString("yyyyMMdd");
  }
  
  setTvWeekDayDate(tvWeekViewDate);//new value for the global variable "tvWeekDayDate" 
  AnotherWeekContent(tvWeekViewDate);//Ajax functionality
  TvScheduleHbxSetParams('weeklyListings');//Hitbox code
  FSITVScheduleAdsRefresh();//Refresh ads
}

//Displays tv shows when clicking shows tab. Adjust all dates based on tvTodaysDateUnchanged global variable
function _getTvShows(isHbxCallExecuted) {
  AdjustOnOffTabs('shows');
  //it is not necessary to call setTVScheduleDates function because by clicking in each tab, all values are initialize based on tvTodaysDateUnchanged
  ShowsViewContent();//Ajax functionality
  if(isHbxCallExecuted == 'executeHbxCall'){//this will avoid double hbx call and double ads refreshing
    TvScheduleHbxSetParams('shows');//Hitbox code
    FSITVScheduleAdsRefresh();//Refresh ads
  }
}

//JQuery/facebox functionality for expanded view on both default view and weekly view as modal window
function FSITVScheduleShowExpandedView(episodeCode,episodeHour,episodeMinute,seriesID,yyyyymmddDate){
  modifyZIndexFSINav('trick');
  $.blockUI();//blocks parent window with a transparent background. From jquery.blockUI.js
  //TvScheduleHbxSetParams();//Hitbox code
  //FSITVScheduleAdsRefresh();//Refresh ads
  var params = "?accessType=ajax&todaysViewDate="+yyyyymmddDate+"&episodeCode="+episodeCode+
               "&episodeHour="+episodeHour+"&episodeMinute="+episodeMinute+"&seriesID="+seriesID;
  var finalURL = "/"+tvSite+"/tvScheduleExpandedView"+params
  jQuery.facebox({ ajax: finalURL });
}

//AJAX function to generate new content when clicking left/right arrow on default view or Today tab 
function TodaysViewPreviousNextDayContent(yyyymmddDate){
var xmlHttp;
xmlHttp=getXmlHttpObject();
var tempURL = "/"+tvSite+"/tvScheduleTodaysView";
var params = "?accessType=ajax&todaysViewDate="+yyyymmddDate;
var url = tempURL + params;

  xmlHttp.onreadystatechange=function(){
     if(xmlHttp.readyState==4){
      var xmlDocResult = xmlHttp.responseText;
      AdjustDateTextCurrentView(tvTodaysDate, tvLang,tvTab);//fction placed here so that content and date text load at the same time
      //document.getElementById("todaysViewTvListings").innerHTML = xmlDocResult; --> no fade effect 
      $('#todaysViewTvListings').fadeOut("normal", function (){$(this).html(xmlDocResult).fadeIn("slow");});
     }
    }
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

//AJAX function to generate new content when clicking this week tab 
function WeekViewContent(yyyymmddDate){
var xmlHttp;
xmlHttp=getXmlHttpObject();
var tempURL = "/"+tvSite+"/tvScheduleWeekView";
var params = "?accessType=ajax&todaysViewDate="+yyyymmddDate;
var url = tempURL + params;

  xmlHttp.onreadystatechange=function(){
     if(xmlHttp.readyState==4){
      var xmlDocResult = xmlHttp.responseText;
      //document.getElementById("todaysViewTvListings").innerHTML = xmlDocResult; --> no fade effect
      $('#todaysViewTvListings').fadeOut("normal", function (){$(this).html(xmlDocResult).fadeIn("slow");});
      AdjustDateTextCurrentView(tvTodaysDateUnchanged, tvLang,tvTab);//adjust date next to calendar icon when clicking week tab
      AdjustDateTextWeekView(tvTodaysDate, tvLang);//fction placed here so that content and date text load at the same time
     }
    }
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

//AJAX function to generate new content when clicking left/right arrow on week view 
function AnotherWeekContent(yyyymmddDate){
var xmlHttp;
xmlHttp=getXmlHttpObject();
var tempURL = "/"+tvSite+"/tvScheduleWeekView";
var params = "?accessType=ajax&todaysViewDate="+yyyymmddDate;
var url = tempURL + params;

  xmlHttp.onreadystatechange=function(){
     if(xmlHttp.readyState==4){
      var xmlDocResult = xmlHttp.responseText;
      //document.getElementById("todaysViewTvListings").innerHTML = xmlDocResult; --> no fade effect
      $('#todaysViewTvListings').fadeOut("normal", function (){$(this).html(xmlDocResult).fadeIn("slow");});
      AdjustDateTextWeekView(tvWeekViewDate, tvLang);//output: weekStartDate - weekFinishDate, ex: March 16 - March 22 
     }
    }
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

//AJAX function to generate new content when clicking shows tab 
function ShowsViewContent(){
var xmlHttp;
xmlHttp=getXmlHttpObject();
var tempURL = "/"+tvSite+"/tvScheduleShowsView";
var params = "?accessType=ajax";
var url = tempURL + params;

  xmlHttp.onreadystatechange=function(){
     if(xmlHttp.readyState==4){
      var xmlDocResult = xmlHttp.responseText;
      document.getElementById("todaysViewTvListings").innerHTML = xmlDocResult;
      AdjustDateTextCurrentView(tvTodaysDateUnchanged, tvLang,tvTab);//adjust date next to calendar icon when clicking week tab
      InitShowsViewPagination();//create pagination effect
      //these 2 lines must be placed here and not inside AdjustDateTextCurrentView()
      var seriesSelectDropDownOption = document.getElementById("hiddenSeriesSelectMenu").innerHTML;
      document.getElementById("tvScheduleBackArrow").innerHTML  = seriesSelectDropDownOption;
     }
    }
  xmlHttp.open("GET",url,true);
  xmlHttp.send(null);
}

//AJAX function to generate expanded view for shows 
function ShowsViewExpandedViewContent(seriesID,seriesTitle,isHbxCallExecuted){
 if(seriesID != 'initialOption'){//avoid displaying default option on the drop down select options
   var xmlHttp;
   xmlHttp=getXmlHttpObject();
   var tempURL = "/"+tvSite+"/tvScheduleShowsExpandedView";
   var params = "?accessType=ajax&seriesID="+seriesID;
   var url = tempURL + params;

   xmlHttp.onreadystatechange=function(){
     if(xmlHttp.readyState==4){
      var xmlDocResult = xmlHttp.responseText;
      document.getElementById("todaysViewTvListings").innerHTML = xmlDocResult;
      document.getElementById("topPager").style.visibility = 'hidden';//hide default show view pagination when viewing specific show content
      setTvSpecificShowName(seriesTitle);//set global variable to be used in TvScheduleHbxSetParams
      if(isHbxCallExecuted == 'executeHbxCall'){//this will avoid double hbx call and double ads refreshing
        TvScheduleHbxSetParams('showsSpecificPage');//Hitbox code
        FSITVScheduleAdsRefresh();//Refresh ads
      }
     }
    }
   xmlHttp.open("GET",url,true);
   xmlHttp.send(null);
 }
}

//AJAX function to generate expanded view for shows coming from a direct URL
//this will solve the akamai issue when going to a direct URL. see fscom-4551
function ShowsViewExpandedViewContentDirectURL(seriesID,seriesTitle,isHbxCallExecuted){
   var xmlHttp;
   xmlHttp=getXmlHttpObject();
   var tempURL = "/"+tvSite+"/tvScheduleShowsExpandedView";
   var params = "?accessType=ajax&seriesID="+seriesID;
   var url = tempURL + params;
   var seriesSelectDropDownOption = null;
   AdjustOnOffTabs('shows');
   AdjustDateTextCurrentView(tvTodaysDateUnchanged, tvLang,tvTab);//adjust date next to calendar icon when clicking shows tab
   
   xmlHttp.onreadystatechange=function(){
     if(xmlHttp.readyState==4){
      var xmlDocResult = xmlHttp.responseText;
      document.getElementById("todaysViewTvListings").innerHTML = xmlDocResult;
      document.getElementById("topPager").style.visibility = 'hidden';//hide default show view pagination when viewing specific show content
      setTvSpecificShowName(seriesTitle);//set global variable to be used in TvScheduleHbxSetParams
      //these 2 lines must be placed here and not inside AdjustDateTextCurrentView()
      seriesSelectDropDownOption = document.getElementById("hiddenSeriesSelectMenu").innerHTML;
      document.getElementById("tvScheduleBackArrow").innerHTML  = seriesSelectDropDownOption;
      if(isHbxCallExecuted == 'executeHbxCall'){//this will avoid double hbx call and double ads refreshing
        TvScheduleHbxSetParams('showsSpecificPage');//Hitbox code
        FSITVScheduleAdsRefresh();//Refresh ads
      }
     }
    }
   xmlHttp.open("GET",url,true);
   xmlHttp.send(null);
}

//=================================================================
//                    UTILITIES FUNCTIONS
//=================================================================
//Format todaysViewDate (ex:20090120) as Monday, January 20, 2009 for initial page loading and 
//set global variables
function FSITVScheduleSetValues(currentDate,lang,site,tab){
  tvTodaysDateUnchanged = currentDate; //for navigation across tabs
  tvWeekDayDate = currentDate;
  setTvTab(tab);
  setTvSite(site)
  setTvLang(lang);
  setTVScheduleDates(currentDate);
  AdjustDateTextCurrentView(currentDate, lang, tab);
}

//Set global variable for site
function setTvSite(site){
  tvSite = site;
}

//Set global variable for lang
function setTvLang(lang){
  tvLang = lang;
}

//Set global variable for week day date
function setTvWeekDayDate(yyyymmddDate){
  tvWeekDayDate = yyyymmddDate;
}

//Set global variable tvTab
function setTvTab(tab){
  tvTab = tab;
  /*document.getElementById("tvScheduleTab").value = tab;*/
}

//Set global variable for a specific show
function setTvSpecificShowName(showName){
  tvShowName = showName;
}

//Adjust previous, current and next dates everytime the user requests a new page load (e.g: left/right arrow, etc)
function setTVScheduleDates(currentDate){
  tvTodaysDate = currentDate; 

  var thisYear  = currentDate.substring(0,4);
  var thisMonth = (currentDate.substring(4,6) - 1); //January = 0
  var thisDay   = currentDate.substring(6,8);
  var dateObj   = new Date(thisYear, thisMonth, thisDay);

  //-- Correct way to add/subtract days
  tvTomorrowsDate  = dateObj.clone().add(1).days().toString("yyyyMMdd");
  tvYesterdaysDate = dateObj.clone().add(-1).days().toString("yyyyMMdd");
  //use this code when testing or developing new features:
  /*document.getElementById("tvScheduleLang").value = tvLang;
  document.getElementById("tvScheduleSite").value = tvSite;
  document.getElementById("yesterdaysViewDate").value = tvYesterdaysDate;
  document.getElementById("todaysViewDate").value = tvTodaysDate;
  document.getElementById("tomorrowsViewDate").value = tvTomorrowsDate;
  document.getElementById("unchangedTodaysViewDate").value =  tvTodaysDateUnchanged;
  document.getElementById("tvScheduleTab").value =  tvTab;
  */
}

//adjust date header when clicking a tab. Each tab is referenced with a tab variable. 
//tab will determine the content of todaysDateID.innerHTML
function AdjustDateTextCurrentView(currentDate,lang,tab) {
 if(tab=='tvScheduleFront'){
    var finalFormattedDate = FormatDateTextHeader(currentDate,lang);
    document.getElementById("todaysDateID").innerHTML = finalFormattedDate;
    document.getElementById("tvScheduleCalendarIcon").style.visibility  = 'visible';//calendar icon
    document.getElementById("topPager").style.visibility  = 'hidden';//pagination for shows view
  }
  else if(tab=='weeklyListings'){
    var weekViewDateHeaderContent = CreateWeeklyProgrammingHeader();
    document.getElementById("todaysDateID").innerHTML = weekViewDateHeaderContent;
    document.getElementById("tvScheduleCalendarIcon").style.visibility  = 'hidden';//calendar icon
    document.getElementById("topPager").style.visibility  = 'hidden';//pagination for shows view
    f_tcalHideAll();//hide displaying calendar popup window (if any is displaying)
  }
  else if(tab=='shows'){
    document.getElementById("todaysDateID").innerHTML = '';
    document.getElementById("tvScheduleCalendarIcon").style.visibility  = 'hidden';//calendar icon
    f_tcalHideAll();//hide displaying calendar popup window (if any is displaying)
  }
  else if(tab=='printView'){
    var finalFormattedDate = FormatDateTextHeader(currentDate,lang);
    document.getElementById("todaysDateID").innerHTML = finalFormattedDate;
  }
}

//create date header when clicking weekly tab. Output: Weekly Programming <br/> March 12 - March 22
function CreateWeeklyProgrammingHeader(){
var WeeklyProgrammingText = null;
if(tvLang=='es'){WeeklyProgrammingText = "Programaci&oacute;n Semanal";}
else if(tvLang=='en'){WeeklyProgrammingText = "Weekly Programming";}
var newTodaysDateIDValue = "<table border='0' cellpadding='0' cellspacing='0' align='center'>"+
                           "<tr><td nowrap='nowrap' class='weekViewWeeklyProgramTextContainer2'>"+WeeklyProgrammingText+"</td></tr>"+
                           "<tr><td nowrap='nowrap' class='weekViewWeekDatesTextContainer2' id='weekStartFinishDates'></td></tr>"+
                           "</table>"
return newTodaysDateIDValue;
}

//adjust week header when clicking either the left/right arrow from the week view 
//Output is based on lang: ex: November 21
function AdjustDateTextWeekView(currentDate,lang) {
  var thisYear  = currentDate.substring(0,4);
  var thisMonth = (currentDate.substring(4,6) - 1); //January = 0
  var thisDay   = currentDate.substring(6,8);
  var dateObj   = new Date(thisYear, thisMonth, thisDay);
  var dateObj2  = dateObj.clone();
  var dateObj3  = dateObj.clone();
  var isTodayMonday  = dateObj2.toString("ddd");
  var isTodaySunday  = dateObj3.toString("ddd");
  if(isTodayMonday=='Mon'){//if currentDate is Monday, add one day (currentDate is now tuesday) and then get last monday (which is yesterday)
    dateObj2.add(1).days();
  }
  if(isTodaySunday=='Sun'){//if currentDate is Sunday, add subtract one day (currentDate is now saturday) and then get next sunday (which is tomorrow)
    dateObj3.add(-1).days();
  }

  //-- Correct way to move to the next or previous dayOfWeek
  var mondayThisWeek = dateObj2.moveToDayOfWeek(1, -1).toString("yyyyMMdd"); // move to last Monday
  var sundayThisWeek = dateObj3.moveToDayOfWeek(0, 1).toString("yyyyMMdd"); // move to next Sunday
  
  var formattedThisWeekMonday = FormatWeekDateTextHeader(mondayThisWeek,lang);
  var formattedThisWeekSunday = FormatWeekDateTextHeader(sundayThisWeek,lang);
  var weekRangeToDisplay = formattedThisWeekMonday + " - " + formattedThisWeekSunday;
  document.getElementById("weekStartFinishDates").innerHTML = weekRangeToDisplay;
}

//Formats date text after clicking left/right arrow based on lang.
function FormatDateTextHeader(currentDate,lang){
  var result = null;
  var myDate = new Date;
  var thisYear = currentDate.substring(0,4);
  var thisMonth = currentDate.substring(4,6);
  var thisDay = currentDate.substring(6,8);
  myDate.setDate(thisDay);
  myDate.setMonth(thisMonth-1); // January = 0
  myDate.setFullYear(thisYear);
  var formattedWeekDay = FormatWeekDayCurrentView(myDate.getDay(),lang);
  var formattedMonth   = FormatMonthCurrentView(myDate.getMonth(),lang);

  if(lang=='es'){ //output: Lunes, 21 de Noviembre, 2009
      result = formattedWeekDay+", "+thisDay+" de "+formattedMonth+", "+thisYear;
    }
  else{//lang = english, therefore output: Monday, November 21, 2009
      result = formattedWeekDay+", "+formattedMonth+" "+thisDay+", "+thisYear;
  }
  return result;
}

//Formats week start and finish date text based on lang.
function FormatWeekDateTextHeader(currentDate,lang){
  var result = null;
  var myDate = new Date;
  var thisYear = currentDate.substring(0,4);
  var thisMonth = currentDate.substring(4,6);
  var thisDay = currentDate.substring(6,8);
  myDate.setDate(thisDay);
  myDate.setMonth(thisMonth-1); // January = 0
  myDate.setFullYear(thisYear);
  var formattedWeekDay = FormatWeekDayCurrentView(myDate.getDay(),lang);
  var formattedMonth   = FormatMonthCurrentView(myDate.getMonth(),lang);

  //output: November 21
  result = formattedMonth+" "+thisDay;

  return result;
}

//Formats week day. ex: input = 0, output = Sunday
function FormatWeekDayCurrentView(currentWeekDay,lang){
 var result = null;
 if(lang=='es'){ //ex. output: Lunes
   switch (currentWeekDay){
   case 1: result="Lunes";break;
   case 2: result="Martes";break;
   case 3: result="Mi&eacute;rcoles";break;
   case 4: result="Jueves";break;
   case 5: result="Viernes";break;
   case 6: result="S&aacute;bado";break;
   case 0: result="Domingo";break;
   }
  }
  else{//lang = en, therefore output: Monday
   switch (currentWeekDay){
   case 1: result="Monday";break;
   case 2: result="Tuesday";break;
   case 3: result="Wednesday";break;
   case 4: result="Thursday";break;
   case 5: result="Friday";break;
   case 6: result="Saturday";break;
   case 0: result="Sunday";break;
   }
  }
  return result;
}

//Formats month. ex: input = 0, output = January
function FormatMonthCurrentView(currentMonth,lang){
 var result = null;
 if(lang=='es'){ //ex. output: Lunes
   switch (currentMonth){
   case 0: result="Enero";break;
   case 1: result="Febrero";break;
   case 2: result="Marzo";break;
   case 3: result="Abril";break;
   case 4: result="Mayo";break;
   case 5: result="Junio";break;
   case 6: result="Julio";break;
   case 7: result="Agosto";break;
   case 8: result="Septiembre";break;
   case 9: result="Octubre";break;
   case 10: result="Noviembre";break;
   case 11: result="Diciembre";break;
   }
  }
  else{//lang = en, therefore output: Monday
   switch (currentMonth){
   case 0: result="January";break;
   case 1: result="February";break;
   case 2: result="March";break;
   case 3: result="April";break;
   case 4: result="May";break;
   case 5: result="June";break;
   case 6: result="July";break;
   case 7: result="August";break;
   case 8: result="September";break;
   case 9: result="October";break;
   case 10: result="November";break;
   case 11: result="December";break;
   }
  }
  return result;
}

//Format todaysViewDate (ex:20090120) as Monday, January 20, 2009 for initial page loading
function FSITVScheduleFormatInputDate(todaysViewDate,lang){
  var onLoadFormattedDate = FormatDateTextHeader(todaysViewDate,lang);
  document.getElementById("todaysDateID").innerHTML = onLoadFormattedDate;
}

//Window Opener for printing function
function openWinFsiTvSchedule() {
  TvScheduleHbxSetParams('printablePage');//Hitbox code
  var winTop  = 25;
  var winLeft = 25;
  var winWidth = parseInt(700);
  var winHeight = parseInt(880);
  var winName = 'printing';
  var url = window.location.href;
  var contextPath = url.split('/')[2];
  var params = "?accessType=ajax&todaysViewDate="+tvTodaysDate;
  var winURL = 'http://'+contextPath+'/'+tvSite+'/tvSchedulePrintablePage'+params;
  
  if (screen.availWidth <= 800) {
    var winLeft = screen.availWidth - winWidth;
  }
  // open standard pop-up window with tool bars disabled  
  var theWin = window.open(winURL, winName, "width=" + winWidth + ",height=" + winHeight + ",top=" + winTop + ",left=" + winLeft + ",screenY=" + winTop + ",screenY=" + winLeft + ",toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,scrollbars=no");
}

//***** Hit box functionality for tv schedule *******
function TvScheduleHbxSetParams(pageToHitBoxCall){
  var trkr = TvScheduleHbxPageTracker(pageToHitBoxCall);
  fsxTracker.setValues(trkr.name,trkr.path);
  fsxTracker.sendPageView();
  //fsHbxPageName = TvScheduleHbxPageName(); // set hitbox page name
  //fsHbxTrackingPath = TvScheduleHbxPageTrackingCode(pageToHitBoxCall); // set hitbox tracking path
  //setTrackingPageName(fsHbxPageName);
  //launch hitbox depending on site
  //if (tvSite == 'foxsoccer') { launchFsHbx();  } 
  //else                       { launchFSIHitbox(); }
  //alert(fsHbxPageName+", "+fsHbxTrackingPath);
  //alert(trkr.name+"\n"+trkr.path);
}


//returns page name, ex: FSC TV Schedule
//function TvScheduleHbxPageName(){
//function TvScheduleHbxPageTrackingCode(pageToHitBoxCall){
// var pageName = null;
// if(tvSite=='foxsoccer'){pageName='FSC TV Schedule';}
// else{pageName=tvSite.toUpperCase()+' Guia de Programacion';} 
// return pageName;
//}

//returns page tracking path, ex: /tvschedule/home/tvschedule/20090221
//function TvScheduleHbxPageTrackingCode(pageToHitBoxCall){
//function TvScheduleHbxPageName(){
function TvScheduleHbxPageTracker(pageToHitBoxCall){
 var pageTracking = {path:'',name:''};
 if(tvSite=='foxsoccer'){
   if(pageToHitBoxCall=='tvScheduleFront'){
     pageTracking.name = 'TV+Schedule';
     pageTracking.path = '/fsc/fsctv/tvschedule/home';
   }
   else if(pageToHitBoxCall=='weeklyListings'){
     pageTracking.name = 'Weekly+Listings';
     pageTracking.path = '/fsc/fsctv/tvschedule/weeklyListings';
   }
   else if(pageToHitBoxCall=='shows'){
     pageTracking.name = 'Shows+Front';
     pageTracking.path = '/fsc/fsctv/tvschedule/shows';
   }
   else if(pageToHitBoxCall=='showsSpecificPage'){
     pageTracking.name = 'Shows+' + tvShowName;
     pageTracking.path = '/fsc/fsctv/tvschedule/shows';
   }
   else if(pageToHitBoxCall=='printablePage'){
     pageTracking.name = 'Print+' + tvTodaysDate;
     pageTracking.path = '/fsc/fsctv/tvschedule/printable';
   }
 }
 else if(tvSite=='fse'){
   if(pageToHitBoxCall=='tvScheduleFront'){
     pageTracking.name = 'Guia+de+Programacion';
     pageTracking.path = '/tvschedule/home';
   }
   else if(pageToHitBoxCall=='weeklyListings'){
     pageTracking.name = 'Weekly+Listings';
     pageTracking.path = '/tvschedule/weeklyListings';
   }
   else if(pageToHitBoxCall=='shows'){
     pageTracking.name = 'Shows+Front';
     pageTracking.path = '/tvschedule/shows';
   }
   else if(pageToHitBoxCall=='showsSpecificPage'){
     pageTracking.name = 'Shows+' + tvShowName;
     pageTracking.path = '/tvschedule/shows';
   }
   else if(pageToHitBoxCall=='printablePage'){
     pageTracking.name = 'Print+' + tvTodaysDate;
     pageTracking.path = '/tvschedule/printable';
   }
 }
  return pageTracking;
}
//***** END: Hit box functionality for tv schedule *******

//***** Ads refresh for tv schedule *******
function FSITVScheduleAdsRefresh(){
  dapMgr.enableACB('ad300x250box',false); // enable advertisement
  dapMgr.renderAd('ad300x250box', adCode300x250, 300, 250); // render advertisement
  dapMgr.enableACB('ad728x90box',false); // enable advertisement
  dapMgr.renderAd('ad728x90box', adCode728x90, 728, 90); // render advertisement
}
//***** END: Ads refresh for tv schedule *******

//This is to fix nav z-index problem on FF. When invoking $.blockUI() method change nav z-index to 70 and
//when invoking $.unblockUI() put it back to its original state (z-indez = 1000) 
function modifyZIndexFSINav(trickOrNormal){
 if(trickOrNormal=='trick'){
   document.getElementById("navRow").className = "tvScheduleNavZIndexTrickFF"
 }
 else if(trickOrNormal=='normal'){
   document.getElementById("navRow").className = "navRow"
 }
 else{
   document.getElementById("navRow").className = "navRow"
 }
}

//create off/on tab functionality
function AdjustOnOffTabs(tab){
  if(tab=='tvScheduleFront'){
    document.getElementById("tvScheduleFront").className = "allViewGlobalTabsOn";
    document.getElementById("weeklyListings").className  = "allViewGlobalTabsOff";
    document.getElementById("shows").className  = "allViewGlobalTabsOff";
    NewValuesForArrows(tab);
  }
  else if(tab=='weeklyListings'){
    document.getElementById("tvScheduleFront").className = "allViewGlobalTabsOff";
    document.getElementById("weeklyListings").className  = "allViewGlobalTabsOn";
    document.getElementById("shows").className  = "allViewGlobalTabsOff";
    NewValuesForArrows(tab);
  }
  else if(tab=='shows'){
    document.getElementById("tvScheduleFront").className = "allViewGlobalTabsOff";
    document.getElementById("weeklyListings").className  = "allViewGlobalTabsOff";
    document.getElementById("shows").className  = "allViewGlobalTabsOn";
    NewValuesForArrows(tab);
  }
  setTvTab(tab);
}

//when clicking a tab, also adjust the js calls for back/forward arrows
function NewValuesForArrows(tab){
  if(tab=='tvScheduleFront'){
    var backArrowJSFunction    = "<a href='javascript:DisplayProgramming(yesterdaysProgrammingText);'>"+
                                 "<img src='/fe/fsi/img/tvSchedule/date_arrow_back.jpg' align='top' border='0'/></a>"
    var ForwardArrowJSFunction = "<a href='javascript:DisplayProgramming(tomorrowsProgrammingText);'>"+
                                 "<img src='/fe/fsi/img/tvSchedule/date_arrow_forward.jpg' align='top' border='0'/></a>"
    document.getElementById("tvScheduleBackArrow").innerHTML = backArrowJSFunction;
    document.getElementById("tvScheduleForwardArrow").innerHTML = ForwardArrowJSFunction;
  }
  else if(tab=='weeklyListings'){
    var backArrowJSFunction    = "<a href='javascript:DisplayProgramming(lastWeekProgrammingText);'>"+
                                 "<img src='/fe/fsi/img/tvSchedule/date_arrow_back.jpg' align='top' border='0'/></a>"
    var ForwardArrowJSFunction = "<a href='javascript:DisplayProgramming(nextWeekProgrammingText);'>"+
                                 "<img src='/fe/fsi/img/tvSchedule/date_arrow_forward.jpg' align='top' border='0'/></a>"
    document.getElementById("tvScheduleBackArrow").innerHTML = backArrowJSFunction;
    document.getElementById("tvScheduleForwardArrow").innerHTML = ForwardArrowJSFunction;
  }
  else if(tab=='shows'){
    document.getElementById("tvScheduleBackArrow").innerHTML = "";
    document.getElementById("tvScheduleForwardArrow").innerHTML = "";
  }

}

/*BEGIN: Pagination functions in shows view*/
function InitShowsViewPagination(){
var previousLink = 'Prev';
var nextLink = 'Prox';
if(tvLang=='en'){previousLink = 'Prev'; nextLink = 'Next';}
var countTotalSeries = $(tvScheduleAllShows).children().length;
var totalPages = Math.ceil(countTotalSeries / itemsPerPage);
document.getElementById("topPager").style.visibility  = 'visible';//pagination for shows view

//create only one page
if(countTotalSeries <= itemsPerPage){
  document.getElementById("topPrevious").innerHTML = previousLink;
  document.getElementById("topPageNumber").innerHTML = '1/1';
  document.getElementById("topNext").innerHTML = nextLink;
  document.getElementById("bottomPrevious").innerHTML = previousLink;
  document.getElementById("bottomPageNumber").innerHTML = '1/1';
  document.getElementById("bottomNext").innerHTML = nextLink;
}
else{
  setTvSeriesPaginationCurrentPage(1);
  //create the first page with the visible items
  for (i=1;i<=itemsPerPage;i++){
    document.getElementById("showNumber"+i).style.display = 'block';
  }
  //hide the rest of the items from the first page
  for (j=(itemsPerPage+1);j<=countTotalSeries;j++){
   document.getElementById("showNumber"+j).style.display  = 'none';
  }
  document.getElementById("topPrevious").innerHTML = '<a href="javascript:DisplayProgramming(previousPageShowsViewText);">'+ previousLink + '</a>';
  document.getElementById("topPageNumber").innerHTML = '1/'+totalPages;
  document.getElementById("topNext").innerHTML = '<a href="javascript:DisplayProgramming(nextPageShowsViewText);">'+ nextLink + '</a>';
  document.getElementById("bottomPrevious").innerHTML = '<a href="javascript:DisplayProgramming(previousPageShowsViewText);">'+ previousLink + '</a>';
  document.getElementById("bottomPageNumber").innerHTML = '1/'+totalPages;
  document.getElementById("bottomNext").innerHTML = '<a href="javascript:DisplayProgramming(nextPageShowsViewText);">'+ nextLink + '</a>';
}
}

//this function will determine if either previous or next link in the pagination pager are clickable or not
function _getAnotherSeriesPage(whichPage){
 var countTotalSeries = $(tvScheduleAllShows).children().length;
 var totalPages = Math.ceil(countTotalSeries / itemsPerPage);
 if(whichPage == 1){
   if(tvSeriesPaginationCurrentPage != totalPages){//there is a page to display
     getSeriesPage(whichPage);//show next page
   }
   else if(tvSeriesPaginationCurrentPage == totalPages){
     getAnotherSeriesPage(whichPage);//show first page when user has reached last clickable page (e.g. will go from 7/7 to 1/7)
   }
 }
 else if(whichPage == -1){
   if(tvSeriesPaginationCurrentPage != 1){
     getSeriesPage(whichPage);//show previous page
   }
   else if(tvSeriesPaginationCurrentPage == 1){
     getAnotherSeriesPage(whichPage);//show last page when user is in the first page (e.g. will go from 1/7 to 7/7)
   }
 }
}

//setting global variable value for tvSeriesPaginationCurrentPage
function setTvSeriesPaginationCurrentPage(newValue){
  tvSeriesPaginationCurrentPage = newValue;
}

//gets next or previous series page
function getSeriesPage(whichPage){
 var countTotalSeries = $(tvScheduleAllShows).children().length;
 var totalPages = Math.ceil(countTotalSeries / itemsPerPage);
 TvScheduleHbxSetParams('shows');//Hitbox code
 FSITVScheduleAdsRefresh();//Refresh ads

 if(whichPage == -1){
  var newTvSeriesPaginationCurrentPage = tvSeriesPaginationCurrentPage - 1;
  var oldTvSeriesPaginationCurrentPage = tvSeriesPaginationCurrentPage;
  setTvSeriesPaginationCurrentPage(newTvSeriesPaginationCurrentPage);//set new global variable value
  document.getElementById("topPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  document.getElementById("bottomPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  //display previous block of hidden series
  for(j=(((newTvSeriesPaginationCurrentPage - 1) * itemsPerPage) + 1);j<= (newTvSeriesPaginationCurrentPage * itemsPerPage);j++){
    if(document.getElementById("showNumber"+j)){//maybe this page doesn't have the complete itemsPerPage number
      document.getElementById("showNumber"+j).style.display  = 'block';
    } 
  }
  //hide current displaying series
  for(i=(((oldTvSeriesPaginationCurrentPage - 1) * itemsPerPage) + 1);i<= (oldTvSeriesPaginationCurrentPage * itemsPerPage);i++){
   if(document.getElementById("showNumber"+i)){//maybe this page doesn't have the complete itemsPerPage number
     document.getElementById("showNumber"+i).style.display  = 'none';
   }
  }
 }
 else if(whichPage == 1){
  //hide current displaying series
  for(i=(((tvSeriesPaginationCurrentPage - 1) * itemsPerPage) + 1);i<= (tvSeriesPaginationCurrentPage * itemsPerPage);i++){
   if(document.getElementById("showNumber"+i)){//maybe this page doesn't have the complete itemsPerPage number
     document.getElementById("showNumber"+i).style.display  = 'none';
   }
  }
  setTvSeriesPaginationCurrentPage(tvSeriesPaginationCurrentPage + 1);//set new global variable value
  document.getElementById("topPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  document.getElementById("bottomPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  //display next block of hidden series
  for(j=(((tvSeriesPaginationCurrentPage - 1) * itemsPerPage) + 1);j<= (tvSeriesPaginationCurrentPage * itemsPerPage);j++){
   if(document.getElementById("showNumber"+j)){//maybe this page doesn't have the complete itemsPerPage number
     document.getElementById("showNumber"+j).style.display = 'block';
   }
  }
}
}

//when last page is reached, present first page.
//when first page is reached, present last page
function getAnotherSeriesPage(whichPage){
 var countTotalSeries = $(tvScheduleAllShows).children().length;
 var totalPages = Math.ceil(countTotalSeries / itemsPerPage);
 TvScheduleHbxSetParams('shows');//Hitbox code
 FSITVScheduleAdsRefresh();//Refresh ads

 if(whichPage == -1){
  for(i=1;i<= countTotalSeries;i++){
   if(document.getElementById("showNumber"+i)){//maybe this page doesn't have the complete itemsPerPage number
     document.getElementById("showNumber"+i).style.display  = 'none';
   }
  }
  setTvSeriesPaginationCurrentPage(totalPages);//set new global variable value
  document.getElementById("topPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  document.getElementById("bottomPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  //display next block of hidden series
  for(j=(((tvSeriesPaginationCurrentPage - 1) * itemsPerPage) + 1);j<= (tvSeriesPaginationCurrentPage * itemsPerPage);j++){
   if(document.getElementById("showNumber"+j)){//maybe this page doesn't have the complete itemsPerPage number
     document.getElementById("showNumber"+j).style.display = 'block';
   }
  }
 }
 else if(whichPage == 1){
  //hide current displaying series
  for(i=1;i<= countTotalSeries;i++){
   if(document.getElementById("showNumber"+i)){//maybe this page doesn't have the complete itemsPerPage number
     document.getElementById("showNumber"+i).style.display  = 'none';
   }
  }
  setTvSeriesPaginationCurrentPage(1);//set new global variable value
  document.getElementById("topPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  document.getElementById("bottomPageNumber").innerHTML = tvSeriesPaginationCurrentPage+'/'+totalPages;
  //display next block of hidden series
  for(j=(((tvSeriesPaginationCurrentPage - 1) * itemsPerPage) + 1);j<= (tvSeriesPaginationCurrentPage * itemsPerPage);j++){
   if(document.getElementById("showNumber"+j)){//maybe this page doesn't have the complete itemsPerPage number
     document.getElementById("showNumber"+j).style.display = 'block';
   }
  }
 }
}

/*END: Pagination functions in shows view*/

//open new window for how to get tv channel
function popopen(thePage,theName,wt,ht){
    leftPos= (screen.width-wt)/2;
    topPos = (screen.height-ht)/2;
    newWin1 = window.open(thePage,theName,'toolbars=0,status=0,resizeable=0,scrollbars=0,left='+leftPos+',top='+topPos+',width='+wt+',height='+ht);
}

// launch hbx script
/*function launchFsHbx(){ 
    hbx.pn= _hbxStrip(fsHbxPageName); // sets the hbx page name
    hbx.mlc= _hbxStrip(fsHbxTrackingPath); // sets the hbx tracking path
    var _pn= _hbxStrip(fsHbxPageName);  // sets the hbx page name
    var _mlc= _hbxStrip(fsHbxTrackingPath); // sets the hbx tracking path           
        
    var head = document.getElementsByTagName('head').item(0); // get the header tag 
    var script = document.createElement('script'); // create a script tag
    script.src = "/fe/js/hbx.js"; // set the script source
    script.type = "text/javascript"; // set the type 
    script.defer = true; // set the defer
    head.appendChild(script); // place the script on the page   
}
*/

//launch hbx script
function launchFSIHitbox(){ 
    hbx.pn       = _hbxStrip(fsHbxPageName); // sets the hbx page name
    hbx.mlc      = _hbxStrip(fsHbxTrackingPath); // sets the hbx tracking path
    _pn          = _hbxStrip(fsHbxPageName);  // sets the hbx page name
    _mlc         = _hbxStrip(fsHbxTrackingPath); // sets the hbx tracking path           
    var head     = document.getElementsByTagName('head')[0]; // get the header tag 
    var script   = document.createElement('script'); // create a script tag
    script.type  = "text/javascript"; // set the type 
    script.src   = "/fe/js/hbx.js"; // set the script source
    script.defer = false;
    head.appendChild(script); // place the script on the page   
}

//replace broken images overall in the tv schedule app
function tvScheduleOnImgError(source,imgSize){
var imgPath = null;
if(imgSize=='130x130'){   imgPath = "/fe/fsi/img/tvSchedule/seriesLogos/"+tvSite+"/generic_logo.gif";}
else if(imgSize=='60x60'){imgPath = "/fe/fsi/img/tvSchedule/seriesLogos/60x60/"+tvSite+"/generic_logo.gif";}

var generic_logo_src = imgPath; 
source.src = generic_logo_src;
source.onerror = ""; // disable onerror to prevent endless loop
return true;
}

/*Display complete show information in shows expanded view when mousing over*/
function tvScheduleShowMoreInfo(completeDescription){
  //Begin content and layout of info when mousing over
  var tableBegin      = "<table border=\'0\' width=\'100%\'>";
  var fullDescription = "<tr><td nowrap=\'nowrap\' align=\'left\' style=\'font-weight:bold;font-family:Verdana;font-size:10px\'>"+completeDescription+"</td></tr>";
  var tableEnd        = "</table>";
  
  contentType = tableBegin + fullDescription + tableEnd;
  return Tip(contentType, ABOVE, true, JUMPHORZ, true, FADEIN, 300, FADEOUT, 400, BORDERCOLOR, '#cccccc', TITLEFONTCOLOR, '#ffffff', TITLEFONTFACE, 'Verdana, Arial, Helvetica, sans-serif', FOLLOWMOUSE, false, OPACITY, 95, DELAY, 1, ABOVE, true, OFFSETY, -15);
}

//NOT USING YET!! Creates onmouseover and onmouseout effect whithout writting js functions to every single td
function MouseOnMouseOutTVScheduleElmts(id){
 if(document.getElementById(id) != null){//validates if the element exists in {fse,fsla,fslasc}_nav_config.jsp

  tvScheduleMousableElmts   = document.getElementById(id).getElementsByTagName('td');
  tvScheduleElmtsSize  = tvScheduleMousableElmts.length;
   
   for (i=0; i<tvScheduleElmtsSize; i++) {
    //Mousing over an element
    tvScheduleMousableElmts[i].onmouseover = function(){
      this.className = 'dfaultViewPgmInfoContainerOnMouseOver';
    }
    
    //Mousing out an element
    tvScheduleMousableElmts[i].onmouseout = function(){
        this.className = 'dfaultViewProgramInfoContainer';
    }
   }  
  }
}


//**********NOT USING YET !!testing JQuery************************
function testingJQuery(){
//Fade in option
     $(document).ready(function() {
       $('#todaysViewTvListings').click(function() {
         //alert('this is an alert message');
         $('#todaysViewTvListings').fadeIn("slow");
       });
     });
}

