

//google.load('maps', '2', {"locale" : "de_DE"});
var syDealer = null;
var syDealerMap = null;
var syDealerRoute = null;
var syDealerGeocoder = null;
var dsFindDealer = function(newoptions) {


    
    this.options = {
        dealerService: '/webservices/DealerSearch.ashx',
        orteService: '/webservices/DealerResolveCity.ashx',
        mapContainer: '#HeroBox', //DealerSearch',
        iconRoot: '/images/map/',
        iconImage: 'Buchstaben{0}.png',
        iconShadow: 'mazda_MapIcon.shadow.png',
        detailImageBV: 'vertrieb.png',
        detailImageS: 'werkstatt.png',
        markerLabelOffset: new GSize(-4, -24),
        printView: 'print.htm',
        resultContainer: '#searchBox',
        showLegend: true,
        dealerLabel: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'],
        searchBox: '#searchBox',
        findBox: '#findBox',
        detailBox: '#detailBox',
        resolveBox: '#resolveCity',
        openSearch: '#openSearch',
        headSearch: '#headSearch',
        headResults: '#headResults',
        headDetail: '#headDetail',
        routeDescr: '#routeDescr',
        routeBox: '#routeBox',
        backToList: '#backToList',
        errorBox: '#errorBox',
        plzInput: '#plz',
        ortInput: '#ort',
        dealerInput: '#dealer',
        mapSize: new GSize(670, 425),
        useFilter: false,
        useDealerPager: false,
        trackingRoot: '/BuyingAMazda/Dealers/'
    };

    if (newoptions) {
        jQuery.extend(this.options, newoptions);
    }

	jQuery('meta[name="syz.track"]').each(function(){
		syDealer.options.trackingRoot = this.content;
	});

    syDealerGeocoder = null;
    syDealerMap = null;

    this.currentCenter = null;
    this.currentMarkers = new Array();
    this.currentSearchHash = '';
    this.resultHistory = new Object();

    jQuery(this.options.openSearch).bind(
                        'click', function(e) {
                            //e = new Event(e).stop();
                            syDealer.showPanels('Search');
                        });

    jQuery(this.options.backToList).bind(
                        'click', function(e) {
                            syDealer.showPanels('Overview');
                        });

    syDealer = this;
};

dsFindDealer.prototype.showError = function(message) {
    jQuery(this.options.errorBox).html(message);
    this._itemDisplay(this.options.errorBox, true);
};

dsFindDealer.prototype.search = function(plz, ort, dealer, dealertype) {
    //ToDo: wenn kein PLZ oder ORT angegeben keine Suche

    // controlIds merken (für wietere Funktionen)
    this.options.plzInput = plz;
    this.options.ortInput = ort;
    this.options.dealerInput = dealer;

    var dPLZ = jQuery(this.options.plzInput)[0].value;
    var dORT = jQuery(this.options.ortInput)[0].value;
    
    // Tracking 
    QuismaTracking(dPLZ, dORT);

    this._itemDisplay(this.options.errorBox, false);

    var dName = jQuery(this.options.dealerInput)[0].value;
    this.currentSearchHash = dPLZ + '||' + dORT + '||' + dName + '||' + dealertype;
    if ((null == this.resultHistory) || (null == this.resultHistory[this.currentSearchHash])) {
        if ((dPLZ == '') && (dName == '')) {
            var foundCities = 0;
            var resolveCities = new Array();
            if ((dORT.length < 4) && null != syShortCities) {
                var cities = syShortCities.Cities;
                var maxCities = cities.length;
                for (var idx = 0; idx < maxCities; idx++) {
                    if (cities[idx].City.toLowerCase().indexOf(dORT.toLowerCase()) != -1) {
                        foundCities += cities[idx].Postcodes.length;
                        resolveCities.push(cities[idx]);
                    }
                }
            }
            if (foundCities > 0) {
                this.testFoundDealer(resolveCities, dORT, dPLZ, dName, dealertype);
            }
            else {
                jQuery.getJSON(this.options.orteService + '?ort=' + encodeURIComponent(dORT),
                                        function(jsonObj, textStatus) {
                                            if (textStatus == "success") {
                                                var cities = jsonObj.Cities;
                                                var maxCities = cities.length;
                                                for (var idx = 0; idx < maxCities; idx++) {
                                                    foundCities += cities[idx].Postcodes.length;
                                                    resolveCities.push(cities[idx]);
                                                }
                                                syDealer.testFoundDealer(resolveCities, dORT, dPLZ, dName, dealertype);
                                            }
                                            else {
                                                syDealer.requestDealer(dORT, dPLZ, dName, dealertype);
                                            }
                                        });
            }
        }
        else {
            this.requestDealer(dORT, dPLZ, dName, dealertype);
        }
    }
    else {
        syDealer.setPoints();
    }

};

dsFindDealer.prototype.testFoundDealer = function(resolveCities, dORT, dPLZ, dName, dealertype) {
    var foundCities = resolveCities.length;
    if (foundCities == 1) {
        if (resolveCities[0].Postcodes.length == 1)
            foundCities = 0;
    }
    if (foundCities > 0) {
        var resolveBox = jQuery(this.options.resolveBox)[0];

        jQuery(this.options.resolveBox + " > ul").remove();

        resolveUL = $("<ul/>").appendTo(resolveBox)

        for (var idxOuter = 0; idxOuter < resolveCities.length; idxOuter++) {
            thisCity = resolveCities[idxOuter].City;
            for (idxInner = 0; idxInner < resolveCities[idxOuter].Postcodes.length; idxInner++) {
                thisPostcode = resolveCities[idxOuter].Postcodes[idxInner];
                this._createResolveLink(thisPostcode, thisCity, resolveBox, resolveUL, dealertype);
            }
        }
        this._itemDisplay(this.options.resolveBox, true);
    }
    else {
        this.requestDealer(dORT, dPLZ, dName, dealertype);
    }
};

dsFindDealer.prototype._createResolveLink = function(postcode, city, resolveBox, resolveUL, dealertype) {
    jQuery("<a />").bind('click', function() {
        syDealer.requestDealer(city, postcode, '', dealertype);
        syDealer._itemDisplay(resolveBox, false);
    })
		.html(postcode + 'xxx ' + city)
		.appendTo(jQuery("<li />").appendTo(resolveUL));
};

dsFindDealer.prototype.requestDealer = function(city, postcode, name, dealertype) {
    var queryUri = this.options.dealerService + '?dealerZip=' + encodeURIComponent(postcode) + "&dealerCity=" + encodeURIComponent(city) + "&dealerName=" + encodeURIComponent(name) + "&dealerType=" + dealertype;
	if (this.options.useFilter)
	{
		queryUri += '&useFilter=1';
	}
	jQuery.getJSON(
        queryUri,
                function(jsonObj, textStatus) {
                    if (textStatus == "success") {
                        jsonObj.Postcode = postcode;
                        jsonObj.City = city;
                        jsonObj.Name = name;
                        jsonObj.SearchHash = jsonObj.Postcode + '||' + jsonObj.City + '||' + jsonObj.Name;

                        var theResult = new dsDealerResult(jsonObj, { 'iconRoot': syDealer.options.iconRoot, 'iconImage': syDealer.options.iconImage, 'detailImage': syDealer.options.detailImage, 'iconShadow': syDealer.options.iconShadow });
                        syDealer.currentSearchHash = theResult.SearchHash;
                        syDealer.resultHistory[theResult.SearchHash] = theResult;

                        syDealer.setPoints();
                    }
                    else {
                        syDealer.showError('Es konnte kein Händler mit diesen Suchparametern gefunden werden.');
                    }
                });
};


dsFindDealer.prototype.setPoints = function() {
    if (null == syDealerMap) {
        this._initMap();
        return;
    }

    var resultBox = jQuery(this.options.resultContainer)[0];
    this._itemDisplay(this.options.resolveBox, false);
    
    //delete previous searchresults
    jQuery(resultBox).empty();
    var maxMarker = this.currentMarkers.length;
    for (var idx = 0; idx < maxMarker; idx++) {
        syDealerMap.removeOverlay(this.currentMarkers.pop());
    }

    this._itemDisplay(this.options.resultContainer, false);

	var resultTable = jQuery('<table id="dsResults" class="dealerList" />');
    var tblRes = jQuery('<tbody />');
    tblRes.appendTo(resultTable.appendTo(resultBox));

    var theResult = syDealer.resultHistory[syDealer.currentSearchHash];

    if (theResult.FoundDealer.length == 0) {
        this.showError('F&uuml;r diese Suche wurden keine H&auml;ndler gefunden!');
        return;
    }

	this._lastVisibleDealer = 0;
    for (var idx = 0; idx < theResult.FoundDealer.length; idx++) {
        var dealerObj = theResult.FoundDealer[idx];

		var rowClassName = "drlRow_" + idx;

		var hasDealerPager = this.options.useDealerPager && idx > 2;
        var rwDlr = jQuery('<tr />').appendTo(tblRes);
        rwDlr.addClass(rowClassName);
        if (idx > 0)
        {
			rwDlr.addClass('dlrfirst');
        }
        if (hasDealerPager)
        {
			rwDlr.css('display', 'none');
        } 
        else
        {
			this._lastVisibleDealer = idx;
        }
        

        /*var imgStat = 'autohaus';
        if (dealerObj.Status == 'S')
        {
        imgStat = 'werkstatt';
        }*/

        jQuery('<td class="dlrMapLabel" rowspan="4" />').html(this.options.dealerLabel[idx]).appendTo(rwDlr);

        var tdImage = jQuery('<td class="dlricon" rowspan="4" />')
            .appendTo(rwDlr);

		if (this.options.showLegend)
		{
			if (dealerObj.Status != "S") {
				jQuery('<img alt="" src="' + this.options.iconRoot + this.options.detailImageBV + '" />')
							.appendTo(tdImage);
			}

			if (dealerObj.Status != "V") {
				jQuery('<img alt="" src="' + this.options.iconRoot + this.options.detailImageS + '" />')
							.appendTo(tdImage);
			}
		}
		else
		{
			tdImage.html('&nbsp;');
		}
        jQuery('<td colspan="3" class="dlrname" />')
                    .html(dealerObj.Name)
                    .appendTo(rwDlr);

        var trDlrDet = jQuery('<tr />')
                    .appendTo(tblRes);
        trDlrDet.addClass(rowClassName);
        jQuery('<td class="dlraddr" />')
                    .html(dealerObj.Street)
                    .appendTo(trDlrDet);
        jQuery('<td class="dlraddr" />')
                    .html('Tel. ' + dealerObj.Phone)
                    .appendTo(trDlrDet);
        if (hasDealerPager)
        {
			trDlrDet.css('display', 'none');
        } 

        jQuery('<td />')
                    .appendTo(trDlrDet);

        trDlrDet = jQuery('<tr />').appendTo(tblRes);
        trDlrDet.addClass(rowClassName);
        jQuery('<td class="dlraddr" />')
                    .html(dealerObj.Postcode + ' ' + dealerObj.City)
                    .appendTo(trDlrDet);
        jQuery('<td class="dlraddr" />')
                    .html('Fax  ' + dealerObj.Fax)
                    .appendTo(trDlrDet);
        jQuery('<td />')
                    .appendTo(trDlrDet);
        if (hasDealerPager)
        {
			trDlrDet.css('display', 'none');
        } 

        trDlrDet = jQuery('<tr class="dlrlast" />')
                    .appendTo(tblRes);
        trDlrDet.addClass( rowClassName);
        jQuery('<td colspan="2" />')
                    .html('Entfernung ca. ' + dealerObj.Distance.replace(':', ',') + 'km')
                    .appendTo(trDlrDet);
        if (hasDealerPager)
        {
			trDlrDet.css('display', 'none');
        } 

        var tdRef = jQuery('<td class="dlrref" />')
                    .appendTo(trDlrDet);

        var but = jQuery('<a href="javascript:void(null);" class="LinkBoldRight" />')
                    .html('Details')
                    .appendTo(tdRef);
        this._addDetailButtonEvnt(but, dealerObj);
    }
    for (var idx = theResult.FoundDealer.length - 1; idx >= 0; idx--) {
        var dealerObj = theResult.FoundDealer[idx];
        this._addMarker(dealerObj.Point, dealerObj.MapIcon, idx, dealerObj);
    }
    if (this.options.useDealerPager)
    {
		var rwShowMore = jQuery('<div id="dsShowMore" class="dealerList" />').appendTo(resultBox);

        var but = jQuery('<a href="javascript:void(null);" class="LinkBoldRight" />')
                    .html('Mehr Anzeigen')
                    .appendTo(rwShowMore);
        this._addShowMoreButtonEvnt(but, resultTable);

    }

    this.showPanels('Overview');
    dsLogRequest('ShowDealerList');
};

dsFindDealer.prototype._addShowMoreButtonEvnt = function(button, resultTable) {
	//alert(this._lastVisibleDealer);
    button.bind('click.showNextDealer', function(e) {
    
		dsLogRequest('MoreInfo');
		
		for (var idxRow = 0; idxRow < 3; idxRow++)
		{
			syDealer._lastVisibleDealer++;
			jQuery('.drlRow_' + syDealer._lastVisibleDealer).each( function(index, domElement) 
			{
				jQuery(this).css('display', '');
				//jQuery(this).show("slow");
			});
			var nextRow = jQuery('.drlRow_' + syDealer._lastVisibleDealer);
			if (nextRow.length < 1)
			{
				jQuery(button).unbind('.showNextDealer');
				jQuery('#dsShowMore').remove();
			}
		}
    });
};

dsFindDealer.prototype.showDetails = function(point, dealerObj) {
    this._itemDisplay(this.options.errorBox, false);
    //        //syDealerMap._itemDisplay(this.options.errorBox, false);
    syDealerMap.setCenter(point, 14);

    var detailCont = jQuery(this.options.detailBox + ' > *')[0];

    jQuery(detailCont).html(this._infoDetailContent(dealerObj));

    this.showPanels('Details');

    var routeButton = jQuery('#btRoute');
    routeButton.unbind('routing');
    routeButton.bind('click.routing', function(evt) {
        //            evt = new Event(evt).stop();
        syDealer._itemDisplay(syDealer.options.errorBox, false);
        var fVal;
        var route = 'from: ';
        //routeStreet
        fVal = jQuery('#routeStreet').val();
        if (fVal != '')
            route += fVal + ', ';
        //routePLZ
        fVal = jQuery('#routePLZ').val();
        if (fVal != '')
            route += fVal + ' ';

        route += jQuery('#routeCity').val() + ' to: ' + dealerObj.Latitude.replace(',', '.') + ',' + dealerObj.Longitude.replace(',', '.');
        //48.924981,11.739578 route += $('routeCity').getValue() + ' to: ' + dealerObj.Street + ', ' + dealerObj.Postcode + ' ' + dealerObj.City;
        loadRoute(route, { "locale": "de_DE" });
        //this.showPanels("Route");
        //        } .bind(syDealer));
    });

    //routeButtonPrint.unbind('routing');
    jQuery('#btRoutePrint').bind('click.routing', function(evt) {
        var printWindow = window.open(syDealer.options.printView);

        if (null == printWindow)
            alert('Die Druckseite konnte nicht geöffnet werden!');
        //        } .bind(syDealer));
    });

    dsLogRequest('ShowDealerDetail?dealerID=' + dealerObj.DealerNumber);
};


dsFindDealer.prototype._addDetailButtonEvnt = function(but, dealerObj) {
    but.bind('click', function(e) {
        syDealer.showDetails(dealerObj.Point, dealerObj);
    });
};

dsFindDealer.prototype._addInfoButtonEvnt = function(but, point, dealerObj) {
    but.bind('click', function(e) {
        //var point = new GLatLng(e.target.getAttribute('lat'), e.target.getAttribute('lng'));
        syDealerMap.setCenter(point, 14);
        syDealer.showDetails(point, dealerObj);
        window.location.hash = "RouteAnchor";
        jQuery('routeStreet').focus();
    });
};

dsFindDealer.prototype._addMarker = function(point, micon, idx, dealerObj) {
    var marker = new GMarker(point, micon);

    var myInfo = new EWindow(syDealerMap, E_STYLE_7);
    syDealerMap.addOverlay(myInfo);
    var windowContent = this._infoWindowContent(dealerObj, point);
    myInfo.openOnMarkerDOM(marker, windowContent);
    myInfo.hide();
    marker.EInfoWindow = myInfo;

    this.currentMarkers.push(marker);

    marker.showsInfoWindow = false;
    this.activeMarker = null;

    GEvent.addListener(marker, "click", function() {
        jQuery(syDealer.currentMarkers).each(function(index, aMarker) {
            if (aMarker != marker) {
                //aMarker.closeInfoWindow();
                aMarker.EInfoWindow.hide();
                aMarker.showsInfoWindow = false;
            }
        }
            );

        marker.EInfoWindow.show();
        //marker.openInfoWindow(this._infoWindowContent(dealerObj, point));
        marker.showsInfoWindow = true;
        syDealer.activeMarker = marker;
    }); // .bind(this));
    GEvent.addListener(marker, "mouseover", function() {
        jQuery(syDealer.currentMarkers).each(function(index, aMarker) {
            if (aMarker != marker) {
                aMarker.EInfoWindow.hide();
            }
            else {
                if (!marker.showsInfoWindow)
                    marker.EInfoWindow.show();
            }
        }
            );
    }); // .bind(this));
    GEvent.addListener(marker, "mouseout", function() {
        jQuery(syDealer.currentMarkers).each(function(index, aMarker) {
            if (aMarker.showsInfoWindow) {
                aMarker.EInfoWindow.show();
                //aMarker.openInfoWindow(that._infoWindowContent(dealerObj));
            }
        }
            );
        if (!marker.showsInfoWindow)
        //marker.closeInfoWindow();
            marker.EInfoWindow.hide();
    }); // .bind(this));

    syDealerMap.addOverlay(marker);
};

dsFindDealer.prototype._infoWindowContent = function(dealerObj, point) {
    var infCont = jQuery('<div />');
    jQuery('<img src="' + this.options.iconRoot + 'bt_close_icon.gif" style="float: right;" />')
            .appendTo(jQuery('<p style="height: 13px; margin : 0" />')
            .appendTo(infCont));

    jQuery('<h2 style="margin-top : 0;" />').html(dealerObj.Name + " " + dealerObj.NameAdd).appendTo(infCont);
	
	if (this.options.showLegend)
	{
		if (dealerObj.Status != "S") {
			jQuery('<img alt="" src="' + this.options.iconRoot + this.options.detailImageBV + '" />')
					.appendTo(infCont);
		}
		if (dealerObj.Status != "V") {
			jQuery('<img alt="" src="' + this.options.iconRoot + this.options.detailImageS + '" />')
					.appendTo(infCont);
		}
	}
    jQuery('<p class="infoStreet" />').html(dealerObj.Street)
            .appendTo(infCont);
    jQuery('<p class="infoCity" />').html(dealerObj.Postcode + " " + dealerObj.City)
            .appendTo(infCont);

    infCont.bind("click", function(e) {
        syDealer.activeMarker.showsInfoWindow = false;
        syDealer.activeMarker.EInfoWindow.hide();
    });

    var lat = dealerObj.Latitude.replace(',', '.');
    var lng = dealerObj.Longitude.replace(',', '.');
    if (lat != '' && lng != '') {

        var point = new GLatLng(lat, lng);
        var but = jQuery('<a href="javascript:void(null);"  lat="' + lat + '" lng="' + lng + '" />')
                .html('Route erstellen')
                .appendTo(infCont);
        this._addInfoButtonEvnt(but, point, dealerObj);
    }
    return infCont;
};

dsFindDealer.prototype._infoDetailContent = function(dealerObj) {
    var imgText = '';
    var imgStat = 'autohaus';

    if (dealerObj.Status == 'S')
        imgStat = 'werkstatt';

    //if(imgStat == 'autohaus')
    //    imgText += "<table><tr><td><img src='" + this.options.iconRoot + "mazda_autohaus0.png' /></td><td>&nbsp;</td><td>Mazda VertriebsPartner<td></tr></table>";
    //else
    imgText += "<table><tr><td><img src='" + this.options.iconRoot + this.options.detailImage + "' /></td><td>&nbsp;</td><td>Mazda VertriebsPartner<td></tr></table>";

    var retCont = "<h2>" + dealerObj.Name + " " + dealerObj.NameAdd + "</h2><p class='infoStreet'>" + dealerObj.Street + "</p><p class='infoCity'>" + dealerObj.Postcode + " " + dealerObj.City + "</p>";

    if (dealerObj.Phone != '')
        retCont += "<p class='infoStreet'>Tel.: " + dealerObj.Phone + "</p>"
    if (dealerObj.Fax != '')
        retCont += "<p class='infoCity'>Fax.: " + dealerObj.Fax + "</p>";
    if (dealerObj.Email != '')
        retCont += "<p class='infoStreet'>E-Mail: <a href='mailto:" + dealerObj.Email + "'>" + dealerObj.Email + "</a></p>"
    if (dealerObj.Web != '') {
        var prot = 'http://';
        if (dealerObj.Web.toLowerCase().indexOf(prot) > -1) prot = '';
        retCont += "<p class='infoCity'>Internet: <a href='" + prot + dealerObj.Web + "' target='_blank'>" + dealerObj.Web + "</a></p>";
    }

    return retCont;
};

dsFindDealer.prototype._setCenter = function(dealerResult) {
    var point;
    var zoomLevel;
    if (dealerResult.FoundDealer.length > 0) {
        point = dealerResult.MapCenter;
        zoomLevel = syDealerMap.getBoundsZoomLevel(dealerResult.Bounds);
    }
    else {
        //Mazda Leverkusen
        point = new GLatLng(51.055600, 6.928293);
        zoomLevel = 6;
    }


    syDealerMap.setCenter(point, zoomLevel);
};

dsFindDealer.prototype._initMap = function(obj) {
    if (null != syDealerMap)
        return;

    jQuery('#mainContainer').addClass('dealerSearchMainContainer');
    var mapLayer = jQuery(this.options.mapContainer)[0];
    // 660 x 425
    syDealerMap = new GMap2(mapLayer, { 'size': this.options.mapSize });


    var theResult = syDealer.resultHistory[syDealer.currentSearchHash];
    this._setCenter(theResult);


    syDealerGeocoder = new GClientGeocoder();

    syDealerMap.addControl(new GLargeMapControl());
    syDealerMap.addControl(new GMapTypeControl());



    GEvent.addListener(syDealerMap, "wheelup", function(p) {
        if (syDealerMap.getZoomLevel() > 0) {
            syDealerMap.centerAndZoom(
				p.scaleRelative(syDealerMap.getCenterLatLng()),
				syDealerMap.getZoomLevel() - 1
				);
        }
    });

    GEvent.addListener(syDealerMap, "wheeldown", function(p) {
        if (syDealerMap.getZoomLevel() <= 16)
            syDealerMap.centerAndZoom(
				p.scaleRelative(syDealerMap.getCenterLatLng(), -1),
				syDealerMap.getZoomLevel() + 1
			);
    });


    syDealer.checkMapTimer();
};

dsFindDealer.prototype._itemDisplay = function(item, display) {
    jQuery(item).css('display', display ? 'block' : 'none');
};

dsFindDealer.prototype.showPanels = function(step) {
    switch (step) {
        case "Overview":
            this._hideAllPanels();
            this._itemDisplay(this.options.searchBox, true);
            this._itemDisplay(this.options.headResults, true);
            this._itemDisplay(this.options.openSearch, true);

            var theResult = syDealer.resultHistory[syDealer.currentSearchHash];
            this._setCenter(theResult);

            break;
        case "Search":
			this._hideAllPanels();
            this._itemDisplay(this.options.findBox, true);
            this._itemDisplay(this.options.openSearch, false);
            this._itemDisplay(this.options.errorBox, false);
            
            jQuery(this.options.plzInput)[0].value = '';
            jQuery(this.options.ortInput)[0].value = '';
            jQuery(this.options.dealerInput)[0].value = '';

            break;
        case "Details":
            this._hideAllPanels();
            this._itemDisplay(this.options.headDetail, true);
            this._itemDisplay(this.options.detailBox, true);
            this._itemDisplay(this.options.openSearch, true);
            this._itemDisplay(this.options.backToList, true);
            break;
        case "Route":
            this._itemDisplay(this.options.errorBox, false);
            this._itemDisplay(this.options.routeDescr, true);
            this._itemDisplay(this.options.routeBox, true);
            break;
    }
};

dsFindDealer.prototype._hideAllPanels = function() {
    this._itemDisplay(this.options.errorBox, false);
    this._itemDisplay(this.options.findBox, false);
    this._itemDisplay(this.options.openSearch, false);
    this._itemDisplay(this.options.headSearch, false);
    this._itemDisplay(this.options.headResults, false);
    this._itemDisplay(this.options.headDetail, false);
    this._itemDisplay(this.options.detailBox, false);
    this._itemDisplay(this.options.searchBox, false);
    this._itemDisplay(this.options.routeDescr, false);
    this._itemDisplay(this.options.routeBox, false);
    this._itemDisplay(this.options.backToList, false);
    this._itemDisplay(this.options.resolveBox, false);
};

dsFindDealer.prototype.checkMapTimer = function() {
    syDealer.mapDelay = 100;
    if (!syDealerMap.isLoaded())
        setTimeout("syDealer.checkMapTimer()", syDealer.mapDelay);
    else {
        syDealer.setPoints(syDealer.dealerServiceResult);
    }
};

function loadRoute(route, options) {
    if (null == syDealerRoute) {
        //var routeOut = $(this.options.routeDescr);

        syDealerRoute = new GDirections(syDealerMap, document.getElementById("routeDescr"));

        GEvent.addListener(syDealerRoute, "load", onGDirectionsLoad);
        GEvent.addListener(syDealerRoute, "error", handleErrors);
    }
    syDealerRoute.load(route, options);
}

function handleErrors() {

    var statusCode = syDealerRoute.getStatus().code;
    var errMessage = "Es konnte keine Route zu der angegebenen Adresse gefunden werden!<br/>Bitte &uuml;berpr&uuml;fen Sie Ihre Angaben.";
    switch (statusCode) {
        case G_GEO_UNKNOWN_ADDRESS:
            //alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + statusCode);
            break;
        case G_GEO_SERVER_ERROR:
            //alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + statusCode);
            break;
        case G_GEO_MISSING_QUERY:
            //alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + statusCode);
            break;
        case G_GEO_BAD_KEY:
            //alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + statusCode);
            break;
        case G_GEO_BAD_REQUEST:
            //alert("A directions request could not be successfully parsed.\n Error code: " + statusCode);
            break;
        default:
            //alert("An unknown error occurred.");
            break;
    }

    syDealer.showError(errMessage);

}

function onGDirectionsLoad() {
    syDealer.showPanels("Route");
    dsLogRequest('ShowDealerRoute');
    // Use this function to access information about the latest load()
    // results.

    // e.g.
    // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
    // and yada yada yada...
}

var dsDealerResult = function(jsonObj, newoptions) {
    this.options = {
        iconRoot: '/images/map/',
        iconImage: 'mazda_MapIcon.png',
        iconShadow: 'mazda_MapIcon.shadow.png',
        detailImageBV: 'partner2.png',
        detailImageS: 'partner1.png',
        detailImage: 'mazda_DetailIcon.png',
        dealerLabel: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T']
    }

    if (newoptions) {
        jQuery.extend(this.options, newoptions);
    }
    this.Postcode = jsonObj.Postcode ? jsonObj.Postcode : '';
    this.City = jsonObj.City ? jsonObj.City : '';
    this.Name = jsonObj.Name ? jsonObj.Name : '';
    this.SearchHash = jsonObj.SearchHash;

    this.FoundDealer = new Array();
    this.Bounds = new GLatLngBounds();
    this.MapCenter = new GLatLng(0, 0);
    this.Status = jsonObj.Status;

    if (jsonObj.Status == "OK") {
        for (var idx = 0; idx < jsonObj.Dealer.length; idx++) {
            var dealerObj = jsonObj.Dealer[idx];
            dealerObj.Status = jQuery.trim(dealerObj.Status);

            var lat = dealerObj.Latitude.replace(',', '.');
            var lng = dealerObj.Longitude.replace(',', '.');
            if (lat != '' && lng != '') // && dealerObj.Status != 'S')
            {
                //cleanup strings
                dealerObj.Name = jQuery.trim(dealerObj.Name);
                dealerObj.NameAdd = jQuery.trim(dealerObj.NameAdd);
                dealerObj.Street = jQuery.trim(dealerObj.Street);
                dealerObj.Postcode = jQuery.trim(dealerObj.Postcode);
                dealerObj.City = jQuery.trim(dealerObj.City);
                dealerObj.Phone = jQuery.trim(dealerObj.Phone);
                dealerObj.Fax = jQuery.trim(dealerObj.Fax);
                dealerObj.Email = jQuery.trim(dealerObj.Email);
                dealerObj.Web = jQuery.trim(dealerObj.Web);
                dealerObj.Distance = jQuery.trim(dealerObj.Distance);

                dealerObj.Point = new GLatLng(lat, lng);

                // Create our "tiny" marker icon
                dealerObj.MapIcon = new GIcon();
                dealerObj.MapIcon.image = this.options.iconRoot + this.options.iconImage.replace('{0}', this.options.dealerLabel[idx]);
                dealerObj.MapIcon.shadow = this.options.iconRoot + this.options.iconShadow;
                dealerObj.MapIcon.iconSize = new GSize(26, 26);
                dealerObj.MapIcon.shadowSize = new GSize(52, 26);
                dealerObj.MapIcon.iconAnchor = new GPoint(13, 26);
                dealerObj.MapIcon.infoWindowAnchor = new GPoint(5, 1);

                this.FoundDealer.push(dealerObj);
                this.Bounds.extend(dealerObj.Point);
            }
        }

        if (this.Bounds.isEmpty() == false) {
            this.MapCenter = this.Bounds.getCenter();
        }
    }
};


function dsLogRequest(req) {
    try {
        tc_log(syDealer.options.trackingRoot + req);
    }
    catch (e) {
    }
}

//QUISMA Tracking 20090604
function QuismaTracking(plz, ort) {
    try {
        var trackUrl = 'https://tracking.mindshare.de/l.cfs?qupid=31404&CID=100&OrderID=[bestellungid]&Price=[preis]&CurrencySymbol=EUR&Note=' + plz;
        var qtrack = jQuery('#qtracking');
        if (qtrack.length > 0)
            qtrack[0].src = trackUrl;
    } catch (e) {
        var t = e;
    }
}

