$(document).ready(function() {
    var boxStreamTop = $('#boxStream').offset().top;
    var baseURL = '';
    var chartURL = '';
    var currentMetric = '';

    $(".collapseLink").click(function() {
        $(this).parent().find(".collapseBox").slideToggle();
        $(this).toggleClass("expandLink");
        
        if($(this).attr("title") == "Collapse") {
            $(this).attr("title", "Expand");
            isExpanded = 'f';
        }
        else {
            $(this).attr("title", "Collapse");
            isExpanded = 't';
        }

        if($(this).parents('.boxWatchlist').length == 0) {
            return false;
        }

        var watchlistID = $(this).parents('.boxWatchlist').attr('id').slice('watchlist_'.length);
        $.ajax({
            url: '/watchlists/' + watchlistID + '/edit_is_expanded/' + isExpanded,
            success: function() {
                return false;
            }
        });

        return false;
    });

    $("#dowLink").click(function() {
        $("#activeStats").hide();
        $("#dowStats").show();
        $("#marketsShownList li").removeClass("active");
        $(this).parent().addClass("active");
        return false;
    });

    $("#activeLink").click(function() {
        $("#dowStats").hide();
        $("#activeStats").show();
        $("#marketsShownList li").removeClass("active");
        $(this).parent().addClass("active");
        return false;
    });

    $(".viewChart").live("click", function() {
        if($(this).attr("href") == "#") {
            return false;
        }

        baseURL = $(this).attr("href");
        if($(this).hasClass("single")) {
            chartURL = baseURL + '/json';
        }
        else if($(this).hasClass("multiple")) {
            chartURL = baseURL + '&json=1';
        }
        else {
            return false;
        }

        currentMetric = 'revenue_growth';

        // If window is scrolled below chart, scroll it to just above
        if($(window).scrollTop() > boxStreamTop) {
            $(window).scrollTop(boxStreamTop);
        }

        //Highlight streamMsg
        $(".streamMsg").removeClass("streamMsgHilited");
        $(this).parents("div.streamMsg").addClass("streamMsgHilited");

        //Scroll to streamMsg
        targetOffset = $('.streamMsgHilited').offset();
        scrollerOffset =  $('#streamScrollerIndex').offset();
        oldScrollTop = $('#streamScrollerIndex').get(0).scrollTop;
        x = oldScrollTop + targetOffset.top - scrollerOffset.top;
        $('#streamScrollerIndex').scrollTop(x);

        hideDataTable();
        hideDropdowns();
        $("#streamChart").html('<div class="loading"></div>');
        $.ajax({
            url: chartURL.replace('__calc_name__', currentMetric),
            dataType: "json",
            success: function(data, textStatus) {
                showDataTable(data);
                showDropdowns(data);
                chartData(data);
                return false;
            },
            error: function() {
                $("#streamChart").html("");
                return false;
            }
        });
        return false;
    });
    
    $("#singleChartDropdown").click(function() {
        $("#singleChartDropdownMenu").toggle();
        $("select").toggle();
        return false; 
    });

    $("#singleChartDropdown2").click(function() {
        $("#singleChartDropdownMenu2").toggle();
        $("select").toggle();
        return false; 
    });

    $("#multiChartDropdown").click(function() {
        $("#multiChartDropdownMenu").toggle();
        $("select").toggle();
        return false; 
    });
    
    $(".singleMetric").click(function() {
        currentMetric = $(this).attr("href").slice(1);
        
        var metricName = $(this).html();
        $("#singleChartDropdown").html(truncateString(metricName, 14));
        $("#singleChartDropdown2").html("Second Metric");
        $("#singleChartDropdown2").addClass("greyed");
        $("#singleChartDropdownMenu").hide();
        $("#singleChartDropdownMenu2").hide();
        $("select").show();
        
        $("#streamChart").html('<div class="loading"></div>');
        $.ajax({
            url: chartURL.replace('__calc_name__', currentMetric),
            dataType: "json",
            success: function(data, textStatus) {
                showDropdowns(data);
                chartData(data);
                return false;
            },
            error: function() {
                $("#streamChart").html("");
                return false;
            }
        });
        return false;
    });


    $(".singleMetric2").click(function() {
        compMetric = $(this).attr("href").slice(1);

        if(currentMetric == compMetric) {
            currrentCompMetric = '';
            YCharts.deleteCompData("streamChart");
            YCharts.chart("streamChart");
            $("#singleChartDropdown2").html("Second Metric");
            $("#singleChartDropdown2").addClass("greyed");
            $("#singleChartDropdownMenu2").hide();
            $("select").show();
            return false;
        }
    
        var compMetricName = $(this).html();
        $("#singleChartDropdown2").html(truncateString(compMetricName, 14));
        $("#singleChartDropdown2").removeClass("greyed");
        $("#singleChartDropdownMenu2").hide();
        $("select").show();
        
        $("#streamChart").html('<div class="loading"></div>');
        $.ajax({
            url: chartURL.replace('__calc_name__', currentMetric) + '?comp='  + compMetric,
            dataType: "json",
            success: function(data, textStatus) {
                chartData(data);
                return false;
            },
            error: function() {
                $("#streamChart").html("");
                return false;
            }
        });
        return false;
    });

    $(".multiMetric").click(function() {
        currentMetric = $(this).attr("href").slice(1);
        
        var metricName = $(this).html();        
        $("#multiChartDropdown").html(truncateString(metricName, 14));
        $("#multiChartDropdownMenu").hide();
        $("select").show();
         
        $("#streamChart").html('<div class="loading"></div>');
        $.ajax({
            url: chartURL.replace('__calc_name__', currentMetric),
            dataType: "json",
            success: function(data, textStatus) {
                showDropdowns(data);
                chartData(data);
                return false;
            },
            error: function() {
                $("#streamChart").html("");
                return false;
            }
        });
        return false;
    });

    $("#streamType").change(function() {
        var selectedType = $("#streamType").val();
        $(".streamMsg").hide();
        if(selectedType == "all") {
            $(".streamMsg").show();
        }
        else if(selectedType == "tweets") {
            $(".streamMsg.tweet").show();
        }
        else if(selectedType == "news") {
            $(".streamMsg.news").show();
        }
        else if(selectedType == "videos") {
            $(".streamMsg.video").show();
        }
        $("#streamScrollerIndex").get(0).scrollTop = 0;
        $(".viewChart:visible:first").click();
    });

    $("#streamSource").change(function() {
        var selectedSource = $("#streamSource").val();
        $("#streamScrollerHed div.loading").show();
        $.ajax({
            url: '/main/streams/' + selectedSource,
            dataType: "html",
            success: function(data, textStatus) {
                $("#streamScrollerIndex").html(data);
                $("#streamType").change();
                $("#streamScrollerHed div.loading").hide();
                return false;
            },
            error: function() {
                $("#streamScrollerHed div.loading").hide();
                return false;
            }
        })
    });

    $("#ctrlsSlide .back").click(function() {
        $(".streamMsgHilited").prevAll(":visible:first").find(".viewChart").click();
        return false;
    });

    $("#ctrlsSlide .next").click(function() {
        $(".streamMsgHilited").nextAll(":visible:first").find(".viewChart").click();
        return false;
    });

    function showDataTable(data) {
        if($("#streamHeadRow").css("display") == "none") {
            if(navigator.appName.indexOf("Microsoft") > -1) {
                $("#streamHeadRow").css("display", "block");
            }
            else {
                $("#streamHeadRow").css("display", "table-row");
            }
        }
        
        var dataHtml = "";
        for(i in data.objects) {
            obj = data.objects[i];
            color = YCharts.standardOptions.colors[i];
            if(parseFloat(obj.change) > 0) {
                valClass = "valPos";
            }
            else {
                valClass = "valNeg";
            }
            rowHtml = '<tr>';
            rowHtml += '<td class="col1"><span class="lineColor" style="background-color: ' 
                + color + '"></span><a href="' + obj.url + '">' + obj.name + '</a></td>';
            rowHtml += '<td class="col2">' + obj.quote + '</td>';
            rowHtml += '<td class="col3 ' +  valClass + '">'+ obj.change + '</td>';
            rowHtml += '<td class="col4 ' +  valClass + '">'+ obj.change_percent + '</td>';
            rowHtml += '<td class="col5">'+ obj.date + '</td>';
            rowHtml += '</tr>';
            rowHtml += "\n";
            dataHtml += rowHtml;
        }
        $("#streamData").html(dataHtml);
    };

    function hideDataTable() {
        $("#streamHeadRow").css("display", "none");
        $("#streamData").html("");
    }

    function showDropdowns(data) {
        if(data.objects.length == 0) {
            hideDropdowns();
        }
        else if(data.objects.length == 1) {
            $('#singleChartDropdowns').show();
            $('#singleChartDropdowns .allCharts a').attr("href", 
                baseURL.replace('__calc_name__', currentMetric));
        }
        else if(data.objects.length >= 1) {
            $('#multiChartDropdowns').show();
            $('#multiChartDropdowns .allCharts a').attr("href", 
                baseURL.replace('__calc_name__', currentMetric));
        }
    };
    
    function hideDropdowns() {
        $('#singleChartDropdowns').hide();
        $('#singleChartDropdown').html('Revenue Growth');
        $('#singleChartDropdown2').html('Second Metric');
        $('#singleChartDropdown2').addClass("greyed");

        $('#multiChartDropdowns').hide();
        $('#multiChartDropdown').html('Revenue Growth');
    };

    function chartData(data) {
        if(data.objects.length > 1) {
            dateFormat = "normalizedQuarter";
        }
        else {
            dateFormat = "month";
        }
        
        YCharts.deleteChart("streamChart");
        YCharts.latestDates = data.latest_dates_js
        YCharts.addChart("streamChart", {
            clickURL: baseURL.replace('__calc_name__', currentMetric),
            dateFormat: "month",
            maxTicks: 6,
            lineWidth: 2,
            pointRadius: 1,
            shadowSize: 3
        });
        for(i in data.main_data) {
            YCharts.addData("streamChart", data.main_data[i]);
        }
        for(i in data.comp_data) {
            YCharts.addCompData("streamChart", data.comp_data[i]);
        }
        YCharts.chart("streamChart");
        return false;
    };
    
    function truncateString(str, length) {
        if(str.length > length) {
            str = str.slice(0, length) + '...';
        }
        return str;
    }
    
    $("#streamSource").change();
});