YAHOO.namespace("terena.container");

var GMWrapper = function(){

	// some private variables accessible by member functions
	var $D = YAHOO.util.Dom;
	var $E = YAHOO.util.Event;
	var $C = YAHOO.util.Connect;
	var $Con = YAHOO.terena.container;
	var $ = $D.get;
	var toggle_elm = "gm_toggle";

	return {
		init : function(){
			this.overlay.render();
			this.map.show();
		},

		// toggle button object
		toggle : {
			show : function(e) {
				$D.setStyle(toggle_elm, 'display', 'inline');
				this.toggle('off');
			},
			hide : function() {
				$D.setStyle(toggle_elm, 'display', 'none');
			},
			toggle : function(toggle) {
				if (toggle == "off") {
					$(toggle_elm).innerHTML = 'Show Map';
					$E.removeListener(toggle_elm,'click');
					$E.addListener(toggle_elm,'click', GMWrapper.overlay.show);
				} else if (toggle == "on") {
					$(toggle_elm).innerHTML = 'Hide Map';
					$E.removeListener(toggle_elm,'click');
					$E.addListener(toggle_elm,'click', GMWrapper.overlay.hide);
				}
			}
		},

		// overlay object
		overlay : {
			render : function() {
				$Con.overlay = new YAHOO.widget.Overlay("gm_overlay", {fixedcenter:true, visible:false});
				$Con.overlay.render();
			},

			show : function(e) {
				$E.stopEvent(e);
				$Con.overlay.show();
				GMWrapper.toggle.toggle("on");
			},

			hide : function(e) {
				$E.stopEvent(e);
				$Con.overlay.hide();
				GMWrapper.toggle.toggle("off");
			}
		},

		// google maps object
		map : {
			show : function() {
				if (GBrowserIsCompatible()) {
					map = new GMap2($('gm_overlay'));
					map.addControl(new GSmallMapControl());
					map.addControl(new GMapTypeControl());
					geocoder = new GClientGeocoder();
					this.getLocation();
				} else {
					GMWrapper.toggle.hide();
				}
			},

			getLocation : function() {
				var success = function(o) {
					GMWrapper.map.setLocation(o.responseText);
				};
				var failure = function(o){

				};
         var event_id = $('gm_event_id').innerHTML;
         var url = "details.php?event_id="+event_id+"&ajaxify=html";
         var callback = {
         	success: success,
         	failure: failure
         };

         var cObj = $C.asyncRequest('POST', url, callback);
			},

			setLocation : function(location) {
				if (geocoder) {
					geocoder.getLatLng(
				  location,
				  function(point) {
				  	if (!point) {
				    	GMWrapper.toggle.hide();
				    } else {
				    	GMWrapper.toggle.show();
				    	map.setCenter(point, 13);
				      var marker = new GMarker(point);
				      map.addOverlay(marker);
				      marker.openInfoWindowHtml(location);
			      }
					});
				}
			}
		}

	};

}();

function pageLoaders() {
	GMWrapper.init();
}

YAHOO.util.Event.addListener(window,'load',pageLoaders);
