//fix PNGs
VISUALITALY_BLANK_IMAGE = 'img/s.gif';
(function($){
    $.fn.vAlign = function(){
        return this.each(function(i){
            var ah = $(this).height();
            var ph = $(this).parent().height();
            var mh = (ph - ah) / 2;
            $(this).css('margin-top', mh);
        });
    };
})(jQuery);
jQuery.ifixpng(VISUALITALY_BLANK_IMAGE);
jQuery(function($){
    $("img[src$=.png]").ifixpng();
});

//global
var visualApp;

//coordinate di apertura
if(!open_lat){
    var open_lat = 42.35231;
    var open_lon = 13.3999;
    var open_z = -1;
}


//ready
$(document).ready(function(){
    visualApp = new Visualitaly({
        'mapConf': {
            lat: open_lat,
            lon: open_lon,
            z: open_z,
            tmLnk: 0,
			tmDisp:0,
            imgHost: 'http://maps.visual-italy.it',
            mapType:PGMAP_TYPE_MAP,
			imgType: PGMAP_IMG_TYPE_LIGHT
        },
        'loadAllPoints': false
    });
});


//main class
Visualitaly = function(options){
    var defaultOptions = {
        'serviceUrl': 'service.php',
        'loadAllPoints': false,
        'pagemode': ''
    };
    this.options = $.extend(defaultOptions, (options ||
    {}));
    this.zoomGeoConversionMap = {
        '-3': 2,
        '-2': 2,
        '-1': 2,
        '0': 2,
        '1': 3,
        '2': 4,
        '3': 4,
        '4': 5,
        '5': 5,
        '6': 5,
        '7': 6,
        '8': 7,
        '9': 8,
        '10': 9,
        '11': 9
    };
    this.geoZoomConversionMap = {
        '0': -3,
        '1': -3,
        '2': 0,
        '3': 1,
        '4': 3,
        '5': 5,
        '6': 7,
        '7': 8,
        '8': 9,
        '9': 10
    };
    
    this.nextUniqueId = 0;
    
    this.westContent;
    this.seatWidget = {};
    
    this.streetPlayerData = null;
    this.queryExtraParameters = {};
    this.ptList = [];
    this.streetLevelPoint;
    this.currMode;
    
    this.curAudioSpeaker = '';
    
    this.init();
};
Visualitaly.prototype = {
    nextId: function(){
        this.nextUniqueId++;
        return this.nextUniqueId;
    },
    init: function(){
        var self = this;
        this.changePageLayout('map');
        this.initMappa();
        this.initZoom();
        this.initMapModes();
        this.mapRefresh();
        
        /*
        var poiId = jQuery.url.param("id");
        if (poiId != undefined) {
            this.SelectPoiById(poiId);
        }
        else {
            this.btPoiAction();
        }
        */
    },
    mapRefresh: function(){
        //non serve...
    },
    loadLeftContent: function(url, callback){
        var self = this;
        $.get(url, function(data){
            $('#left').html(data);
            if (callback) {
                callback.apply();
            };
        });
    },
    emptyLeftContent: function(){
        $('#left').html();
    },
    changePageLayout: function(newPageMode){
        var self = this;
        if (newPageMode != this.options.pagemode) {
            this.options.pagemode = newPageMode;
            //vuota left
            this.emptyLeftContent();
            
            //a seconda se siamo in modo mappa o player...
            if (this.options.pagemode == 'map') {
                //nasconde la bussola
                $('#poimarker-sv-container').hide();
                //dimensiona left e caricaci la lista delle regioni
                $('#left').width(170);
                this.loadLeftContent('regioni.html', this.initZoomRegioni);
                //dimensiona il div della mappa
                $('#mappa').width(785).height(607);
                if(this.mappa) this.mappa.setSize(785, 607);
            }else {
                //dimensiona left e caricaci il player
                $('#left').width(500);
                this.loadLeftContent('player.html');
                //dimensiona il layer della mappa e l'oggetto PGMappy
                this.mappa.setSize(455, 360);
                if(this.mappa) $('#mappa').width(455).height(360);
            }
        }
    },
    initMappa: function(){
        var self = this;
        this.options.mapConf.mapWidth = $('#mappa').width();
        this.options.mapConf.mapHeight = $('#mappa').height();
        $('<div id="map-container" />').appendTo('#mappa');
        this.options.mapConf.nameContainer = 'map-container';
        this.mappa = new PGMappy(this.options.mapConf);
        var mapCenter;
        PGEvent.addListener(this.mappa, 'zoomaftermap', this.mapRefresh, this);
        PGEvent.addListener(this.mappa, 'mousedownafter', function(){
            self.mapCenter = self.mappa.getCenter();
        });
        PGEvent.addListener(this.mappa, 'mouseupmapafter', function(){
            var newCenter = self.mappa.getCenter();
            if (self.mapCenter.lat != newCenter.lat || self.mapCenter.lon != newCenter.lon) {
                if (self.options.loadAllPoints == false) {
                    self.mapRefresh();
                }
            }
            self.mapCenter = newCenter;
        });
        $("#mapTypeChooser div[value=1]").click(function(){
            self.changeMapType(1);
        });
        $("#mapTypeChooser div[value=2]").click(function(){
            self.changeMapType(2);
        });
        $("#mapTypeChooser div[value=3]").click(function(){
            self.changeMapType(3);
        });
         $("#mapTypeChooser div[value=4]").click(function(){
            self.changeMapType(4);
        });
        this.changeMapType(4);
    },
    initMapModes: function(){
        var self = this;
        $(".mapModeSelectors > li").click(function(){
            var el = $(this);
            var id = el.attr('id');
            var fnc = 'self.' + id + 'Action()';
            eval(fnc);
        });
    },
    initZoom: function(){
        var self = this;
        $('<div id="mapzoom" />').css({
            position: 'absolute',
            zIndex: 10000,
            top: '10px',
            left: '10px',
            cursor: 'pointer'
        }).click(function(event){
            var pieceMin = 33;
            var pieceMax = 164;
            var pieceSize = 13;
            var ofs = $(this).offset();
            var coords = {
                left: event.pageX - ofs.left,
                top: event.pageY - ofs.top
            };
            if (coords.top < pieceMin) {
                self.mappa.zoomIn();
            }
            else 
                if (coords.top > pieceMax) {
                    self.mappa.zoomOut();
                }
                else {
                    var cp = Math.floor((coords.top - pieceMin) / pieceSize);
                    self.mappa.setZoom(cp);
                }
        }).appendTo('#mappa');
        $('<img />').attr({
            src: 'img/zoom.png',
            alt: 'zoom'
        }).ifixpng().appendTo('#mapzoom');
    },
    
    changeMapType: function(t){
        this.mappa.setMapType(t);
        $("#mapTypeChooser div").removeClass("btSelected");
        $("#mapTypeChooser div[value=" + t + "]").addClass("btSelected");
    },
    getGeoimportanceFromZoom: function(z){
        return this.zoomGeoConversionMap[z] ? this.zoomGeoConversionMap[z] : null;
    },
    getZoomFromGeoimportance: function(g){
        return this.geoZoomConversionMap[g] ? this.geoZoomConversionMap[g] : null;
    }
    
    };