/*****************************************************
 Copyright 2007-2011 Hikvision Digital Technology Co., Ltd.
 FileName: timebar
 Description: 时间条   不兼容IE浏览器
 Author: Chenxiangzhen
 Date: 2011.04.18
 *****************************************************/
/*************************************************
 Function:        bindAsEventListener
 Description:    绑定对象到函数
 Input:            object 对象, fun 函数
 Output:            无
 return:            关联后的函数
 *************************************************/
 var bindAsEventListener = function(object, fun) {
    var args = Array.prototype.slice.call(arguments).slice(2);
    return function(event) {
        return fun.apply(object, [event || window.event].concat(args));
    }
};
/*************************************************
 Function:        bind
 Description:    绑定对象到函数
 Input:            object 对象, fun 函数
 Output:            无
 return:            关联后的函数
 *************************************************/
var bind = function(object, fun) {
    return function() {
        return fun.apply(object, arguments);
    }
};
/*************************************************
 Function:        addEventHandler
 Description:    添加事件
 Input:            oTarget 目标对象, sEventType 事件, fnHandler 函数
 Output:            无
 return:            无
 *************************************************/
var addEventHandler = function(oTarget, sEventType, fnHandler) {
    oTarget["on" + sEventType] = fnHandler;
};

var removeEventHandler = function(oTarget, sEventType, fnHandler) {
    oTarget["on" + sEventType] = null;
};
/*************************************************
 Function:        getObjLeft
 Description:    获取对象相对网页的左上角坐标
 Input:            obj 对象
 Output:            无
 return:            坐标
 *************************************************/
function getObjLeft(obj) {
    var x = obj.offsetLeft;
    while (obj = obj.offsetParent) {
        x += obj.offsetLeft;
    }
    return x;
}

/*************************************************
 Function:        getObjTop
 Description:    获取对象相对网页的左上角坐标
 Input:            obj 对象
 Output:            无
 return:            坐标
 *************************************************/
function getObjTop(obj) {
    var y = obj.offsetTop;
    while (obj = obj.offsetParent) {
        y += obj.offsetTop;
    }
    return y;
}
/*************************************************
 * Copyright 2007-2011 Hikvision Digital Technology Co., Ltd.
 * Class ScaleInfo
 * @author chenxiangzhen
 * @created 2011-04-06
 * @version v1.0
 * @function 工具类，时间刻度信息
 *************************************************/
function ScaleInfo(x, y, iSeconds) {
    this.m_ix = x;
    this.m_iy = y;
    this.m_ixMin;
    this.m_ixMax;
    this.m_iHour = parseInt(iSeconds / 3600, 10);
    this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
    this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
    this.m_szTime = "";
    if (this.m_iHour < 10 && this.m_iMinute < 10) {
        this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
    } else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
        this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
    } else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
        this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
    } else {
        this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
    }
}
/*************************************************
 Function:        setPos
 Description:    设置刻度的位置
 Input:            x 横坐标, y 纵坐标
 Output:            无
 return:            无
 *************************************************/
ScaleInfo.prototype.setPos = function(x, y) {
        // this.x = x;
        if (x < this.m_ixMin) {
            x = this.m_ixMax - (this.m_ixMin - x);
        } else if (x > this.m_ixMax) {
            x = this.m_ixMin + (x - this.m_ixMax);
        }
        this.m_ix = x;
        this.m_iy = y;
    }
    /*************************************************
     Function:        setPosRange
     Description:    设置刻度显示的范围
     Input:            ixMin 最小横坐标, ixMax 最大横坐标
     Output:            无
     return:            无
     *************************************************/
ScaleInfo.prototype.setPosRange = function(ixMin, ixMax) {
        this.m_ixMin = ixMin;
        this.m_ixMax = ixMax;
    }
    /*************************************************
     Function:        isInRange
     Description:    是否在范围内
     Input:            ixMin 最小横坐标, ixMax 最大横坐标
     Output:            无
     return:            bool
     *************************************************/
ScaleInfo.prototype.isInRange = function(iMin, iMax) {
        if (this.m_ix >= iMin && this.m_ix <= iMax) {
            return true;
        } else {
            return false;
        }
    }
    /*************************************************
     Function:        update
     Description:    更新刻度时间
     Input:            iSeconds
     Output:            无
     return:            无
     *************************************************/
ScaleInfo.prototype.update = function(iSeconds) {
        this.m_iHour = parseInt(iSeconds / 3600, 10);
        this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
        this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
        if (this.m_iHour < 10 && this.m_iMinute < 10) {
            this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
        } else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
            this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
        } else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
            this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
        } else {
            this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
        }
    }
    /*************************************************
     * Copyright 2007-2011 Hikvision Digital Technology Co., Ltd.
     * Class Time
     * @author chenxiangzhen
     * @created 2011-04-06
     * @version v1.0
     * @function 工具类，时间相关信息
     *************************************************/
function Time() {
    var initDate = new Date();
    var initYear = initDate.getFullYear();
    var initMonth = initDate.getMonth();
    var initDay = initDate.getDate();
    var tCurrentTime = new Date(initYear, initMonth, initDay, 0, 0, 0);
    this.m_iYear = initYear;
    this.m_iMonth = initMonth;
    this.m_iDay = initDay;
    this.m_iHour = tCurrentTime.getHours();
    this.m_iMinute = tCurrentTime.getMinutes();
    this.m_iSecond = tCurrentTime.getSeconds();
    this.m_iMilliseconds = tCurrentTime.getTime(); //返回 1970 年 1 月 1 日至今的毫秒数
}

/*************************************************
 Function:        setTimeByMis
 Description:    设置时间
 Input:            iMilliseconds: 1970 年 1 月 1 日至今的毫秒数
 Output:            无
 return:            无
 *************************************************/
Time.prototype.setTimeByMis = function(iMilliseconds) {
    var tSetTime = new Date(iMilliseconds);
    this.m_iYear = tSetTime.getFullYear();
    this.m_iMonth = tSetTime.getMonth() + 1;
    this.m_iDay = tSetTime.getDate();
    this.m_iHour = tSetTime.getHours();
    this.m_iMinute = tSetTime.getMinutes();
    this.m_iSecond = tSetTime.getSeconds();
    this.m_iMilliseconds = iMilliseconds;
};

/*************************************************
 Function:        getStringTime
 Description:    获取时间字符串
 Input:            无
 Output:            无
 return:            string  yyyy-MM-dd HH:mm:ss
 *************************************************/
Time.prototype.getStringTime = function() {
        var szYear = "" + this.m_iYear;

        var szMonth;
        if (this.m_iMonth < 10) {
            szMonth = "0" + this.m_iMonth;
        } else {
            szMonth = "" + this.m_iMonth;
        }

        var szDay;
        if (this.m_iDay < 10) {
            szDay = "0" + this.m_iDay;
        } else {
            szDay = "" + this.m_iDay;
        }

        var szHour;
        if (this.m_iHour < 10) {
            szHour = "0" + this.m_iHour;
        } else {
            szHour = "" + this.m_iHour;
        }

        var szMinute;
        if (this.m_iMinute < 10) {
            szMinute = "0" + this.m_iMinute;
        } else {
            szMinute = "" + this.m_iMinute;
        }

        var szSecond;
        if (this.m_iSecond < 10) {
            szSecond = "0" + this.m_iSecond;
        } else {
            szSecond = "" + this.m_iSecond;
        }
        var szCurrentTime = szYear + "-" + szMonth + "-" + szDay + " " + szHour + ":" + szMinute + ":" + szSecond;
        return szCurrentTime;
    }
    /*************************************************
     Function:        parseTime
     Description:    通过时间字符串设置时间
     Input:            szTime 时间 yyyy-MM-dd HH:mm:ss
     Output:            无
     return:            无
     *************************************************/
Time.prototype.parseTime = function(szTime) {
        var aDate = szTime.split(' ')[0].split('-');
        var aTime = szTime.split(' ')[1].split(':');

        this.m_iYear = parseInt(aDate[0], 10);
        this.m_iMonth = parseInt(aDate[1], 10);
        this.m_iDay = parseInt(aDate[2], 10);

        this.m_iHour = parseInt(aTime[0], 10);
        this.m_iMinute = parseInt(aTime[1], 10);
        this.m_iSecond = parseInt(aTime[2], 10);

        var tTime = new Date();
        tTime.setFullYear(this.m_iYear);
        tTime.setMonth(this.m_iMonth - 1, this.m_iDay);

        tTime.setHours(this.m_iHour);
        tTime.setMinutes(this.m_iMinute);
        tTime.setSeconds(this.m_iSecond);

        this.m_iMilliseconds = tTime.getTime();
    }
    /*************************************************
     * Copyright 2007-2011 Hikvision Digital Technology Co., Ltd.
     * Class FileInfo
     * @author chenxiangzhen
     * @created 2011-04-06
     * @version v1.0
     * @function 工具类，录像文件相关信息
     *************************************************/
function FileInfo(iX, iY, iWidth, iHeight, iType, cColor, tStartTime, tStopTime) {
    this.m_iX = iX;
    this.m_ixMin = 0;
    this.m_ixMax = 0;
    this.m_iY = iY;
    this.m_iWidth = iWidth;
    this.m_iHeight = iHeight;
    this.m_cColor = cColor;
    this.m_iType = iType;
    this.m_tStartTime = tStartTime;
    this.m_tStopTime = tStopTime;
}
/*************************************************
 Function:        isInRange
 Description:    是否在范围之内
 Input:            left 左起始点 right 右终点
 Output:            无
 return:            无
 *************************************************/
FileInfo.prototype.isInRange = function(left, right) {
        if ((this.m_iX + this.m_iWidth) <= left || this.m_iX >= right) {
            return false;
        } else {
            return true;
        }
    }
    /*************************************************
     Function:        setPos
     Description:    设置位置内
     Input:            iX iY左起始点坐标 iWidth 宽度 iHeight高度
     Output:            无
     return:            无
     *************************************************/
FileInfo.prototype.setPos = function(iX, iY, iWidth, iHeight) {
        this.m_iX = iX;
        this.m_iWidth = iWidth;
        this.m_iY = iY;
        this.m_iHeight = iHeight;
    }
    /*************************************************
     Function:        setPosRange
     Description:    设置范围
     Input:            ixMin, ixMax
     Output:            无
     return:            无
     *************************************************/
FileInfo.prototype.setPosRange = function(ixMin, ixMax) {
        this.m_ixMin = ixMin;
        this.m_ixMax = ixMax;
    }
    /*************************************************
     Function:        draw
     Description:    画文件信息
     Input:            g 设备资源
     Output:            无
     return:            无
     *************************************************/
FileInfo.prototype.draw = function(g) {
        if (this.isInRange(this.m_ixMin, this.m_ixMax)) {
            var colorOld = g.fillStyle;
            g.fillStyle = this.m_cColor;
            if ((this.m_iX >= this.m_ixMin) && (this.m_iX + this.m_iWidth) <= this.m_ixMax) {
                g.fillRect(this.m_iX, this.m_iY, this.m_iWidth, this.m_iHeight);
            } else if ((this.m_iX < this.m_ixMax) && ((this.m_iX + this.m_iWidth) > this.m_ixMax)) {
                g.fillRect(this.m_iX, this.m_iY, this.m_ixMax - this.m_iX, this.m_iHeight);
            } else {
                g.fillRect(this.m_ixMin, this.m_iY, (this.m_iX + this.m_iWidth) - this.m_ixMin, this.m_iHeight);
            }
            g.fillStyle = colorOld;
        }
    }
    /*************************************************
     * Copyright 2007-2011 Hikvision Digital Technology Co., Ltd.
     * Class TimeBar
     * @author chenxiangzhen
     * @created 2011-04-06
     * @version v1.0
     * @function 工具类，时间条
     *************************************************/
function TimeBar(canvas /*, iWidth, iHeight*/ ) {
    if (arguments.length >= 3) {
        canvas.width = arguments[1];
        canvas.height = arguments[2];
    } else {
        canvas.width = 300;
        canvas.height = 300;
    }
    this.m_canvas = canvas;
    this.m_ctx = canvas.getContext("2d");

    this.m_iMinFileWidth = 1; //文件的最小宽度

    this.backgroundColor = '#3B4150'; //时间条背景颜色
    this.partLineColor = '#7A7F8D'; //分割线颜色
    this.channelNameColor = 'rgb(150, 150, 150)'; //通道名称颜色
    this.timeScaleColor = '#7A7F8D'; //时间条刻度颜色
    this.middleLineColor = '#3A77FE'; //中轴线颜色
    this.middleLineTimeColor = 'rgb(255, 255, 255)'; //中轴时间颜色
    this.curLineTimeColor = 'rgb(255,0,0)';
    this.defaultFileColor = 'rgb(0, 255, 0)'; //默认录像类型颜色
    this.cmdFileColor = 'rgb(0, 255, 0)'; //命令触发录像颜色
    this.scheFileColor = 'rgb(137, 210, 245)'; //录像计划颜色  定时
    this.alarmFileColor = 'rgb(254,0,0)'; //报警录像颜色 报警  红色
    this.manualFileColor = 'rgb(247, 199, 5)'; //手动录像颜色 黄色 移动

    this.aiFileColor = 'rgb(148,0,211)'; //智能录像颜色  紫色

    this.m_fMidTimeFont = '14px Verdana'; //中线时间字体及大小
    this.m_fCurTimeFont = '12px Verdana'; //鼠标当前时间字体及大小
    this.m_fScaleFont = '10px Verdana'; //刻度字体及大小  sans-serif
    this.m_fChannelNameFont = '14px Verdana'; //通道名称字体

    canvas.style.backgroundColor = this.backgroundColor;

    this.m_szCurChannelName = ''; //当前通道名称
    this.m_fCellTime = parseFloat(2.0); //每个代表几个小时
    this.ScaleInfo = new Array();
    this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10); //总的刻度数量
    this.ScaleInfoDisNum = 12; //显示的刻度数量

    //初始化刻度
    for (var i = 0; i <= this.ScaleInfoNum; i++) {
        this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime)));
    }
    this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(this.ScaleInfoNum * 3600 * this.m_fCellTime)));
    this.m_iMaxWndNum = 16; //最大窗口数
    this.m_iSelWnd = 0; //选中的窗口号
    this.m_iSpanType = 6;

    this.FileInfoSet = new Array(this.m_iMaxWndNum); //文件信息集合
    //初始化文件信息集合
    for (i = 0; i < this.m_iMaxWndNum; i++) {
        this.FileInfoSet[i] = new Array();
    }
    this.m_iHeight = parseInt(canvas.height, 10);
    this.m_iWidth = parseInt(canvas.width, 10);
    this.m_iFileListStartPos = 0; // 文件列表起始位置
    this.m_iBlankHeight = 4; // 中间及底边空白宽度
    this.m_iTimeRectHeight = 40; //parseInt(this.m_iHeight * 4 / 7)  时间块的高度
    this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight * 2; //文件块的高度
    // this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2, 10);  //中轴线的位置
    this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos) / 2, 10);
    this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum); //每个刻度的宽度
    this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10); //每个像素的毫秒数

    this.m_tCurrentMidTime = new Time(); //时间轴起始时间 00:00:00
    // this.m_ctx.font = this.m_fMidTimeFont;
    // this.m_iTextWidth = this.m_ctx.measureText(this.m_tCurrentMidTime.getStringTime()).width;

    this.m_tMouseCurTime = new Time(); //当前鼠标点的时间

    this.m_ctx.font = this.m_fCurTimeFont;
    this.m_iCurTextWidth = this.m_ctx.measureText(this.m_tMouseCurTime.getStringTime()).width;

    this.m_iCanvasLeft = getObjLeft(this.m_canvas);
    this.m_iCanvasTop = getObjTop(this.m_canvas);

    //初始化时间刻度信息
    for (i = 0; i <= this.ScaleInfoNum; i++) {
        // 计算与中轴线的时间差（只计算时分秒）
        var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
        var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
        // 设置刻度位置范围
        this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum));
        this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
    }

    //注册消息响应
    this.m_ieventX = 0;
    this.m_iMousePosX = 0;
    this.m_iClickPosX = 0;
    this.m_tClickCurTime = 0;
    this.m_tClickPreTime = 0;

    this.m_bMOuseDown = false;
    this.m_bMouseOver = false;
    this.m_iMove = 0;
    this.m_iMiddleLineTime = 0;
    this.Start = function(oEvent) {
        this.m_ieventX = oEvent.clientX;
        this.m_iMiddleLineTime = this.m_tCurrentMidTime.m_iMilliseconds;
        this.m_bMOuseDown = true;
        addEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
        addEventHandler(document, 'mouseup', bind(this, this.Stop));
        //焦点丢失
        addEventHandler(window, "blur", bindAsEventListener(this, bindAsEventListener(this, this.Stop)));
        //阻止默认动作
        oEvent.preventDefault();

        removeEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
    };

    this.mouseUpCallbackFunc = function() {};
    this.Stop = function() {
        document.body.style.cursor = 'default';
        this.m_canvas.style.cursor = "url(../img/remoteplayback/H_point1.cur),pointer";
        this.m_bMOuseDown = false;
        this.mouseUpCallbackFunc();
        removeEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
        removeEventHandler(document, 'mouseup', bindAsEventListener(this, this.Stop));
        removeEventHandler(window, "blur", bindAsEventListener(this, this.Stop));

        addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
    };
    this.onMouseMoveIn = true;
    this.Move = function(oEvent) {
        this.m_iMove = oEvent.clientX - this.m_ieventX;
        if (this.m_bMOuseDown) {
            if (this.m_iSpanType != 6) {
                //清除选择
                window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
                var initDate;
                var newm_iMiddleLineTime = this.m_iMiddleLineTime - this.m_iMove * this.m_iCellMilliseconds;
                if (!SelDate) {
                    initDate = new Date();
                } else {
                    initDate = new Date(SelDate);
                }
                var initYear = initDate.getFullYear();
                var initMonth = initDate.getMonth();
                var initDay = initDate.getDate();

                var tsCurrentTime = new Date(initYear, initMonth, initDay, 0, 0, 0);
                var teCurrentTime = new Date(initYear, initMonth, initDay, 23, 59, 59).getTime() - this.m_iWidth * this.m_iCellMilliseconds;
                if (newm_iMiddleLineTime < tsCurrentTime.getTime()) {
                    this.m_tCurrentMidTime.setTimeByMis(tsCurrentTime.getTime());
                } else if (newm_iMiddleLineTime > teCurrentTime) {
                    this.m_tCurrentMidTime.setTimeByMis(teCurrentTime);
                } else {
                    this.m_tCurrentMidTime.setTimeByMis(this.m_iMiddleLineTime - this.m_iMove * this.m_iCellMilliseconds);
                }
                if (m_bIsPlaying) {
                    this.repaint(true);
                } else {
                    this.repaint();
                }

            }
        }
    };
    // this.m_canvas.style.cursor = "url(../images/playback/H_point1.cur),pointer";
    this.onMouseMove = function(oEvent) {
        this.m_iMousePosX = oEvent.clientX - this.m_iCanvasLeft;
        // this.m_tMouseCurTime.setTimeByMis((this.m_iMousePosX - this.m_iMiddleLinePos) * this.m_iCellMilliseconds + this.m_tCurrentMidTime.m_iMilliseconds);
        this.m_tMouseCurTime.setTimeByMis(this.m_iMousePosX * this.m_iCellMilliseconds + this.m_tCurrentMidTime.m_iMilliseconds);
        if (m_bIsPlaying) {
            this.repaint(true);
        } else {
            this.repaint();
        }
        var szCurMouseTime = this.m_tMouseCurTime.getStringTime();
        // this.m_ctx.fillStyle = this.middleLineTimeColor;
        // this.m_ctx.font = this.m_fCurTimeFont;
        // this.m_ctx.fillText(szCurMouseTime, (this.m_iMousePosX - parseInt(this.m_iCurTextWidth / 2)), parseInt(this.m_iTimeRectHeight / 4));

        this.m_ctx.strokeStyle = this.middleLineColor;
        this.m_ctx.lineWidth = 2;
        this.m_ctx.beginPath();
        this.m_ctx.moveTo(this.m_iMousePosX, 0);
        this.m_ctx.lineTo(this.m_iMousePosX, this.m_iHeight);
        this.m_ctx.stroke();
    };
    this.ondbClick = function(oEvent) {
        // if (config.timebarSave) {
        //     // 清除setInterval
        //     clearInterval(config.timebarSave);
        // }
        var strRemotePlaybackRequest, strRemotePlaybackSetPos, szCurMouseTime;
        this.m_iClickPosX = oEvent.clientX - this.m_iCanvasLeft;
        this.m_tClickPreTime = this.m_iClickPosX * this.m_iCellMilliseconds + this.m_tCurrentMidTime.m_iMilliseconds;
        remoteplayInitialize = true;
        $("#pause").show();
        $("#StartPlayBack").hide();
        document.getElementById("stopplayremotevideo").setAttribute("src", "img/remoteplayback/stop.png");
        document.getElementById("slowadvance").setAttribute("src", "img/remoteplayback/slowadvance.png");
        document.getElementById("fastForward").setAttribute("src", "img/remoteplayback/fastforward.png");
        document.getElementById("singleframe").setAttribute("src", "img/remoteplayback/singleframe.png");
        document.getElementById("closeround").setAttribute("src", "img/remoteplayback/soundopen.png");
        document.getElementById("openround").setAttribute("src", "img/remoteplayback/soundclose.png");
        document.getElementById("remotefacepic").setAttribute("src", "img/remoteplayback/capture.png");
        // document.getElementById("downloadvideo").setAttribute("src","img/remoteplayback/downvideo.png");
        if (m_bIsPlaying) {
            if (this.m_tClickPreTime < m_szStartTimeSeconds) {
                this.m_tClickCurTime = m_szStartTimeSeconds;
                selclkTime = m_szStartTimeSeconds;
                this.m_tMouseCurTime.setTimeByMis(m_szStartTimeSeconds);
                this.repaint();
                szCurMouseTime = this.m_tMouseCurTime.getStringTime();
                strRemotePlaybackSetPos = "<?xml version='1.0' encoding='UTF-8' ?><RemotePlaybackPosTimeInfo><Year>" + szCurMouseTime.substr(0, 4) + "</Year><Month>" + szCurMouseTime.substr(5, 2) + "</Month><Day>" + szCurMouseTime.substr(8, 2) + "</Day><Hour>" + szCurMouseTime.substr(11, 2) + "</Hour><Minute>" + szCurMouseTime.substr(14, 2) + "</Minute><Second>" + szCurMouseTime.substr(17, 2) + "</Second></RemotePlaybackPosTimeInfo>";
                if (sessionStorage.getItem("playstyle") == "ActiveX") {
                    if (config.deviceInfo.DeviceName == "IPC") {
                        var ncx = document.getElementById("previewocx");
                        ncx.RemotePlaybackSetPos(strRemotePlaybackSetPos);
                    } else {
                        RemotePlaybackSetPos(numberOfScreens - 1, strRemotePlaybackSetPos);
                    }
                } else if (sessionStorage.getItem("playstyle") == "EasyVideo") {
                    if (config.deviceInfo.DeviceName == 'IPC') {
                        gotimepos(szCurMouseTime);
                    } else {
                        gotimepos(szCurMouseTime, numberOfScreens);
                    }

                }
                if (m_bWndPause) {
                    ResumePlayback();
                }
                // config.timebarSave = setInterval(function() {
                //     if (sessionStorage.getItem("playstyle") == "ActiveX") {
                //         PlaybackGetPos(numberOfScreens);
                //     } else {
                //         serchVideoCounts(numberOfScreens);
                //     }
                // }, 1000)

            } else if (this.m_tClickPreTime > m_szEndTimeSeconds) {
                return
            } else {
                for (var m = 0; m < m_szStartTimeSet.length; m++) {
                    var startPreTime = new Date(m_szTime[m].start.substr(0, 4), m_szTime[m].start.substr(5, 2) - 1, m_szTime[m].start.substr(8, 2), m_szTime[m].start.substr(11, 2), m_szTime[m].start.substr(14, 2), m_szTime[m].start.substr(17, 2)).getTime();
                    var startNextTime = new Date(m_szTime[m].end.substr(0, 4), m_szTime[m].end.substr(5, 2) - 1, m_szTime[m].end.substr(8, 2), m_szTime[m].end.substr(11, 2), m_szTime[m].end.substr(14, 2), m_szTime[m].end.substr(17, 2)).getTime();
                    if (m + 1 <= m_szStartTimeSet.length - 1) {
                        var nextTime = new Date(m_szTime[m + 1].start.substr(0, 4), m_szTime[m + 1].start.substr(5, 2) - 1, m_szTime[m + 1].start.substr(8, 2), m_szTime[m + 1].start.substr(11, 2), m_szTime[m + 1].start.substr(14, 2), m_szTime[m + 1].start.substr(17, 2)).getTime();
                    }
                    if (this.m_tClickPreTime >= startPreTime && this.m_tClickPreTime <= startNextTime) {
                        this.m_tClickCurTime = this.m_tClickPreTime;
                        selclkTime = this.m_tClickCurTime;
                        this.repaint();
                        this.m_tMouseCurTime.setTimeByMis(this.m_tClickCurTime);
                        szCurMouseTime = this.m_tMouseCurTime.getStringTime();
                        strRemotePlaybackSetPos = "<?xml version='1.0' encoding='UTF-8' ?><RemotePlaybackPosTimeInfo><Year>" + szCurMouseTime.substr(0, 4) + "</Year><Month>" + szCurMouseTime.substr(5, 2) + "</Month><Day>" + szCurMouseTime.substr(8, 2) + "</Day><Hour>" + szCurMouseTime.substr(11, 2) + "</Hour><Minute>" + szCurMouseTime.substr(14, 2) + "</Minute><Second>" + szCurMouseTime.substr(17, 2) + "</Second></RemotePlaybackPosTimeInfo>";
                        if (sessionStorage.getItem("playstyle") == "ActiveX") {
                            if (config.deviceInfo.DeviceName == "IPC") {
                                var ncx = document.getElementById("previewocx");
                                ncx.RemotePlaybackSetPos(strRemotePlaybackSetPos);
                            } else {
                                RemotePlaybackSetPos(numberOfScreens - 1, strRemotePlaybackSetPos);
                            }
                        } else if (sessionStorage.getItem("playstyle") == "EasyVideo") {
                            if (config.deviceInfo.DeviceName == 'IPC') {
                                gotimepos(szCurMouseTime);
                            } else {
                                gotimepos(szCurMouseTime, numberOfScreens);
                            }

                        }
                        if (m_bWndPause) {
                            ResumePlayback();
                        }
                        if( config.timebarSave===null) {
                            config.timebarSave = setInterval((function(currentScreens) {
                                return function() {
                                    if (sessionStorage.getItem("playstyle") == "ActiveX") {
                                        PlaybackGetPos(currentScreens);
                                    } else {
                                        serchVideoCounts(currentScreens);
                                    }
                                };
                            })(numberOfScreens), 1000);
                        }
                        return
                    } else if (this.m_tClickPreTime > startNextTime && this.m_tClickPreTime < nextTime) {
                        this.m_tClickCurTime = nextTime;
                        selclkTime = this.m_tClickCurTime;
                        this.repaint();
                        this.m_tMouseCurTime.setTimeByMis(this.m_tClickCurTime);
                        szCurMouseTime = this.m_tMouseCurTime.getStringTime();
                        strRemotePlaybackSetPos = "<?xml version='1.0' encoding='UTF-8' ?><RemotePlaybackPosTimeInfo><Year>" + szCurMouseTime.substr(0, 4) + "</Year><Month>" + szCurMouseTime.substr(5, 2) + "</Month><Day>" + szCurMouseTime.substr(8, 2) + "</Day><Hour>" + szCurMouseTime.substr(11, 2) + "</Hour><Minute>" + szCurMouseTime.substr(14, 2) + "</Minute><Second>" + szCurMouseTime.substr(17, 2) + "</Second></RemotePlaybackPosTimeInfo>";
                        if (sessionStorage.getItem("playstyle") == "ActiveX") {
                            if (config.deviceInfo.DeviceName == "IPC") {
                                var ncx = document.getElementById("previewocx");
                                ncx.RemotePlaybackSetPos(strRemotePlaybackSetPos);
                            } else {
                                RemotePlaybackSetPos(numberOfScreens - 1, strRemotePlaybackSetPos);
                            }
                        } else if (sessionStorage.getItem("playstyle") == "EasyVideo") {
                            if (config.deviceInfo.DeviceName == 'IPC') {
                                gotimepos(szCurMouseTime);
                            } else {
                                gotimepos(szCurMouseTime, numberOfScreens);
                            }
                        }
                        if (m_bWndPause) {
                            ResumePlayback();
                        }
                        if( config.timebarSave===null) {
                            config.timebarSave = setInterval((function(currentScreens) {
                                return function() {
                                    if (sessionStorage.getItem("playstyle") == "ActiveX") {
                                        PlaybackGetPos(currentScreens);
                                    } else {
                                        serchVideoCounts(currentScreens);
                                    }
                                };
                            })(numberOfScreens), 1000);
                        }
                        return
                    }
                }
            }
        } else {
            for (var m = 0; m < m_szStartTimeSet.length; m++) {
                var startPreTime = new Date(m_szTime[m].start.substr(0, 4), m_szTime[m].start.substr(5, 2) - 1, m_szTime[m].start.substr(8, 2), m_szTime[m].start.substr(11, 2), m_szTime[m].start.substr(14, 2), m_szTime[m].start.substr(17, 2)).getTime();
                var startNextTime = new Date(m_szTime[m].end.substr(0, 4), m_szTime[m].end.substr(5, 2) - 1, m_szTime[m].end.substr(8, 2), m_szTime[m].end.substr(11, 2), m_szTime[m].end.substr(14, 2), m_szTime[m].end.substr(17, 2)).getTime();

                if (this.m_tClickPreTime >= startPreTime && this.m_tClickPreTime <= startNextTime) {
                    // searchFlag = true;
                    var date = new Date(this.m_tClickPreTime);
                    var date2 = new Date(startNextTime);
                    if (sessionStorage.getItem("playstyle") == "ActiveX") {
                        if (config.deviceInfo.DeviceName == "IPC") {
                            var ncx = document.getElementById("previewocx");
                            strRemotePlaybackRequest = "<?xml version='1.0' encoding='UTF-8' ?><RemotePlaybackRequest><Channel>1</Channel><StreamType>0</StreamType><EnableEndTime>false</EnableEndTime><StartTime><Year>" + date.getFullYear() + "</Year><Month>" + (date.getMonth() + 1) + "</Month><Day>" + date.getDate() + "</Day><Hour>00</Hour><Minute>00</Minute><Second>00</Second></StartTime><EndTime><Year>" + date2.getFullYear() + "</Year><Month>" + (date2.getMonth() + 1) + "</Month><Day>" + date2.getDate() + "</Day><Hour>23</Hour><Minute>59</Minute><Second>59</Second></EndTime></RemotePlaybackRequest>";
                            ncx.StartRemotePlayback(ip, config.Network.commandPort, config.user, config.password, strRemotePlaybackRequest);
                            strRemotePlaybackSetPos = "<?xml version='1.0' encoding='UTF-8' ?><RemotePlaybackPosTimeInfo><Year>" + date.getFullYear() + "</Year><Month>" + (date.getMonth() + 1) + "</Month><Day>" + date.getDate() + "</Day><Hour>" + date.getHours() + "</Hour><Minute>" + date.getMinutes() + "</Minute><Second>" + date.getSeconds() + "</Second></RemotePlaybackPosTimeInfo>";
                            ncx.RemotePlaybackSetPos(strRemotePlaybackSetPos);
                        } else {
                            strRemotePlaybackRequest = "<?xml version='1.0' encoding='UTF-8' ?><RemotePlaybackRequest><Channel>" + (numberOfScreens - 1) + "</Channel><StreamType>0</StreamType><EnableEndTime>false</EnableEndTime><StartTime><Year>" + date.getFullYear() + "</Year><Month>" + (date.getMonth() + 1) + "</Month><Day>" + date.getDate() + "</Day><Hour>0</Hour><Minute>0</Minute><Second>0</Second></StartTime><EndTime><Year>" + date2.getFullYear() + "</Year><Month>" + (date2.getMonth() + 1) + "</Month><Day>" + date2.getDate() + "</Day><Hour>23</Hour><Minute>59</Minute><Second>59</Second></EndTime></RemotePlaybackRequest>";
                            playbackstart(strRemotePlaybackRequest);
                            strRemotePlaybackSetPos = "<?xml version='1.0' encoding='UTF-8' ?><RemotePlaybackPosTimeInfo><Year>" + date.getFullYear() + "</Year><Month>" + (date.getMonth() + 1) + "</Month><Day>" + date.getDate() + "</Day><Hour>" + date.getHours() + "</Hour><Minute>" + date.getMinutes() + "</Minute><Second>" + date.getSeconds() + "</Second></RemotePlaybackPosTimeInfo>";
                            RemotePlaybackSetPos(numberOfScreens - 1, strRemotePlaybackSetPos);
                        }
                    } else if (sessionStorage.getItem("playstyle") == "EasyVideo") {
                        var time = $.dateFormat(this.m_tClickPreTime, 'yyyy-MM-dd HH:mm:ss');
                        if (config.deviceInfo.DeviceName == 'IPC') {
                            // remoteplay(m_szEndTimeSet[0], time);
                            remoteplay(time,time,numberOfScreens);
                        } else {
                            remoteplay(time, "", numberOfScreens);
                        }
                        // gotimepos(this.m_tClickPreTime)
                    }
                    this.m_tClickCurTime = this.m_tClickPreTime;
                    selclkTime = this.m_tClickPreTime;
                    this.repaint();
                    m_bIsPlaying = true;
                    m_bWndPause = false;
                    if( config.timebarSave===null) {
                        config.timebarSave = setInterval((function(currentScreens) {
                            return function() {
                                if (sessionStorage.getItem("playstyle") == "ActiveX") {
                                    PlaybackGetPos(currentScreens);
                                } else {
                                    serchVideoCounts(currentScreens);
                                }
                            };
                        })(numberOfScreens), 1000);
                    }
                    return
                }
            }
        }
    };
    this.onMouseWheel = function(oEvent) {
        oEvent.preventDefault();
        oEvent.wheelDelta > 0 ? this.m_iSpanType++ : this.m_iSpanType--;
        if (this.m_iSpanType >= 12) {
            this.m_iSpanType = 12;
        }
        if (this.m_iSpanType <= 6) {
            this.m_iSpanType = 6;
        }
        tTimeBar.SetSpantype(this.m_iSpanType);
        config.RemoteplayposJay = tTimeBar.m_iCellWidth;
    };
    this.onDOMMouseScroll = function(oEvent) {
        oEvent = window.event
        oEvent.preventDefault();
        oEvent.deltaY > 0 ? this.m_iSpanType-- : this.m_iSpanType++;
        if (this.m_iSpanType >= 12) {
            this.m_iSpanType = 12;
        }
        if (this.m_iSpanType <= 6) {
            this.m_iSpanType = 6;
        }
        tTimeBar.SetSpantype(this.m_iSpanType);
        config.RemoteplayposJay = tTimeBar.m_iCellWidth;
    };
    this.addtime = function() {
        this.m_iSpanType++;
        if (this.m_iSpanType >= 12) {
            this.m_iSpanType = 12;
        }
        if (this.m_iSpanType <= 6) {
            this.m_iSpanType = 6;
        }
        tTimeBar.SetSpantype(this.m_iSpanType);
    };

    this.jstime = function() {
        this.m_iSpanType--;
        if (this.m_iSpanType >= 12) {
            this.m_iSpanType = 12;
        }
        if (this.m_iSpanType <= 6) {
            this.m_iSpanType = 6;
        }
        tTimeBar.SetSpantype(this.m_iSpanType);
    };

    this.onMouseOut = function(oEvent) {
        if (m_bIsPlaying) {
            this.repaint(true);
        } else {
            this.repaint();
        }
    };
    addEventHandler(canvas, 'mousedown', bindAsEventListener(this, this.Start));
    addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
    addEventHandler(canvas, 'mouseout', bindAsEventListener(this, this.onMouseOut));
    addEventHandler(canvas, 'dblclick', bindAsEventListener(this, this.ondbClick));
    if (navigator.userAgent.indexOf("Firefox") !== -1) { //火狐需要使用DOMMouseScroll
        addEventHandler(canvas, 'wheel', bindAsEventListener(this, this.onDOMMouseScroll));
    } else { //此方法火狐不支持
        addEventHandler(canvas, 'mousewheel', bindAsEventListener(this, this.onMouseWheel));
    }
    this.repaint();
}

/*************************************************
 Function:        repaint
 Description:    重绘
 Input:            无
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.repaint = function(data, datasryt) {
    this.updateScalePos();
    this.updateFileListPos();
    this.m_ctx.clearRect(0, 0, this.m_iWidth, this.m_iHeight);

    //画中轴时间
    // this.m_ctx.fillStyle = this.middleLineTimeColor;
    // this.m_ctx.font = this.m_fMidTimeFont;
    // this.m_iTextWidth = this.m_ctx.measureText(szCurrentTime).width;
    // this.m_ctx.fillText(szCurrentTime, (this.m_iMiddleLinePos - parseInt(this.m_iTextWidth / 2)), parseInt(this.m_iTimeRectHeight / 2) + 5);

    //画通道名称分割线
    this.m_ctx.strokeStyle = this.partLineColor;
    this.m_ctx.lineWidth = 1;
    this.m_ctx.beginPath();
    this.m_ctx.moveTo(this.m_iFileListStartPos, this.m_iTimeRectHeight);
    this.m_ctx.lineTo(this.m_iFileListStartPos, this.m_iHeight);
    this.m_ctx.stroke();

    //画文件两条横轴和纵轴
    this.m_ctx.lineWidth = this.m_iBlankHeight;
    this.m_ctx.beginPath();
    this.m_ctx.moveTo(0, this.m_iTimeRectHeight);
    this.m_ctx.lineTo(this.m_iWidth, this.m_iTimeRectHeight);
    this.m_ctx.stroke();

    this.m_ctx.beginPath();
    this.m_ctx.moveTo(0, this.m_iHeight - this.m_iBlankHeight / 2);
    this.m_ctx.lineTo(this.m_iWidth, this.m_iHeight - this.m_iBlankHeight / 2);
    this.m_ctx.stroke();

    //显示通道名称
    this.m_ctx.fillStyle = this.channelNameColor;
    this.m_ctx.font = this.m_fChannelNameFont;
    this.m_ctx.fillText(this.m_szCurChannelName, 0, this.m_iTimeRectHeight + this.m_iBlankHeight + parseInt(this.m_iFileRectHeight / 2) + 5, 90);
    this.m_ctx.strokeStyle = this.timeScaleColor;
    this.m_ctx.font = this.m_fScaleFont;
    this.m_ctx.lineWidth = 1;
    //画时间刻度
    for (i = 0; i < this.ScaleInfoNum; i++) {
        if (this.ScaleInfo[i].isInRange(this.m_iFileListStartPos, this.m_iWidth)) {
            this.m_ctx.beginPath();
            this.m_ctx.moveTo(this.ScaleInfo[i].m_ix, this.m_iTimeRectHeight);
            this.m_ctx.lineTo(this.ScaleInfo[i].m_ix, this.m_iHeight);
            this.m_ctx.stroke();
            this.m_ctx.fillText(this.ScaleInfo[i].m_szTime, this.ScaleInfo[i].m_ix - 15, this.m_iTimeRectHeight - 5);
        }
    }
    this.m_ctx.beginPath();
    this.m_ctx.moveTo(this.ScaleInfo[this.ScaleInfoNum].m_ix, this.m_iTimeRectHeight);
    this.m_ctx.lineTo(this.ScaleInfo[this.ScaleInfoNum].m_ix, this.m_iHeight);
    this.m_ctx.stroke();
    this.m_ctx.fillText(this.ScaleInfo[this.ScaleInfoNum].m_szTime, this.ScaleInfo[this.ScaleInfoNum].m_ix - 15, this.m_iTimeRectHeight - 5);
    //画文件信息区域
    for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
        this.FileInfoSet[this.m_iSelWnd][i].draw(this.m_ctx);
    }
    //画中轴线
    this.m_ctx.strokeStyle = this.middleLineColor;
    this.m_ctx.lineWidth = 2;
    this.m_ctx.beginPath();
    this.m_ctx.moveTo(0, 0);
    this.m_ctx.lineTo(this.m_iMiddleLinePos, this.m_iHeight);
    this.m_ctx.stroke();

    //画播放线
    if (!data || this.m_iClickPosX == 0) {
        var m_iClickPosX = parseInt((this.m_tClickCurTime - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);
        this.m_iClickPosX = this.m_iMiddleLinePos + parseInt(parseFloat(m_iClickPosX / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
    }
    this.m_ctx.strokeStyle = this.curLineTimeColor;
    this.m_ctx.lineWidth = 2;
    this.m_ctx.beginPath();
    this.m_ctx.moveTo(this.m_iClickPosX, 0);
    this.m_ctx.lineTo(this.m_iClickPosX, this.m_iHeight);
    this.m_ctx.stroke();
};
// 播放线跟随位置移动
TimeBar.prototype.MovePosinVideo = function (params, arrset) {
    var Bullstate = true;
    this.m_iCellWidth = config.RemoteplayposJay
    var m_iClickPosX = parseInt((params - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);
    this.m_iClickPosX = this.m_iMiddleLinePos + parseInt(parseFloat(m_iClickPosX / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
    this.m_tClickPreTime = this.m_iClickPosX * this.m_iCellMilliseconds + config.begainTimein;
    this.m_tClickCurTime = m_szStartTimeSeconds;
    selclkTime = m_szStartTimeSeconds;
    this.m_tMouseCurTime.setTimeByMis(m_szStartTimeSeconds);
    this.repaint(Bullstate, arrset);
};
/*************************************************
 Function:        updateScalePos
 Description:    更新刻度
 Input:            无
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.updateScalePos = function() {
    if (this.ScaleInfo.length == 0) {
        return;
    }
    // 以00:00移动的距离为准
    var seconds = (this.ScaleInfo[0].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[0].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[0].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
    var iPos0 = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
    if (iPos0 < this.ScaleInfo[0].m_ixMin) {
        iPos0 = this.ScaleInfo[0].m_ixMax - (this.ScaleInfo[0].m_ixMin - iPos0);
    } else if (iPos0 > this.ScaleInfo[0].m_ixMax) {
        iPos0 = this.ScaleInfo[0].m_ixMin + (iPos0 - this.ScaleInfo[0].m_ixMax);
    }
    var iMoved = iPos0 - this.ScaleInfo[0].m_ix;
    //没有移动直接返回
    if (iMoved == 0) {
        return;
    }

    // 更新所有的刻度
    for (var i = 0; i <= this.ScaleInfoNum; i++) {
        var iScalePos = this.ScaleInfo[i].m_ix + iMoved;
        // 设置刻度位置范围
        this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum));
        this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
    }
};

/*************************************************
 Function:        updateFileListPos
 Description:    更新文件
 Input:            无
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.updateFileListPos = function() {
    var iFileLength = this.FileInfoSet[this.m_iSelWnd].length;
    if (iFileLength == 0) {
        return;
    }
    var tStartTime = this.FileInfoSet[this.m_iSelWnd][0].m_tStartTime;
    var seconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);
    var iFile0Pos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
    var iMoved = iFile0Pos - this.FileInfoSet[this.m_iSelWnd][0].m_iX;
    //没有移动直接返回
    if (iMoved == 0) {
        return;
    }

    // 更新所有
    for (i = 0; i < iFileLength; i++) {
        var iX = this.FileInfoSet[this.m_iSelWnd][i].m_iX + iMoved;
        var iY = this.FileInfoSet[this.m_iSelWnd][i].m_iY;
        var iWidth = this.FileInfoSet[this.m_iSelWnd][i].m_iWidth;
        var iHeight = this.FileInfoSet[this.m_iSelWnd][i].m_iHeight;
        this.FileInfoSet[this.m_iSelWnd][i].setPos(iX, iY, iWidth, iHeight);
    }
}

/*************************************************
 Function:        resize
 Description:    重置大小
 Input:            iWidth宽度, iHeight高度
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.resize = function(iWidth, iHeight) {
    this.m_canvas.height = iHeight;
    this.m_canvas.width = iWidth;
    this.m_iHeight = iHeight;
    this.m_iWidth = iWidth;
    this.m_iTimeRectHeight = parseInt(this.m_iHeight * 4 / 7);
    this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight * 2;
    this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2);
    this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
    this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);

    //初始化时间刻度信息
    for (i = 0; i < this.ScaleInfoNum; i++) {
        // 计算与中轴线的时间差（只计算时分秒）
        var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
        var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
        // 设置刻度位置范围
        this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum));
        this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
    }

    //初始化文件列表信息
    for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
        var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
        var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);
        var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);

        /*var iXRightSeconds = (tStopTime.m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (tStopTime.m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (tStopTime.m_iSecond - this.m_tCurrentMidTime.m_iSecond);*/
        var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);

        var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
        if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
            iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
        }

        FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
    }

    this.repaint();
}

/*************************************************
 Function:        SetSpantype
 Description:    设置时间条的显示样式
 Input:            无
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.SetSpantype = function(iSpanType) {
    switch (iSpanType) {
        case 6: //每2小时一格
            this.ScaleInfoDisNum = 12;
            this.m_fCellTime = parseFloat(2.0);
            // this.m_tCurrentMidTime = new Time();
            var tCurTime = new Time();
            tCurTime.parseTime(m_year + '-' + m_month + '-' + m_day + ' ' + '00:00:00');
            this.m_tCurrentMidTime.setTimeByMis(tCurTime.m_iMilliseconds);
            break;
        case 7: //每小时一格
            this.ScaleInfoDisNum = 12;
            this.m_fCellTime = parseFloat(1.0);
            break;
        case 8: //每半小时一格
            this.ScaleInfoDisNum = 12;
            this.m_fCellTime = parseFloat(0.5);
            break;
        case 9: //每半小时一格
            this.ScaleInfoDisNum = 8;
            this.m_fCellTime = parseFloat(0.5);
            break;
        case 10: //每１０分钟一格
            this.ScaleInfoDisNum = 12;
            this.m_fCellTime = parseFloat(1 / 6);
            break;
        case 11: //每５分钟一格
            this.ScaleInfoDisNum = 12;
            this.m_fCellTime = parseFloat(1 / 12);
            break;
        case 12: //每５分钟一格
            this.ScaleInfoDisNum = 6;
            this.m_fCellTime = parseFloat(1 / 12);
            break;
        default:
            this.ScaleInfoDisNum = 12;
            this.m_fCellTime = parseFloat(1.0);
            return;
    }
    this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10);
    this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
    this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);
    if (iSpanType != 6) {
        this.m_tCurrentMidTime.setTimeByMis(this.m_tMouseCurTime.m_iMilliseconds - this.m_iMousePosX * this.m_iCellMilliseconds);
        var limitTime = this.m_tMouseCurTime.m_iMilliseconds - this.m_tMouseCurTime.m_iHour * 3600 * 1000 - this.m_tMouseCurTime.m_iMinute * 60 * 1000 - this.m_tMouseCurTime.m_iSecond * 1000;
        if (this.m_tCurrentMidTime.m_iMilliseconds < limitTime) {
            this.m_tCurrentMidTime.setTimeByMis(limitTime);
        }
    }

    //初始化刻度
    this.ScaleInfo.length = 0;
    for (var i = 0; i < this.ScaleInfoNum; i++) {
        this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime)));
    }
    this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(this.ScaleInfoNum * 3600 * this.m_fCellTime)));

    //初始化时间刻度信息
    for (i = 0; i <= this.ScaleInfoNum; i++) {
        // 计算与中轴线的时间差（只计算时分秒）
        var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
        var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
        // 设置刻度位置范围
        this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum));
        this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
    }

    //初始化文件列表信息
    for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
        var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
        var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);
        var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);

        /*var iXRightSeconds = (tStopTime.m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (tStopTime.m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (tStopTime.m_iSecond - this.m_tCurrentMidTime.m_iSecond);*/
        var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);

        var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
        if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
            iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
        }

        FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
    }
    if (m_bIsPlaying) {
        this.repaint(true);
    } else {
        this.repaint();
    }
};
/*************************************************
 Function:        addFile
 Description:    添加文件
 Input:            StartTime 开始时间, StopTime 结束时间, iType 类型, iWndNum 默认当前窗口 添加到某个窗口
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.addFile = function(StartTime, StopTime, iType /*, iWndNum*/ ) {
    var tStartTime = new Time();
    var tStopTime = new Time();
    tStartTime.parseTime(StartTime);
    tStopTime.parseTime(StopTime);
    var fileColor;
    switch (iType) {
        case '1':
            fileColor = this.scheFileColor;
            break;
        case '2':
            fileColor = this.cmdFileColor;
            break;
        case '3':
            fileColor = this.alarmFileColor;
            break;
        case '4':
            fileColor = this.manualFileColor;
            break;
        case '5':
            fileColor = this.aiFileColor;
            break;
        default:
            //fileColor = this.defaultFileColor;
            //默认录像类型修改为报警类型
            fileColor = this.scheFileColor;
            break;
    }
    /*var iXLeftSeconds = (tStartTime.m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (tStartTime.m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (tStartTime.m_iSecond - this.m_tCurrentMidTime.m_iSecond);*/
    var iXLeftSeconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);
    // var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (7200 * this.m_fCellTime)) * this.m_iCellWidth);
    var iFilePosLeft = parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth); //中轴线的横坐标为0
    /*var iXRightSeconds = (tStopTime.m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (tStopTime.m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (tStopTime.m_iSecond - this.m_tCurrentMidTime.m_iSecond);*/
    var iXRightSeconds = parseInt((tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000);
    // var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (7200 * this.m_fCellTime)) * this.m_iCellWidth);
    var iFilePosRight = parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth);
    var fileInfo = new FileInfo(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2, iType, fileColor, tStartTime, tStopTime);
    fileInfo.setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum));
    if (arguments.length >= 4) {
        this.FileInfoSet[arguments[3]].push(fileInfo);
    } else {
        this.FileInfoSet[this.m_iSelWnd].push(fileInfo);
    }
};

/*************************************************
 Function:        clearWndFileList
 Description:    清空某个窗口的文件信息
 Input:            iWndNum 窗口号 0-15 默认当前选中窗口
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.clearWndFileList = function() /*iWndNum*/ {
    var iWndParam;
    if (arguments.length == 0) {
        iWndParam = this.m_iSelWnd;
    } else {
        iWndParam = arguments[0];
    }
    if (iWndParam < 0) {
        iWndParam = 0;
    }
    if (iWndParam >= 16) {
        iWndParam = 15
    }
    this.FileInfoSet[iWndParam].length = 0;
}

/*************************************************
 Function:        setMidLineTime
 Description:    设置中轴线时间
 Input:            szTime yyyy-MM-dd HH:mm:ss
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.setMidLineTime = function(szTime) {
    var tCurTime = new Time();
    tCurTime.parseTime(szTime);
    this.m_tCurrentMidTime.setTimeByMis(tCurTime.m_iMilliseconds);
    /*this.updateScalePos();
     this.updateFileListPos();*/
    this.repaint();
}

/*************************************************
 Function:        setMouseUpCallback
 Description:    设置鼠标弹起回调函数
 Input:            func 回调函数 function(tStartTime, tStopTime)
 Output:            无
 return:            无
 *************************************************/
TimeBar.prototype.setMouseUpCallback = function(callbackFunc) {
    this.mouseUpCallbackFunc = callbackFunc;
}
