/*
		Copyright 2002 Konjin Technologies
		http://www.konjintech.com

		Authors:	johan@konjintech.com
					david@konjintech.com
					
		Version: 	2.0 (movableobject på demo)
		Date:		02-08-12
*/

	disableTimer = null;
	mouseCatcher = new Object();
	mouseCatcherActiveObj = new Object();
	square = new Object();
	mouseCatcherActiveObj.width = null;
	mouseCatcherActiveObj.height = null;
	mouseCatcherActiveObj.lockX = null;
	mouseCatcherActiveObj.lockY = null;
	mouseCatcherPassiveObj = new Object();
	mouseCatcherPassiveObj.enable = false;

	defaultMargin = null;

	function getMargins() {
		if (!defaultMargin) {
			page = getPageSize();
			defaultMargin = new Object();
			defaultMargin.tM = 1;
			defaultMargin.rM = page.width-1;
			defaultMargin.bM = page.height-1;
			defaultMargin.lM = 1;
		}
		if (!mouseCatcherActiveObj.tM) { mouseCatcherActiveObj.tM = defaultMargin.tM; }
		if (!mouseCatcherActiveObj.rM) { mouseCatcherActiveObj.rM = defaultMargin.rM; }
		if (!mouseCatcherActiveObj.bM) { mouseCatcherActiveObj.bM = defaultMargin.bM; }
		if (!mouseCatcherActiveObj.lM) { mouseCatcherActiveObj.lM = defaultMargin.lM; }
	}

	function testInsideSquare(testStartX, testStartY, testEndX, testEndY, startX, startY, endX, endY) {
		if (!testEndX && testEndX != 0) { testEndX = testStartX; }
		if (!testEndY && testEndY != 0) { testEndY = testStartY; }
		
		square.inside = false;
		square.insideTop = false;
		square.insideBottom = false;
		square.insideLeft = false;
		square.insideRight = false;
		
		if (testStartX >= startX) { square.insideLeft = true; }
		if (testEndX <= endX) { square.insideRight = true; }
		if (testStartY >= startY) { square.insideTop = true; }
		if (testEndY <= endY) { square.insideBottom = true; }
		if (square.insideTop && square.insideBottom && square.insideLeft && square.insideRight) { square.inside = true;}
	}
	
	function mouseCatcherReloadPage() {
		location.reload();
	}

	function enableMouseCatcher(obj, disableObjId) {
		if (disableObjId) { mouseCatcherActiveObj.disableObjId = disableObjId; } else { mouseCatcherActiveObj.disableObjId = null; }
		var currentObj = obj;
		if (document.captureEvents) {
			document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP | Event.TARGET);
			window.onresize = mouseCatcherReloadPage;
		}
		if (currentObj) {
			if (!currentObj.parentNode) {
				currentObj = getObject(currentObj);
			}
			mouseCatcherActiveObj = currentObj;
			mouseCatcherActiveId = currentObj.id;
			if (document.layers) {
				mouseCatcherActiveObj.width = nslWidth;
				mouseCatcherActiveObj.height = nslHeight;
			}
		}
		document.onmousedown = mouseCatcherDown;
		document.onmouseup = mouseCatcherUp;
		document.onmousemove = mouseCatcherMove;
		if (disableTimer) {	
			clearTimeout(disableTimer);
			disableTimer = null;
		}
	}

	function disableMouseCatcher() {
		if (document.captureEvents) {
			document.captureEvents();
		}
		document.onmousedown = null;
		document.onmousemove = null;
		document.onmouseup = null;
		mouseCatcher.mouseDown = false;
	}
	
	function mouseCatcherUp(e) {
		mouseCatcher.mouseDown = false;
		mouseCatcher.mouseUpX = mouseCatcher.mouseX;
		mouseCatcher.mouseUpY = mouseCatcher.mouseY;
		if (mouseCatcherActiveObj.disableObjId) { showObject(getObject(mouseCatcherActiveObj.disableObjId)); }
		if (square.inside) {
			if (mouseCatcherActiveObj.mouseMoveWithObjectEnd) {
				eval(mouseCatcherActiveObj.mouseMoveWithObjectEnd);
			}
		}
	}
	
	function mouseCatcherDown(e) {
		if (mouseCatcherActiveObj.disableObjId) { hideObject(getObject(mouseCatcherActiveObj.disableObjId)); }
		
		mouseCatcherActiveObj.x = getXpos(mouseCatcherActiveObj);
		mouseCatcherActiveObj.y = getYpos(mouseCatcherActiveObj);
		if (!mouseCatcherActiveObj.y) {
			//alert('Error: set objects top/left properties in STYLE tag');
			mouseCatcherActiveObj.y = 0;
		}
		if (!mouseCatcherActiveObj.x) {
			//alert('Error: set objects top/left properties in STYLE tag');		
			mouseCatcherActiveObj.x = 0;
		}		
		
//		alert(mouseCatcherActiveObj.width)
		if (!mouseCatcherActiveObj.width) { mouseCatcherActiveObj.width = getObjectWidth(mouseCatcherActiveObj); }
		if (!mouseCatcherActiveObj.height) { mouseCatcherActiveObj.height = getObjectHeight(mouseCatcherActiveObj); }

		if (mouseCatcherActiveObj.ctM != null && mouseCatcherActiveObj.crM != null && mouseCatcherActiveObj.cbM != null && mouseCatcherActiveObj.clM != null) {
			//test if click is inside clickmargins
			testInsideSquare(mouseCatcher.mouseX, mouseCatcher.mouseY, null, null, mouseCatcherActiveObj.x+mouseCatcherActiveObj.clM, mouseCatcherActiveObj.y+mouseCatcherActiveObj.ctM, mouseCatcherActiveObj.x+mouseCatcherActiveObj.crM, mouseCatcherActiveObj.y+mouseCatcherActiveObj.cbM);
		} else {
			//use the object boundarys instead
			testInsideSquare(mouseCatcher.mouseX, mouseCatcher.mouseY, null, null, mouseCatcherActiveObj.x, mouseCatcherActiveObj.y, mouseCatcherActiveObj.x+mouseCatcherActiveObj.width, mouseCatcherActiveObj.y+mouseCatcherActiveObj.height);
		}
		
		if (square.inside) { mouseCatcher.mouseDown = true; }

		mouseCatcher.mouseDownX = mouseCatcher.mouseX;
		mouseCatcher.mouseDownY = mouseCatcher.mouseY;
		mouseCatcherActiveObj.offsetX = (mouseCatcher.mouseX-mouseCatcherActiveObj.x);
		mouseCatcherActiveObj.offsetY = (mouseCatcher.mouseY-mouseCatcherActiveObj.y);
		getMargins();
	}

	function mouseCatcherMove(e) {
		if(document.all) {
			mouseCatcher.mouseX = event.clientX + document.body.scrollLeft;
			mouseCatcher.mouseY = event.clientY + document.body.scrollTop;
		} else {
			mouseCatcher.mouseX = e.pageX;
			mouseCatcher.mouseY = e.pageY;
		}
		if (mouseCatcherActiveObj.mouseMoveTM && mouseCatcherActiveObj.mouseMoveRM && mouseCatcherActiveObj.mouseMoveBM && mouseCatcherActiveObj.mouseMoveLM) {
			testInsideSquare(mouseCatcher.mouseX, mouseCatcher.mouseY, null, null, mouseCatcherActiveObj.mouseMoveLM, mouseCatcherActiveObj.mouseMoveTM, mouseCatcherActiveObj.mouseMoveRM, mouseCatcherActiveObj.mouseMoveBM);
			if (!square.inside) {
				disableMouseCatcher();
				//debugForm('OUT! ' + mouseCatcher.mouseY + ' - ' + mouseCatcher.mouseX  , 'asljsdkljfk');
				mouseCatcherActiveObj.relativeMouseX = null;
				mouseCatcherActiveObj.relativeMouseY = null;
				if (mouseCatcherActiveObj.mouseMoveMarginOutEval) {
					eval(mouseCatcherActiveObj.mouseMoveMarginOutEval);
				}
			} else {
				mouseCatcherActiveObj.relativeMouseX = mouseCatcher.mouseX-mouseCatcherActiveObj.mouseMoveLM;
				mouseCatcherActiveObj.relativeMouseY = mouseCatcher.mouseY-mouseCatcherActiveObj.mouseMoveTM;
				if (mouseCatcherActiveObj.mouseMoveMarginInsideEval) {
					eval(mouseCatcherActiveObj.mouseMoveMarginInsideEval);
				}
			}
		}
		
		
		
		if (mouseCatcher.mouseDown) {
			if (mouseCatcherPassiveObj.enable) { getSquaresXOffset(); }
			
			placeX = mouseCatcherActiveObj.x = mouseCatcher.mouseX-mouseCatcherActiveObj.offsetX;
			placeY = mouseCatcherActiveObj.y = mouseCatcher.mouseY-mouseCatcherActiveObj.offsetY;
			//placeX = mouseCatcherActiveObj.x;
			//placeY = mouseCatcherActiveObj.y;
			
			testInsideSquare(mouseCatcherActiveObj.x, mouseCatcherActiveObj.y, mouseCatcherActiveObj.x+mouseCatcherActiveObj.width, mouseCatcherActiveObj.y+mouseCatcherActiveObj.height, mouseCatcherActiveObj.lM, mouseCatcherActiveObj.tM, mouseCatcherActiveObj.rM, mouseCatcherActiveObj.bM);
			//alert('no boundarys ' + square.inside);
			if (!mouseCatcherActiveObj.lockY) {
				if (!square.inside) {
					
					if (!square.insideLeft) { placeX = mouseCatcherActiveObj.lM; }
					if (!square.insideRight) { placeX = mouseCatcherActiveObj.rM-mouseCatcherActiveObj.width; }
				}
			} else { placeX = mouseCatcherActiveObj.lockX; }
			if (!mouseCatcherActiveObj.lockX) {
				if (!square.inside) {
					if (!square.insideTop) { placeY = mouseCatcherActiveObj.tM; }
					if (!square.insideBottom) { placeY = mouseCatcherActiveObj.bM-mouseCatcherActiveObj.height; }
				}
			} else { placeY = mouseCatcherActiveObj.lockY; }
			placeObject(mouseCatcherActiveObj, placeX, placeY, true);
			
			// IF SCROLLMENYGREJJA:
			if (mouseCatcherPassiveObj.enable) {
				if (mouseCatcherActiveObj == scrollSliderObj) {
					squaresContainerObj.width = getOpenSquaresWidth();
					squaresContainerObj.xPos = 0-getXpos(squaresObj);
					syncSquaresLeft(scrollSliderObj, scrollSliderContainerObj, squaresObj, squaresContainerObj);
					if (activatedSquare) {
						activatedSquare.outsideLeft = false;
						activatedSquare.outsideRight = false;
						activatedSquare.sliderInUse = true;
					}
				}
			}
		}
	}