google.load("maps", "2.x", {"language" : "de_DE"});

var Map = null;
var Geocoder = null;
var Marker = null;
var cityzip = '';
var Ziplength = new Array();
var hideError = false;
var MarketList = new Array();
Ziplength [ 'Deutschland' ] = 5;

initialize = function()
{
	if
	(
		document.getElementById("gmaps")
	)
	{
		Map = new google.maps.Map2(document.getElementById("gmaps"));

		if
		(
			document.getElementById('geo_lat').value.length > 0
			&&
			document.getElementById('geo_long').value.length > 0
		)
		{
			var center = new google.maps.LatLng(document.getElementById('geo_lat').value, document.getElementById('geo_long').value);
		}
		else
		{
			var center = new google.maps.LatLng(52.1509, 9.951001);
		}

		Geocoder = new google.maps.ClientGeocoder();
		Map.setCenter(center, 16);
		Map.addControl(new google.maps.SmallMapControl());
		Map.setMapType(G_HYBRID_MAP);
		Marker = new google.maps.Marker(center, {draggable: true});
		Map.addOverlay(Marker);
		setMarker();
	}
	else if ( document.getElementById("gmaps_fe") )
	{
		Map = new google.maps.Map2(document.getElementById("gmaps_fe"));
		var center = new google.maps.LatLng(51.5, 9.7);
		Geocoder = new google.maps.ClientGeocoder();
		Map.setCenter(center, 5);
		Map.addControl(new google.maps.SmallMapControl());
		Map.addControl(new google.maps.MenuMapTypeControl());
		Map.setMapType(G_NORMAL_MAP);
		Map.enableDoubleClickZoom();
		Map.enableContinuousZoom();
		GMapsFrontend.initIcon();

		GEvent.addListener
		(
			Map,
			"movestart",
			function()
			{
				if(document.getElementById('shop-infowindow'))
				{
					if(GMapsFrontend.selectedMarket)
					{
						InfoWindow = Map.getInfoWindow();
						InfoWindow.hide();
					}
				}
			}
		);

		GEvent.addListener
		(
			Map,
			"moveend",
			function()
			{
				if(document.getElementById('shop-infowindow'))
				{
					InfoWindow = Map.getInfoWindow();
					InfoWindow.show();
				}
			}
		);


		GEvent.addListener
		(
			Map,
			"zoomend",
			function(Marker, point)
			{

				if(Map.getZoom() < 9)
				{
					if(GMapsFrontend.init == false)
					{
						Map.clearOverlays();
					}
				}
				else
				{
					if(GMapsFrontend.init == false)
					{
						if (Map.getZoom() >= 9 && GMapsFrontend.zoomLevel < 9)
						{
							GMapsFrontend.setMarkerFromAddress(false);
						}
					}
				}
				GMapsFrontend.zoomLevel = Map.getZoom();
			}
		);
        
        
        document.getElementById('gmaps-close-list').onclick = function() {
            GMapsFrontend.closeList();
        }
        
        document.getElementById('gmap-list-button').onclick = function() {
            GMapsFrontend.showList();
        }
        
        if (initCampaignDisplay == true) {
            GMapsFrontend.getInitialCampaignShops();
        }

        
        
	}
	else if
	(
		document.getElementById('company-map')
	)
	{
		Map = new google.maps.Map2(document.getElementById("company-map"));
		var center = new google.maps.LatLng(52.163658, 9.989298);
		Geocoder = new google.maps.ClientGeocoder();
		Map.setCenter(center, 17);
		Map.addControl(new google.maps.SmallMapControl());
		Map.addControl(new google.maps.MenuMapTypeControl());
		Map.setMapType(G_NORMAL_MAP);
		Map.enableDoubleClickZoom();
		Map.enableContinuousZoom();
		GMapsFrontend.initIcon();
		Marker = new google.maps.Marker(center, GMapsFrontend.iconIus);
		
		GEvent.addListener(Marker, "click", function()
		{
			Marker.openInfoWindowHtml('<div id="infowindowaddr" style="width: 280px; height: 120px;"></div>');
		});
		GEvent.addListener(Marker, "infowindowopen", function()
		{
			var Window = document.getElementById('infowindowaddr');
			var Headline = document.createElement ( 'h3' );
			Headline.innerHTML = 'idee+spiel'
			Window.appendChild ( Headline );
			var Address = document.createElement ( 'div' );
			Address.className = 'detail';
			Address.innerHTML = 'Facheinzelhandels-GmbH &amp; Co. KG<br />Daimlerring 4<br />31135 Hildesheim';
			var Image = document.createElement ( 'div' );
			var Img = document.createElement ( 'img' );
			Img.src = '/media/static/pics/b2b/pic_blase_anfahrt_01.jpg';
			Image.className = 'img';
			Image.appendChild ( Img );
			Window.appendChild ( Image );
			Window.appendChild ( Address );
			var Route = document.createElement ( 'div' );
			Route.className = 'route';
			Route.innerHTML = 'Route berechnen: ';
			var To = document.createElement ( 'a' );
			To.innerHTML = 'Hierher';
			To.href = 'http://maps.google.de/maps?f=d&source=s_d&saddr=Daimlerring+4,+31135+Hildesheim&daddr=&hl=de';
			Route.appendChild ( To );
			Route.innerHTML+= ' - ';
			var From = document.createElement ( 'a' );
			From.innerHTML = 'Von hier'
			From.href = 'http://maps.google.de/maps?f=d&source=s_d&saddr=&daddr=Daimlerring+4,+31135+Hildesheim&hl=de';
			Route.appendChild ( From );
			Window.appendChild ( Route );
		});
		
		Map.addOverlay(Marker);
	}
	
}

initApproachMap = function
(
)
{
	if
	(
		document.getElementById('approach-map')
	)
	{
		GMapsFrontend.initIcon();
		var Map = new google.maps.Map2(document.getElementById("approach-map"));
		var center = new google.maps.LatLng(approach_lat , approach_long);
		Marker = new google.maps.Marker(center, GMapsFrontend.iconIus , {draggable: true});
		Map.addOverlay(Marker);
		Map.setCenter ( center , 16 );
	}
}

setMarkerFromAddress = function()
{
	Geocoder.getLatLng
	(

		GMapsFrontend.getAddress(),
		function resetMap(newCenter)
		{
			if
			(
				!newCenter
			)
			{
				center = new google.maps.LatLng(52.1509, 9.951001)
				Map.setCenter(center, 16);
				Marker.setLatLng(center);
			}
			else
			{
				Map.setCenter(newCenter, 16);
				Marker.setLatLng(newCenter);
			}
			Marker.openInfoWindowHtml("Bitte ziehen Sie den Marker an die korrekte<br />Position und best&auml;tigen Sie diese.<br /><a href=\"#\" onClick=\"GMapsFrontend.setLatLng(); return false;\">Position &uuml;bernehmen</a>");
		}
	);
}

setMarker = function()
{
	var newCenter = GMapsFrontend.getLatLng();
	if
	(
		!newCenter
	)
	{
		setMarkerFromAddress();
	}
	else
	{
			Map.setCenter(newCenter, 16);
			Marker.setLatLng(newCenter);
	}
	GEvent.addListener(Marker, "dragstart", function() {
		Map.closeInfoWindow();
    });
	GEvent.addListener(Marker, "dragend", function() {
		Marker.openInfoWindowHtml("Bitte best&auml;tigen Sie die Position.<br /><a href=\"#\" onClick=\"GMapsFrontend.setLatLng(); return false;\">Position &uuml;bernehmen</a>");
	});
	GEvent.addListener(Marker, "click", function() {
		Marker.openInfoWindowHtml("Bitte best&auml;tigen Sie die Position.<br /><a href=\"#\" onClick=\"GMapsFrontend.setLatLng(); return false;\">Position &uuml;bernehmen</a>");
	});
}

changeButton = function()
{
	var folder = ((GMapsFrontend.getLangByUrl() != 'de') ? GMapsFrontend.getLangByUrl() + '/' : '');
    if (window.location.href.match(/mcmedia/i)) { 
        document.getElementById ( 'submit-search' ).src = '/media/static/pics/mcmedia/buttons/bt_suche-aendern_01.gif';
    } 
    if (!window.location.href.match('/mcmedia/')) {
        document.getElementById ( 'submit-search' ).src = './media/static/pics/button/'+folder+'alter-search_01.gif';
    }
	document.getElementById ( 'submit-search' ).alt = 'Suche '+unescape('%E4')+'ndern';
	document.getElementById ( 'submit-search' ).title = 'Suche '+unescape('%E4')+'ndern';
	YAHOO.util.Dom.addClass ( document.getElementById ( 'submit-search' ), 'alter' );
}

showShopByCoords = function ()
{
	GMapsFrontend.init = true;
	GMapsFrontend.getShopByCoords ( help_latitude, help_longitude );
}

setMarkerFromGetAddress = function ()
{
	GMapsFrontend.setMarkerFromAddress ( true );
}

IusFrontend = function () {}

IusFrontend.prototype.checkAddress = function()
{
	cityzip = document.getElementById('city').value;
	if ( parseInt(cityzip) == cityzip && ( cityzip.toString().length < Ziplength [ document.getElementById('country').value ] ) )
	{
		//TODO: Teil PLZ übermitteln und erste PLZ zurückerhalten
		GMapsFrontend.callback = {
			success:GMapsFrontend.completeZip,
			failure:GMapsFrontend.handleFailure
		}
		YAHOO.util.Connect.asyncRequest('GET', '/de/fachgeschaefte/ajax/?action=complete-zip&zip='+cityzip.toString(), GMapsFrontend.callback, '');
	}
	else
	{
		Geocoder.getLatLng
		(

			this.getAddress(),
			function(point)
			{
				if
				(
					!point
				)
				{
					GMapsFrontend.point = null;
					GMapsFrontend.showError();
				}
				else
				{
					GMapsFrontend.hideError();
					GMapsFrontend.point = point.toString();
					GMapsFrontend.point = GMapsFrontend.point.replace(')', '');
					GMapsFrontend.point = GMapsFrontend.point.replace('(', '');
					GMapsFrontend.getShopsNearby();
				}
			}
		);
	}
}

IusFrontend.prototype.getAddress = function()
{
	//address = document.getElementById('city').value + ', ' + document.getElementById('country').value;
	address = cityzip + ', ' + document.getElementById('country').value;
	return address;
}

IusFrontend.prototype.closeNoresult = function()
{
	GMapsFrontend.hideError();
	return false;
}

IusFrontend.prototype.hideError = function()
{
	document.getElementById('error').style.display = 'none';
	document.getElementById('error').style.visibility = 'hidden';
	document.getElementById('error-mask').style.display = 'none';
	document.getElementById('error-mask').style.visibility = 'hidden';
}

IusFrontend.prototype.showError = function()
{
	if (hideError == true) {
        return;
    }
    
    InfoWindow = Map.getInfoWindow();
	InfoWindow.hide();

    document.getElementById('error').style.display = 'block';
    document.getElementById('error').style.visibility = 'visible';
    document.getElementById('error-mask').style.display = 'block';
    document.getElementById('error-mask').style.visibility = 'visible';
    if (document.getElementById('error-address')) {
        var Display = document.getElementById('city').value;
        if (Display.length == 0) {
            Display = '""';
        } else { 
            Display = '"' + Display + '"';
        }
    	Display = Display.replace('<' , '&lt;');
    	Display = Display.replace('<' , '&gt;');
    	document.getElementById('error-address').innerHTML = Display;
    }
}

IusFrontend.prototype.getFilterString = function()
{
	Filter = '';
	if ( document.getElementById ( 'shipping' ) && document.getElementById ( 'shipping' ).checked ) { Filter+= '&shipping=1'; }
	if ( document.getElementById ( 'onlineshop' ) && document.getElementById ( 'onlineshop' ).checked ) { Filter+= '&onlineshop=1'; }
    if ( document.getElementById ( 'secondhand' ) && document.getElementById ( 'secondhand' ).checked ) { Filter+= '&secondhand=1'; }
	if ( document.getElementById ( 'shipping-domestic' ) && document.getElementById ( 'shipping-domestic' ).checked ) { Filter+= '&shipping-domestic=1'; }
	if ( document.getElementById ( 'shipping-overseas' ) && document.getElementById ( 'shipping-overseas' ).checked ) { Filter+= '&shipping-overseas=1'; }
	if ( document.getElementById ( 'campaign' ) && document.getElementById ( 'campaign' ).value != '' ) { Filter+= '&campaign='+document.getElementById ( 'campaign' ).value; }

	return Filter;
}

IusFrontend.prototype.getFilterStringSuche = function()
{
	Filter = '';
	if ( document.getElementById ( 'shipping' ) && document.getElementById ( 'shipping' ).checked ) { Filter+= '&shipping=1'; }
	if ( document.getElementById ( 'onlineshop' ) && document.getElementById ( 'onlineshop' ).checked ) { Filter+= '&filter[onlineshop]=1'; }
	if ( document.getElementById ( 'shipping-domestic' ) && document.getElementById ( 'shipping-domestic' ).checked ) { Filter+= '&filter[shipping]=domestic'; }
	if ( document.getElementById ( 'shipping-overseas' ) && document.getElementById ( 'shipping-overseas' ).checked ) { Filter+= '&filter[shipping]=overseas'; }
	if ( document.getElementById ( 'campaign' ) && document.getElementById ( 'campaign' ).value != '' ) { Filter+= '&filter[campaign]='+document.getElementById ( 'campaign' ).value; }

	return Filter;
}

IusFrontend.prototype.getMarketingline = function()
{
	urlString = document.location.href;
	Url = urlString.split ( '/' );
	if
	(
		Url[4] == 'fachgeschaefte'
	)
	{
		return 'idee%2Bspiel';
	}
	else
	{
		return Url[4];
	}
}

IusFrontend.prototype.getInitialCampaignShops = function()
{    
    brand = this.getMarketingline();

	GMapsFrontend.callback = {
		success:GMapsFrontend.processMarketListCampaign,
		failure:GMapsFrontend.handleFailure
	}
    
    filterEmail = 0;
    
    if (redir.length > 0) {
        filterEmail = 1;
    }
    
	YAHOO.util.Connect.asyncRequest('GET', '/de/fachgeschaefte/ajax/?longitude=&latitude=&action=get-campaign-startup-shops&brand='+brand+'&searchitem=&lang='+this.getLangByUrl()+'&filterEmail='+filterEmail, GMapsFrontend.callback, '');
}

IusFrontend.prototype.getShopsNearby = function()
{
	Coords = new Array();
	Coords = GMapsFrontend.point.split ( ', ' );

	Filter = this.getFilterString();
	brand = this.getMarketingline();

	GMapsFrontend.callback = {
		success:GMapsFrontend.processMarketList,
		failure:GMapsFrontend.handleFailure
	}
    
    filterEmail = 0;
    
    if (redir.length > 0) {
        filterEmail = 1;
    }
    
    var searchItem = cityzip;
    
    if (cityzip.length == 0) {
        GMapsFrontend.showError();
        return;
    }
    
	YAHOO.util.Connect.asyncRequest('GET', '/de/fachgeschaefte/ajax/?longitude='+Coords[1]+'&latitude='+Coords[0]+Filter+'&action=get-nearest-shops&brand='+brand+'&searchitem='+document.getElementById('country').value+'|'+searchItem+'&lang='+this.getLangByUrl()+'&filterEmail='+filterEmail, GMapsFrontend.callback, '');
}

IusFrontend.prototype.getShopByCoords = function ( latitude, longitude  )
{
	GMapsFrontend.point = latitude + ', ' + longitude;
	brand = this.getMarketingline();

	GMapsFrontend.callback = {
		success:GMapsFrontend.processMarketList,
		failure:GMapsFrontend.handleFailure
	}

	YAHOO.util.Connect.asyncRequest('GET', '/de/fachgeschaefte/ajax/?longitude='+longitude+'&latitude='+latitude+'&action=get-single-shop&brand='+brand+'&lang='+this.getLangByUrl(), GMapsFrontend.callback, '');
}

IusFrontend.prototype.handleFailure = function(response)
{
	GMapsFrontend.showError();
}

IusFrontend.prototype.setLatLng = function()
{
	pos = Marker.getLatLng();
	document.getElementById('geo_lat').value= pos.lat();
	document.getElementById('geo_long').value= pos.lng();
	Map.closeInfoWindow();
}

IusFrontend.prototype.getLatLng = function()
{
	var lat = document.getElementById('geo_lat').value;
	var lng = document.getElementById('geo_long').value;
	if
	(
		lat > 0
		&&
		lng > 0
	)
	{
		return new google.maps.LatLng(lat, lng);
	}
	else
	{
		return false;
	}
}

IusFrontend.prototype.setMarker = function()
{
	setMarkerFromAddress();
}

IusFrontend.prototype.setMarkerFromAddress = function(init)
{
	if(init == true)
	{
		GMapsFrontend.init = true;
	}
	else
	{
		GMapsFrontend.init = false;
	}

	this.checkAddress();
}

IusFrontend.prototype.initIcon = function()
{
	brand = this.getMarketingline();
	this.iconIus = new google.maps.Icon();
	
	if
	(
		document.getElementById ( 'company-map' )
	)
	{
		this.iconIus.image = "/media/static/pics/shop/marker_ideeundspiel_02.png";
		this.iconIus.shadow = "/media/static/pics/shop/marker_shadow_02.png";
		this.iconIus.iconSize = new google.maps.Size(48, 50);
		this.iconIus.shadowSize = new google.maps.Size(68, 50);
		this.iconIus.iconAnchor = new google.maps.Point(-4, 55);
		this.iconIus.infoWindowAnchor = new google.maps.Point(47, 5);
	}
	else
	{
		if
		(
			brand == 'autodrom'
		)
		{
			this.iconIus.image = "/media/static/pics/shop/marker_autodrom_01.png";
			this.iconIus.shadow = "/media/static/pics/shop/marker_shadow_autodrom_01.png";
			this.iconIus.iconSize = new google.maps.Size(99, 41);
			this.iconIus.shadowSize = new google.maps.Size(113, 41);
		}
		else if
		(
			brand == 'eurotrain'
		)
		{
			this.iconIus.image = "/media/static/pics/shop/marker_eurotrain_01.png";
			this.iconIus.shadow = "/media/static/pics/shop/marker_shadow_eurotrain_01.png";
			this.iconIus.iconSize = new google.maps.Size(99, 41);
			this.iconIus.shadowSize = new google.maps.Size(113, 41);
		}
		else if
		(
			brand == 'hobbytec'
		)
		{
			this.iconIus.image = "/media/static/pics/shop/marker_hobbytec_01.png";
			this.iconIus.shadow = "/media/static/pics/shop/marker_shadow_hobbytec_01.png";
			this.iconIus.iconSize = new google.maps.Size(99, 41);
			this.iconIus.shadowSize = new google.maps.Size(113, 41);
		}
		else if
		(
			brand == 'smartoys'
		)
		{
			this.iconIus.image = "/media/static/pics/shop/marker_smartoys_01.png";
			this.iconIus.shadow = "/media/static/pics/shop/marker_shadow_smartoys_01.png";
			this.iconIus.iconSize = new google.maps.Size(81, 46);
			this.iconIus.shadowSize = new google.maps.Size(100, 46);
		}
		else if
		(
			brand == 'mcmedia'
		)
		{
			this.iconIus.image = "/media/static/pics/shop/marker_mcmedia_01.png";
			this.iconIus.shadow = "/media/static/pics/shop/marker_mcmedia_shadow_01.png";
			this.iconIus.iconSize = new google.maps.Size(100, 47);
			this.iconIus.shadowSize = new google.maps.Size(100, 47);
		}
		else
		{
			this.iconIus.image = "/media/static/pics/shop/marker_ideeundspiel_01.png";
			this.iconIus.shadow = "/media/static/pics/shop/marker_shadow_01.png";
			this.iconIus.iconSize = new google.maps.Size(50, 65);
			this.iconIus.shadowSize = new google.maps.Size(65, 65);
		}
		
		this.iconIus.iconAnchor = new google.maps.Point(23, 60);
		this.iconIus.infoWindowAnchor = new google.maps.Point(47, 5);
	}
}

IusFrontend.Lang =
{
	'de':
	{
		'address':'Adresse',
		'approach':'Anfahrt'
	},
	'en':
	{
		'address':'Address',
		'approach':'Approach'	
	}
}

IusFrontend.prototype.getLangByUrl = function ()
{
	var lang = window.location.href.split('/')[3];
	
	if
	(
		lang != 'de'
		&&
		lang != 'en'
	)
	{
		lang = 'de';
	}
	
	return lang;
}

IusFrontend.prototype.createMarker = function (Marker)
{
	if(Marker.Market)
	{
		if(document.getElementById('shop-infowindow'))
		{
			document.getElementById('shop-infowindow').innerHTML = '';
		}

		AddressDisplay = document.createElement('div');
		AddressDisplay.className = 'shop-infowindow';
		AddressDisplay.innerHTML = Marker.Market.formatedOutput;

		RouteDisplay = document.createElement('div');
		RouteDisplay.className = 'shop-route';
		RouteDisplay.innerHTML = Marker.Market.formatedOutputRoute;

		var infoTabs = [
		  new google.maps.InfoWindowTab(eval("IusFrontend.Lang."+this.getLangByUrl()+".address"), AddressDisplay),
		  new google.maps.InfoWindowTab(eval("IusFrontend.Lang."+this.getLangByUrl()+".approach"), RouteDisplay)
		];

		Marker.openInfoWindowTabsHtml(infoTabs);

		if(Marker.Market.id)
		{
			InfowindowAncestors = YAHOO.util.Dom.getAncestorByTagName ( document.getElementById('shop-infowindow') , 'div' );

			if
			(
				InfowindowAncestors
			)
			{
				InfowindowAncestors.style.width = '30.5em';
				InfowindowAncestors.style.height = '25.417em';
				InfowindowAncestors.style.overflow = 'auto';

				RouteWindowAncestors = YAHOO.util.Dom.getAncestorByTagName ( document.getElementById('shop-route') , 'div' );
				RouteWindowAncestors.style.width = '30.5em';
				RouteWindowAncestors.style.height = '25.417em';
			}
		}
	}
}

IusFrontend.prototype.completeZip = function(o)
{
	response = YAHOO.lang.JSON.parse(o.responseText);

	if(response.length > 0)
	{
		cityzip = response;

		Geocoder.getLatLng
		(

			GMapsFrontend.getAddress(),
			function(point)
			{
				if
				(
					!point
				)
				{
					GMapsFrontend.point = null;
					GMapsFrontend.showError();
				}
				else
				{
					GMapsFrontend.hideError();
					GMapsFrontend.point = point.toString();
					GMapsFrontend.point = GMapsFrontend.point.replace(')', '');
					GMapsFrontend.point = GMapsFrontend.point.replace('(', '');
					GMapsFrontend.getShopsNearby();
				}
			}
		);
	}
	else
	{
		document.getElementById ( 'map_error' ).innerHTML = 'Leider konnten wir keine Postleitzahl zu Ihrer Eingabe ermitteln.';
	}
}

IusFrontend.prototype.createShopList = function (list) {

    if (list != null) {
        var wrapper = document.getElementById('shops');
        wrapper.innerHTML = '';
    
        if (list.length > 1) {
            for(var i = list.length; i >= 0; i--) {
                if (list[i]) {
                    var element = list[i];
                    var shop = document.createElement('div');
                    shop.className = 'shop';
                    var name = document.createElement('h4');
                    
                    if (element.Market.brandAddition
                        && element.Market.brandAddition != 0
                        && element.Market.brandAddition.length > 0
                    ) {
                        name.innerHTML = element.Market.brandAddition;
                        name.innerHTML+= ' ';
                    }
                    
                    if (list[i].Market.name_offer != null && list[i].Market.name_offer.length > 0) {
                        name.innerHTML+= element.Market.name_offer;
                    } else {
                        name.innerHTML+= element.Market.name_long1;
                        name.innerHTML+= ' ';
                        name.innerHTML+= element.Market.name_long2;
                    }
                    
                    var address = document.createElement('p');
                    address.innerHTML = element.Market.street + '<br />';
                    address.innerHTML+= element.Market.zip + ' ' + element.Market.city;
                    
                    var gmapInfoWrap = document.createElement('span');
                    gmapInfoWrap.className = 'info';
                    
                    var gmapInfo = document.createElement('span');
                    gmapInfo.innerHTML = '<a href="#">Info</a>';
                    gmapInfo.setAttribute('rel', '#marker-'+i);
                    gmapInfo.onclick = function(element) {
                        var markerPos = this.getAttribute('rel').replace(/[^0-9]+/, '');
                        if (MarketList[markerPos]) {
                            var marker = MarketList[markerPos];
                            point = new google.maps.LatLng(marker.Market.geo_lat, marker.Market.geo_long);
                            marker.show();
                            Map.setCenter(point, 12);
                            GEvent.trigger(marker, 'click');
                        }
                        
                        return false;
                    }
                    
                    gmapInfoWrap.appendChild(gmapInfo);
                    
                    if (element.Market.template != 'S') {
                        var detail = document.createElement('span');
                        detail.innerHTML = '&nbsp;&nbsp;|&nbsp;&nbsp;<a href="'+element.Market.detailUrl+'">H&auml;ndlerseite</a>';
                        gmapInfoWrap.appendChild(detail);
                    }
                    
                    
                    address.appendChild(gmapInfoWrap);
                    

                    
                    shop.appendChild(name);
                    shop.appendChild(address);
                    wrapper.appendChild(shop);
                }
            }

            GMapsFrontend.displayShoplist();
        }
    }
}

IusFrontend.prototype.displayShoplist = function () {
    document.getElementById('gmap-list').style.display = 'block';
    document.getElementById('gmap-list').style.visibility = 'visible';    
    Map.closeInfoWindow();
    return false;
}

IusFrontend.prototype.hideShopList = function () {
    document.getElementById('gmap-list').style.display = 'none';
    document.getElementById('gmap-list').style.visibility = 'hidden';
    return false;
}

IusFrontend.prototype.displayListButton = function() {
    document.getElementById('gmap-list-button').style.display = 'block';
    document.getElementById('gmap-list-button').style.visibility = 'visible';
}

IusFrontend.prototype.hideListButton = function() {
    document.getElementById('gmap-list-button').style.display = 'none';
    document.getElementById('gmap-list-button').style.visibility = 'hidden';
}

IusFrontend.prototype.closeList = function() {
    GMapsFrontend.hideShopList();
    GMapsFrontend.displayListButton();
}

IusFrontend.prototype.showList = function() {
    GMapsFrontend.displayShoplist();
    GMapsFrontend.hideListButton();
}

IusFrontend.prototype.processMarketListCampaign = function(o)
{
	response = YAHOO.lang.JSON.parse(o.responseText);
    MarketList = new Array();
    initCampaignDisplay = false;

	if(response.length > 0)
	{
		Map.clearOverlays();
        
		for( i = 0; i < response.length; i++)
		{
			point = new google.maps.LatLng(response[i].geo_lat, response[i].geo_long);
			Marker = new google.maps.Marker(point, GMapsFrontend.iconIus);
			Map.addOverlay(Marker);
			Marker.Market = response[i];
            MarketList[i] = Marker;

			if((i == (response.length-1)) && GMapsFrontend.init == true)
			{
				Map.setCenter(point);
			}

			GEvent.addListener
			(
				Map,
				"click",
				function(Marker, point)
				{
					if (Marker)
					{
						GMapsFrontend.createMarker(Marker);
					}
				}
			);

			GEvent.addListener
			(
				Marker,
				"infowindowopen",
				function(Marker, point)
				{
					if (Marker)
					{
						GMapsFrontend.hideShopList();
                        GMapsFrontend.displayListButton();
                        GMapsFrontend.selectedMarket = Marker;
						GMapsFrontend.getMarketData(Marker.Market.id);
					}
				}
			);
            
			GEvent.addListener
			(
				Marker,
				"infowindowclose",
				function(Marker, point)
				{
					if (Marker)
					{
						//GMapsFrontend.displayShopList();
                        //GMapsFrontend.hideListButton();
					}
				}
			);
            
            Marker.hide();
		}
        
        GMapsFrontend.createShopList(MarketList);
		GMapsFrontend.init = false;
        initCampaignDisplay = false;
        
        //Map.setZoom(6);
	}
	else
	{
		GMapsFrontend.showError();
	}
}

IusFrontend.prototype.processMarketList = function(o)
{
	response = YAHOO.lang.JSON.parse(o.responseText);
    MarketList = new Array();

	if(response.length > 0)
	{
		Map.clearOverlays();
		Coords = new Array();
		Coords = GMapsFrontend.point.split( ', ');
        
		if(GMapsFrontend.init == true)
		{
			Map.setCenter(new google.maps.LatLng(Coords[0], Coords[1]), 12);
		}

        
		for( i = 0; i < response.length; i++)
		{
			point = new google.maps.LatLng(response[i].geo_lat, response[i].geo_long);
			Marker = new google.maps.Marker(point, GMapsFrontend.iconIus);
			Map.addOverlay(Marker);
			Marker.Market = response[i];
            MarketList[i] = Marker;

			if((i == (response.length-1)) && GMapsFrontend.init == true)
			{
				Map.setCenter(point);
			}

			GEvent.addListener
			(
				Map,
				"click",
				function(Marker, point)
				{
					if (Marker)
					{
						GMapsFrontend.createMarker(Marker);
					}
				}
			);

			GEvent.addListener
			(
				Marker,
				"infowindowopen",
				function(Marker, point)
				{
					if (Marker)
					{
						GMapsFrontend.hideShopList();
                        GMapsFrontend.displayListButton();
                        GMapsFrontend.selectedMarket = Marker;
						GMapsFrontend.getMarketData(Marker.Market.id);
					}
				}
			);
            
			GEvent.addListener
			(
				Marker,
				"infowindowclose",
				function(Marker, point)
				{
					if (Marker)
					{
						//GMapsFrontend.displayShopList();
                        //GMapsFrontend.hideListButton();
					}
				}
			);
		}
        
        GMapsFrontend.createShopList(MarketList);
        
		GMapsFrontend.init = false;
        initCampaignDisplay = false;
	}
	else
	{
		GMapsFrontend.showError();
	}
}

IusFrontend.prototype.getAnfahrtData = function(marketId)
{
	GMapsFrontend.callback = {
		success:GMapsFrontend.displayAnfahrtData,
		failure:GMapsFrontend.handleFailure
	}
    
    brand = this.getMarketingline();

	YAHOO.util.Connect.asyncRequest('GET', '/de/fachgeschaefte/ajax/?id='+marketId+'&brand=' + brand + '&action=get-routing-data-by-id&lang='+this.getLangByUrl(), GMapsFrontend.callback, "");
}

IusFrontend.prototype.displayAnfahrtData = function(o)
{
	response = YAHOO.lang.JSON.parse(o.responseText);
	document.getElementById('shop-route').innerHTML = response;
	document.getElementById('shop-route').style.width = '30.5em';
	document.getElementById('shop-route').style.height = '25.417em';

	if(document.getElementById('saddr').value.length == 0)
	{
		document.getElementById('saddr').value = document.getElementById('city').value;
	}

	document.getElementById('anfahrt-form').onsubmit = function ()
	{
		saddr = document.getElementById('saddr').value;
		daddr = document.getElementById('daddr').value;
		window.open('http://maps.google.de/?saddr='+saddr+'&daddr='+daddr, 'googleMapsRoute');
		return false;
	}
}

IusFrontend.prototype.displayMarketData = function(o)
{
    response = YAHOO.lang.JSON.parse(o.responseText);
	document.getElementById('shop-infowindow').innerHTML = '';
	document.getElementById('shop-infowindow').innerHTML = response.formatedOutput;
	document.getElementById('shop-infowindow').style.width = '30.5em';
	document.getElementById('shop-infowindow').style.height = '25.417em';
	GMapsFrontend.marketOutput = response;
	GMapsFrontend.getAnfahrtData(GMapsFrontend.selectedMarket.Market.id);
}

IusFrontend.prototype.getMarketData = function(marketId)
{

	GMapsFrontend.callback = {
		success:GMapsFrontend.displayMarketData,
		failure:GMapsFrontend.handleFailure
	}

	brand = this.getMarketingline();

	YAHOO.util.Connect.asyncRequest('GET', '/de/fachgeschaefte/ajax/?id='+marketId+'&action=get-shop-data-by-id&brand='+brand+'&lang='+this.getLangByUrl(), GMapsFrontend.callback, "");
}

IusFrontend.prototype.storeMyShop = function (shopId )
{
	GMapsFrontend.callback = {
		success:GMapsFrontend.displayMarketDataRedir,
		failure:GMapsFrontend.handleFailure
	}

	brand = this.getMarketingline();

	YAHOO.util.Connect.asyncRequest('GET', '/de/fachgeschaefte/ajax/?id='+shopId+'&action=set-my-shop-by-id&brand='+brand+'&lang='+this.getLangByUrl(), GMapsFrontend.callback, "");
}

IusFrontend.prototype.displayMarketDataRedir = function(o)
{
    GMapsFrontend.displayMarketData(o);

    if (redir.length > 0) {
        if (redir[0] != '/') {
            redir = '/'+redir;
        }

        if (window.location.href.match(/prefill/)) {
            redir+= '&prefill=1';
        }
        
        redir = servername+redir.replace(/\/\//, '/');
        hideError = true;
        window.location.href = redir;
    }
}

/**
*
*  UTF-8 data encode / decode
*  http://www.webtoolkit.info/
*
**/
 var Utf8 = {

	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}

}

GMapsFrontend = new IusFrontend();
YAHOO.util.Event.onDOMReady( initialize );
YAHOO.util.Event.onDOMReady( initApproachMap );


