// CONTEXT MENU CONTROLLER
// (c) 2006 by klickTel AG, Essen.
// All rights reserved. Unauthorized duplication and use prohibited.

contextMenuController = Base.extend({
	x:0,
	y:0,
	longitude:0,
	latitude:0,
	ppmObject:0,
	domNode:null,
	menus: Array ("contextMenuMap", "contextMenuSE", "contextMenuIE", "markerContextmenu"),
	template: null,
	divListID:'',
	
	constructor: function (ppmObject) {
		this.ppmObject = ppmObject;
		ppmObject.addWidget ('contextMenuMap');
		this.divListID = this.ppmObject.parentNode.id+'_markerContextmenu';
	},
	 
	show: function (template) {
		this.ppmObject.hideInfoWindow();
		this.ppmObject.cleanupUI();
		this.template = template;
		myDivID=this.ppmObject.parentNode.id+"_"+template;
		div = $(myDivID);
		
		if(div != null) {
			div.style.position = "absolute";
			listWidth  = Element.getDimensions(div).width;
			listHeight = Element.getDimensions(div).height;
			ppmWidth  = Element.getDimensions(this.ppmObject.parentNode.id).width;
			ppmHeight = Element.getDimensions(this.ppmObject.parentNode.id).height;
			newX=this.x;
			newY=this.y;
			
			if (myDivID == 'mymap_contextMenuSE') {
				mapX = this.x;
				mapY = this.y-13;
			} else {
				mapX = this.x;
				mapY = this.y;
			}
			
			if (newX <= ppmWidth/2 && newY <= ppmHeight/2) {
				// oben links
				div.style.left = mapX+"px";
				div.style.top  = mapY+"px";			
			} else if (newX > ppmWidth/2 && newY <= ppmHeight/2) {
				//oben rechts
				div.style.left = (mapX-listWidth)+"px";
				div.style.top  = mapY+"px";
			} else if (newX <= ppmWidth/2 && newY > ppmHeight/2) {
				// unten links
				div.style.left = mapX+"px";
				div.style.top  = (mapY-listHeight)+"px";
			} else if (newX > ppmWidth/2 && newY > ppmHeight/2) {
				// unten rechts;
				div.style.left = (mapX-listWidth)+"px";
				div.style.top  = (mapY-listHeight)+"px";			
			}			
			
			if (div.style.display == 'none') {
				new Effect.Appear (div, {duration:0.2});
			}
		} else {
			localLog('ERROR - contextMenuController.show: '+template+' ('+myDivID+') is null!');
		}
	},
	
	hide: function () {
			if (this.template != null && $(this.ppmObject.parentNode.id+"_"+this.template).style.display != 'none') {
				$(this.ppmObject.parentNode.id+"_"+this.template).style.display="none";
			}
	},

	showDynamicMenu: function (marker) {
		this.ppmObject.hideInfoWindow();
		this.ppmObject.markerController.lastMarkerFound = marker;

		if($(this.ppmObject.parentNode.id+"_"+this.template).style.display='block') {
			$(this.ppmObject.parentNode.id+"_"+this.template).style.display='none';
		}

		contextDivList = $(this.divListID);
		contextDivList.style.position = "absolute";
		listWidth  = Element.getDimensions(this.divListID).width;
		listHeight = Element.getDimensions(this.divListID).height;
		ppmWidth  = Element.getDimensions(this.ppmObject.parentNode.id).width;
		ppmHeight = Element.getDimensions(this.ppmObject.parentNode.id).height;


		if (this.x <= ppmWidth/2 && this.y <= ppmHeight/2) {
			// oben links
			contextDivList.style.left = (this.x)+"px";
			contextDivList.style.top  = (this.y-16)+"px";			
		} else if (this.x > ppmWidth/2 && this.y <= ppmHeight/2) {
			//oben rechts
			contextDivList.style.left = (this.x-listWidth)+"px";
			contextDivList.style.top  = (this.y-16)+"px";
		} else if (this.x <= ppmWidth/2 && this.y > ppmHeight/2) {
			// unten links
			contextDivList.style.left = (this.x)+"px";
			contextDivList.style.top  = (this.y-16-listHeight)+"px";
		} else if (this.x > ppmWidth/2 && this.y > ppmHeight/2) {
			// unten rechts;
			contextDivList.style.left = (this.x-listWidth)+"px";
			contextDivList.style.top  = (this.y-16-listHeight)+"px";			
		}
		
		if (contextDivList.style.display == 'none') {
		
			$(this.ppmObject.parentNode.id+'_markerController_location_save').style.display='block';
			
			// These are (currently) always shown
			if(this.ppmObject.pageMode!='route') {
				$(this.ppmObject.parentNode.id+'_markerController_route_start').style.display='block';
				$(this.ppmObject.parentNode.id+'_markerController_route_end').style.display='block';
				$(this.ppmObject.parentNode.id+'_markerController_route_stop').style.display='block';
				$(this.ppmObject.parentNode.id+'_markerController_route_start').parentNode.style.display='block';
				$(this.ppmObject.parentNode.id+'_markerController_route_end').parentNode.style.display='block';
				$(this.ppmObject.parentNode.id+'_markerController_route_stop').parentNode.style.display='block';
			} else {
				$(this.ppmObject.parentNode.id+'_markerController_route_start').style.display='none';
				$(this.ppmObject.parentNode.id+'_markerController_route_end').style.display='none';
				$(this.ppmObject.parentNode.id+'_markerController_route_stop').style.display='none'
				$(this.ppmObject.parentNode.id+'_markerController_route_start').parentNode.style.display='none';
				$(this.ppmObject.parentNode.id+'_markerController_route_end').parentNode.style.display='none';
				$(this.ppmObject.parentNode.id+'_markerController_route_stop').parentNode.style.display='none'
			}
			
			$(this.ppmObject.parentNode.id+'_markerController_email').style.display='block';

			// No changes or deletions on persistent markers
			if(this.ppmObject.pageMode!='route') {
				if(!marker.isPersistent) {
					$(this.ppmObject.parentNode.id+'_markerController_marker_delete').style.display='block';
					$(this.ppmObject.parentNode.id+'_markerController_marker_edit').style.display='block';
					$(this.ppmObject.parentNode.id+'_markerController_marker_delete').parentNode.style.display='block';
					$(this.ppmObject.parentNode.id+'_markerController_marker_edit').parentNode.style.display='block';
				} else {
					$(this.ppmObject.parentNode.id+'_markerController_marker_delete').style.display='none';
					$(this.ppmObject.parentNode.id+'_markerController_marker_edit').style.display='none';
					$(this.ppmObject.parentNode.id+'_markerController_marker_delete').parentNode.style.display='none';
					$(this.ppmObject.parentNode.id+'_markerController_marker_edit').parentNode.style.display='none';
				}
			} else {
				$(this.ppmObject.parentNode.id+'_markerController_marker_delete').style.display='none';
				$(this.ppmObject.parentNode.id+'_markerController_marker_edit').style.display='none';
				$(this.ppmObject.parentNode.id+'_markerController_marker_delete').parentNode.style.display='none';
				$(this.ppmObject.parentNode.id+'_markerController_marker_edit').parentNode.style.display='none';
			}
			
			ppmObject=this.ppmObject;
			
			// handle hotel toggle
			if(this.ppmObject.markerController.dynamicOptions.hotels == 1) {
				// Check if hotels are still selected!
				fnd=0;
				this.ppmObject.markerController.braids.hotel.each(function(braid) {
					v=ppmObject.poi.braIds.find(function (id) {
						return (braid == id);
					});
					if(v) fnd++;
				});
				if(fnd < this.ppmObject.markerController.braids.hotel.length) {
					this.ppmObject.markerController.dynamicOptions.hotels = 0;
					$(this.ppmObject.parentNode.id+'_markerController_toggle_hotels_selected').style.display='none';
				} else {
					$(this.ppmObject.parentNode.id+'_markerController_toggle_hotels_selected').style.display='block';
				}
			} else {
				$(this.ppmObject.parentNode.id+'_markerController_toggle_hotels_selected').style.display='none';
			}
			
			// handle restaurant toggle
			if(this.ppmObject.markerController.dynamicOptions.restaurants == 1) {
				// Check if hotels are still selected!
				fnd=0;
				this.ppmObject.markerController.braids.restaurant.each(function(braid) {
					v=ppmObject.poi.braIds.find(function (id) {
						return (braid == id);
					});
					if(v) fnd++;
				});
				if(fnd < this.ppmObject.markerController.braids.restaurant.length) {
					this.ppmObject.markerController.dynamicOptions.restaurants = 0;
					$(this.ppmObject.parentNode.id+'_markerController_toggle_restaurants_selected').style.display='none';
				} else {
					$(this.ppmObject.parentNode.id+'_markerController_toggle_restaurants_selected').style.display='block';
				}
			} else {
				$(this.ppmObject.parentNode.id+'_markerController_toggle_restaurants_selected').style.display='none';
			}
			
			// handle parking toggle
			if(this.ppmObject.markerController.dynamicOptions.parking == 1) {
				$(this.ppmObject.parentNode.id+'_markerController_toggle_parking_selected').style.display='block';
			} else {
				$(this.ppmObject.parentNode.id+'_markerController_toggle_parking_selected').style.display='none';
			}
				new Effect.Appear (contextDivList, {duration:0.2});
			}
	},
	
	hideDynamicMenu: function () {
		if (this.divListID != null && $(this.divListID) != null && $(this.divListID).style.display != 'none') {
			$(this.divListID).style.display="none";
		}
	}
	
})
