var meinlMarker = null;

function info(object) {
    var a = [];
    for (o in object) {
        a.push(o + ': ' + object[o]);
        if (a.length == 30) {
            alert(a.join("\n"));
            a = [];
        }
    }
    if (a.length) {
        alert(a.join("\n"));
    }
}

function createMarker(loc, html) {
    var marker = new GMarker(loc, meinlMarker);
    GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });
    return marker;
}

function sortDealers(f) {
    this._dir *= -1;
    var dealerRows = $$('tr.dealer').sortBy(function(dealer){
        var col			= dealer.down('td.dealer-' + this.id);
        return (col.innerText || col. textContent).toLowerCase();
    }, this);
    if (this._dir < 0) {
        dealerRows.reverse();
    }
    for(var i = 0; i < dealerRows.length; i++) {
        dealerRows[i].parentNode.insertBefore(dealerRows[i], null);
        dealerRows[i][(i % 2) ? 'removeClassName' : 'addClassName']('odd');
    }
    f.elements['tx_twmeinldistribution_dealers[sort]'].value = this.id;
    f.elements['tx_twmeinldistribution_dealers[direction]'].value = (this._dir > 0) ? 'ascending' : 'descending';
    return false;
}

function initGMap() {
    var form					= document.forms['dealers'];
    $(form.elements['dealers-submit']).hide();
    meinlMarker						= new GIcon();
    meinlMarker.image				= '/fileadmin/templates/css/img/dealers/meinl.png';
    meinlMarker.shadow				= '/fileadmin/templates/css/img/dealers/meinl_shadow.png';
    meinlMarker.iconSize			= new GSize(34, 22);
    meinlMarker.shadowSize			= new GSize(34, 22);
    meinlMarker.iconAnchor			= new GPoint(5, 34);
    meinlMarker.infoWindowAnchor	= new GPoint(5, 2);
    meinlMarker.infoShadowAnchor	= new GPoint(5, 25);

    if (GBrowserIsCompatible()) {
        form.elements['tx_twmeinldistribution_dealers[filterType][]'].onchange = function() {
            this.elements['tx_twmeinldistribution_dealers[productKey]'].value = 0;
            this.submit();
        }.bind(form);
        form.elements['tx_twmeinldistribution_dealers[country]'].onchange = function(){
            this.submit();
        }.bind(form);

        var sortName				= $('name');
        if (sortName) {
            sortName._dir			= sortName.hasClassName('ascending') ? 1 : -1;
            sortName.onclick		= sortDealers.bind(sortName, form);
        }
        var sortZip					= $('zip');
        if (sortZip) {
            sortZip._dir			= sortZip.hasClassName('ascending') ? 1 : -1;
            sortZip.onclick			= sortDealers.bind(sortZip, form);
        }
        var sortCity				= $('city');
        if (sortCity) {
            sortCity._dir			= sortCity.hasClassName('ascending') ? 1 : -1;
            sortCity.onclick		= sortDealers.bind(sortCity, form);
        }

        var map = new GMap2($('dealer-map'));
        map.setCenter(new GLatLng(0,0),0);
        map.setMapType(G_NORMAL_MAP);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());

        var bounds = new GLatLngBounds(), dealer, loc, html;

//		build every single dealer location and infos
        for(var i = 0; i < dealers.length; i++){
            var dealer				= dealers[i];
            var loc					= new GLatLng(dealers[i].lat, dealers[i].lon);
            var contacts			= [];
            if (dealers[i].phone && dealers[i].phone.strip().length) {
                contacts.push('Tel. ' + dealers[i].phone.strip());
            }
            if (dealers[i].fax && dealers[i].fax.strip().length) {
                contacts.push('Fax ' + dealers[i].fax.strip());
            }
            if (dealers[i].email && dealers[i].email.strip().length) {
                contacts.push('E-Mail <a href="mailto:' + dealers[i].email.strip() + '">' + dealers[i].email.strip() + '</a>');
            }
            if (dealers[i].web && dealers[i].web.strip().length) {
                contacts.push('Internet <a href="' + dealers[i].web.strip() + '" target="_blank">' + dealers[i].web.strip() + '</a>');
            }
            var html				= '<div class="dealer-details"><h1>' + dealers[i].name + '</h1><p class="address">' + dealers[i].address + '</p>' + (contacts.length ? ('<p>' + contacts.join('<br/>') + '</p>') : '')+ '</div>';
            dealers[i]['marker']	= $(createMarker(loc, html));
            map.addOverlay(dealers[i]['marker']);
            bounds.extend(loc);
        }

        // no dealers are selected
        var zoomLevel = Math.min(map.getBoundsZoomLevel(bounds), 9);
        if(dealers.length == 0) {
            var loc = new GLatLng(50.72, 10.52);
            bounds.extend(loc);
            zoomLevel = 5;
        }

        map.setZoom(zoomLevel);
        map.setCenter(bounds.getCenter());
    }
}

// Initialisierung beim vollständigen Laden der Seite
document.observe("dom:loaded", function() {
    initGMap();
});
