﻿var CHART_ID_PREFIX = "chart";
var TIMEZONE_OFFSET_ATTRIBUTE = "offset";
var LAST_UPDATE_ATTRIBUTE = "lastUpdate";
var UPDATE_INTERVALS = 20000; //chart update intervals in milliseconds;

Tick = function(tickTime, tickValue) {
    this.time = tickTime;
    this.value = tickValue;
}


function intializeGraph(optionId, chartCnt) {

    //debugger;
    var flashvars = {};
    var params = {wmode:'transparent'};
    var attributes = {};
    if (chartCnt.attr("id").length == 0) chartCnt.attr("id", $.uuid());
    attributes.id = CHART_ID_PREFIX + optionId;
    attributes.name = CHART_ID_PREFIX + optionId;
    swfobject.embedSWF("swf/EZTrader_chart.swf", chartCnt.attr("id"), "315", "170", "9.0.0", false, flashvars, params, attributes);

}

function addStrikeToChart(innerOptionPanel,optionid,strike) {

    var chart = innerOptionPanel.find("#" + CHART_ID_PREFIX + optionid);
    if (chart.length > 0) {
        chart = chart.get(0);
        strike.time = parseInt(strike.time) + (new Date().getTimezoneOffset() * 60000);
        chart.addStrike(strike);
    }

}

function UpdateChart(optionid, innerOptionPanel, currentPrice) {

   
    var chart = innerOptionPanel.find("#" + CHART_ID_PREFIX + optionid);
    if (chart.length > 0) {
        var investmentSpan = GetInvestmentSpan(optionPanel);
        if(investmentSpan.css("display") != 'none')
        {
            var chartWrapper = chart.parent();
            var chartOffset = chartWrapper.attr(TIMEZONE_OFFSET_ATTRIBUTE);
            var lastUpdate = parseInt(chartWrapper.attr(LAST_UPDATE_ATTRIBUTE));
            var date = new Date();
            var updateTimediff = date.getTime() - lastUpdate;
            if (updateTimediff > UPDATE_INTERVALS) {
                var offset = parseInt(chartOffset) * 60000;
                var tickTime = date.getTime() + offset;  //+ ((parseInt(chartOffset) + date.getTimezoneOffset()) * 60 * 1000);
                chart = chart.get(0);
                chart.addQuote(new Tick(tickTime, currentPrice));
                chartWrapper.attr(LAST_UPDATE_ATTRIBUTE, new Date().getTime());
            }
        }
    }
}
function onComponentReady(id) {


    var chartJQObject = $("#" + id);
    var chart = chartJQObject.get(0);
    var chartWrapper = chartJQObject.parent();
    var optionId = parseInt(id.substr(5));
    var chartWrapperParent = chartJQObject.parent().parent();
    chart.configure({
        isLoggedIn: loggedIn,
        chartLineColor: 0x93BDEF,
        chartFillStartColor: 0x93BDEF,
        chartFillEndColor: 0x93BDEF,
        dotColor: 0x93BDEF,
        dotRadius: 5,
        expirationMarkerColor: 0x93BDEF,
        expirationMarkerThickness: 2,
        notLoggedInMessage: '',
        loadingMessage: MultiLang.ChartLoading,
        messageFontSize: 12,
        messageFontColor: 0xFF0000,
        chartBkgColor: 0xffffff,
        chartBkgAlpha: 0.7,
        bkgColor: 0xEFF2FA,
        bkgAlpha: 0.2,
        inMoneyMessage: "In the money",
        outMoneyMessage: "Out of the money"
    });

    if (loggedIn) {
        
        TradingService.GetChartData(optionId, function(result) {

            //        var jsonString = "[";
            //        for (i = 0; i < result.Ticks.length; i++) {
            //            jsonString += "{";
            //            jsonString += "time:" + result.Ticks[i].time.getTime() + ",value:" + result.Ticks[i].value
            //            jsonString += "}";
            //            if (i < result.Ticks.length - 1) jsonString += ",";
            //        }
            //        jsonString += "]";
            //        console.log("%s",jsonString);
      
            var last = new Array();
            last.push(result.Ticks[result.Ticks.length - 1]);
            //FormatTimes(result, result.TimeZoneOffset);
            chartWrapperParent.find("#chartNote").show();
            chartWrapper.attr(TIMEZONE_OFFSET_ATTRIBUTE, result.TimeZoneOffset);
            chartWrapper.attr(LAST_UPDATE_ATTRIBUTE, new Date().getTime());
            chart.init({
                timezoneOffset: (new Date().getTimezoneOffset() /* * 2 + result.TimeZoneOffset*/) * 60000,
                currentExpirationTime: result.ExpirationTime,
                currentNoMoreBidsTime: result.NoMoreBidsTime,
                quotes: result.Ticks,
                strikeValues: result.Strikes
            });
        })
    }
    else {
        chartWrapperParent.find("#chartLogin").show();
    }
}
function FormatTimes(result,chartOffSet) {

    var offset = 0;  (new Date().getTimezoneOffset()) * 60 * 1000;
    result.ExpirationTime = result.ExpirationTime.getTime() + offset;
    result.NoMoreBidsTime = result.NoMoreBidsTime.getTime() + offset;
    for (i = 0; i < result.Ticks.length; i++) {

        result.Ticks[i].time = result.Ticks[i].time.getTime() + offset;
        
    }
    for (i = 0; i < result.Strikes.length; i++) {
        result.Strikes[i].time = result.Strikes[i].time.getTime() + offset;
    }
    

}