var C4=C4||{};
C4.Favourites=C4.Favourites||{};
C4.Favourites.Model=(function($){var favsCarousel={};
return{FAVS:"FAVS",HISTORY:"HISTORY",TAB_SELECTOR:"#favourites",COUNT_SELECTOR:"#my4od .my4od-button.heart span",MAX_ITEMS:50,UNIQUE_PROP:"brandWst",FULLSCREEN_ADD_ERROR_MSG:"Error adding item to your FAVOURITE SHOWS. Please try again.",FULLSCREEN_REMOVE_ERROR_MSG:"Error removing item from your FAVOURITE SHOWS. Please try again.",FULLSCREEN_CLEAR_ALL_ERROR_MSG:"Error clearing all from your FAVOURITE SHOWS. Please try again.",FULLSCREEN_MAX_ERROR_MSG:"You have reached the maximum of 50 items in your FAVOURITE SHOWS",disableView:false,favsHighlighted:false,getFavsCarousel:function getFavsCarousel(){return favsCarousel
},setFavsCarousel:function setFavsCarousel(obj){favsCarousel=obj||{}
}}
})(jQuery);
C4.Favourites.View=(function($){var Model=C4.Favourites.Model;
var View={getFavListItem:function getFavListItem(favItem,link){var brandInfo='<p class="series-info">'+favItem.title2+"</p>",banner="";
if(favItem.episodes.length>0){var episodeText="episode"+(favItem.episodes.length>1||favItem.episodes.length==0?"s":"");
banner='<span class="new-episodes">'+favItem.episodes.length+" new "+episodeText+"</span>"
}else{if(favItem.expired===true){banner='<span class="expiredContainer"></span><span class="expiredText">Unavailable</span>'
}}var assetIdAttr="";
if(favItem.linkAssetId){assetIdAttr=' data-assetid="'+favItem.linkAssetId+'"'
}return'<li class="promo" data-brandwst="'+favItem.brandWst+'"'+assetIdAttr+'><a class="promo-link" href="'+favItem.url+'"><img src="'+favItem.imagePath+'" alt="Brand Image"/><p class="title">'+favItem.title1+"</p>"+brandInfo+banner+"</a></li>"
},updateEpisodeCount:function updateEpisodeCount(brandWST,count){if(Model.disableView){return 
}var $listItem=$("#favourites li[data-brandwst="+brandWST+"]");
if($listItem.length>0){if(count>0){var episodeText="episode"+(count>1?"s":"");
$listItem.find(".new-episodes").text(count+" new "+episodeText)
}else{$listItem.find(".new-episodes").remove()
}}},updateFavItemLinks:function updateFavItemLinks(favsObj){if(favsObj&&favsObj.list){var favsArray=favsObj.list;
for(var i=0;
i<favsArray.length;
i++){var $fav=$("#favourites li[data-brandwst="+favsArray[i].brandWst+"]");
$fav.find(".promo-link").attr("href",favsArray[i].url);
if(favsArray[i].linkAssetId){$fav.data("assetid",favsArray[i].linkAssetId)
}}}},highlightLinkText:function highlightLinkText(){$("#my4od .heart").addClass("post-highlight")
}};
return{getView:function getView(){return View
}}
})(jQuery);
C4.Favourites.Controller=(function($){var Model=C4.Favourites.Model,View=C4.Favourites.View.getView();
var Helper={addFavItem:function addFavItem(brandWST,isFlash,$button,openTab,callback,priorityMsg){var favsObj=My4od.Helper.getLocalObject(Model.FAVS),favItem=My4od.Helper.getItem(Model.FAVS,Model.UNIQUE_PROP,brandWST);
if(favItem===null){if(favsObj&&favsObj.list&&favsObj.list.length===Model.MAX_ITEMS){My4od.Helper.sendFlashErrorMsg(2,2,Model.FULLSCREEN_MAX_ERROR_MSG);
if(Model.disableView){return 
}My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.MAX_REACHED_MSG,"",null,null,priorityMsg);
My4od.View.setButtonNormal($button);
if(callback&&typeof callback==="function"){callback()
}}else{if(Identity.isLoggedIn()){Helper.addFavItemAJAX(brandWST,isFlash,$button,openTab,callback,priorityMsg)
}else{if(Model.disableView){return 
}My4od.Helper.saveAction(Model.FAVS,My4od.Model.ADD_ACTION,brandWST);
My4od.View.setButtonNormal($button);
My4od.View.showNotLoggedInState(Model.TAB_SELECTOR,"Favourites");
My4od.View.scrollToMy4od(function(){My4od.View.triggerOpenTab(Model.FAVS)
},true);
if(callback&&typeof callback==="function"){callback()
}}}}else{if(Model.disableView){return 
}My4od.View.setButtonNormal($button);
My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.EXISTS_MSG,favItem.brandTitle,null,null,priorityMsg);
if(callback&&typeof callback==="function"){callback()
}}},clearFavs:function clearFavs(){My4od.Helper.clearLocalObject(Model.FAVS)
},updateEpisodesList:function updateEpisodesList(favsObj){if(Model.disableView){return 
}if(favsObj){var favsArray=favsObj.list,favItem=null;
if(favsArray){for(var i=0;
i<favsArray.length;
i++){favItem=favsArray[i];
if(favItem.episodes&&favItem.episodes.length>0){favItem.episodes=Helper.getUnwatchedEpisodes(favItem.episodes)
}favsArray[i]=favItem
}favsObj.list=favsArray
}}return favsObj
},getUnwatchedEpisodes:function getUnwatchedEpisodes(episodes){if(Model.disableView){return 
}var historyObj=My4od.Helper.getLocalObject(Model.HISTORY),unwatched=[];
if(historyObj&&historyObj.list&&historyObj.list.length>0&&episodes&&episodes.length>0){var historyArray=historyObj.list,matchCount=0;
for(var i=0;
i<episodes.length;
i++){matchCount=0;
for(var j=0;
j<historyArray.length;
j++){if(episodes[i].programmeId===historyArray[j].programmeId){matchCount++
}}if(matchCount===0){unwatched.push(episodes[i])
}}}else{unwatched=episodes
}return unwatched
},removeWatchedEpisode:function removeWatchedEpisode(programmeId,brandWST){if(Model.disableView){return 
}var index=null,favItem=null,favsObj=My4od.Helper.getLocalObject(Model.FAVS);
var favItem=My4od.Helper.getItem(Model.FAVS,Model.UNIQUE_PROP,brandWST),favIndex=Helper.getFavIndex(favItem,favsObj);
if(favItem&&favItem.episodes){var episodes=favItem.episodes;
for(var i=0;
i<episodes.length;
i++){if(episodes[i].programmeId===programmeId){index=i;
break
}}if(index!==null){episodes.splice(index,1);
favItem.episodes=episodes;
favsObj.list[favIndex]=favItem;
My4od.Helper.setLocalObject(Model.FAVS,favsObj);
View.updateEpisodeCount(brandWST,episodes.length)
}}},getFavIndex:function getFavIndex(favItem,favsObj){if(favItem&&favsObj&&favsObj.list){var favsArray=favsObj.list;
for(var i=0;
i<favsObj.list.length;
i++){if(favsArray[i].brandWst===favItem.brandWst){return i
}}}return -1
},showNewEpisodesMsg:function showNewEpisodesMsg(){var favsObj=My4od.Helper.getLocalObject(Model.FAVS),newEpisodesCount=Helper.getNewEpisodesCount(favsObj);
if(newEpisodesCount>0){Model.favsHighlighted=true;
My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.NEW_EPS_MSG,newEpisodesCount,"#my4od .heart",C4.Favourites.Controller.handlePostHighlight,false,{alwaysQueue:true})
}},getNewEpisodesCount:function getNewEpisodesCount(favsObj){var userId=Identity.getUserId(),oldList=My4od.Helper.getLocalObject(My4od.Model.UNWATCHED_LIST,userId),newList=Helper.getUnwatchedArray(favsObj),newCount=0,existsInOld=0;
if(oldList===null||oldList.length===0){newCount=newList.length
}else{for(var i=0;
i<newList.length;
i++){existsInOld=0;
for(var j=0;
j<oldList.length;
j++){if(newList[i]===oldList[j]){existsInOld++;
break
}}if(existsInOld===0){newCount++
}}}My4od.Helper.setLocalObject(My4od.Model.UNWATCHED_LIST,newList,userId);
return newCount
},getUnwatchedArray:function getUnwatchedArray(favsObj){var unwatched=[],favItem=null;
if(favsObj&&favsObj.list){var favsArray=favsObj.list;
for(var i=0;
i<favsArray.length;
i++){favItem=favsArray[i];
if(favItem.episodes&&favItem.episodes.length>0){for(var j=0;
j<favItem.episodes.length;
j++){unwatched.push(favItem.episodes[j].programmeId)
}}}}return unwatched
},generateItemLinks:function generateItemLinks(favsObj){if(Model.disableView){return 
}if(favsObj&&favsObj.list){var favsArray=favsObj.list,hashVal=null,favItem=null;
for(var i=0;
i<favsArray.length;
i++){hashVal="";
favItem=favsArray[i];
if(favItem.episodes.length>0){hashVal="#"+favItem.episodes[0].requestId;
favItem.linkAssetId=favItem.episodes[0].requestId
}favItem.url="/programmes/"+favItem.brandWst+"/4od"+hashVal;
favsArray[i]=favItem
}favsObj.list=favsArray
}return favsObj
},updateItemLinks:function updateItemLinks(){if(Model.disableView){return 
}var favsObj=My4od.Helper.getLocalObject(Model.FAVS);
favsObj=Helper.generateItemLinks(favsObj);
My4od.Helper.setLocalObject(Model.FAVS,favsObj);
View.updateFavItemLinks(favsObj)
},getFavsJSON:function getFavsJSON(){var favsObj=$.extend(true,{},My4od.Helper.getLocalObject(Model.FAVS));
var favsJSON=$.toJSON(favsObj);
return favsJSON
},getFavsAJAX:function getFavsAJAX(){$.ajax({type:"GET",url:"/4me/http/favourites/get.json"+My4od.Helper.getDateParam(),data:null,dataType:"json",async:true,cache:false,success:function(data,textStatus,jqXHR){var favsObj=My4od.Helper.getLocalObject(Model.FAVS);
if(favsObj===null){favsObj=My4od.Helper.createEmptyObject(Model.FAVS)
}favsObj.list=data;
favsObj=Helper.updateEpisodesList(favsObj);
favsObj=Helper.generateItemLinks(favsObj);
favsObj=My4od.Helper.setExpiryDate(favsObj);
My4od.Helper.setLocalObject(Model.FAVS,favsObj);
My4od.Helper.updateView(Model.FAVS,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getFavsCarousel(),Model.MAX_ITEMS);
Event.bind();
C4.My4oD.Controller.initHandler(Model.FAVS)
},error:function(data,textStatus,jqXHR){My4od.Helper.updateView(Model.FAVS,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getFavsCarousel(),Model.MAX_ITEMS);
C4.My4oD.Controller.initHandler(Model.FAVS)
}})
},addFavItemAJAX:function addFavItemAJAX(brandWST,isFlash,$button,openTab,callback,priorityMsg){if(brandWST){$.ajax({type:"POST",url:"/4me/http/favourites/add/"+brandWST+".json"+My4od.Helper.getDateParam(),data:null,dataType:"json",async:true,cache:false,success:function(data,textStatus,jqXHR){My4od.Helper.addNewItem(Model.FAVS,data);
if(Model.disableView){return 
}My4od.Helper.updateView(Model.FAVS,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getFavsCarousel(),Model.MAX_ITEMS);
Helper.updateItemLinks(data.brandWst);
if(openTab){My4od.View.triggerOpenTab(Model.FAVS)
}My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.ADD_MSG,data.brandTitle,null,null,priorityMsg);
My4od.View.updateAllButtons();
My4od.Controller.trackAddItem(Model.FAVS,brandWST,isFlash);
if(callback&&typeof callback==="function"){callback()
}},error:function(data,textStatus,jqXHR){My4od.Helper.sendFlashErrorMsg(2,0,Model.FULLSCREEN_ADD_ERROR_MSG);
if(Model.disableView){return 
}My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.ADD_ERROR_MSG,null,null,null,priorityMsg);
My4od.View.updateAllButtons();
if(callback&&typeof callback==="function"){callback()
}}})
}},removeFavItemAJAX:function removeFavItemAJAX(brandWST,isFlash,$button,priorityMsg){if(brandWST){var favItem=My4od.Helper.getItem(Model.FAVS,Model.UNIQUE_PROP,brandWST);
$.ajax({type:"POST",url:"/4me/http/favourites/remove/"+brandWST,data:null,dataType:"json",async:true,cache:false,success:function(data,textStatus,jqXHR){My4od.Helper.removeItem(Model.FAVS,Model.UNIQUE_PROP,brandWST,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.MAX_ITEMS,Model.getFavsCarousel());
if(Model.disableView){return 
}My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.REMOVE_MSG,favItem.brandTitle,null,null,priorityMsg);
My4od.View.updateAllButtons();
My4od.Controller.trackRemoveItem(Model.FAVS,brandWST,isFlash)
},error:function(data,textStatus,jqXHR){My4od.Helper.sendFlashErrorMsg(2,1,Model.FULLSCREEN_REMOVE_ERROR_MSG);
if(Model.disableView){return 
}My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.REMOVE_ERROR_MSG,favItem.brandTitle,null,null,priorityMsg);
My4od.View.updateAllButtons()
}})
}else{My4od.View.setButtonNormal($button)
}},removeAllFavsAJAX:function removeAllFavsAJAX(){$.ajax({type:"POST",url:"/4me/http/favourites/removeall",data:null,dataType:"json",async:true,success:function(data,textStatus,jqXHR){My4od.Helper.clearLocalObject(Model.FAVS);
My4od.Helper.updateView(Model.FAVS,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getFavsCarousel(),Model.MAX_ITEMS,{exists:true});
My4od.Helper.tellFlashReady(Model.FAVS);
if(Model.disableView){return 
}My4od.View.removeClearAllLink(Model.FAVS);
My4od.View.showMessage("FAVOURITE SHOWS","favourite",My4od.Model.REMOVE_ALL_MSG,"",null,null,true);
My4od.View.updateAllButtons()
},error:function(XMLHttpRequest,textStatus,errorThrown){My4od.Helper.sendFlashErrorMsg(2,3,Model.FULLSCREEN_CLEAR_ALL_ERROR_MSG)
}})
},handlePostHighlight:function handlePostHighlight(){if($(".four-on-demand-nav li.selected .heart").length===0){View.highlightLinkText();
$("#my4od .heart").bind("click focus",function(e){$(this).removeClass("post-highlight");
Model.favsHighlighted=false
})
}},removeFavsHighlight:function removeFavsHighlight(){$("#my4od .heart").removeClass("post-highlight").removeClass("highlight-link");
Model.favsHighlighted=false
},isFavsHighlighted:function isFavsHighlighted(){return Model.favsHighlighted
},initFavs:function initFavs(){var localFavs=My4od.Helper.getLocalObject(Model.FAVS);
if(Identity.getUserId()&&(localFavs===null||My4od.Helper.localObjectExpired(localFavs))){Helper.getFavsAJAX()
}else{var favsObj=My4od.Helper.getLocalObject(Model.FAVS);
favsObj=Helper.updateEpisodesList(favsObj);
favsObj=Helper.generateItemLinks(favsObj);
My4od.Helper.setLocalObject(Model.FAVS,favsObj);
My4od.Helper.updateView(Model.FAVS,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getFavsCarousel(),Model.MAX_ITEMS);
Event.bind();
C4.My4oD.Controller.initHandler(Model.FAVS)
}}};
var Event={addClick:function addClick(e){var brandWST=$(e.currentTarget).parent().data("brandwst"),$button=$(e.currentTarget);
if($button.hasClass("added")===false&&$button.hasClass("waiting")===false){My4od.View.setButtonWaiting($button);
Helper.addFavItem(brandWST,0,$button,false,null,true)
}return false
},removeClick:function removeClick(e){var brandWST=$(e.currentTarget).parent().data("brandwst"),$button=$(e.currentTarget);
My4od.View.setButtonWaiting($button);
Helper.removeFavItemAJAX(brandWST,0,$button,true);
return false
},clearAllClick:function clearAllClick(){My4od.View.showClearAllMessage(Model.FAVS);
return false
},bind:function bind(){$("#favourites .clear-all").die("click",Event.clearAllClick);
$("#favourites .clear-all").live("click",Event.clearAllClick)
}};
return{init:function init(){Helper.initFavs()
},removeItem:Helper.removeFavItemAJAX,getFavsJSON:Helper.getFavsJSON,add:Helper.addFavItem,clearAll:Helper.removeAllFavsAJAX,clearFavs:Helper.clearFavs,removeWatchedEpisode:Helper.removeWatchedEpisode,updateItemLinks:Helper.updateItemLinks,addClick:Event.addClick,removeClick:Event.removeClick,handlePostHighlight:Helper.handlePostHighlight,removeFavsHighlight:Helper.removeFavsHighlight,isFavsHighlighted:Helper.isFavsHighlighted,showNewEpisodesMsg:Helper.showNewEpisodesMsg,getHelper:function getHelper(){return Helper
}}
})(jQuery);
