/**
	key - klucz google maps // to nie bangla
	searchForm - (true|false) - default 'false', wyswietla formularz przeszukiwania mapy
	startLat - poczatkowa szerokosc geograficzna
	startLng - poczatkowa dlugosc geograficzna
	startZoom - poczatkowe przyblizenie
	control - typ wyswietlanej kontrolki przyblizenia
	scrollZoom
	setPosition - (true|false) - default false, ustawia pin w miejscu wskazanym przez wspĂłĹ‚rzÄ™dne startLat i startLng
	changePosition - (true|false) - default false, umoĹĽliwia przesuwanie pina
	savePositionFunction - nazwa funkcji obsĹ‚ugujÄ…ca zapis pozycji uĹĽytkownika
	savePositionMessage - tekst wyĹ›wietlany jako pytanie czy wybrana zostaĹ‚a dobra pozycja
*/

//klucz dla poszkole.pl
document.write( '<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAXvT_kg3wyoUj9YjnL_PI_hSzxfULOaOwdGH10CFZJe2UU0Ar0xSf2j-uawfgrU2fN5QR_eDKSBdoqQ" type="text/javascript"></script>' );
//klucz dla poszkole2.pl
//document.write( '<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAXvT_kg3wyoUj9YjnL_PI_hRhBvyO4ks85VfP3B3B2QRltyFU9hTqmRUTKe_pY7dKKt828nhonLCudg" type="text/javascript"></script>' );
function PsMap( options ){
	var body = document.getElementsByTagName( 'body' )[0];
	if( body.getAttribute( 'onunload' ) ){
		body.setAttribute( 'onunload', body.getAttribute( 'onunload' ) + '; GUnload();' );
	}else{
		body.setAttribute( 'onunload', 'GUnload();' );
	}
	
	if( !options.key || !options.mapCanvas ){
		alert( 'Twój klucz mapy jest nieprawidłowy' );
		return;
	}
	
	if (GBrowserIsCompatible()) {
		//obsluga poczatkowej pozycji
		if( options.startLat && options.startLng ){
			var latLng = new GLatLng( options.startLat, options.startLng ); 
		}
		else{
			var latLng = new GLatLng( 52, 19 );
		}
		
		//obsluga poczatkowego przyblizenia
		if( options.startZoom ){
			var zoom = options.startZoom;
		}
		else{
			var zoom = 6;
		}
		
		if( options.showSearchForm ){
			var mapDiv = document.getElementById( options.mapCanvas );

			var mapBorder = document.createElement( 'div' );
			mapBorder.style.width = '100%';
			mapBorder.style.height = '100%';
			
			var searchForm = document.createElement( 'form' );
			searchForm.className = 'psform';
			
			searchForm.innerHTML = "\n\n" + '<fieldset><legend>Wybierz polozenie</legend><p class="one"><label for="road">Ulica:</label><input type="text" name="road" id="road" size="15" value="" /></p>'
				+ '<p class="one"><label for="city">Miasto:</label><input type="text" name="city" id="city" size="15" value="'+ options.city +'" /></p>'
				+ '<p class="one"><label for="country">Panstwo:</label><select name="country" size="1">'
				+ '<option>Afganistan</option><option>Albania</option><option>Algeria</option><option>Andora</option><option>Angola</option><option>Antyle Holenderskie</option><option>Arabia Saudyjska</option><option>Argentyna</option><option>Armenia</option><option>Aruba</option><option>Australia</option><option>Austria</option><option>Azerbejdżan</option><option>Bahama</option><option>Bahrajn</option><option>Bangladesz</option><option>Barbados</option><option>Barranquilla</option><option>Belgia</option><option>Belize</option><option>Benin</option><option>Bermudy</option><option>Bhutan</option><option>Białoruś</option><option>Birma</option><option>Bogota</option><option>Boliwia</option><option>Botswana</option><option>Bośnia i Hercegowin...</option><option>Brazylia</option><option>Brunei</option><option>Burkina Faso</option><option>Burundi</option><option>Bułgaria</option><option>Chile</option><option>Chiny</option><option>Chorwacja</option><option>Cypr</option>'
				+ '<option>Czad</option><option>Czechy</option><option>Dania</option><option>Demokratyczna Republ...</option><option>Dominika</option><option>Dżibuti</option><option>Egipt</option><option>Ekwador</option><option>Erytrea</option><option>Estonia</option><option>Etiopia</option><option>Falklandy (Malwiny)</option><option>Federacja Saint Kitt...</option><option>Fidżi</option><option>Filipiny</option><option>Finlandia</option><option>Francja</option><option>Gabon</option><option>Gambia</option><option>Ghana</option><option>Gibraltar</option><option>Grecja</option><option>Grenada</option><option>Grenlandia</option><option>Gruzja</option><option>Guadelupa</option><option>Gujana</option><option>Gujana Francuska</option><option>Gwatemala</option><option>Gwinea</option><option>Gwinea Równikowa</option><option>Haiti</option><option>Hiszpania</option><option>Holandia</option><option>Honduras</option><option>Hong Kong</option><option>Indie</option><option>Indonezja</option><option>Irak</option><option>Iran</option><option>Irlandia</option><option>Islandia</option><option>Izrael</option><option>Jamajka</option><option>Japonia</option><option>Jemen</option><option>Jordan</option><option>Kambodża</option><option>Kamerun</option><option>Kanada</option><option>Katar</option><option>Kazachstan</option><option>Kenia</option><option>Kirgistan</option><option>Komory</option><option>Korea Południowa</option><option>Korea Północna</option><option>Kostaryka</option><option>Księstwo Liechtenst...</option><option>Kuba</option><option>Kuwejt</option><option>Laos</option><option>Lesoto</option><option>Liban</option><option>Liberia</option>'
				+ '<option>Libia</option><option>Litwa</option><option>Luksemburg</option><option>Macedonia</option><option>Madagaskar</option><option>Makao</option><option>Malediwy</option><option>Malezja</option><option>Malta</option><option>Maroko</option><option>Martynika</option><option>Mauretania</option><option>Miasto Meksyk</option><option>Mikronezja</option><option>Monako</option><option>Mongolia</option><option>Monterrey</option><option>Mozambik</option><option>Mołdawia</option><option>Namibia</option><option>Nepal</option><option>Niemcy</option><option>Niger</option><option>Nigeria</option><option>Nigue</option><option>Nikaragua</option><option>Norwegia</option><option>Nowa Kaledonia</option><option>Nowa Zelandia</option><option>Oman</option><option>Pakistan</option><option>Panama</option><option>Papua-Nowa Gwinea</option><option>Paragwaj</option><option>Peru</option><option>Polinezja</option><option selected="selected">Polska</option><option>Portugalia</option><option>Puerto Rico</option><option>Republika Conch\'a</option><option>Republika Dominikany</option><option>Republika Gwinei Bis...</option><option>Republika Kiribati</option><option>Republika Malawi</option><option>Republika Mali</option><option>Republika Mauritiusa</option><option>Republika Nauru</option><option>Republika Palau</option><option>Republika Południow...</option><option>Republika Surinamu</option><option>Republika Zielonego ...</option><option>Republika Środkowej...</option><option>Rosja</option><option>Rumunia</option><option>Rwanda</option><option>Saint Lucia</option><option>Saint Vincent i Gren...</option><option>Saint-Pierre i Mique...</option><option>Salwador</option><option>Samoa</option><option>Samoa</option><option>San Marino</option><option>Sao Tome i Principe</option><option>Senegal</option><option>Serbia i Czarnogóra</option><option>Seszele</option>'
				+ '<option>Sierra Leone</option><option>Singapur</option><option>Somalia</option><option>Sri Lanka</option><option>Stany Zjednoczone</option><option>Suazi</option><option>Sudan</option><option>Syria</option><option>Szwajcaria</option><option>Szwecja</option><option>Słowacja</option><option>Słowenia</option><option>Tadżykistan</option><option>Taiwan</option><option>Tajlandia</option><option>Tanzania</option><option>Terytorium Guamu</option><option>Timor Wschodni</option><option>Togo</option><option>Tokelau</option><option>Tonga</option><option>Trynidad i Tobago</option><option>Tunezja</option><option>Turcja</option><option>Turkmenistan</option><option>Tuvalu</option><option>Uganda</option><option>Ukraina</option><option>Urugwaj</option><option>Uzbekistan</option><option>Vanuatu</option><option>Watykan</option><option>Wenezuela</option><option>Wielka Brytania</option><option>Wietnam – Hanoi</option><option>Wietnam – Ho Chi M...</option><option>Wspólnota Marianów...</option><option>Wybrzeże Kości Sł...</option><option>Wyspa Anguilla</option><option>Wyspa Bouvet</option><option>Wyspa Bożego Narodz...</option><option>Wyspa Majotta</option><option>Wyspa Montserrat</option><option>Wyspa Nortfork</option><option>Wyspa Pitcairn</option><option>Wyspa Reunion</option><option>Wyspy Antigua i Barb...</option><option>Wyspy Cooka</option><option>Wyspy Dziewicze</option><option>Wyspy Kajmana</option><option>Wyspy Kokosowe</option><option>Wyspy Marshall\'a</option><option>Wyspy Owcze</option><option>Wyspy Solomona</option><option>Wyspy Svalbard i Jan...</option><option>Wyspy Turks i Caicos</option><option>Wyspy Wallis i Futun...</option><option>Węgry</option><option>Włochy</option><option>Zambia</option><option>Zimbabwe</option><option>Zjednoczone Emiraty ...</option><option>Łotwa</option>'
				+ '</select></p><p class="submit"><input type="submit" name="set" class="submit" value="Szukaj" /><p></fieldset>';

			searchForm.onsubmit = function(){
				searchAdress();
				return false;
			}
			//mapDiv.appendChild( searchForm );
			jQuery(searchForm).insertBefore( mapDiv );
			mapDiv.appendChild( mapBorder );

			var savePositionFunction = options.savePositionFunction;
		}
		else{
			var mapBorder = document.getElementById( options.mapCanvas );
		}
		
		var infoBox = document.createElement( 'div' );
		infoBox.className = 'googleMapsInfoBox';
		
		var mapCanvas = document.createElement( 'div' );
		mapCanvas.style.width = '100%';
		mapCanvas.style.height = '100%';
		
		mapBorder.className = 'mapBorder';
		mapBorder.appendChild( infoBox );
		mapBorder.appendChild( mapCanvas );
			
		var map = new GMap2( mapCanvas );
		map.setCenter( latLng , zoom );
		
		if( options.setPosition ){
			if( options.changePosition ){
				if( options.savePositionMessage ){
					var savePositionMessage = options.savePositionMessage;
				}else{
					var savePositionMessage = 'Chcesz właśnie tu zamieszkać?';
				}
				var userMarker = new GMarker( latLng, {draggable: true} );
				map.addOverlay(userMarker);
				GEvent.addListener(userMarker, "dragstart", function() {
					map.closeInfoWindow();
				});
		
				GEvent.addListener(userMarker, "dragend", function() {
					userMarker.openInfoWindowHtml( savePositionMessage + '<br /><a href="javascript:void(0);" onclick="return '+savePositionFunction+'( ' + userMarker.getLatLng().lat() + ', ' + userMarker.getLatLng().lng() + ' );">TAK!</a>' );
				});
				
				if( !options.startLat && !options.startLng ){
					searchAdress();
				}
			} else {
				var userMarker = new GMarker( latLng, {draggable: false} );
				map.addOverlay(userMarker);
			}
			this.userMarker = userMarker;
		}

		//controllsy
		map.addControl(new GScaleControl());
		if( options.control && ( options.control == 'small' ) ){
			map.addControl(new GSmallMapControl());
		}
		else{
			map.addControl(new GLargeMapControl());
		}
		if( options.scrollZoom ){
			map.enableScrollWheelZoom();
		}
	}
	
	function setUserMarker( latLng ){
		if( userMarker ){
			userMarker.setLatLng( latLng );
		}
		map.setCenter( latLng, 15 );
	};
	
	function searchAdress(){
		var gGeoCoder = new GClientGeocoder();
		gGeoCoder.getLatLng( searchForm.road.value + ', ' + searchForm.city.value + ', ' + searchForm.country.value , function( point ){
			if( !point ){
				gGeoCoder.getLatLng( searchForm.city.value + ', ' + searchForm.country.value , function( point ){
					if( !point ){
						alert( 'Nie znaleziono takiej miejscowosci' );
						return false;
					}
					else{
						setUserMarker( point, true );
					}
				});
			}
			else{
				setUserMarker( point, true );
			}
			if( userMarker ){
				userMarker.openInfoWindowHtml(  savePositionMessage + '<br /><a href="javascript:void(0);" onclick="return '+savePositionFunction+'( ' + userMarker.getLatLng().lat() + ', ' + userMarker.getLatLng().lng() + ' );">TAK!</a>' );
			}
		});
		return false;
	};
	this.infoBox = infoBox;
	this.map = map;
	
	this.baseIcon = new GIcon();
	this.baseIcon.iconSize = new GSize(64, 59);
	this.baseIcon.iconAnchor = new GPoint(23, 59);
	this.baseIcon.infoWindowAnchor = new GPoint(9, 2);
	this.baseIcon.image = "http://static.poszkole.pl/images/pin_grupa.png";
	
	this.userIcon = new GIcon();
	this.userIcon.iconSize = new GSize(50, 36);
	this.userIcon.iconAnchor = new GPoint(14, 36);
	this.userIcon.infoWindowAnchor = new GPoint(9, 2);
	this.userIcon.image = "http://static.poszkole.pl/images/pin_babeczka.png";
	
	this.countShows = 0;
};
PsMap.prototype.hideInfoBox = function(){
	this.infoBox.style.visibility = 'hidden';
}
PsMap.prototype.refreshInfoBox = function( marker, val ){
	val = '<img style="position: absolute; margin: 70px 0px 0px 10px;" src="http://static.poszkole.pl/images/layout/arr_white_bottom.gif" alt="" />' + val;
	var point = this.map.fromLatLngToContainerPixel( marker.getLatLng() );
	this.infoBox.innerHTML = val;
	this.infoBox.style.marginTop = point.y-118 + 'px';
	this.infoBox.style.marginLeft = point.x-16 + 'px';
	this.infoBox.style.visibility = 'visible';
}
PsMap.prototype.addListener = function( name, fn ){
	GEvent.addListener(this.map, name, fn );
}
PsMap.prototype.addUserMarker = function(point, content){
	if( content.getAttribute("sex") == "male" ){
		this.userIcon.image = "http://static.poszkole.pl/images/pin_facecik.png";
	} else {
		this.userIcon.image = "http://static.poszkole.pl/images/pin_babeczka.png";
	}
	markerOptions = { icon:this.userIcon };
	var marker = new GMarker(point, markerOptions);

	var html = '<div style="margin: 5px"><img align="left" src="' + content.getAttribute("avatar") + '" alt="poszkole.pl" />' 
		+ '<div style="float: left; margin-top: 14px; margin-left: 5px; color: #185da2; font-size: 12px;">'
		+ '<a href="/strona/' + content.getAttribute("user_id") + '">' + content.getAttribute("nick") + '</a>'
		+ '<br /><img src="http://static.poszkole.pl/images/people.gif" alt="" align="left" />&nbsp;' + content.getAttribute("count_friends")
		+ '</div><br class="clear" /></div>';
		
	GEvent.addListener(marker, 'mouseover', function() {
		map.refreshInfoBox( marker, html );
		map.countShows++;
		setTimeout( 'if( map.countShows=='+map.countShows+' ){ map.hideInfoBox();}', 2000);
	});
	
	this.map.addOverlay(marker);
	
	if( content.getAttribute("user_id") == this.activeUser ){
		this.refreshInfoBox( marker, html );
	}
}
PsMap.prototype.addCityMarker = function(point, size){
	var icon = new GIcon(this.baseIcon);
	icon.iconSize = new GSize( parseFloat(size) * icon.iconSize.width, parseFloat(size) * icon.iconSize.height );
	icon.iconAnchor = new GPoint( parseFloat(size) * icon.iconAnchor.x, parseFloat(size) * icon.iconAnchor.y );
	
	markerOptions = { icon:icon };
	var marker =  new GMarker(point, markerOptions);
	
	GEvent.addListener(marker, 'click', function() {
		if( map.map.getZoom() < 17 )
		{
			map.map.setCenter( marker.getLatLng() , parseInt( map.map.getZoom() )+1 );
		}
	});
	
	this.map.addOverlay(marker);
}
PsMap.prototype.refresh = function(){
	var pos = this.map.getCenter(); 
	this.map.setCenter( new GLatLng( pos.lat(), pos.lng()+0.001 ), this.map.getZoom() );
}
PsMap.prototype.setActiveUser = function( userId ){
	this.activeUser = userId;
}