(function () {
    function A(option) {
        var t = this;
        t.div = null;
        t.map = null;
        t.data = [];
        t.d3Layer = null;
        t._svg = null;
        t._tempData=null;
        t._stepPointCount = 4;//每一步所走过的点
        t._stepPointCountOffset = 5;//每一步所走过的点范围
        t._minStepLength = 5;//每一段的长度
        t._maxStepLength = 15;
        t._stepStatus = {};
        t._stepPointMargin =3;
        t._stepNum =3;//有多少个小段
        t._stepOffset = 30; //点的偏移量
        t._maxSpeed = 500;
        t._minSpeed = 200;
        t._startOpacity = 0.1;
        t._endOpacity = 0.9;
        t._pointCountMultiple = 2;
        t._mindelay = 30;
        t._maxdelay = 300;
        t._startColor=187;
        t._endColor=94;
        t._isStop = false;
        t._isMove = false;
        t._isAddData = false;
        t.__isStop = null;
        for (var key in option) {
            t[key] = option[key];
        }
        t.createSVG();
        t.d3Layer.events.on({moveend: function (evt) {
            //console.log("moveend");
            if(t._isMove){
                t._isMove = false;
                //t._isStop = t.__isStop;
                //t.__isStop = null;
            }
            t._refresh(evt);
        }});
//        t.d3Layer.events.on({movestart: function (evt) {
//            console.log("movestart");
//            t._isStop = true;
//        }});
        t.d3Layer.events.on({move: function (evt) {
            //console.log("move");
            if(!t._isMove){
                //t.__isStop = t._isStop;
                //t._isStop = true;
                t._isMove = true;
                //t._svg.selectAll("path").style("display","none");
            }
            t._svg.selectAll("path").style("display","none");
        }});
    }
    var P = A.prototype;
    P.createSVG = function () {
        var t = this;
        var size = t.map.getSize();
        t._svg = d3.select(t.div)
            .append("svg")
            .attr("width", size.w)
            .attr("height", size.h);
        //d3.select(t.div).html("");
    }
    P.addData = function(data){
        var t = this;
        if(t._isAddData){
           return;
        }
        else{
            t._isAddData = true;
        }
        t._isStop = false;
        t.data = data;
        var defs = d3.select("svg")
            .append("defs");
        var linearGradient = defs.append("linearGradient").attr({
            id:"orange_red",
            x1:"0%",
            y1:"0%",
            x2:"100%",
            y2:"0%"
        });
        linearGradient.append("stop").attr({
            offset:"0%"
        })
        .style({
            "stop-color":"rgb("+t._startColor+","+t._startColor+","+t._startColor+")",
            "stop-opacity":1
        });
        linearGradient.append("stop").attr({
            offset:"100%"
        })
            .style({
                "stop-color":"rgb("+t._endColor+","+t._endColor+","+t._endColor+")",
                "stop-opacity":1
            });
        var tempData = t._tempData = t.getPosition(data);
        var bindData = [];
        for(var i=0;i=length){
                start = length;
            }
            if(start-end<=stepLength){
            }
            else{
                end = end+pointCount;
            }
            var newStart = start;
            var offsetX =statusi.offsetX;
            var offsetY = statusi.offsetY;
            pointStrArray.push("M"+offset(line[end],offsetX,offsetY).join(" "));
            if(stepLength>=4){
                for(var j=end+1;j=length){
                        break;
                    }
                    var stepLength = t._minStepLength+Math.round(Math.random()*(t._maxStepLength- t._minStepLength));
                    if(start+stepLength>=length){
                        stepLength = length-start;
                    }
                    for(var j=0;j=length){
                    obj
                        .transition()
                        .duration(500)
                        .style('opacity', t._startOpacity)
                        .each('end',function(){
                            d3.select(this).call(function(selection){
                                t.lineAnimate(selection);
                            });
                        });
                }
                else{
                    obj.call(function(selection){
                        t.step(selection);
                    });
                }
            });
    }
    P.getPosition = function(datas){
        var tempDatas = [],t = this;
        if(datas){
            for(var i=0;i