(function (window, document) {
    var ImgView = function (targetDom, options,listTargetDom) {
        // 判断是用函数创建的还是用new创建的。这样我们就可以通过MaskShare("dom") 或 new MaskShare("dom")来使用这个插件了  
        if (!(this instanceof ImgView)) return new ImgView(targetDom, options,listTargetDom);
        // 参数
        this.options = this.extend({
            dataList: [],//[{src:"",isSelected:false}]
            currentSrc: ""
        }, options);
        // 获取dom
        this.targetDom = document.getElementById(targetDom);
        this.listTargetDom = document.getElementById(listTargetDom);
		if(this.options.dataList.length>0)
		{
			this.options.currentSrc=this.options.dataList[0].AttachLocationPath;
		}
        var html = "
" +
            "
![]()
 ";
		var listHtml=""
		for(var i=0;i
"+
					"
"+
					" ";
			}else{
				listHtml+=""+
					"

"+
					"
 ";
			}
		}
		listHtml+="";
		this.listTargetDom.innerHTML=listHtml;
        this.targetDom.innerHTML = html;
        this.btnClose = document.getElementById("closeDialog");
        this.btnRotate = document.getElementById("rotateDialog");
        this.btnPrev = document.getElementById("prevDialog");
        this.btnNext = document.getElementById("nextDialog");
        //this.imgViewDiv = document.getElementById("imgViewDiv");
        this.imgViewContent = document.getElementById("imgViewContent");
        this.dialogImg = document.getElementById("dialogImg");
		this.imgIdx=document.getElementById("imgIdx")
		this.imgCount=document.getElementById("imgCount")
		this.imgListContainer=document.getElementById("imgs-container")
        this.num = 0;
        this.winWidth = 0;
        this.winHeight = 0;
        this.startX = 0, this.startY = 0, this.x = 0, this.y = 0;
        this.index = 1;
		this.ScrollVal=0;
		var wsImpl = window.WebSocket || window.MozWebSocket;
		this.Socket=new wsImpl('ws://localhost:7080/');
		
		
        this.event();
    }
    ImgView.prototype = {
        init: function (options) {
			this.options.dataList=options;
			
			if(this.options.dataList.length>0)
			{
				this.options.currentSrc=this.options.dataList[0].AttachLocationPath;
			}
			var html = "" +
						"
![]()
 ";
			var listHtml=""
			for(var i=0;i
"+
					"
"+
					" ";
				}else{
					listHtml+=""+
					"

"+
					"
 ";
				}
			}
			listHtml+="";
			this.listTargetDom.innerHTML=listHtml;
			this.imgIdx=document.getElementById("imgIdx")
			this.imgCount=document.getElementById("imgCount")
			this.imgListContainer=document.getElementById("imgs-container")
        this.event();
        },
        extend: function (obj, obj2) {
            for (var k in obj2) {
                obj[k] = obj2[k];
            }
            return obj;
        },
        event: function () {
            var _this = this;
            _this.thisSrc = _this.options.currentSrc;
            //var dataList = _this.options.dataList;
            //var index = dataList.indexOf(_this.thisSrc);
            _this.checkImg(_this.options.currentSrc);
            // // 关闭
            // _this.btnClose.addEventListener("click", function () {
            //     _this.close(_this);
            // });
            // 旋转
            // _this.btnRotate.addEventListener("click", function () {
            //     _this.rotate(_this);
            // });
            // // 上一张
            // _this.btnPrev.addEventListener("click", function () {
            //     _this.prev(_this);
            // });
            // // 下一张
            // _this.btnNext.addEventListener("click", function () {
            //     _this.next(_this);
            // });
            // 鼠标按下
            _this.imgViewContent.addEventListener("mousedown", function (event) {
                _this.mousedown(_this, event);
            });
            // 滚轮事件 chrome & ie
            _this.imgViewContent.addEventListener("mousewheel", function (event) {
                _this.mousewheel(_this, event);
            });
            // 滚轮事件 firefox
            _this.imgViewContent.addEventListener("DOMMouseScroll", function (event) {
                _this.mousewheel(_this, event);
            });
			var smallImgDom = document.getElementsByClassName("smallImg");
			for(var i=0;inew RegExp(item.FJMC + '$').test(this.src));
					imgObj.isCheck=!imgObj.isCheck;
					if(imgObj.isCheck)
					{
						this.style.border="3px solid red"
					}else
					{
						this.style.border="0px solid red"
					}
					_this.Socket.send(JSON.stringify(imgObj))
				})
			}
        },
        // 滚轮事件
        mousewheel: function (_this, event) {
            event.preventDefault();
            var delta = (event.wheelDelta && (event.wheelDelta > 0 ? 1 : -1)) || // chrome & ie
                (event.detail != 0 && (event.detail > 0 ? -1 : 1));
            if (delta > 0) {
                // 向上滚
                _this.index = _this.index + 0.5;
                if (_this.index > 4) {
                    _this.index = 4;
                }
            } else if (delta < 0) {
                // 向下滚
                _this.index = _this.index - 0.5;
                if (_this.index < 0.5) {
                    _this.index = 0.5;
                }
            }
            _this.imgViewContent.style.marginLeft = _this.imgMarginLeft - ((_this.index - 1) * _this.imgWidth) / 2 + "px";
            _this.imgViewContent.style.marginTop = _this.imgMarginTop - ((_this.index - 1) * _this.imgHeight) / 2 + "px";
            event.target.style.width = _this.imgWidth * _this.index + "px";
            event.target.style.height = _this.imgHeight * _this.index + "px";
        },
		zoom:function(_this,t){
			if(t>0)
			{
                _this.index = _this.index + 0.5;
                if (_this.index > 4) {
                    _this.index = 4;
                }
			}else if(t==0){
				_this.index=1;
			}else if(t<0)
			{
                _this.index = _this.index - 0.5;
                if (_this.index < 0.5) {
                    _this.index = 0.5;
                }
			}
            _this.imgViewContent.style.marginLeft = _this.imgMarginLeft - ((_this.index - 1) * _this.imgWidth) / 2 + "px";
            _this.imgViewContent.style.marginTop = _this.imgMarginTop - ((_this.index - 1) * _this.imgHeight) / 2 + "px";
            _this.dialogImg.style.width = _this.imgWidth * _this.index + "px";
            _this.dialogImg.style.height = _this.imgHeight * _this.index + "px";
		},
        // 鼠标按下事件(拖拽用)
        mousedown: function (_this, event) {
            event.preventDefault();
            var imgWidth = _this.imgWidth * _this.index;
            var imgHeight = _this.imgHeight * _this.index;
            var rotateNum = _this.num * 90;
            // 根据旋转的角度不同,坐标也不一样
            if (rotateNum % 90 == 0 && rotateNum % 180 != 0 && rotateNum % 270 != 0 && rotateNum % 360 != 0) {
                _this.startX = (imgWidth - imgHeight) / 2 + imgHeight - event.offsetY;
                _this.startY = event.offsetX - (imgWidth - imgHeight) / 2;
            } else if (rotateNum % 180 == 0 && rotateNum % 360 != 0) {
                _this.startX = imgWidth - event.offsetX;
                _this.startY = imgHeight - event.offsetY;
            } else if (rotateNum % 270 == 0 && rotateNum % 360 != 0) {
                _this.startX = (imgWidth - imgHeight) / 2 + event.offsetY;
                _this.startY = imgWidth - event.offsetX - (imgWidth - imgHeight) / 2;
            } else {
                _this.startX = event.offsetX;
                _this.startY = event.offsetY;
            }
            document.addEventListener('mousemove', mousemove);
            document.addEventListener('mouseup', mouseup);
            // 拖拽
            function mousemove(event) {
                _this.y = event.clientY - _this.startY - 10;
                _this.x = event.clientX - _this.startX - 10;
                _this.imgViewContent.style.marginTop = "" + _this.y + "px";
                _this.imgViewContent.style.marginLeft = "" + _this.x + "px";
                _this.imgViewContent.style.transition = "margin 0s";
            };
            // 鼠标放开
            function mouseup() {
                document.removeEventListener('mousemove', mousemove);
                document.removeEventListener('mouseup', mouseup);
                _this.imgViewContent.style.transition = "all 0.6s";
            }
        },
        // 关闭
        close: function (_this) {
            var imgViewDiv = document.getElementById("imgViewDiv");
            imgViewDiv.setAttribute("class", "img-view-dialog closing");
            setTimeout(function () {
                imgViewDiv.setAttribute("class", "img-view-dialog");
                imgViewDiv.style.display = "none";
                _this.num = 0;
            }, 400);
        },
        // 旋转
        rotate: function (_this, angle) {
            _this.num += angle;
            _this.imgViewContent.style.transform = "rotate(" + _this.num + "deg) scale(1, 1)";
        },
        // 适合屏幕
        full: function (_this) {
            _this.dialogImg.style.cssText = "width:" + _this.winWidth + "px; height:" + _this.winHeight + "px;";
            _this.imgViewContent.style.cssText = "margin-top:" + 0 + "px; margin-left:" + 0 + "px";
        },
         // 上一张
        prev: function (_this) {
            var thisSrc = _this.dialogImg.src;
            var dataList = _this.options.dataList;
			var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(thisSrc));
            var index = dataList.indexOf(imgObj);
            if (index > 0 && index <= (dataList.length - 1)) {
                index = index - 1;
                _this.checkImg(dataList[index].AttachLocationPath, index);
            }
        },
         // 上一张
        next: function (_this) {
            var thisSrc = _this.dialogImg.src;
            var dataList = _this.options.dataList;
			var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(thisSrc));
            var index = dataList.indexOf(imgObj);
            if (index >= 0 && index < (dataList.length - 1)) {
                index = index + 1;
                _this.checkImg(dataList[index].AttachLocationPath, index);
            }
        },
         // 上一张
        setSelected: function (_this,fjmc,state) {
            var thisSrc = fjmc;
            var smallImgDom = document.getElementsByClassName("smallImg");
			for(var i=0;inew RegExp(item.FJMC + '$').test(thisSrc));
			 if(_this.Socket.readyState==1){
				_this.Socket.send("FullScreen:"+JSON.stringify(imgObj))
			 }
        },
         // 上一张
        setScroll: function (_this,a) {
			var _w=(_this.options.dataList.length*68)+(_this.options.dataList.length*8);
			_this.imgListContainer.style.width=_w+"px";
			if(_w<_this.winWidth){
				_this.imgListContainer.style.left="0px";
			}else
			{
				var _c=_w-_this.winWidth;
				var _cn=_c/76;
					if(a>0&&_c>_this.ScrollVal){
						_this.ScrollVal+=_w/_this.options.dataList.length;
						_this.imgListContainer.style.left=_this.ScrollVal*-1+"px";
					}else if(a<0)
					{
						_this.ScrollVal-=_w/_this.options.dataList.length;
						if(_this.ScrollVal<0)
							_this.ScrollVal=0
					}
						_this.imgListContainer.style.left=_this.ScrollVal*-1+"px";
			}
			//alert(_this.imgListContainer);
            //var thisSrc = _this.dialogImg.src;
            //var dataList = _this.options.dataList;
            //var index = dataList.indexOf(thisSrc);
            //if (index >= 0 && index < (dataList.length - 1)) {
            //    index = index + 1;
            //    _this.checkImg(dataList[index], index);
            //}
        },
        // 下一张
        setSrc: function (_this, src) {
            // var dialogImg = document.getElementById("dialogImg");
            // var thisSrc = dialogImg.attributes[2].value;
            // if (thisSrc.indexOf("width:") != -1 || thisSrc.indexOf("height:") != -1) {
            //     thisSrc = dialogImg.attributes[3].value;
            // }
            // var dataList = _this.options.dataList;
            // var index = dataList.indexOf(thisSrc);
            // if (index >= 0 && index < (dataList.length - 1)) {
            //     index = index + 1;
            //     _this.checkImg(dataList[index]);
            // }
            _this.checkImg(src);
        },
        // 点击图片
        checkImg: function (thisSrc) {
            var _this = this;
            _this.index = 1;
            _this.num = 0;
            _this.dialogImg.style.transform = "";
            _this.imgViewContent.setAttribute("class", "img-view-content");
            _this.getWindowWH();
            /* if (index == 0) {
                _this.btnPrev.style.display = "none";
            } else if (index == (dataList.length - 1)) {
                _this.btnNext.style.display = "none";
            } else {
                _this.btnPrev.style.display = "block";
                _this.btnNext.style.display = "block";
            } */
            var image = new Image();
            image.src = thisSrc;
            var width = _this.winWidth;//image.width;
            var height = _this.winHeight;//image.height;
            // var ww = 860;
            // var wh = _this.winHeight - 20;
            // if (width < ww && height < wh) {
            //     width = width;
            //     height = height;
            // } else {
            //     var scale_x = width / ww;
            //     var scale_y = height / wh;
            //     if (scale_x > scale_y) {
            //         var width = ww;
            //         var height = parseInt(height / scale_x);
            //     } else {
            //         var width = parseInt(width / scale_y);
            //         var height = wh;
            //     }
            // }
            _this.imgWidth = width;
            _this.imgHeight = height;
            var left = 0;//(_this.winWidth - width) / 2;
            var top = 0;//(_this.winHeight - height) / 2;
            _this.imgMarginLeft = left;
            _this.imgMarginTop = top;
            _this.imgViewContent.style.cssText = "margin-top:" + top + "px; margin-left:" + left + "px";
            _this.dialogImg.style.cssText = "width:" + width + "px; height:" + height + "px;";
            _this.dialogImg.setAttribute("src", thisSrc);
            _this.imgViewContent.setAttribute("class", "img-view-content loadingImg");
            //setTimeout(function () {
            //_this.dialogImg.setAttribute("src", thisSrc);
            //_this.imgViewContent.setAttribute("class", "img-view-content loadingImg");
            //}, 600);
			
            var thisSrc = _this.dialogImg.src;
            var dataList = _this.options.dataList;
			var imgObj=_this.options.dataList.find(item=>new RegExp(item.FJMC + '$').test(thisSrc));
            var index = dataList.indexOf(imgObj);
			_this.imgIdx.innerText=index+1;
			_this.imgCount.innerText=dataList.length;
			if(_this.Socket.readyState==1){
				_this.Socket.send("Next:"+JSON.stringify(imgObj))
			}
        },
        // 获取浏览器宽高
        getWindowWH: function () {
            var _this = this;
            if (window.innerWidth)
                _this.winWidth = window.innerWidth;
            else if ((document.body) && (document.body.clientWidth))
                _this.winWidth = document.body.clientWidth;
            // 获取窗口高度
            if (window.innerHeight)
                _this.winHeight = window.innerHeight;
            else if ((document.body) && (document.body.clientHeight))
                _this.winHeight = document.body.clientHeight-74;
            // 通过深入 Document 内部对 body 进行检测,获取窗口大小
            if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) {
                _this.winHeight = document.documentElement.clientHeight-74;
                _this.winWidth = document.documentElement.clientWidth;
            }
        }
    }
    window.ImgView = ImgView;
}(window, document));