/*
 * Stat module
 * Singleton
 */
 
var CIT = {};

/**
 * Convert money value to string
 *
 * @param value
 * @param zeroCent {Boolean} trim zero cents
 * @param groupDigits {Boolean} add space between group of digits
 */
(function () {
    var zeroCentPattern = /^\d+\.00$/;
    var groupDigitsPattern = /(\d)((\d\d\d)+\b)/g;

    CIT.formatMoney = function (value, zeroCent, groupDigits) {

        var neg = value < 0;

        value = Math.abs(value).toFixed(2);
        if (zeroCent) {
            if (zeroCentPattern.test(value)) {
                value = value.substr(0, value.length - 3);
            }
        }
        if (groupDigits) {
            while (groupDigitsPattern.test(value)) {
                value = value.replace(groupDigitsPattern, '$1&nbsp;$2');
            }
        }
        return (neg ? '-&nbsp;' : '') + value;
    };

    CIT.monthNames = [
        'Январь',
        'Февраль',
        'Март',
        'Апрель',
        'Май',
        'Июнь',
        'Июль',
        'Август',
        'Сентябрь',
        'Октябрь',
        'Ноябрь',
        'Декабрь'
    ];

    CIT.shortMonthNames = [
        'янв',
        'фев',
        'мар',
        'апр',
        'май',
        'июн',
        'июл',
        'авг',
        'сен',
        'окт',
        'ноя',
        'дек'
    ];

})();


(function () {

    var statDataDailyLink = '/js/stat_data_daily.js';
    var statDataMonthlyLink = '/js/stat_data_monthly.js';

    CIT.Stat = function(target) {

        var root = target;
        var data;

        var addZero = function (value) {
            return (value < 10 ? '0' : '') + value;
        }

        var getYearAgoDate = function () {
            var now = new Date();
            return new Date(now.getFullYear() - 1, now.getMonth() - 1, now.getDate());
        }

        var getMonthAgoDate = function () {
            var now = new Date();
            return new Date(now.getFullYear(), now.getMonth() - 1, now.getDate());
        }

        var filterData = function (data, earliestDate) {
            var result = [];
            for (var i = 0; i < data.length; i++) {
                var date = new Date(data[i].date);
                if (date.getTime() < earliestDate.getTime())
                    continue;
                result.push(data[i]);
            }
            return result;
        }

        /**
         * 1 - весь период
         * 2 - последний год
         * 3 - последний месяц
         */
        this.create = function (type) {
            var link = (type === 3 ? statDataDailyLink : statDataMonthlyLink) + "?random="+Math.ceil(1000000000 * Math.random()); 
            $.getJSON( link,
                    function(json) {
                        $(root).empty();

                        var data;
                        var datetype = json.datetype;

                        if (type === 2)
                            data = filterData(json.data, getYearAgoDate());
                        else if (type === 3)
                            data = filterData(json.data, getMonthAgoDate());
                        else
                            data = json.data;

                        if (data.length == 0) {
                            $(root).html('<p style="margin-top:20px;font-size:12px;">Нет данных за выбранный период</p>');
                            return;
                        }

                        var arr = [];
			


                        arr.push('<div class="plot" style="margin:20px 0px;width:100%;height:300px; font-size:13px;"></div>');
arr.push('<div style="text-align:justify;">График доходности построен на основе статистики по публичному арбитражному счету (реальный счет, сделки по которому, с согласия инвестора, доступны для публичного анализа). Подробную статистику по публичному счету можно скачать по ссылкам в правом столбце страницы. Ниже дана краткая таблица доходности, на основе которой построен график. Ниже таблицы приведены краткие пояснения по статистики.</div>');
                        arr.push('<table cellpadding="0" cellspacing="0" width="100%" height="100%"><tr><td align="center"><table id="tstat" cellspacing="0" style="font-size:13px; text-align:center; width:600px;">',
                                '<tr>',
                                    '<th width="12%" id="sdate" style="text-align:center;">Месяц</th>',
                                    '<th width="17%" id="sprofp" style="text-align:center;">Прибыль за месяц</th>',
                                    '<th width="17%" id="s4" style="text-align:center;">Нарастающая прибыль по счету с начала года</th>',
                                    '<th width="17%" id="s5" style="text-align:center;">Прибыль инвестора с начала года</th>',
                                    '<th width="17%" id="s6" style="text-align:center;">Процент вознаграждения с начала года</th>',						
                                '</tr>');

                        for (var i = 0; i < (data.length-1); i++) {
                            var date = new Date(data[i].date);
                            var datestr;
                            if (datetype == 'day')
                                datestr = addZero(date.getDate()) + '.' + addZero(date.getMonth()+1) + '.' + addZero(date.getYear() % 100);
                            else
                                datestr = CIT.monthNames[date.getMonth()] + '&nbsp;' + date.getFullYear();
                                
                            var tr = '<tr>';
                            if(i == 0) {tr = '<tr class="row1">'};                            
                                
                            if(date.getMonth()==11)
							arr.push(tr,
                                        '<td class="center black"><b>', datestr, '</b></td>',
                                        '<td class="blue"><b>', CIT.formatMoney(data[i].interestperc, true, true), '%</b></td>',
										'<td class="green"><b>', CIT.formatMoney(data[i].yearprofit, true, true), '%</b></td>',
										'<td class="green2"><b>', CIT.formatMoney(data[i].investprofit, true, true), '%</b></td>',
										'<td class="purple"><b>', CIT.formatMoney(data[i].cit, true, true), '%</b></td>',
                                    '</tr>');
							else
							 arr.push(tr,
                                        '<td class="center black">', datestr, '</td>',
                                        '<td class="blue">', CIT.formatMoney(data[i].interestperc, true, true), '%</td>',
										'<td class="green">', CIT.formatMoney(data[i].yearprofit, true, true), '%</td>',
										'<td class="green2">', CIT.formatMoney(data[i].investprofit, true, true), '%</td>',
										'<td class="purple">', CIT.formatMoney(data[i].cit, true, true), '%</td>',
                                    '</tr>');
                        }

                        arr.push('</table></td></tr></table>')

                        $(root).html(arr.join(''));

                        var plotdata = [ { data: [], lines: { show: true, fill: true }, color: "#0b4b8f", points: {show: true} } , { data: [], bars: { show: true }, xaxis: 2, yaxis: 2} ];
                        //var plotdata = [ { data: [], lines: { show: true }, color: "#0b4b8f" }, { data: [], bars: { show: true }, yaxis: 2 }  ];
                        //var plotdata = [ { data: [], bars: { show: true }, color: "#0b4b8f" }  ];

                        var accumulator = 0;
                        var min = 0;
                        for (var i = 0; i < data.length; i++) {
                            plotdata[0].data.push([ new Date(data[i].date).getTime(), accumulator ]);
                            min = Math.min(min, accumulator);
                            accumulator += data[i].interestperc;
                            //plotdata[0].data.push([ new Date(data[i].date).getTime(), data[i].volume ]);
                            /*plotdata[1].data.push([ new Date(data[i].date).getTime(), data[i].volume ]);*/
                        }

                        $($.plot($('.plot', root), plotdata,
                                {                                	
                                    xaxis: { mode: "time",
											ticks: 18,
                                             tickFormatter: function formatter(val, axis) {
                                                 var date = new Date(val);
                                                 if (datetype == 'day')
                                                    return date.getDate() + '&nbsp;' + CIT.shortMonthNames[date.getMonth()];
                                                 else
                                                   // return CIT.shortMonthNames[date.getMonth()] + '&nbsp;' + addZero(date.getYear() % 100);
												   if (date.getMonth()==0)
												   	//return  addZero(date.getYear() % 100);
													return  date.getFullYear();
													else
													return CIT.shortMonthNames[date.getMonth()] ; 
                                            } },                                    
                                    yaxis: { ticks: 8, tickFormatter: function (v, axis) { return v.toFixed(0) +"%" }, min: min },
					//                yaxis: { tickFormatter: function (v, axis) { return v.toFixed(2) +"%" }, min: min },
                                    grid: { borderWidth: 1, backgroundColor: "#f1f1f1"},
                                    shadowSize: 8 }));
                    });

        };

    };
})();
