$(function(){
    $('#uncheckAll').bind('click',function(){
        $('#selectParams input:checkbox').attr('checked','');
    });
    $('#selectParams input:checkbox').attr('checked','');
    $('#V').attr('checked','true');
    $('#parking_limit,#reload_limit').focusout(function(){
        var msgInt=15;
        if($(this).attr('id')=='parking_limit'){
            msgInt=60;
        }
        if(Number($(this).val()) && Number($(this).val()) > (msgInt-1))return false;
        showAlert('Вводимое значение должно быть числом большим '+msgInt);
        $(this).val(msgInt);
        return false;
    })
})

var trackPlot,lastName = new String(),lastId = new String(), isGraphOpen = false;
function MoveHandler(ev, gridpos, datapos, neighbor, plot){
    for (var i = 0;i < plot.data[0].length;i++){
        if(plot.data[0][i][0]>=datapos.xaxis){
            createArrow(0,yalines.activeLine.pointsData[i],yamap,i);
            return;
        }
    }
}
function ClickHandler(ev, gridpos, datapos, neighbor, plot){
    for (var i = 0;i < plot.data[0].length;i++){
        if(plot.data[0][i][0]>=datapos.xaxis){
            createArrow(0,yalines.activeLine.pointsData[i],yamap,i);
            yamap.setCenter(yalines.activePoint.getPoint(1));
            return;
        }
    }
}
$.jqplot.eventListenerHooks.push(['jqplotMouseMove',MoveHandler]);
$.jqplot.eventListenerHooks.push(['jqplotMouseEnter',MoveHandler]);
$.jqplot.eventListenerHooks.push(['jqplotMouseLeave',MoveHandler]);
$.jqplot.eventListenerHooks.push(['jqplotClick',ClickHandler]);
function convertAnalogData(value,convTable){
    if(convTable.length == 1){
        return value;
    }
    var maxValue = 0;
    var needValue = 0;
    var needKey = 0;
    var maxKey = 0;
    for(var i = 0; i < convTable.length;i++){
        if(value <= convTable[i][1]){
            needValue = convTable[i-1][2];
            needKey = convTable[i-1][1];
            maxValue = convTable[i][2];
            maxKey = convTable[i][1];
            break;
        }
    }
    return ((maxValue-needValue)/(maxKey-needKey))*(value-needKey)+maxKey;
}
function drawGraph(id,name,toClose){
    if(toClose){
        isGraphOpen = false;
        $('#graphicsWindow').hide('slow',function(){
            $('#leftcolumn, #maincolumn').css('height',$('#leftcolumn').innerHeight()-$('#graphicsWindow').innerHeight());
            $('#YMapsID').css('height',($(document.body).innerHeight() - 100));
            $('#YMapsID .trackInfo').css('top',$('#YMapsID .trackInfo').parent().innerHeight() - 155);
            $('#leftcolumn .bDiv').css('height',($(document.body).innerHeight() - 184));
            $('.graph').unbind('click');
            $('.graph').button('option','label','Показать график');
            $('.graph').bind('click',function(){
                drawGraph(lastId,lastName);
            });
            yamap.redraw();
        });
        $('#selectParams input:checkbox').attr('checked','');
        $('#V').attr('checked','true');
        return;
    }
    
    if(yalines.activeLine){
        
        $('#YMapsID').css('height',($(document.body).innerHeight() - 100 - $('#graphicsWindow').innerHeight()));
        $('#leftcolumn, #maincolumn').css('height',($('#YMapsID').innerHeight()+10)+'px');
        $('#leftcolumn .bDiv').css('height',($(document.body).innerHeight() - 184 - $('#graphicsWindow').innerHeight()));
        $('#graphicsWindow').css('width',$(document.body).innerWidth() - 37);
        $('#graphics').css('width',$(document.body).innerWidth() - 430);
        if($('#selectParams input:checkbox:checked').length > 9){
            showAlert('Проевышено допустимое количество графиков');
            return;
        }
        $('#graphOpts #show').unbind('click');
        lastName=name;
        lastId=id;
        $('#graphOpts #show').bind('click',function(){
            drawGraph(lastId,lastName);
        });
        isGraphOpen = true;
        if($('#dialog').dialog('isOpen')){
            $('#dialog').dialog('close');
        }
        $('#graphicsWindow').show('slow',function(){
            $('#leftcolumn, #maincolumn').css('height',$('#leftcolumn').innerHeight()-$('#graphicsWindow').innerHeight());
            $('#YMapsID').css('height',($(document.body).innerHeight() - 100 - $('#graphicsWindow').innerHeight()));
            $('#leftcolumn .bDiv').css('height',($(document.body).innerHeight() - 184 - $('#graphicsWindow').innerHeight()));
            $('#YMapsID .trackInfo').css('top',$('#YMapsID .trackInfo').parent().innerHeight() - 155);
            $('#graphicsWindow #ui-dialog-title-dialog').html('График объекта: '+name+' [S/N:'+id+']');
            $('.graph').unbind('click');
            $('.graph').button('option','label','Скрыть график');
            $('.graph').bind('click',function(){drawGraph('','',true);});
            $($('#trackerGrid').parent()).attr('height','90px');
        });
        yamap.redraw();
        if(!yalines.activeLine.pointsData.graphData){
            $.ajax({
                url:'tracker/getPointsData',
                type:'POST',
                dataType:'json',
                async:false,
                data:[{name:'ID',value:id},
                    {name:'from',value:$.cookie('from'+id)},
                    {name:'to',value:$.cookie('to'+id)}],
                success:function(data){
                    yalines.activeLine.pointsData.graphData = data;
                }
            });
        }
        $.ajax({
            url:'tracker/getAnalogConversation',
            type:'POST',
            dataType:'json',
            async:false,
            data:[{
                name:'tracker_id',
                value:id
            }],
            success:function(data){
                yalines.activeLine.pointsData.conversation = {};
                for(var i = 0; i < data.length; i++){
                    if(!yalines.activeLine.pointsData.conversation['ai'+data[i][0]])
                        yalines.activeLine.pointsData.conversation['ai'+data[i][0]]=[];
                    yalines.activeLine.pointsData.conversation['ai'+data[i][0]].push([data[i][1],data[i][2]]);
                }
            }
        })
        var heading = new Array();
        var hdop = new Array();
        var altitude = new Array();
        var V = new Array();
        var gps = new Array();
        var gsm = new Array();
        var ai0 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai0'])ai0['converstion'] = yalines.activeLine.pointsData.conversation['ai0'];
        var ai1 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai1'])ai1['converstion'] = yalines.activeLine.pointsData.conversation['ai1'];
        var ai2 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai2'])ai2['converstion'] = yalines.activeLine.pointsData.conversation['ai2'];
        var ai3 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai3'])ai3['converstion'] = yalines.activeLine.pointsData.conversation['ai3'];
        var ai12 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai12'])ai12['converstion'] = yalines.activeLine.pointsData.conversation['ai12'];
        var ai13 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai13'])ai13['converstion'] = yalines.activeLine.pointsData.conversation['ai13'];
        var ai14 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai14'])ai14['converstion'] = yalines.activeLine.pointsData.conversation['ai14'];
        var ai15 = new Array();
        if(yalines.activeLine.pointsData.conversation['ai15'])ai15['converstion'] = yalines.activeLine.pointsData.conversation['ai15'];
        var c0 = new Array();
        var c1 = new Array();
        var c2 = new Array();
        var do1 = new Array();
        var do2 = new Array();
        var do3 = new Array();
        var do4 = new Array();
        var do5 = new Array();
        var do6 = new Array();
        var do7 = new Array();
        var di1 = new Array();
        var di2 = new Array();
        var di3 = new Array();
        var di4 = new Array();
        var di5 = new Array();
        var di6 = new Array();
        var di7 = new Array();
        var graphs = new Array(new Array,new Array);
        for(var i = 0; i < yalines.activeLine.pointsData.graphData.length;i++){
            heading.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][2])));
            hdop.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][6])));
            altitude.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][3])));
            V.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][1])));
            gps.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][4])));
            if(yalines.activeLine.pointsData.graphData[i][5] < 99)gsm.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][5])));

            if(ai0['conversation']){
                ai0.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][9],ai0['conversation'])
                ));
            }else{
                ai0.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][9])/1000));
            }

            if(ai1['conversation']){
                ai1.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][10],ai1['conversation'])
                ));
            }else{
                ai1.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][10])/1000));
            }

            if(ai2['conversation']){
                ai2.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][11],ai2['conversation'])
                ));
            }else{
                ai2.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][11])/1000));
            }

            if(ai3['conversation']){
                ai3.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][12],ai3['conversation'])
                ));
            }else{
                ai3.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][12])/1000));
            }

            if(ai12['conversation']){
                ai12.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][13],ai12['conversation'])
                ));
            }else{
                ai12.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][13])/1000));
            }

            if(ai13['conversation']){
                ai13.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][14],ai13['conversation'])
                ));
            }else{
                ai13.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][14])/1000));
            }

            if(ai14['conversation']){
                ai14.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][15],ai14['conversation'])
                ));
            }else{
                ai14.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][15])/1000));
            }
            if(ai15['conversation']){
                ai15.push(new Array(
                    Number(yalines.activeLine.pointsData.graphData[i][0]),
                    convertAnalogData(yalines.activeLine.pointsData.graphData[i][16],ai15['conversation'])
                ));
            }else{
                ai15.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][16])/1000));
            }

            c0.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][17])));
            c1.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][18])));
            c2.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][19])));
            do1.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][8].charAt(0))));
            do2.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][8].charAt(1))));
            do3.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][8].charAt(2))));
            do4.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][8].charAt(3))));
            do5.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][8].charAt(4))));
            do6.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][8].charAt(5))));
            do7.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][8].charAt(6))));
            di1.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][7].charAt(0))));
            di2.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][7].charAt(1))));
            di3.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][7].charAt(2))));
            di4.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][7].charAt(3))));
            di5.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][7].charAt(4))));
            di6.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][7].charAt(5))));
            di7.push(new Array( Number(yalines.activeLine.pointsData.graphData[i][0]),Number(yalines.activeLine.pointsData.graphData[i][7].charAt(6))));
        }
        if($('#selectParams input:checkbox:checked').length == 0){
            showAlert('Выберите парамеиры, по которым строить график.');
            return;
        }
        var graphCount = 1;
        var axes = {
            xaxis:{
                rendererOptions:{
                    tickRenderer:$.jqplot.CanvasAxisTickRenderer
                },
                tickOptions: {
                    formatter:function(f,v){
                        var date = new Date(new Number(v)*1000);
                        var cut = String(date.getFullYear()).length+2;
                        if((date.getMonth()+1)>10){
                            cut=cut+3;
                        }else{
                            cut=cut+2;
                        }
                        if(date.getDate()>10){
                            cut=cut+3;
                        }else{
                            cut=cut+2;
                        }
                        return UTCDateToString(v).substring(0,(UTCDateToString(v).length-cut));
                    },
                    formatString: '%s',
                    angle:0
                }
            }
        };
        $.each($('#selectParams input:checkbox'), function(i,val){
            if(i>5)$('label[for="'+$(val).attr('id')+'"]').html($.settings[$(val).attr('id')] || $(val).attr('id'));
            if($(val).attr('checked')){
                var customYaxis = 'yaxis';
                if(graphCount > 1)customYaxis  = 'y'+graphCount+'axis';
                axes[customYaxis] = {
                    label:$('label[for='+$(val).attr('id')+']').html()
                }
                var series = {
                    label:$('label[for='+$(val).attr('id')+']').html(),
                    lineWidth:2,
                    showMarker:true,
                    shadow:false,
                    markerOptions:{
                        style:'circle',
                        size: 2
                    },
                    yaxis: customYaxis
                };
                if(/heading/.test($(val).attr('id'))){
                    axes[customYaxis].label = axes[customYaxis].label+' градус';
                }else if(/^ai/.test($(val).attr('id'))){
                    axes[customYaxis].label = axes[customYaxis].label+' B';
                    axes[customYaxis].formatString = '%.2f';
                }else if(/^hdop$/.test($(val).attr('id'))){
                    axes[customYaxis].label = axes[customYaxis].label+' м';
                }else if(/^altitude$/.test($(val).attr('id'))){
                    axes[customYaxis].label = axes[customYaxis].label+' м';
                }else if(/^gsm$/.test($(val).attr('id'))){
                    axes[customYaxis].label = axes[customYaxis].label+' Дб';
                }else if(/^V$/.test($(val).attr('id'))){
                    axes[customYaxis].label = axes[customYaxis].label+' км/ч';
                }
                graphs[0].push(eval($(val).attr('id')));
                graphs[1].push(series);
                ++graphCount;
            }
        });
        if($('#graphics').children()){
            $('#graphics').children().remove();
            delete trackPlot;
        }
        trackPlot = $.jqplot('graphics', graphs[0], {
            seriesDefaults:{
                neighborThreshold:0,
                showMarker: false
            },
            series:graphs[1],
            axes:axes,
            cursor:{
                showVerticalLine:true,
                followMouse: true,
                showHorizontalLine:true,
                showTooltipDataPosition:true,
                constrainZoomTo: 'x',
                showCursorLegend:true,
                useAxesFormatters: false,
                cursorLegendFormatString: '%s %n %.2f',
                zoom:true,
                showTooltip: false,
                intersectionThreshold:1,
                tooltipFormatString: '%s x:%s, y:%s'
            },
            highlighter: {
                show: true,
                showTooltip:false,
                sizeAdjust: 5
            },
            legend:{
                location:'nw',
                show: true
            },
            axesDefaults:{
                autoscale:true,
                labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
                fontSize:'18pt',
                tickOptions:{
                    fontSize:'10px'
                },
                useSeriesColor:true,
                labelOptions: {
                    enableFontSupport: true
                }
            },
            height:400,
            width:$('#graphics').innerWidth()-$('#graphOpts').innerWidth(),
            grid:{
                gridLineWidth:1.0,
                borderWidth:2.5,
                shadow:false
            }
        });
        
    }else{
        showAlert('Нет активной линии.');
    }
}
