var Map = {
    map: false,
    markers: [],
    title: false,
    photo: false,

    init: function(location, photo) {
        Map.photo = photo
        var map = $('#googlmap');
        var height = ($(window).height()/2) - ($('#map-contrainer').height()/2) + 'px';
        var width = ($(window).width()/2) - ($('#map-contrainer').width()/2) + 'px';
        $('#map-contrainer').css({'margin-top': height, 'margin-left': width});
        map.appendTo('body');
       
        $('#link-to-map').click(function(){
            $('#googlmap').css('top', '0px');
            Map.show(location);
            return false;
        });

        $('.background').unbind('click').click(function(){
            $(map).css('top','-5000px');
            return false;
        });
    },

    show: function(location) {
        var latlng = '';
        if (location) {
            location = location.split(',');
            latlng = new google.maps.LatLng(location[0],location[1]);
        } else {
            latlng = new google.maps.LatLng(49.2445, 19.966965);
        }

        var myOptions = {
            zoom: 11,
            center: latlng,
            navigationControl: false,
            scaleControl: true,
            mapTypeId: google.maps.MapTypeId.TERRAIN
        };

        this.map = new google.maps.Map(document.getElementById('mapa'), myOptions);

        if (location) {           
            Map.addMarker(latlng);
            Map.addInfo(this.markers[0])
        }
    },

    addMarker: function(location) {
        var marker = new google.maps.Marker({
            position: location,
            title: Map.title,
            map: Map.map
        });
        
        this.markers.push(marker);
    },

    addInfo: function(marker){
        var contentString = '<div style="text-align:center;"><img src="' + Map.photo + '" alt="' + this.title + '" /> <br/><br/>' + this.title + '</div>';
        var infowindow = new google.maps.InfoWindow({
            content : contentString
        });

        infowindow.open(this.map,marker);
    },

    setTitle: function(t){
        this.title = t;
    }
}

Map.Form = {
    map: false, //uchwyt do mapy
    markers: [], //tablica z markerami
    location: false, //polozenie markera
    name: false, // nazwa pola obslugujacego mape

	/**
	 * Inicjalizacja
	 */
    init : function(name){
        this.name = name;

        $(document).ready(function(){
            // Ustawienie polozenia markera z bazy danych
            if ($('#' + name).attr("value") != '') {
                var location = $('#' + name).attr("value").split(",");
                Map.Form.location =  new google.maps.LatLng(location[0], location[1]);
            }

            // Inicjalizacja malej mapy
            Map.Form.showSmall();

            // Bindowanie przycisku inicjalizujacego duza mape
            $('#show-big-map').click(function(){
               Map.Form.showBig();
               return false;
            });
        });
    },

    /**
     * Funkcja inicjalizuje mape google
     */
    createMap : function(mapName){
		// Domyslne polozenie mapy
		var latlng = '';
		if (Map.Form.location == false) {
			latlng = new google.maps.LatLng(49.2445, 19.966965);
		} else {
			latlng = Map.Form.location;
		}

        // Opcje mapy zgodne z googlemaps api
        var options = {
            zoom: 11,
            center: latlng,
            navigationControl: false,
            scaleControl: true,
            mapTypeId: google.maps.MapTypeId.TERRAIN
        };

        this.map = new google.maps.Map(document.getElementById(mapName), options);

        // Jesli istnieje lokalizacja pobrana z pola ustawianie poczatkowego markera
        if (Map.Form.location != false) {
            Map.Form.addMarker();
        }

        // Event zmiany polozenia markera
        google.maps.event.addListener(this.map, 'click', function(event) {
            var i = 0;

            if (Map.Form.markers) {
                for (i in Map.Form.markers) {
                    Map.Form.markers[i].setMap(null);
                }
                Map.Form.markers = [];
            }
            Map.Form.location = event.latLng;
            Map.Form.addMarker();
            Map.Form.setLocationsToForm()
        });

    },

    /*
     * Przygotowanie diva dla malej mapy oraz odpalenie inicjalizacji.
     */
    showSmall : function(){
        var map = $('<div id="form-googlmap" class="small"><div class="background"></div><div id="form-map" style="width:510px;height:300px"></div></div>');
        if ($("#form-googlmap").length != 0) {
            $("#form-googlmap").remove();
        }
        $('#show-big-map').after(map);
        Map.Form.createMap('form-map');
    },

    /**
     * Przygotowanie diva dla duzej mapy oraz odpalenie inicjalizacji.
     */
    showBig : function(){
		var map = '';
        if ($('#form-googlmap-big').length == 0) {
            map = $('<div id="form-googlmap-big" style="top:-5000px;position:fixed;z-index:9999;width:100%;height:100%;"><div class="background" style="background:url(/skins/default/i/photo_bg.png) transparent;width:100%;height:100%;position:absolute"></div><div style="width:1000px; height:550px;margin:auto;background:#fff;border:5px solid #000; position:absolute"><a href="#" class="background"><img src="/skins/default/i/closebox.png" style="position:absolute;right:-20px;top:-20px;" alt="Zamknij" /></a><div id="form-map-big" style="width:1000px; height:550px;"></div></div></div>');
            map.appendTo('body');
        } else {
            map = $('#form-googlmap-big');
        }

        Map.Form.createMap('form-map-big');
        $(map).css('top', '0px');

        var height = ($(window).height()/2) - ($('#form-map-big').height()/2) + 'px';
        var width = ($(window).width()/2) - ($('#form-map-big').width()/2) + 'px';
        $('#form-map-big').parent().css({'margin-top': height, 'margin-left': width});

        $('.background').unbind('click').click(function(){
            $(map).css('top','-5000px');
            Map.Form.showSmall();
            return false;
        });
    },

    /*
     * Dodanie markera do mapy polozenie pobrane ze zmiennej location
     */
    addMarker : function(){
        var marker = new google.maps.Marker({
            position: Map.Form.location,
            map: this.map
        });

        this.markers.push(marker);
    },

    /*
     * Ustawienie lokalizacji dla pola w bazie danych
     */
    setLocationsToForm : function(){
        $('#' + this.name).val(Map.Form.location.b + ',' + Map.Form.location.c);
    }
}
