dojo.provide("mq.monitor");

dojo.declare("mq.Monitor", null, {
	
	constructor: function(controller, tileMap, mapWindow) {
		this.tileMap = tileMap;
		this.mapWindow = mapWindow;
	},
	tileMap:null,
	mapWindow: null,
	x:0,
	y:0,
	type: "",
	startxy: null,
  	dragStarted: false,	
	monitor1: function(evt) {
		if(this.dragStarted) {      
    		this.dragStarted = false; 	
    		var tmpendll = this.tileMap.getCenter();
    		var endxy = this.tileMap.llToPix(tmpendll);
    		endxy.x = endxy.x - mq.getScrollBarPosition().ptOffsetX;
    		endxy.y = endxy.y - mq.getScrollBarPosition().ptOffsetY;	    	
    		this.type = "click";
			var panDistanceInfo1 = this.tileMap.percentage(this.startxy.x, this.startxy.y, endxy.x, endxy.y, true);
			this.dragTracker(this.startxy.x, this.startxy.y, endxy.x, endxy.y);			
		}
	},
    monitor:        function(evt) {
    	if(evt.eventName == "MQTileMap.mouseDown") {
    		this.dragStarted = true;
			this.startxy = this.tileMap.startDragPoint;
			dojo.disconnect(this.tileMap.parent, "click",this, "monitor1");
			dojo.connect(this.tileMap.parent, "click",this, "monitor1");
    	}
    	if(evt.eventName == "MQTileMap.dragEnd") {
	    	this.dragStarted = false; 
	    	this.type = "drag";
			this.dragTracker(this.startxy.x, this.startxy.y, this.tileMap.endDragPoint.x, this.tileMap.endDragPoint.y);
    	}
    	if(evt.eventName == "MQTileMap.mapTypeChanged" ) {
			// Begin Omniture/Comscore logging - Change map view
			var mapTypeAction = null;
			if(evt.mapType == "sat") {
				mapTypeAction = ":MQ08Aerial";
			}else if(evt.mapType == "hyb") {
				mapTypeAction = ":MQ08Hybrid";
			}else if(evt.mapType == "map") {
				mapTypeAction = ":MQ08Street";
			}
			ua.a(mapTypeAction);
			// End Omniture/Comscore logging
    	}
    },
    
    minimonitor :        function(evt) {
    	ua.a(":MQ08ManMapDrag");
	
    },
    dragTracker: function(initialMouseX, initialMouseY, newMouseX, newMouseY) 
    {
       this.x = (this.x)+(newMouseX - initialMouseX);
       this.y = (this.y)+(newMouseY - initialMouseY);
       var panDistanceInfo = this.tileMap.percentage(0, 0, this.x, this.y, false);
       var diag = Math.round(Math.sqrt(panDistanceInfo.shiftX*panDistanceInfo.shiftX + panDistanceInfo.shiftY*panDistanceInfo.shiftY));           
	   if(diag >= 40) {
            var mouseMovementDir  = this.tileMap.direction(0, 0, this.x, this.y);
            var logStr;
            if(this.type == "click") {
           	  logStr = ("Action = Map Click and Recenter");
           	  // Beging Omniture/Comscore logging - Map Click and Recenter
           	  ua.a(":MQ08Recenter");
           	  // End Omniture/Comscore logginig
            } else {
           	  logStr = ("Action = "+this.type+": direction = "+mouseMovementDir);
           	  // Begin Omniture/Comscore logging - Map Dragging
           	  ua.a(":MQ08Drag"+this.dragDirToPanDir(mouseMovementDir).toUpperCase());
           	  // End Omniture/Comscore logginig
            }
            this.x = 0;
            this.y = 0;
            this.type = "";
	   }
    },
    dragDirToPanDir: function(dragDir) {
    	var panDir;
         switch(dragDir)
            {
                case "n":
					panDir = "s";
               		break;
                case "e":
					panDir = "w";
	                break;
                case "w":
					panDir = "e";
    	            break;
                case "s":
					panDir = "n";
        	        break;
             	case "ne":
					panDir = "sw";
        	        break;
             	case "nw":
					panDir = "se";
        	        break;
             	case "se":
					panDir = "nw";
        	        break;
             	case "sw":
					panDir = "ne";
        	        break;
        	 	default:
        	 		panDir = "error";
            }
            return panDir;
    }
});


/** Provide some new globals for brevity sake **/
window.$d = function(_n) { return dojo.byId(_n); }
window.$w = function(_n) { return dijit.byId(_n); }

mq.getScrollBarPosition = function() {
	var scrollposition = {};
	scrollposition.ptOffsetY = 0;
	scrollposition.ptOffsetX = 0;
		if(typeof(window.pageYOffset) == 'number') {
			//Netscape compliant
			scrollposition.ptOffsetY = window.pageYOffset;
			scrollposition.ptOffsetX = window.pageXOffset;
		} else if(document.body  && (document.body.scrollLeft || document.body.scrollTop)) {
			//DOM compliant
			scrollposition.ptOffsetY = document.body.scrollTop;
			scrollposition.ptOffsetX = document.body.scrollLeft;
		} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
			//IE6 standards compliant mode
			scrollposition.ptOffsetY = document.documentElement.scrollTop;
			scrollposition.ptOffsetX = document.documentElement.scrollLeft;
		}	
		return scrollposition;
};
