if ( window.console == undefined || window.console.log == undefined ) {	window.console = { log:function(msg){ /* msg */ } } }
if ( typeof(window.billboard)=="undefined"){ billboard={}; }

billboard.charts = new ( function($) {

    var me = this;


	var URL_CHART_DETAIL = "/services/charts/chart-detail.json";
	//var URL_CHART_DETAIL = "/html/test-json.html";

    me.chartMonth = 0;
    me.chartYear = 0;

	/**
	 * register event listeners
	 */
	billboard.broadcaster.addListener( "pageLoaded", function() { me.onPageLoaded(); } );
	billboard.broadcaster.addListener( "hashChanged", function() { me.onHashChange(); } );

    me.init = function()
	{
    };

    me.carousel = '<div id="chart-carousel">'
        + '<a class="button prev no-ajax" onclick="return false;" href="/charts"><span/>Previous</a>'
        + '<div id="scroll-container">'
        + '</div>'
        + '<a class="button next no-ajax" onclick="return false;" href="/charts"><span/>Next</a>'
        + '</div>';

    me.carouselContent = '<p>Chart Empty</p>';
    me.data = {};
    me.relatedChart = false;

    me.relatedChartContent = function(){
        if(me.data.displayName != null){
            var content = '<div id="chart-title">'
                + '<a id="chart-name" href="/charts/'+ me.data.urlPath + '?chartDate='+ me.data.pubDate + '">' + me.data.displayName + '</a>'
                + '<span id="chart-date">' + me.data.publishDate + '</span>'
                + '</div>'
                + '<ul class="chart">';
            for(var i = 0;i < me.data.items.length; i++){    
                content += '<li' + (me.data.items[i].entityUrl != '' ? ' onclick="billboard.history.setHash(\'' + me.data.items[i].entityUrl + '\');"' : ' class="disabled"') + '>'
                + '<div class="rank"><p>' + [i+1] + '</p></div>'
                + '<div class="thumbnail">'
                + '<img src="'+ me.data.items[i].image +'" width="69" alt="" />'
                + '</div>'
                + '<div class="title">'
                + '<h3>'+ me.data.items[i].title +'</h3>'
                + '<h4>'+ me.data.items[i].artist +'</h4>'
                + '</div>'
                + '</li>';
            }
            content += '</ul>';
            return content;
        } else {
            return '<p>Chart Empty</p>';
        }
    };

    me.onHashChange = function() {
        //if open on page load, close it.
        if($("#chart-button").hasClass("open")){ 
            $("#drop-down").animate({ top: "-195px" } ,600);
            $("#chart-button").removeClass("open");
			$("#chart-carousel").css("marginTop","1px");
        }
    };

    me.onPageLoaded = function()
	{
		billboard.log("Charts.onPageLoaded()");

        if (readCookie("charts") != null){
            var charts = readCookie("charts").split(",");
            charts = charts.reverse();
            var recentCharts = '<dl>'
                + '<dt>Recent Charts: </dt>';
            for (var i = 0; i < charts.length; i++){
                var chartData = charts[i].split("|");
                recentCharts += '<dd><a href="/charts/' + chartData[1] + '">' + chartData[0] + '</a>' + (i < (charts.length -1) ? ',' : '') + '</dd>';
            }
            recentCharts += '</dl>';
            if($("#recent-charts dl").length > 0){
                $("#recent-charts dl").remove();
                $("#recent-charts").prepend(recentCharts);
            } else {
                $("#recent-charts").prepend(recentCharts);
            }
        } else {
            $("#recent-charts dl").remove();
        }

        if (billboard.section == 'charts'){
            me.scrapeHeader();
            me.initLocked();
            me.initPositionDesc();
            if($("#month-wrapper").length > 0 )me.initDatePicker();
			else if($("#year-wrapper").length>0) me.initDatePicker("year");
            me.relatedChart = true;
            if(readCookie("charts") != null && readCookie("charts").indexOf(me.data.displayName) < 0){
                var recentCharts = readCookie("charts") + "," + me.data.displayName + "|" + me.data.urlPath;
                createCookie("charts",recentCharts,10);
            } else if(readCookie("charts") != null && readCookie("charts").indexOf(me.data.displayName) >= 0){
                createCookie("charts",readCookie("charts"),10);
            } else {
                createCookie("charts",me.data.displayName + "|" + me.data.urlPath,10);
            }

			//set body class
			$("body").removeClass('charts-end');
			if($("#chart-section").text() != 'charts') $("body").addClass("charts-end");

        } else if (billboard.section == 'home') {
            me.relatedChart = false;
            me.initCarousel(me.carouselContent);
            $("#dynamic-content").removeClass("related-chart");
        } else if (me.relatedChart == true 
              && billboard.section == 'artists' 
              && (billboard.subsection == 'album' || billboard.subsection == 'review' || billboard.subsection == 'song')) {
            me.initCarousel(me.relatedChartContent());
            $("#dynamic-content").addClass("related-chart");
				} else {
            me.relatedChart = false;
            me.initCarousel(me.carouselContent);
            $("#dynamic-content").removeClass("related-chart");
        }
				
				if (billboard.section=='artists') {
						//For artist,album,song pages with chart history and current charting sections
						me.initSongAlbum();
            me.initPositionDesc();
				}
      
        billboard.hijackLinks("#drop-down");
        me.initChartItems();

       
        if ( $(".chart-expanded").length > 0) {
            var $item = $(".chart-expanded");
            $.each($item,function(i,v){
                me.getRelatedItems(
                    $(v).find('.item-type').text()
                   ,$(v).find('.item-title').text()
                   ,$(v).find('.item-artist').text()
                   ,$(v).find('.item-date').text()
                   ,$(v).find('.item-id').text()
                   ,function(data){
                       me.showRelatedItems(data,$(v));
                   }
                );
				billboard.social.updateLoveHateBar($(v));
            });
            
           
           var chartURL=billboard.share.getSharedUrl();
		  
            if((($('.item-type').text()).indexOf('-end')>-1) && (chartURL.indexOf('billboard-200')>-1||chartURL.indexOf('hot-100')>-1)) {
               
            	$('.unit-1 .small-meter,.unit-2 .more-info').show(); }
            
        }
		
		$(".charts ul#top li a").each(function(i) {
			$(this).click(function(){
				objGoto = $(this).attr("class").split(' ')[1];
				scrolltoCat = $("#"+objGoto).offset().top;
				$('html,body').animate( {scrollTop: scrolltoCat }, 1000 );
			});
		});
		$("#chart-landing .top").click(function(){
			scrolltoTop = $("ul#top").offset().top;
			$('html,body').animate( {scrollTop: scrolltoTop }, 1000 );	
		});

		if(billboard.section =='charts-landing'){
			$("#chart-landing ul.group").each(function(){
				if($(this).children("li").length == 0)
					$(this).hide();
			});
			$("#top li").hide();
			$("#chart-landing div.unit-header").each(function(){
				$("#chart-landing").find("#top li a."+$(this).attr("id")).parent("li").show();
			});
		}
    };

    me.initSongAlbum = function(){

			$(".chart-item").mouseover(
				function(){
					$(this).addClass("chart-rollover"); 
				}
			);

			$(".chart-item").mouseout(
				function(){
					$(this).removeClass("chart-rollover"); 
				}
			);

		};


    me.scrapeHeader = function(){
        var headerContent = $("#chart-header-content").html();
        $("#chart-header-content").html('');
        $("#dynamic-content").html(headerContent);
        $("#chart-header #more-desc .more").hover(
            function(){
                $("#chart-header #more-desc #chart-desc-dialog").show();
            }
            ,function(){
                $("#chart-header #more-desc #chart-desc-dialog").hide();
            }
        );
    };

    me.initLocked = function(){
        $(".lock-icon").hover(
            function(){
                $(this).parent(".locked").children(".dialog-200").show();
            }
            ,function(){
                $(this).parent(".locked").children(".dialog-200").hide();
            }
        );
    };

    me.initPositionDesc = function(){
        $(".chart-pos, .weeks, .peak, .weeks-on, .time-peak").hover(
            function(){
                $(this).children(".chart-dialog").show();
            }
            ,function(){
                $(this).children(".chart-dialog").hide();
            }
        );
    };

    me.initDatePicker = function(type){ // if type not empty = year picker for year end charts
		if(!type) billboard.calendar.pickType = 'day';
		else billboard.calendar.pickType = 'year';

        var loc = window.location.href;
        var url = loc;
        if(loc.indexOf("#") > -1){
           var split1 = loc.split("#");
           if (split1[1].indexOf("?") > -1){
               var split2 = split1[1].split("?");
               url = split2[0]; 
           } else {
               url = split1[1];
           }
        }
        billboard.calendar.dayUrl = url;

        var todaysDate = new Date ();
        var strDate = $("#chart-date").html();
		
		strDate = strDate.replace(/-/g, "/");
	    var chartDate = new Date (strDate);
		if(strDate.indexOf("/")>-1)
			$("#chart-date").html(billboard.calendar.monthLocale[chartDate.getMonth()]+" "+chartDate.getDate()+", "+chartDate.getFullYear());
       
        me.chartMonth = chartDate.getMonth();
        me.chartYear = chartDate.getFullYear();
        billboard.calendar.month = me.chartMonth;
		billboard.calendar.origMonth = me.chartMonth;
        billboard.calendar.year = me.chartYear;
		if(!type) {
			billboard.calendar.origYear = me.chartYear;
			billboard.calendar.setMonth(0);
		}
		else {
			billboard.calendar.origYear = strDate;
			billboard.calendar.year = strDate;
			billboard.calendar.setYear(strDate);
		}

        $("#open-calendar").click(function(){
            if(!type) {
				billboard.calendar.month = me.chartMonth;
				billboard.calendar.year = me.chartYear;
				billboard.calendar.day = chartDate.getDate();
				billboard.calendar.setMonth(0);
			}
			else { // year end charts
				billboard.calendar.year = strDate;
				billboard.calendar.setYear(strDate);
			}
            $("#calendar").toggle();
            return false;
        });
    };

	/**
	 * add the open/contract code to each chart item
	 */
    me.initChartItems = function()
	{
		billboard.log("Charts.initChartItems()");
		/**
		 * add functionality to chart items for their expanded state, i.e. load the comments count and love/hate ratios
		 */
        $(".chart-item").click( function(){
            var $item = $(this);
            if ( !$item.hasClass("chart-expanded") ) {
                $('.unit-1 .small-meter, .unit-2 .more-info').hide('slow');
                $('.item').removeClass('chart-expanded');
                $item.find('.unit-1 .small-meter,.unit-2 .more-info').toggle('normal');
                $item.addClass('chart-expanded');
                $item.parent().removeClass('over');
                $item.parent().parent().parent().css({
                    "background-image" : "url(/images/backgrounds/drop-shadow-top-small.png)"
                });

                me.getRelatedItems(
                    $item.find('.item-type').text()
                   ,$item.find('.item-title').text()
                   ,$item.find('.item-artist').text()
                   ,$item.find('.item-date').text()
                   ,$item.find('.item-id').text()
                   ,function(data){
                       me.showRelatedItems(data,$item);
                   }
                );

				billboard.social.updateLoveHateBar( this );
            }
        }).hover(
            function(){
                if(!$(this).hasClass("chart-expanded")){
                    $(this).parent().addClass("over");
                    $(this).parent().parent().parent().css({
                        "background-image" : "url(/images/backgrounds/drop-shadow-top-small-light-pink.png)"
                    });
                }
            }
            ,function(){
                $(this).parent().removeClass("over");
                $(this).parent().parent().parent().css({
                    "background-image" : "url(/images/backgrounds/drop-shadow-top-small.png)"
                });
            }
        );

		// load the info for the first expanded chart item
		var chartURL=billboard.share.getSharedUrl();
        if((($('.item-type').text()).indexOf('-end')>-1) && (chartURL.indexOf('billboard-200')>-1||chartURL.indexOf('hot-100')>-1)){
        	 
        	var test=$('.chart-expanded');
		        $.each(test,function(i,v){
		       	 billboard.social.updateLoveHateBar($(v));
		       	 
		        });					
		}
		else
			
			billboard.social.updateLoveHateBar( $(".chart-item :first") );
       
    };

    me.initChartBar = function(){
        $("#chart-button").click(function(){
            var anchor = $(this);
            if(anchor.hasClass("open")){ 
                $("#drop-down").animate({ top: "-195px" } ,600);
                anchor.removeClass("open");
				$("#chart-carousel").css("marginTop","1px");
            } else {
                $("#drop-down").animate({ top: "70px" } ,600);
                anchor.addClass("open");
				$("#chart-carousel").css("marginTop","0");
            }
            return false;
        });

        me.carouselContent = $("ul.editorial");

    };

    me.initCarousel = function(scrollContent){
        $("#dynamic-content").html(me.carousel);
        $("#dynamic-content #scroll-container").html(scrollContent);
        $("#dynamic-content #chart-carousel ul li").hover(
            function(){
                if (!$(this).hasClass("disabled")){
                    $(this).addClass("over");
                }
            }
            ,function(){
                $(this).removeClass("over");
            }
        );
        if (me.relatedChart == true){
            var ulWidth = me.data.items.length * 216;
            $("#dynamic-content #chart-carousel ul").css("width",ulWidth + "px");
        }
        var items = me.relatedChart == true ? 4.4537 : 5;
        var scroll = me.relatedChart == true ? 4 : 5;
//        var circular = me.relatedChart == true ? true : false;
        var circular = false;
        if(me.relatedChart == true && me.data.items.length > 0){
            for (var i = 0; i < me.data.items.length; i++){
                if (me.data.items[i].entityId == billboard.entityId){
                    var start = i;
                    $($("#dynamic-content #chart-carousel ul li")[i]).addClass("selected");
                }
            }
        } else {
            var start = 0;
        }
        $("#scroll-container").jCarouselLite({
            btnNext: "#dynamic-content #chart-carousel .next"
            ,btnPrev: "#dynamic-content #chart-carousel .prev"
            ,scroll: scroll
            ,visible: items
            ,circular: circular
            ,speed: 600
            ,start: start
        });
    };

    me.getRelatedItems = function(pChartType, pTitle, pArtist, pChartDate, pFormatId, callback){
        $.getJSON(
            URL_CHART_DETAIL
            ,{
                chartType : pChartType
                ,title : pTitle
                ,artist : pArtist
                ,chartDate : pChartDate
                ,formatId : pFormatId
            }
            ,callback
        );
    };
   
    me.showRelatedItems = function(data,$item){
        if (data.response.head.status == 'success'){
            var str = '';
            var newsList = typeof(data.response.body.newsList) == "undefined" ? [] : data.response.body.newsList;
            var chartOnList = typeof(data.response.body.chartOnList) == "undefinded" ? [] : data.response.body.chartOnList;
            var historical = $item.find('.item-historical').text()
            var chartDate = $item.find('.item-date').text()
            var pDate = historical == 'true' ? '?chartDate=' + chartDate : '';
            if(newsList.length > 0){
                var step = newsList.length < 5 ? newsList.length : 5;
                str += '<dl class="news">'
                    + '<dt>News</dt>';
                for(var i = 0; i < step; i++){
                    var title = newsList[i].title.length > 30 && chartOnList.length > 0 ? newsList[i].title.substring(0,30) + "..." : newsList[i].title;
                    str += '<dd><a href="/news/' + newsList[i].seoTitle + '">' + title + '</a></dd>';
                }
                str += '</dl>';
            }
            if(chartOnList.length > 0){
				var chartsec = $("#chart-section").text();
				if(chartsec == 'charts-year-end')
					pDate = '?year=' + $("#year-wrapper a").text();
                var step = chartOnList.length < 5 ? chartOnList.length : 5;
                str += '<dl class="charts">'
                    + '<dt>Also Charted On</dt>';
                for(var i = 0; i < step; i++){
                    var title = typeof(chartOnList[i].formatDisplayName) != 'undefined' ? chartOnList[i].formatDisplayName : chartOnList[i].formatName;
                    title = title.length > 14 && newsList.length > 0 ? title.substring(0,14) + "..." : title;
                    if(chartOnList[i].urlPath != ''){
                        str += '<dd><span>#' + chartOnList[i].rankThisWeek + '</span> <a href="/'+ chartsec +'/' + chartOnList[i].urlPath + pDate + '">' + title + '</a></dd>';
                    } else {
                        str += '<dd><span>#' + chartOnList[i].rankThisWeek + '</span> ' + title + '</dd>';
                    }
                }
                str += '</dl>';
            }
            $item.find('.more-info').html(str);
            if(newsList.length == 0 || chartOnList.length == 0){
                $item.find('.more-info dl').css({
                    "width" : "390px"
                });
            }
            billboard.hijackLinks($item);
        } else {
            $item.find('.more-info').html(
                '<p style="display:none;">'
                + data.response.head.status
                + ' - '
                + data.response.head.message
                + '</p>'
            );
        } 
    };

    //On Load
    $( function(){		
		me.initChartBar();
	});//End On Load

})(jQuery);
