﻿window.Dackia = {};

Dackia.Class = {
    create: function() {
        return function() {
            this.initialize.apply(this, arguments);
        }
    }
};

var _TmpMap;
var _TmpZOOM = 9;
var _TmpHtmlInformation;
var _ArrMarkers = new Hash();
var _ArrRetailerInfo = new Hash();
var redIcon = new GIcon(G_DEFAULT_ICON);
var greyIcon = new GIcon(G_DEFAULT_ICON);


Dackia.GoogleMap = Class.create();

Dackia.GoogleMap.prototype = {
    initialize: function(objInit) {
        this.MapHolder = objInit.MapHolder,
		this.Map = new GMap2(document.getElementById(this.MapHolder)),
		this.GeoEncoder = new GClientGeocoder(),
		this.DefaultLat = objInit.DefaultLat,
		this.DefaultLng = objInit.DefaultLng,
		this.AllLocations = LOCATIONS,
		this.Address = objInit.Address

        redIcon.image = "http://www.dackia.se/templates/pub/images/map_pin_red.png";
        greyIcon.image = "http://www.dackia.se/templates/pub/images/map_pin_grey.png";

        if (this.Address)
            this.ZoomInAddress(this.Address);
        else
            this.SetNewPosition(new GLatLng(this.DefaultLat, this.DefaultLng), 5);

        this.AddDefaultMapControls();
        this.SetDefaultMapProperties();
    },
    SetNewPosition: function(MapPosition, intZoom) {
        this.Map.setCenter(MapPosition, intZoom);
    },
    AddDefaultMapControls: function() {
        this.Map.addControl(new GLargeMapControl());
    },
    SetDefaultMapProperties: function() {
        this.Map.enableScrollWheelZoom();
        this.Map.enableInfoWindow();
    },
    OpenSpecificWindow: function(intMarker) {
        var Marker = _ArrMarkers.get('key_' + intMarker);
        Marker.openInfoWindow(_ArrRetailerInfo.get('key_' + intMarker));
    },
    CloseSpecificWindow: function(intMarker) {
        var Marker = _ArrMarkers.get('key_' + intMarker);
        Marker.closeInfoWindow();
    },
    MarkAllDealers: function() {
        var ii = 0;
        _ArrMarkers = new Hash();
        for (var i = 0; i < this.AllLocations.length; i++) {
            var arrLocationItem = this.AllLocations[i].split('|');
            if (arrLocationItem[1] != "0") {
                var Marker = this.CreateMark(arrLocationItem[1], arrLocationItem[3], arrLocationItem[5]);
                var arrAddress = arrLocationItem[2].split(',');
                if (!arrAddress[6].strip().blank()) {
                    Marker.importance = 1;
                    //alert(arrAddress[2]);
                }
                else {
                    Marker.importance = 2;
                }

                this.Map.addOverlay(Marker);
                _ArrMarkers.set('key_' + arrLocationItem[0], Marker);
                _ArrRetailerInfo.set('key_' + arrLocationItem[0], arrLocationItem[3]);
                //alert(_ArrMarkers.get(arrLocationItem[0]).openInfoWindow())
            }
        }
    },
    MarkDealer: function(Dealer, color) {


        var arrLatLng = Dealer.LatLang.split(",");
        var MarkPoint = new GLatLng(arrLatLng[1], arrLatLng[0]);
        if (!MarkPoint) {
            alert("Tyvärr kunde inte platsen/verkstaden hittas");
        }
        else {
           

            var Marker;
            if (color == "red") {
                Marker = new GMarker(MarkPoint, { icon: redIcon });
            }
            else {
                Marker = new GMarker(MarkPoint, { icon: greyIcon });
            }
            
            this.Map.addOverlay(Marker);

            this.SetNewPosition(MarkPoint, 12);
        }

        //_TmpHtmlInformation = Dealer.HtmlInformation;
        //_TmpMap = this.Map;
        /*this.GeoEncoder.getLatLng(Dealer.Address,
        function(MarkPoint) {
        if (!MarkPoint) {
        alert("Tyvärr kunde inte platsen/verkstaden hittas");
        }
        else {
        var Marker = new GMarker(MarkPoint);
        //Marker.bindInfoWindowHtml(_TmpHtmlInformation);
        _TmpMap.addOverlay(Marker);
        }
        });*/
    },
    CreateMark: function(strLatLng, strInfoMessage, color) {
        var arrLatLng = strLatLng.split(",");
        var MarkPoint = new GLatLng(arrLatLng[0], arrLatLng[1]);
        var Marker;
        if (color == "red") {
            Marker = new GMarker(MarkPoint, { zIndexProcess: importanceOrder, icon: redIcon });
        }
        else {
            Marker = new GMarker(MarkPoint, { zIndexProcess: importanceOrder, icon: greyIcon });
        }
        Marker.bindInfoWindowHtml(strInfoMessage);

        return Marker;
    },
    ZoomInAddress: function(strAddress) {
        this.GetPositionFromAddress(strAddress)
    },
    GetPositionFromAddress: function(strAddress) {
        //		var MapPosition = this.GetDealerPositionFromAddress(strAddress);
        //		if (MapPosition)
        //			this.SetNewPosition(MapPosition, 9);
        //		else {
        _TmpMap = this.Map;
        this.GeoEncoder.getLatLng(strAddress + ',Sweden', this.SetZoom);
        //		}
    },
    SetZoom: function(MapPosition) {
        if (!MapPosition) {
            alert('Tyvärr kunde inte platsen hittas');
            return;
        }
        else {
            _TmpMap.setCenter(MapPosition, 9);
        }
    },
    GetDealerPositionFromAddress: function(strAddress) {
        for (var i = 0; i < this.AllLocations.length; i++) {
            arrLocationItem = this.AllLocations[i].split('|');
            if (arrLocationItem[1] != "0" && arrLocationItem[2].toLowerCase().indexOf(strAddress.toLowerCase()) > -1) {
                var arrLatLng = arrLocationItem[1].split(",");
                var MapPosition = new GLatLng(arrLatLng[0], arrLatLng[1]);
                return MapPosition;
            }
        }
    },
    FindWorkshopByName: function(strName) {
        for (var i = 0; i < this.AllLocations.length; i++) {
            arrLocationItem = this.AllLocations[i].split('|');
            var arrAdress = arrLocationItem[2].split(",");

            if (arrAdress[0].toLowerCase().indexOf(strName.toLowerCase()) > -1) {
                var latlang = arrLocationItem[1].split(",");
                var MapPosition = new GLatLng(latlang[0], latlang[1]);
                this.Map.setCenter(MapPosition, 12);
                return true;
            }
        }
        return false;
    },
    ZoomDefault: function() {
        this.SetNewPosition(new GLatLng(this.DefaultLat, this.DefaultLng), 5);
    }



};

function importanceOrder(marker, b) {
    return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance * 1000000;
}