﻿var map, geocoder;
var addresses = new Array();
var addressesPage1 = new Array();
var addressesPage2 = new Array();
var addressCount = 0;


$(window).unload(function() {
    GUnload();
});

function onReady() {
    Gload(); 
    showMap();
}

function address(lng, lat, address, premium) {
    this.lat = lat;
    this.lng = lng;
    this.address = address;
    this.premium = premium;
}

function addAddress(lng, lat, aId, premium) {
    addresses.push(new address(lng, lat, aId, premium));
    addressCount++;
    if (addressCount < 9) {
        addressesPage1.push(aId);
        
    } else {
        addressesPage2.push(aId);
    }
    
}

function switchPage(activePage) {
    if (addressesPage1.length < 11 && addressesPage2.length <1) { return false; }
    $('#geoPaging').css('display', 'block');
    var h = (activePage == 1) ? false : true;
    var t = "1 / 2";
    if (h) {
        t = "2 / 2";
        $('#pagingPrev').attr('src', 'user/shared/paging_back.gif');
        $('#pagingNext').attr('src', 'user/shared/paging_next_dimmed.gif') ;
    } else {
    $('#pagingPrev').attr('src', 'user/shared/paging_back_dimmed.gif');
    $('#pagingNext').attr('src', 'user/shared/paging_next.gif');
    }
    $('#pagingDisplay span').html(t);
    showHideAddresses(addressesPage1, h);
    showHideAddresses(addressesPage2, !h);
}

function showHideAddresses(ar,hide) {
    var h = (hide) ? 'none' : 'block'; 
    for (var i=0; i < ar.length; i++) {
        
        $('#' + ar[i]).css('display', h);
    }
}

function addressList() {
    var homeAdr =new address(lng,lat,'',false);
    setZoomAndCenterForPointList(map, addresses,homeAdr);
    showAddress(homeAdr, false, true);
    showAddresses(addresses);
}
function addressListNSO() {
    setZoomAndCenterForPointList(map, addresses);
    showAddresses(addresses);
}

function addressDetail() {
    map.setCenter(new GLatLng(addresses[0].lat, addresses[0].lng), 12);
    showAddress(addresses[0], false,false);
   
}

function Gload() 
{
    map = new GMap2(document.getElementById("mapList"));
    var c = new GSmallMapControl();
    map.addControl(c);
    map.addControl(new GMapTypeControl());

}
function getGeoCode(address,tld) {
    if (tld) {
        tld = tld.replace("DD", "DE");
    }
    if (address) {
        address =tld + "-" + address;
    }
    geocoder = new GClientGeocoder();
    geocoder.setBaseCountryCode(tld);
    geocoder.getLocations(address, callbackUserLocationGeoCoded); 
    
    return false;
}
function callbackUserLocationGeoCoded(response) {
    var geoLng=0;
    var geoLat = 0; 
    if (response.Placemark) {
        if (response.Placemark.length == 1) {
            geoLng = response.Placemark[0].Point.coordinates[0];
            geoLat = response.Placemark[0].Point.coordinates[1];
        }

    }
    var f = document.formGetByLoc;
    f.lng.value = geoLng;
    f.lat.value = geoLat;
    f.locchanged.value = 0;
    //submit the form
    f.submit();
}

function showAddresses(addresses) {
        
    for (var i = 0; i < addresses.length; i++) {
        showAddress(addresses[i],true,false);
    }
    
}

function showAddress(address, resultlist, home) {
    var marker;
    if (home) {
        marker = new GMarker(new GLatLng(address.lat, address.lng), { draggable: false});

    } else {
    var name = $('#' + address.address + ' .headline').html(); 
        marker = new GMarker(new GLatLng(address.lat, address.lng), {title: name, draggable: false, icon: dealerIcon(address.premium) });
        
    }
     if (resultlist) {
        GEvent.addListener(marker, "click", function() {
            marker.openInfoWindowHtml(getInfoStr(address.address));
        });
    } 
    map.addOverlay(marker);
}

function dealerIcon(premium) {
    var icon = new GIcon();
    if (premium) {
        icon.image = "user/shared/dealerPremium.png";
    } else {
        icon.image = "user/shared/dealer.png";
    }
    
    icon.iconSize = new GSize(24, 32);
    icon.shadow = "user/shared/dealer_shadow.png";
    icon.shadowSize = new GSize(28, 32);
    icon.iconAnchor = new GPoint(11, 32);
    icon.infoWindowAnchor = new GPoint(10, 32);
    return icon;
}		    




function getInfoStr(address) {
    var h = $('#' + address + ' .headline').html();
    var pcs = $('#' + address + ' .textProduct').html();
    var ad = $('#' + address + ' .textAddress').html();
    var href = $('#' + address + ' a').attr('href');
    var title = $('#' + address + ' a').attr('title');
    h = (h != null) ? "<div id='googleBubbleHeadline'>" + h + "</div>" : "";
    pcs = (pcs != null) ? "<div id='googleBubbleProducts'>" + pcs + "</div>" : "";
    ad = (ad != null) ? "<div id='googleBubbleAddress'>" + ad + "</div>" : "";
    title = (title != null) ? title  : "";
    var html = "<div id='googleBubble'>" + h + pcs + ad + "<div id='googleBubbleLink'><img src='user/shared/arrow_8x7_blue.gif' alt='' border='0'/><a href='" + href + "'>" + title + "</a></div></div>"
    return html;
}

function setInfo(marker, info) {
    marker.openInfoWindowHtml(info);
}

function isAlphaFilterDisabled(tag) {
    var obj = document.getElementById("map");
    if (obj) {
        var d = document.createElement("div");
        var f = obj.appendChild(d);
        f.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader()"
        try {
            var t = f.filters(0);
        } catch (e) {
            return true;
        }
    }
}

function setZoomAndCenterForPointList(map,pa,homeAdr) {
    //für ein array von punkten wird die Karte auf den richtigen Wert gezoot und zentriert
    //maximale bounds bestimmen
    pl = pa.concat();
    if (typeof(homeAdr) != 'undefined'){
        pl.push(homeAdr);
    }
    bounds = getBoundsForAllPoints(pl);
    //zoomLevel bestimmen, bei dem die bounds im sichtbaren bereich sind
    var z = map.getBoundsZoomLevel(bounds);

    // zusaetzlich soll die karte auch noch optimal zentriert werden
    var clat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) / 2;
    var clng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) / 2;
    map.setCenter(new GLatLng(clat, clng), z);
}

function getBoundsForAllPoints(pointArray) {
    var bounds = new GLatLngBounds();
    for (var i = 0; i < pointArray.length; i++) {

        p = pointArray[i];
        p = new GLatLng(p.lat, p.lng);
        bounds.extend(p);
    }
    
    return bounds;
}
