var C4=C4||{};
C4.Playlist=C4.Playlist||{};
C4.Playlist.Model=(function($){var playlistCarousel={};
return{PLAYLIST:"PLAYLIST",TAB_SELECTOR:"#playlist",COUNT_SELECTOR:"#my4od .my4od-button.playlist span",MAX_ITEMS:50,UNIQUE_PROP:"programmeId",FULLSCREEN_ADD_ERROR_MSG:"Error adding item to your PLAYLIST. Please try again.",FULLSCREEN_REMOVE_ERROR_MSG:"Error removing item from your PLAYLIST. Please try again.",FULLSCREEN_CLEAR_ALL_ERROR_MSG:"Error clearing all from your PLAYLIST. Please try again.",FULLSCREEN_MAX_ERROR_MSG:"You have reached the maximum of 50 items in your PLAYLIST",disableView:false,getPlaylistCarousel:function getPlaylistCarousel(){return playlistCarousel
},setPlaylistCarousel:function setPlaylistCarousel(obj){playlistCarousel=obj||{}
}}
})(jQuery);
C4.Playlist.View=(function($){var Model=C4.Playlist.Model;
var View={};
return{getView:function getView(){return View
}}
})(jQuery);
C4.Playlist.Controller=(function($){var Model=C4.Playlist.Model,View=C4.Playlist.View.getView();
var Helper={addPlaylistItem:function addPlaylistItem(programmeId,isFlash,$button,openTab,callback,priorityMsg){var playlistObj=My4od.Helper.getLocalObject(Model.PLAYLIST),playlistItem=My4od.Helper.getItem(Model.PLAYLIST,Model.UNIQUE_PROP,programmeId);
if(playlistItem===null){if(playlistObj&&playlistObj.list&&playlistObj.list.length===Model.MAX_ITEMS){My4od.View.setButtonNormal($button);
My4od.View.showMessage("PLAYLIST","playlist",My4od.Model.MAX_REACHED_MSG,"",null,null,priorityMsg);
My4od.Helper.sendFlashErrorMsg(1,2,Model.FULLSCREEN_MAX_ERROR_MSG);
if(callback&&typeof callback==="function"){callback()
}}else{if(Identity.isLoggedIn()){Helper.addPlaylistItemAJAX(programmeId,isFlash,$button,openTab,callback,priorityMsg)
}else{My4od.View.setButtonNormal($button);
My4od.View.showNotLoggedInState(Model.TAB_SELECTOR,"Playlist");
if($button&&$button.length>0){$button.blur()
}My4od.View.scrollToMy4od(function(){My4od.View.triggerOpenTab(Model.PLAYLIST)
},true);
My4od.Helper.saveAction(Model.PLAYLIST,My4od.Model.ADD_ACTION,programmeId);
if(callback&&typeof callback==="function"){callback()
}}}}else{My4od.View.setButtonNormal($button);
My4od.View.showMessage("PLAYLIST","playlist",My4od.Model.EXISTS_MSG,playlistItem.brandTitle);
if(callback&&typeof callback==="function"){callback()
}}},getPlaylistJSON:function getPlaylistJSON(){var playlistObj=$.extend(true,{},My4od.Helper.getLocalObject(Model.PLAYLIST));
var playlistJSON=$.toJSON(playlistObj);
return playlistJSON
},clearPlaylist:function clearPlaylist(){My4od.Helper.clearLocalObject(Model.PLAYLIST)
},getPlaylistAJAX:function getPlaylistAJAX(){$.ajax({type:"GET",url:"/4me/http/playlist/get.json"+My4od.Helper.getDateParam(),data:null,dataType:"json",async:true,cache:false,success:function(data,textStatus,jqXHR){var playlistObj=My4od.Helper.getLocalObject(Model.PLAYLIST);
if(playlistObj===null){playlistObj=My4od.Helper.createEmptyObject(Model.PLAYLIST)
}playlistObj.list=data;
playlistObj=My4od.Helper.setExpiryDate(playlistObj);
My4od.Helper.setLocalObject(Model.PLAYLIST,playlistObj);
My4od.Helper.updateView(Model.PLAYLIST,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getPlaylistCarousel(),Model.MAX_ITEMS);
Event.bind();
C4.My4oD.Controller.initHandler(Model.PLAYLIST)
},error:function(data,textStatus,jqXHR){My4od.Helper.updateView(Model.PLAYLIST,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getPlaylistCarousel(),Model.MAX_ITEMS);
C4.My4oD.Controller.initHandler(Model.PLAYLIST)
}})
},addPlaylistItemAJAX:function addPlaylistItemAJAX(programmeId,isFlash,$button,openTab,callback,priorityMsg){if(programmeId){$.ajax({type:"POST",url:"/4me/http/playlist/add/"+programmeId+My4od.Helper.getDateParam(),data:null,dataType:"json",async:true,cache:false,success:function(data,textStatus,jqXHR){My4od.Helper.addNewItem(Model.PLAYLIST,data);
if(Model.disableView){return 
}My4od.Helper.updateView(Model.PLAYLIST,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getPlaylistCarousel(),Model.MAX_ITEMS);
My4od.View.showMessage("PLAYLIST","playlist",My4od.Model.ADD_MSG,data.episodeTitle,null,null,priorityMsg);
if(callback&&typeof callback==="function"){callback()
}C4.My4oD.Controller.updateNowPlaying();
if(openTab){My4od.View.triggerOpenTab(Model.PLAYLIST)
}My4od.View.updateAllButtons();
My4od.Controller.trackAddItem(Model.PLAYLIST,programmeId,isFlash)
},error:function(data,textStatus,jqXHR){My4od.Helper.sendFlashErrorMsg(1,0,Model.FULLSCREEN_ADD_ERROR_MSG);
if(Model.disableView){return 
}My4od.View.updateAllButtons();
My4od.View.showMessage("PLAYLIST","playlist",My4od.Model.ADD_ERROR_MSG,null,null,null,priorityMsg);
if(callback&&typeof callback==="function"){callback()
}}})
}},removePlaylistItemAJAX:function removePlaylistItemAJAX(programmeId,isFlash,$button,priorityMsg){if(programmeId){var playlistItem=My4od.Helper.getItem(Model.PLAYLIST,Model.UNIQUE_PROP,programmeId);
$.ajax({type:"POST",url:"/4me/http/playlist/remove/"+playlistItem.programmeId,data:null,dataType:"json",async:true,cache:false,success:function(data,textStatus,jqXHR){My4od.Helper.removeItem(Model.PLAYLIST,Model.UNIQUE_PROP,programmeId,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.MAX_ITEMS,Model.getPlaylistCarousel());
if(Model.disableView){return 
}if(playlistItem&&playlistItem.episodeTitle){My4od.View.showMessage("PLAYLIST","playlist",My4od.Model.REMOVE_MSG,playlistItem.episodeTitle,null,null,priorityMsg)
}My4od.View.updateAllButtons();
My4od.Controller.trackRemoveItem(Model.PLAYLIST,programmeId,isFlash)
},error:function(jqXHR,textStatus,errorThrown){My4od.Helper.sendFlashErrorMsg(1,1,Model.FULLSCREEN_REMOVE_ERROR_MSG);
if(Model.disableView){return 
}My4od.View.showMessage("PLAYLIST","playlist",My4od.Model.REMOVE_ERROR_MSG,playlistItem.episodeTitle,null,null,priorityMsg);
My4od.View.updateAllButtons()
}})
}},clearPlaylistAJAX:function clearPlaylistAJAX(){$.ajax({type:"POST",url:"/4me/http/playlist/removeall/",data:null,datatype:"json",async:true,cache:false,success:function(data,textStatus,jqXHR){My4od.Helper.clearLocalObject(Model.PLAYLIST);
My4od.Helper.updateView(Model.PLAYLIST,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getPlaylistCarousel(),Model.MAX_ITEMS,{exists:true});
My4od.Helper.tellFlashReady(Model.PLAYLIST);
if(Model.disableView){return 
}My4od.View.removeClearAllLink(Model.PLAYLIST);
My4od.View.showMessage("PLAYLIST","playlist",My4od.Model.REMOVE_ALL_MSG,"",null,null,true);
My4od.View.updateAllButtons()
},error:function(data,textStatus,jqXHR){My4od.Helper.sendFlashErrorMsg(1,3,Model.FULLSCREEN_CLEAR_ALL_ERROR_MSG);
My4od.Helper.tellFlashReady(Model.PLAYLIST)
}})
},getPromoItem:function getPromoItem(programmeId){var results=[];
$("#playlist .promo-container li").each(function(){$promo=$(this);
if($promo.attr("data-wsprogrammeid")===programmeId){results.push($promo)
}});
return results
},initPlaylist:function initPlaylist(){var localPlaylist=My4od.Helper.getLocalObject(Model.PLAYLIST);
if(Identity.isLoggedIn()&&(localPlaylist===null||My4od.Helper.localObjectExpired(localPlaylist))){Helper.getPlaylistAJAX()
}else{My4od.Helper.updateView(Model.PLAYLIST,Model.TAB_SELECTOR,Model.COUNT_SELECTOR,Model.getPlaylistCarousel(),Model.MAX_ITEMS);
Event.bind();
C4.My4oD.Controller.initHandler(Model.PLAYLIST)
}}};
var Event={addClick:function addClick(e){var programmeId=$(e.currentTarget).parent().data("wsprogrammeid"),$button=$(e.currentTarget);
if($button.hasClass("added")===false&&$button.hasClass("waiting")===false){My4od.View.setButtonWaiting($button);
Helper.addPlaylistItem(programmeId,0,$button,false,null,true)
}return false
},removeClick:function removeClick(e){var programmeId=$(e.currentTarget).parent().data("wsprogrammeid"),$button=$(e.currentTarget);
My4od.View.setButtonWaiting($button);
Helper.removePlaylistItemAJAX(programmeId,0,$button,true);
return false
},clearAllClick:function clearAllClick(){My4od.View.showClearAllMessage(Model.PLAYLIST);
return false
},bind:function bind(){if(Model.disableView){return 
}$("#playlist .clear-all").die("click",Event.clearAllClick);
$("#playlist .clear-all").live("click",Event.clearAllClick)
}};
return{init:function init(){Helper.initPlaylist()
},add:Helper.addPlaylistItem,removeItem:Helper.removePlaylistItemAJAX,clearPlaylist:Helper.clearPlaylist,clearAll:Helper.clearPlaylistAJAX,getPlaylistJSON:Helper.getPlaylistJSON,addClick:Event.addClick,removeClick:Event.removeClick,getPromoItem:Helper.getPromoItem,getHelper:function getHelper(){return Helper
}}
})(jQuery);
