function ImageViewer(viewer, file) {
	this.viewer   = viewer
	this.file     = file
	this.zoomed   = false
	this.x        = 0
	this.y        = 0
	this.dragging = false

	this.zoom = 1

	this.container = document.createElement("dv")
	this.container.classList = "image-container"

	this.element = document.createElement("img")
	this.element.classList = "pannable center drop_shadow"
	this.element.src = this.file.get_href
	this.element.addEventListener("dblclick",  (e) => { return this.doubleclick(e) })
	this.element.addEventListener("doubletap", (e) => { return this.doubleclick(e) })
	this.element.addEventListener("mousedown", (e) => { return this.mousedown(e) })
	this.element.addEventListener("mousedown", (e) => { return this.mousedown(e) })
	// this.element.addEventListener("wheel",    (e) => { return this.scroll(e) })
	document.addEventListener("mousemove",     (e) => { return this.mousemove(e) })
	document.addEventListener("mouseup",       (e) => { return this.mouseup(e) })

	this.container.appendChild(this.element)
}

ImageViewer.prototype.render = function(parent) {
	parent.appendChild(this.container)
}

ImageViewer.prototype.scroll = function(e) {
	if (!this.zoomed) {
		this.doubleclick(e)
	}

	console.log(e.deltaY)

	this.zoom = this.zoom - (e.deltaY * 0.01);
	if (this.zoom < 1) { this.zoom = 1 }
	if (this.zoom > 10) { this.zoom = 10 }

	this.element.style.width = this.zoom * 100 + "%"
	this.element.style.height = "auto"
	this.element.style.maxWidth = "1000%"
	this.element.style.maxHeight = "1000%"

	e.preventDefault()
	e.stopPropagation()
	return false
}

ImageViewer.prototype.doubleclick = function(e) {
	if (this.zoomed) {
		this.element.removeAttribute("style")
		this.container.style.overflow = ""
		this.zoomed = false
	} else {
		this.element.style.maxWidth = "none"
		this.element.style.maxHeight = "none"
		this.element.style.top = "0"
		this.element.style.left = ""
		this.element.style.transform = "none"
		this.container.style.overflow = "scroll"
		this.zoomed = true
	}

	e.preventDefault()
	e.stopPropagation()
	return false
}

ImageViewer.prototype.mousedown = function(e) {
	if (!this.dragging && e.which === 1 && this.zoomed) {
		this.x = e.pageX
		this.y = e.pageY
		this.dragging = true

		e.preventDefault()
		e.stopPropagation()
		return false
	}
}

ImageViewer.prototype.mousemove = function(e) {
	if (this.dragging) {
		this.container.scrollLeft = this.container.scrollLeft - (e.pageX - this.x)
		this.container.scrollTop  = this.container.scrollTop  - (e.pageY - this.y)

		this.x = e.pageX
		this.y = e.pageY

		e.preventDefault()
		e.stopPropagation()
		return false
	}
}

ImageViewer.prototype.mouseup = function(e) {
	if (this.dragging) {
		this.dragging = false

		e.preventDefault()
		e.stopPropagation()
		return false
	}
}
