/*
 *  Google Maps v1.0
 *  
 *	Szerző: Bodonyi László (Profartis Design Kft.)
 *	Utoljára módosítva: 2009-04-08 11:57
 *	
 */ 
  
	function GoogleMaps( options )
	{
		
		this.overlay = null;
		this.mapbox = null;
		
		this.options = {
			'address' : options.address,
			'info' : options.info ? options.info : '<br/>'+options.address,
			'zoom' : options.zoom ? options.zoom : 15,
			'auto' : options.auto ? options.auto : false
		}
				
		this.createOverlay = function(){
			if ( this.overlay ){
				this.overlay.style.display = 'block';
			}
			else {		
				var overlay = document.createElement('div');
				overlay.id = 'google-map-overlay';
				overlay.style.background = '#000';
				overlay.style.position = 'absolute';
				overlay.style.zIndex = 1000;
				overlay.style.top = 0;
				overlay.style.left = 0;				
				overlay.style.width = document.body.scrollWidth + 'px';
				overlay.style.height = document.body.scrollHeight + 'px';
				overlay.style.visibility = 'hidden';
				document.body.appendChild(overlay);
				this.overlay = overlay, t = this;
				this.setOpacity( this.overlay, 0.5 );
				this.overlay.onclick = function(){ t.Close(t); }			
			}
		}
		
		this.createMapBox = function()
		{
			if ( this.mapbox ){
				this.mapbox.style.display = 'block';
			}
			else {
				
				var t = this;
				var viewport = this.getViewport();			
				
				// MapBox
				var mapbox = document.createElement('div');
				mapbox.id = 'google-map-box';
				mapbox.style.background = '#fff';	
				mapbox.style.border = '1px solid black';
				mapbox.style.padding = '5px';
				mapbox.style.textAlign = 'center';
				mapbox.style.position = 'absolute';
				mapbox.style.zIndex = 1001;				
				mapbox.style.left = Math.ceil( (viewport[0]-620) / 2 ) + 'px';		
				mapbox.style.top = '0px';		
				mapbox.style.width = '610px';
				mapbox.style.height = '470px';
				mapbox.style.visibility = 'hidden';
				document.body.appendChild(mapbox);
				this.mapbox = mapbox;
				
				// GoogleMap
				var googleMap = document.createElement('div');
				googleMap.style.width = '610px';
				googleMap.style.height = '450px';
				this.mapbox.appendChild( googleMap );
				this.LoadMap( googleMap );
				
				// CloseButton
				var closeButton = document.createElement('a');
				closeButton.innerHTML = 'Close Window';
				closeButton.href = 'javascript:;';
				closeButton.style.font = '11px Verdana';
				closeButton.style.color = '#111';
				closeButton.style.position = 'relative';
				closeButton.style.top = '5px';
				closeButton.onclick = function(){ t.Close(t); };
				this.mapbox.appendChild(closeButton);
				
			}
		}			
				
		this.initialize = function(){
			
			this.createOverlay();
			this.createMapBox();
			
			if(this.options.auto) {				
				this.Open();
			}
			
			var t = this;
			document.onkeydown = function(event){
				var keyCode = window.event ? window.event.keyCode : event.keyCode;
				if( keyCode == 27 ){ t.Close(t); }
			}	

		}
		
		this.LoadMap = function( targetObject )
		{	
	    	if (GBrowserIsCompatible()) {
				var map = new GMap2( targetObject );
				var G = new GClientGeocoder();		
				var T = this;		
				G.getLocations(this.options.address, function(result){				
					if (result.Status.code == G_GEO_SUCCESS) {					
						var p = result.Placemark[0].Point.coordinates;
						var loc = new GLatLng(p[1], p[0]);
						map.setCenter(loc, 13);
						map.setZoom(T.options.zoom)
						map.addOverlay(new GMarker(loc));
						map.enableScrollWheelZoom();
						map.addControl(new GLargeMapControl())
						if (T.options.info) {
							map.openInfoWindow(map.getCenter(), T.options.info.replace(/&lt;/gi,'<').replace(/&gt;/gi,'>') );
						}
					}
				});
			}		
		}
		
		this.Open = function()
		{	
			var viewport = this.getViewport();
			this.overlay.style.visibility = 'visible';
			this.mapbox.style.top = this.getScrollOffset() + Math.round( (viewport[1]-480) / 2 ) + 'px';
			this.mapbox.style.visibility = 'visible';
		}
		
		this.Close = function(t){
			t = t ? t : this;
			t.overlay.style.visibility = 'hidden';
			t.mapbox.style.visibility = 'hidden';
		}
		
		this.setOpacity = function(element,alpha)
		{
			var style = element.style;
			if( style.MozOpacity != undefined ) { //Moz and older
				style.MozOpacity = alpha;
			}
			else if( style.opacity != undefined ) { //Opera
				style.opacity = alpha;
			}
			else if( style.filter != undefined ) { //IE
				style.filter = "alpha(opacity=0)";
				element.filters.alpha.opacity = ( alpha * 100 );
			}			
		}
		
		this.getScrollOffset = function()
		{
			return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;			
		}
		
		this.getViewport = function(){					
			var viewportwidth;
			var viewportheight; 
			if (typeof window.innerWidth != 'undefined'){
				viewportwidth = window.innerWidth;
				viewportheight = window.innerHeight;
			}
			else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0){
				viewportwidth = document.documentElement.clientWidth;
				viewportheight = document.documentElement.clientHeight;
			} 
			else {
				viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
				viewportheight = document.getElementsByTagName('body')[0].clientHeight;
			}  
  			return new Array( viewportwidth, viewportheight );
		}
		
		this.initialize();
		
    }