// CREDITS:
// MapBlaster by Urs Dudli and Peter Gehrig 
// Copyright (c) 2001 Peter Gehrig and Urs Dudli. All rights reserved.
// Permission given to use the script provided that this notice remains as is.
// Additional scripts can be found at http://www.24fun.com
// info@24fun.com
// 03/07/2001

// IMPORTANT: 
// If you add this script to a script-library or script-archive 
// you have to add a link to http://www.24fun.com on the webpage 
// where this script will be running.

// CONFIGURATION:
// Go to www.24fun.com, open category 'utility' and download 
// the full-version of this script as ZIP-file with
// step-by-step instructions for non-programmers.

var isNav, isIE
var offsetX, offsetY
var selectedObj 

var largewidth = 0
var largeheight = 0

var thumbwidth = Math.floor(largewidth/shrinkfactor)
var thumbheight = Math.floor(largeheight/shrinkfactor)

var dragimgwidth = Math.floor(clipwidth/shrinkfactor)
var dragimgheight = Math.floor(clipheight/shrinkfactor)
var dragimgleft = thumbleft+3
var dragimgtop = thumbtop+3

var difleft= largeleft-thumbleft
var diftop= largetop-thumbtop

var clippoints

var cliptop=0
var clipbottom=cliptop+clipheight
var clipleft=0
var clipright=clipleft+clipwidth


if (parseInt(navigator.appVersion) >= 4) {
	if (navigator.appName == "Netscape") {
		isNav = true
	} else {
		isIE = true
	}
}

function setZIndex(obj, zOrder) {
	obj.zIndex = zOrder
}

function shiftTo(obj, x, y) {
	if (isNav) {
        if(x<=document.thumb.left) {x=document.thumb.left}
		if(x>=(document.thumb.left+thumbwidth-dragimgwidth-2)) {x=document.thumb.left+thumbwidth-dragimgwidth-2}
		if(y<=document.thumb.top) {y=document.thumb.top}
		if(y>=(document.thumb.top+thumbheight-dragimgheight-2)) {y=document.thumb.top+thumbheight-dragimgheight-2}
		obj.moveTo(x,y)
	} else {
		if(x<=document.all.thumb.style.posLeft) {x=document.all.thumb.style.posLeft}
		if(x>=(document.all.thumb.style.posLeft+thumbwidth-dragimgwidth-2)) {x=document.all.thumb.style.posLeft+thumbwidth-dragimgwidth-2}
		if(y<=document.all.thumb.style.posTop) {y=document.all.thumb.style.posTop}
		if(y>=(document.all.thumb.style.posTop+thumbheight-dragimgheight-2)) {y=document.all.thumb.style.posTop+thumbheight-dragimgheight-2}
		obj.pixelLeft = x
		obj.pixelTop = y
	}	
	cliptop = (y-thumbtop)*shrinkfactor
	clipbottom = cliptop+clipheight
	clipleft = (x-thumbleft)*shrinkfactor
	clipright = clipleft+clipwidth

	
	if (document.all) {
		clippoints ="rect("+cliptop+" "+clipright+" "+clipbottom+" "+clipleft+")"
		document.all.large.style.posTop=largetop-cliptop
		document.all.large.style.posLeft=largeleft-clipleft
		document.all.large.style.clip=clippoints
	}
	if (document.layers) {
		document.large.top=largetop-cliptop
		document.large.left=largeleft-clipleft
		document.large.clip.left = clipleft
		document.large.clip.right = clipright
		document.large.clip.top = cliptop
		document.large.clip.bottom = clipbottom
	}
}

function setSelectedElem(evt) {
	if (isNav) {
		var testObj
		var clickX = evt.pageX
		var clickY = evt.pageY
		for (var i = document.layers.length - 1; i >= 0; i--) {
			testObj = document.layers[i]
			if ((clickX > testObj.left) && 
				(clickX < testObj.left + testObj.clip.width) && 
				(clickY > testObj.top) && 
				(clickY < testObj.top + testObj.clip.height && document.layers[i].id=="dragimg")) {
					selectedObj = testObj
					setZIndex(selectedObj, 100)
					return
			}
		}
	} else {
		var imgObj = window.event.srcElement
		if (imgObj.parentElement.id.indexOf("dragimg") != -1) {
			selectedObj = imgObj.parentElement.style
			setZIndex(selectedObj,100)
			return
		}
	}
	selectedObj = null
	return
}

function dragIt(evt) {
	if (selectedObj) {
		if (isNav) {
			shiftTo(selectedObj, (evt.pageX - offsetX), (evt.pageY - offsetY))
		} else {
			shiftTo(selectedObj, (window.event.clientX - offsetX), (window.event.clientY - offsetY))
			return false
		}
	}
}

function engage(evt) {
	setSelectedElem(evt)
	if (selectedObj) {
		if (isNav) {
			offsetX = evt.pageX - selectedObj.left
			offsetY = evt.pageY - selectedObj.top
		} else {
			offsetX = window.event.offsetX
			offsetY = window.event.offsetY
		}
	}
	return false
}

function release(evt) {
	if (selectedObj) {
		setZIndex(selectedObj, 0)
		selectedObj = null
	}
}

function setNavEventCapture() {
	if (isNav) {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP)
	}
}

function init() {
	if (document.layers) {
        var imageurl=document.large.document.largepic.src
        largewidth=document.large.document.width
		largeheight=document.large.document.height
		thumbwidth = Math.floor(largewidth/shrinkfactor)
		thumbheight = Math.floor(largeheight/shrinkfactor)
        document.thumb.document.write("<IMG NAME='thumbpic' SRC='"+imageurl+"' width="+thumbwidth+"  height="+thumbheight+">")
        document.thumb.document.close()
		document.dragimg.document.write("<IMG NAME='dragimgpic' border=2 SRC='dragimg.gif' width="+dragimgwidth+" height="+dragimgheight+">")
        document.dragimg.document.close()
		document.large.left=largeleft
		document.large.top=largetop
	
		document.thumb.left=thumbleft
		document.thumb.top=thumbtop
	
		document.dragimg.left=dragimgleft
		document.dragimg.top=dragimgtop
		
		document.large.clip.left=clipleft
		document.large.clip.right=clipright
		document.large.clip.top=cliptop
		document.large.clip.bottom=clipbottom
		document.large.visibility="visible"
		
		setNavEventCapture()
	}
	if (document.all) {
        var imageurl=document.largepic.src
		largewidth=document.all.large.offsetWidth
		largeheight=document.all.large.offsetHeight
		thumbwidth = Math.floor(largewidth/shrinkfactor)
		thumbheight = Math.floor(largeheight/shrinkfactor)
		thumb.innerHTML="<IMG NAME='thumbpic' SRC='"+imageurl+"' width="+thumbwidth+"  height="+thumbheight+">"
		dragimg.innerHTML="<IMG NAME='dragimgpic' border=2 SRC='dragimg.gif' width="+dragimgwidth+"  height="+dragimgheight+">"
	
		document.all.large.style.posLeft=largeleft
		document.all.large.style.posTop=largetop
	
		document.all.thumb.style.posLeft=thumbleft
		document.all.thumb.style.posTop=thumbtop
	
		document.all.dragimg.style.posLeft=dragimgleft
		document.all.dragimg.style.posTop=dragimgtop
		clippoints ="rect("+cliptop+" "+clipright+" "+clipbottom+" "+clipleft+")"
		document.all.large.style.clip=clippoints
		document.all.large.style.visibility="visible"
	}
	
	document.onmousedown = engage
	document.onmousemove = dragIt
	document.onmouseup = release
}

window.onload=init
