/** 
 * Billboard Sort
 *
 */
billboard.sort = new ( function($)  
{
	var URL_CF_SORT_HIGHEST_RATED="rest/v1/query/entity/highest_rated";

	var me = this;

	// sort properties
	me.params = {};
	me.url;
	me.page = 0;
	me.numPerPage = 10;
	me.entities;
	me.tab = "others";
	me.section = "";

	me.init = function()
	{		
		// Add initialization code here
		billboard.broadcaster.addListener( "pageLoaded", function() { me.onPageLoaded(); } );
		
	};
	
	me.onPageLoaded = function(){
		if(me.section != billboard.subsection || me.tab=="others") {
			me.setTab("others");
			me.entities=null;
		}
		me.section=billboard.subsection;

		$(".next-page").click( me.nextPage );
	    $(".previous-page").click( me.previousPage );
		
		if ( me.section=="news" || me.section=="features" || me.section=='albums' || me.section=='songs'){
			if (me.entities && me.page > 0) {
				$(".previous-page").removeClass("disabled-previous");
			}
			else if(me.entities){
				billboard.log("disabling previous button");
				$(".previous-page").addClass("disabled-previous")
			}
			
			if(me.entities && ((me.page+1) * me.numPerPage < me.entities.length)) {
				$(".next-page").removeClass("disabled-next");
			}
			else if(me.entities){
				billboard.log("disabling next button");
				$(".next-page").addClass("disabled-next")
			}
		}	

		if(me.tab == "favorite"){
			$(".filter-nav li").removeClass("active");
			$('#content .filter-nav .filter-most-favorited').parent().addClass("active");
		}
		else if(me.tab == "favorite-community"){
			$(".filter-nav li").removeClass("active");
			$('#content .filter-nav .filter-most-favorited-community').parent().addClass("active");
		}
		me.initClickHandlers();
	};
	
	me.initClickHandlers = function()
	{
		$('#content .filter-nav .filter-most-favorited').click( function() {
			me.url= URL_CF_SORT_HIGHEST_RATED;
			me.params = {};
			me.params.entity_category=me.getCategoryId();
			me.params.rating="CustomRating0";
			me.params.period="Last90Days";
			me.params.offset=0;
			//me.params.max_return=10;
	
			me.getSortedEntities(function(data){
				billboard.log("Clear page/set tab"+data);
				me.page=0;
				me.setTab("favorite");
			});
			
			return false;			
		});

		$('#content .filter-nav .filter-most-favorited-community').click( function() {

			me.url= URL_CF_SORT_HIGHEST_RATED;
			me.params = {};
			me.params.entity_category=me.getCategoryId();
			me.params.rating="CustomRating0";
			me.params.period="LastWeek";
			me.params.friends="true";
			me.params.offset=0;
			//me.params.max_return=10;
			me.params.user=billboard.user.username;


			billboard.user.requireLogin(function(){me.getSortedEntities(function(data){
				billboard.log("Clear page/set tab"+data);
				me.page=0;
				me.setTab("favorite-community");
			})});
			
			return false;
		});
		$('#content .filter-nav .filter-latest').click( function(){
				me.setTab("others");
				$(".filter-nav li").removeClass("active");
				$(this).parent().addClass("active");
		});
		
	};
	
	me.setTab = function(tab)
	{
		me.tab = tab;	
	};
	
	
	me.nextPage = function() 
	{
		if(!$(this).hasClass("disabled-next")){
			if (me.entities.length>0) {

				me.page++;
				me.getPage(me.page);
				return false;
			}
			else {
				return true;
			}	
		}
		else return false;
	}
	
	me.previousPage = function()
	{
		if(!$(this).hasClass("disabled-previous")){
			if (me.entities.length>0) {
				me.page--;
				me.getPage( me.page );
				return false;
			}
			else{
				return true;
			}
		}
		else return false;
	}
	
	me.getSortedEntities = function(callback) 
	{
		var props = billboard.properties;
		
		if(me.tab=='favorite-community' && me.params.user=='') me.params.user=billboard.user.username;
		billboard.social.execute( me.url, me.params, function(data) {
			
			if(data.entities && data.entities.length>0) {
				if(callback) callback(true);
				me.entities=data.entities;
				me.getPage( me.page);
			}
			else billboard.alert("No Results");
		});	
	};
	
	me.getPage = function( num )
	{
		var queryString= "";
		count = (me.entities) ? me.entities.length :0;
		billboard.log("Count:"+count);
		billboard.log("Page:"+num);
		if(count > 0){
			for(i=num*me.numPerPage; i<count && i<(num*me.numPerPage)+10; i++){
				
				if (me.entities && me.entities[i].uid) {
				
					queryString += "entityIds=" + me.entities[i].uid + "&";
				}
			}	
		
			queryString += "cachebust=" + (new Date()).getTime();
		}
		
		if(queryString.length > 0) {
			scrollSection = $("#news-section").length>0 ? "#news-section" : "#new-releases-section";
			// call the url to render the page
			billboard.navigateToUrl("/"+billboard.subsection+"?"+queryString+scrollSection);
		}
		
	};
		
	me.getCategoryId = function() {
		
		count = billboard.properties.cfCategoryMap.length;
		
		for(i=0; i<count; i++) {
			
			if(billboard.subsection == billboard.properties.cfCategoryMap[i][0]) {
				
				return billboard.properties.cfCategoryMap[i][1];
			}
		}
		
	}
	
})(jQuery);

