<!--
	
	/*
	 *	DEPENDENCIES
	 *
	 *	addEvent			hmap_mainPage.js
	 *	window.load event	needs to call DragInit(mapID)
	 *	
	 *
	 */
	 
	/****************************
	 *	GENERAL PURPOSE FUNCTIONS
	 ****************************/
	/*
	 *	Returns the position of the object relative to the window
	 *
	 *	From SitePoint: DHTML Utopia: Modern Web Design Using JavaScript and DOM.  Pg 83
	 *
	 */
	function findPosX(obj) {
		var curLeft = 0;
		if (obj.offsetParent) { 
			do {
				curLeft += obj.offsetLeft;
			} while (obj = obj.offsetParent);
		}
		else if (obj.x) {
			curLeft += obj.x;
		}
		return curLeft;
	}		
	function findPosY(obj) {
		var curTop = 0;
		if (obj.offsetParent) {
			do {
				curTop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		} 
		else if (obj.y) {
			curTop += obj.y;
		}
		return curTop;
	}
	
	
	
	function attVal( element, attName ) {
		return parseInt( element.getAttribute( attName ) );
	}
	
	
	var isIE			= !window.opera && navigator.userAgent.indexOf('MSIE') != -1;




	/****************************
	 *	Drag Map Functions
	 *
	 *	mouseDown sets the anchor, mouseUp-mouseDown sets the change in position
	 *	Based on SitePoint: DHTML Utopia: Modern Web Design Using JavaScript and DOM.   Pg 83
	 ****************************/
	var mouseIsDown		= false;
	var dragMouseDownX	= 0;
	var dragMouseDownY	= 0;
	var dragMouseUpX	= 0;
	var dragMouseUpY	= 0;
	var mouseWasDragged = false;	//	This is needed to distinguish between mouseUp/Down events and dragging.
	
	function dragInit( mapID ) {
		var map = document.getElementById( mapID );
		addEvent( map, 'mousemove', dragMoveListener, false );
		addEvent( map, 'mousedown', dragDownListener, false );
		addEvent( map, 'mouseup', 	dragUpListener, false );
	}
	function dragDownListener(ev) {
//dragDebug('down');
		mouseIsDown		= true;
		mouseWasDragged	= false;
		
		// Prevent Firefox 3.x from allowing the picture to be dragged by user (as opposed to js)
		if(ev.preventDefault)
		 {
		  ev.preventDefault();
		 }
	
		var e = window.event	? window.event	: ev;
		var t = e.target		? e.target		: e.srcElement;
		
		var mX, mY;
		if (e.pageX && e.pageY) {
			mX = e.pageX;
			mY = e.pageY;
		} 
		else if (e.clientX && e.clientY) {
			mX = e.clientX;
			mY = e.clientY;
			if (isIE) {
				mX += document.body.scrollLeft;
				mY += document.body.scrollTop;
			}
		}
		
		dragMouseDownX = mX - findPosX(t);
		dragMouseDownY = mY - findPosY(t);
	}
	function dragUpListener(ev) {
//dragDebug('up');
		mouseIsDown = false;
		
		var e = window.event	? window.event	: ev;
		var t = e.target		? e.target		: e.srcElement;
		
		var mX, mY;
		if (e.pageX && e.pageY) {
			mX = e.pageX;
			mY = e.pageY;
		} 
		else if (e.clientX && e.clientY) {
			mX = e.clientX;
			mY = e.clientY;
			if (isIE) {
				mX += document.body.scrollLeft;
				mY += document.body.scrollTop;
			}
		}
		
		dragMouseUpX = mX - findPosX(t);
		dragMouseUpY = mY - findPosY(t);
		
		//	HARD CODED!!!
		mapID = 'm1';
		
		var pDeltaX = (dragMouseUpX - dragMouseDownX) / parseInt(t.style.width);
		var pDeltaY = (dragMouseUpY - dragMouseDownY) / parseInt(t.style.height);
		//alert( 'dX = ' + pDeltaX + ' dY = ' + pDeltaY);
		
		
		MoveBy( mapID, pDeltaX, pDeltaY );
		
		// We set the drag command here because mouseUp and mouseDown are both also triggered by clicks.
		// so we need to distinguish clicks from drags.
		if (mouseWasDragged) {
			//	Clear the previous click point after a drag (to revert centerto center of screen)
			ClearPrevClick( mapID );

			SetCmdStr( 'Drag', mapID );
			if (is_safari) {													//	Defined in hmap_mainPage.js
				//	SAFARI BUG
				//	Safari doesn't trigger the 'click' event after a drag, so we trigger it manually
				MapListener(ev);
			}
//			MoveBy( mapID, pDeltaX, pDeltaY );
//		} else {
//			SetCmdStr( '', 'm1' );
		}

	}
	function dragMoveListener(ev) {
//dragDebug('move');
		try {
			if (mouseIsDown) {
	
				var e = window.event	? window.event	: ev;
				var t = e.target		? e.target		: e.srcElement;
				
				var mX, mY;
				if (e.pageX && e.pageY) {
					mX = e.pageX;
					mY = e.pageY;
				} 
				else if (e.clientX && e.clientY) {
					mX = e.clientX;
					mY = e.clientY;
					if (isIE) {
						mX += document.body.scrollLeft;
						mY += document.body.scrollTop;
					}
				}
				
				var xPos = mX - findPosX(t) - dragMouseDownX;	// absolute position
				var yPos = mY - findPosY(t) - dragMouseDownY;
				
//dragDebug( 'moving to ' + xPos + ',' + yPos + '; down = ' + dragMouseDownX + ',' + dragMouseDownY + '; up = ' + dragMouseUpX + ',' + dragMouseUpY);
					
	//			//	buffer zone: don't drag if the mouse didn't move by more than d
				var d = 10;
				if ( (Math.abs(xPos) > d) || (Math.abs(yPos)  > d) ) {
					mouseWasDragged = true;
				}
				
				t.style.backgroundPosition = 
					parseInt( xPos ) + 'px ' +
					parseInt( yPos ) + 'px';
	
			}
		} catch (error) {
			//	Trying to catch if mouseIsDown is not defined, which seems to happen on occasion
//			dragDebug('dragMoveListener error: mouse is NOT down')
		}
	}

//	IE has a quirk where text on the page gets selected during an HTML element drag.
//	Calling this will disable it.
//	http://www.ditchnet.org/wp/2005/06/15/ajax-freakshow-drag-n-drop-events-2/
	function disableIETextSelection() {
//		alert('disabling text drag');
		document.body.ondrag = function () { return false; };
		document.body.onselectstart = function () { return false; };
	}
	function enableIETextSelection() {
//		alert('enabling text drag');
		document.body.ondrag = '';
		document.body.onselectstart = '';
	}
	
	
	function dragDebug(text) {
		var e = document.getElementById('debugdisplay');
		e.innerHTML += '<br>' + text;
	}
// -->
