google.load("maps", "2");
google.load("elements", "1", {packages : ["localsearch"]});

/* STADTPLAN 2010 */

var startTracking = false;
var iconPath = 'http://www.stadt-wien.at/services/stadtplan/icons/';
var spConfig = {
initialized: false,
data: [],
markers: [],
key: null,
cat: null,
category: {
	title: ''
},
icons: {
	listRaw: [
		{ url: 'markets/adeg12.png', width: 55, height: 12 },
		{ url: 'markets/billa18.png', width: 35, height: 18 },
		{ url: 'markets/bipa14.png', width: 39, height: 14 },
		{ url: 'markets/merkur16.png', width: 37, height: 16 },
		{ url: 'markets/penny24.png', width: 24, height: 24 },
		{ url: 'leisure/cinema18.png', width: 32, height: 18 },
		{ url: 'cars/chevrolet.png', width: 54, height: 28 }
	],
	listObjects: []
},
measures: {
	width: 758,
	height: 475,
	border: 5
},
map: null,
title: 'Stadtplan Wien',
filter: {
	available: [
		'region', 'city', 'category'
	]
},
region: {
	current: 1,
	list: [
		{ region: 'Österreich',       lat: 47.45780853,   lng: 13.21655273,zoom: 7 },
		{ region: 'Wien',             lat: 48.208674, lng: 16.372271, zoom: 12 },
		{ region: 'Burgenland',       lat: 47.42065432,lng: 16.57836914,zoom: 9 },
		{ region: 'Kärnten',          lat: 46.70973594,lng: 13.97460938,zoom: 9 },
		{ region: 'Niederösterreich', lat: 48.21003212,lng: 15.57312012,zoom: 9 },
		{ region: 'Oberösterreich',   lat: 48.07807894,lng: 13.85375977,zoom: 9 },
		{ region: 'Salzburg',         lat: 47.43551915,lng: 12.98583984,zoom: 9 },		
		{ region: 'Steiermark',       lat: 47.1673097,lng: 14.88647461,zoom: 9 },
		{ region: 'Tirol',            lat: 47.18971246,lng: 11.18408203,zoom: 9 },
		{ region: 'Vorarlberg',       lat: 47.20464239,lng: 9.84375,zoom: 9 }
	]
},
city: {
	current: 0,
	list: [
		{ city: 'Wien', lat: 48.208674, lng: 16.372271, zoom: 15 },
		{ city: 'Eisenstadt', lat: 47.845876, lng: 16.518073, zoom: 12 },
		{ city: 'Klagenfurt', lat: 46.623641, lng: 14.307683, zoom: 12 },
		{ city: 'St. Pölten', lat: 48.204536, lng: 15.622661, zoom: 12 },
		{ city: 'Linz', lat: 48.3060741, lng: 14.2862934, zoom: 12 },
		{ city: 'Salzburg', lat: 47.800499, lng: 13.04441, zoom: 12 },		
		{ city: 'Graz', lat: 47.06792, lng: 15.44172, zoom: 12 },
		{ city: 'Innsbruck', lat: 47.262692, lng: 11.3947, zoom: 12 },
		{ city: 'Bregenz', lat: 47.503042, lng: 9.747067, zoom: 12 }
	]
},
menu: [
	{
		name: 'Einkaufen',
		subitems: [
			{
				name: 'Supermärkte',
				key: 'markets'
			}
		]
	},
	{
		name: 'Freizeit',
		subitems: [
			{
				name: 'Kinos',
				key: 'cinemas'
			}
		]
	},
	{
		name: 'Autohändler',
		subitems: [
			{
				name: 'Chevrolet',
				key: 'chevrolet'
			}
		]
	}
]
};

function spRenderLeftMenu() {
	var str = '';
	for (var i = 0; i < spConfig.menu.length; i++) {
		var mainitem = spConfig.menu[i];
		var subitems = '';
		for (var j = 0; j < mainitem.subitems.length; j++) {
			var subitem = mainitem.subitems[j];
			subitems += '<li><a href="#" class="' + subitem.key + '">' + subitem.name + '</a></li>';
		}
		str += '<li class="selected"><a href="#">' + mainitem.name + '</a><ul>' + subitems + '</ul></li>';
	}
	return '<div class="separator" style="height: 0px !important;">&nbsp;</div><ul>' + str + '</ul><div class="separator" style="height: 0px !important;">&nbsp;</div>';
}

function spRenderMap() {
	var str = '<div class="spMap"><div id="spMap">&nbsp;</div></div><div id="spInfoBox"><div class="a">&nbsp;</div><div class="b">&nbsp;</div></div>';
	return str;
}

function spRenderTopMenu() {
	var str = '';
	str += '<div class="spTitle"><span>' + spConfig.title + '</span></div>';
	str += '<div class="spFilterList">&nbsp;</div>';
	return '<div class="spTopMenu">' + str + '</div>';
}

function spRenderCanvas() {
	var str = '<div class="spCanvas">';
	str += spRenderMap();
	str += spRenderTopMenu();
	str += '</div>';
	return str;
}

function spGmapLoading(_state) {
	if (_state) {
		$j('.spMap .spMapLoading').remove();
		$j('.spMap').append('<div class="spMapLoading"><span>Lade Daten ...</span></div>');
		if (spConfig.mapLoadingWidth != null) {
			$j('.spMapLoading').css('width', spConfig.mapLoadingWidth);
		}
	} else {
		$j('.spMap .spMapLoading').remove();
	}
}

function spGmapInitIcons() {
	for (n = 0; n < spConfig.icons.listRaw.length; n++) {
		var _item = spConfig.icons.listRaw[n];
		var _icon = new GIcon;
		_icon.image = iconPath + _item.url;
		_icon.iconSize = new GSize(_item.width, _item.height);
		_icon.iconAnchor = new GPoint(parseInt(_item.width / 2), parseInt(_item.height / 2));
		_icon.infoWindowAnchor = new GPoint(0, 0);
		spConfig.icons.listObjects[n] = _icon;
	}
}

function spGmapSetCity(_city_id) {
	if (_city_id == null) { _city_id = spConfig.city.current; }
	var _city = spConfig.city.list[_city_id];
	$j('.spTitle span').html('Stadtplan ' + _city.city);
	spConfig.map.setCenter(new GLatLng(_city.lat, _city.lng), _city.zoom);
}

function spGmapSetRegion(_region_id, ignoreTitle) {
	if (_region_id == null) { _region_id = spConfig.region.current; }
	var _region = spConfig.region.list[_region_id];
	if (ignoreTitle == true) {
		$j('.spTitle span').html('Stadtplan ' + _region.region);
	}
	spConfig.map.setCenter(new GLatLng(_region.lat, _region.lng), _region.zoom);
}

function spInitGmap() {
        if (GBrowserIsCompatible()) {
          $j('#spMap').css({ width: spConfig.measures.width, height: spConfig.measures.height });
          spConfig.map = new google.maps.Map2(document.getElementById("spMap"));
          spGmapInitIcons();
          spGmapSetCity();
          spConfig.map.addControl(new GLargeMapControl());
          spConfig.map.addControl(new GMapTypeControl());         
	  spConfig.map.addControl(new google.elements.LocalSearch());
	  //spConfig.map.enableScrollWheelZoom();
	  spConfig.map.enableDoubleClickZoom();
	  GEvent.addListener(spConfig.map, "moveend", function() {
	  	spLoadData();
	  });
	  $j('#spInfoBox').appendTo(spConfig.map.getPane(G_MAP_FLOAT_SHADOW_PANE));
	  if (spConfig.key != null) {
	  	spLoadData();
	  }
	  //Ersten Menüpunkt sofort auswählen
	  //$j('#left ul:first ul:first li:first a').click();
        }
}

function spRenderFilterRegion() {
	var str = '<ul id="spFilterRegion"><li><div class="title"><span>Bundesland</span></div><ul>';
	for (var i = 0; i < spConfig.region.list.length; i++) {
		_item = spConfig.region.list[i];
		str += '<li class="region" data="' + i + '"><a href="#" region="' + _item.region + '" lng="' + _item.lng + '" lat="' + _item.lat + '" zoom="' + _item.zoom + '">' + _item.region + '</a></li>';
	}
	str += '</ul></li></ul>';
	$j('#spFilterRegion').remove();
	$j('.spFilterList').prepend(str);
}

function spRenderFilterCategory(_data, key) {
	var str = '<ul id="spFilterCategory"><li><div class="title"><span>' + spConfig.category.title + '</span></div><ul>';
	for (var i = 0; i < _data.length; i++) {
		_item = _data[i];
		str += '<li class="' + key + ' ' + key + _item.id + '"><a href="#" data="' + _item.id + '" title="' + _item.description + '">' + _item.title + '</a></li>';
	}
	str += '</ul></li></ul>';
	$j('#spFilterCategory').remove();
	$j('.spFilterList').prepend(str);
}

function spDisplayInfo(marker, index) {
	var _item = spConfig.data[index];
	$j('#spInfoBox').hide();
	var str = '<strong>' + _item.title + '</strong><br />' + _item.address + '<br />' + _item.zip + ' ' + _item.city;
	var str2 = '';
	if ((_item.telephone != null) && (_item.telephone != '')) {
		str2 += '<br />Tel: ' + _item.telephone;
	}
	if ((_item.email != null) && (_item.email != '')) {
		str2 += '<br />Email: ' + _item.email;
	}
	if ((_item.www != null) && (_item.www != '')) {
		str2 += '<br />Tel: <a href="http://' + _item.www + '" target="_blank">' + _item.www + '</a>';
	}
	
	if (str2 != '') { str += '<br />' + str2; }
	
	if ((_item.description != null) && (_item.description != '')) {
		str += '<br /><br />' + _item.description.replace('\\\\n', '<br />');
	}
	
	if (_item.links != null) {
		if (_item.links.length > 0) {
			var str3 = '<br/><br /><strong>Weiterführende Artikel</strong>';
			for (var i = 0; i < _item.links.length; i++) {
				_link = _item.links[i];
				str3 += '<br /><a href="' + _link.url + '" title="' + _link.title + '">' + _link.label + '</a>';
			}
			str += str3;
		}
	}
	
	$j('#spInfoBox .b').html(str);
	var moveEnd = GEvent.addListener(spConfig.map, "moveend", function() {
		var markerOffset = spConfig.map.fromLatLngToDivPixel(marker.getLatLng());
		$j('#spInfoBox').fadeIn().css({ top: markerOffset.y + 10, left: markerOffset.x - 35 });
		GEvent.removeListener(moveEnd);
	});
	spConfig.map.panTo(marker.getLatLng());
}

function spRenderItems(_data, key) {
	spConfig.data = _data;
	for (var i = 0; i < _data.length; i++) {
		_item = _data[i];
		var point = new GLatLng(parseFloat(_item.lat), parseFloat(_item.lng));
		var marker = new GMarker(point, spConfig.icons.listObjects[_item.icon]);
		spConfig.markers[i] = marker;
		spConfig.map.addOverlay(marker);
	}
	$j(spConfig.markers).each(function(i, marker) {
		GEvent.addListener(marker, "click", function() {
			spDisplayInfo(marker, i);
		});
	});
}

function spRenderView(_data, key) {
	$j('.spFilterList').html('&nbsp;');
	if (_data.categories != null) {
		if (_data.categories.length > 0) {
			spRenderFilterCategory(_data.categories, key);
		}
	}

	if (_data.region == true) {
		spRenderFilterRegion();
	}

	spConfig.map.clearOverlays();
	if (_data.items != null) {
		if (_data.items.length > 0) {
			spRenderItems(_data.items, key);
		}
	}
}

function spLoadData() {
	if (spConfig.key != null) {
		$j('#spInfoBox').hide();
		var bounds = spConfig.map.getBounds();
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		spGmapLoading(true);
		$j.ajax({
			url: 'http://www.stadt-wien.at/services/stadtplan/data.php',
			type: 'POST',
			data: {
				key: spConfig.key,
				cat: spConfig.cat,
				y1: southWest.y,
				y2: northEast.y,
				x1: southWest.x,
				x2: northEast.x
			},
			dataType: 'json',
			success: function(data, textStatus, request) {
				spRenderView(data, spConfig.key);
				spGmapLoading(false);
				if ((spConfig.initialized == false) && (spConfig.key == 'chevrolet')) {
					spGmapSetRegion(1, true);
				}
				spConfig.initialized = true;
			},
			error: function(request, status, error) {
				spGmapLoading(false);
				alert('Ein Fehler beim Laden der Daten trat auf.');
			}
		});
	}
}

function spInitMap(inMiddle, _key) {
	if (_key != null) {
		spConfig.key = _key;
	}
	
	$j('#left > ul').before(spRenderLeftMenu());
	if ((inMiddle != false) && (inMiddle != null)) {
		$j('div#middle #gmap_canvas').html(spRenderCanvas());
	} else {
		$j('#gmap_canvas').html(spRenderCanvas());
	}
	if (_key != 'chevrolet') {
	$j('#left ul:first ul li a').live('click', function() {
		$j('#spInfoBox').hide();
		$j('#left ul ul li').removeClass('selected');
		$j(this).parent().addClass('selected');
		spConfig.category.title = 'Auswahl: <span>Alle ' + $j(this).text() + '</span>';
		spConfig.key = $j(this).attr('class');
		spConfig.cat = null;
		spLoadData();
		if (startTracking == false) {
			startTracking = true;
		} else {
			try {
				var pageTracker = _gat._getTracker("UA-1013679-2");
				pageTracker._trackPageview('/ajax/stadtplan/' + spConfig.key + '/');
			} catch(err) {}
		}
		return false;
	});
}
    $j('#spFilterRegion ul li a').live('click', function() {
        spConfig.category.title = 'Auswahl: <span>' + $j(this).attr('region') + '</span>';
	spConfig.map.setCenter(new GLatLng(parseFloat($j(this).attr('lat')), parseFloat($j(this).attr('lng'))), parseInt($j(this).attr('zoom')));
        try {
            var pageTracker = _gat._getTracker("UA-1013679-2");
            pageTracker._trackPageview('/ajax/stadtplan/' + spConfig.key + '/' + $j(this).attr('region'));
        } catch(err) {}
        return false;
    });	

	$j('#spFilterCategory ul li a').live('click', function() {
		$j('#spInfoBox').hide();
		spConfig.category.title = 'Auswahl: <span>' + $j(this).text() + '</span>';
		spConfig.key = $j('#left li li.selected a').attr('class');
		spConfig.cat = $j(this).attr('data');
		spLoadData();
		try {
			var pageTracker = _gat._getTracker("UA-1013679-2");
			pageTracker._trackPageview('/ajax/stadtplan/' + spConfig.key + '/' + spConfig.cat);
		} catch(err) {}
		return false;
	});
	
	google.setOnLoadCallback(spInitGmap);
}

function spInitMapChevrolet() {
	spConfig.mapLoadingWidth = '950px';
	spConfig.measures.width = '940px';
	spInitMap(false, 'chevrolet');
}































/* STADTPLAN ALT */

var gmap_data = [ ];
var gmap_count = 0;
var bounds = null;
var markerList = [ ];
var markerCount = 0;
var map = null;
var _stadt = 'wien';

function setCenter() {
	if (markerCount < 2) {
		map.setCenter(bounds.getCenter(), 12);
	} else {
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	}
}

function createMarker(point, index) {
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function(event) {
		_ex = event.x;
		_ey = event.y;
		$j('p.address').removeClass('address-selected');
		$j('p.address').each( function() {
			var _data = eval('({' + $j(this).find('span.data').text() + '})');
			if ((_data.lat == _ey) && (_data.lng == _ex)) {
				$j(this).addClass('address-selected');
			}
		});
	});
	return marker;
}

function init_gmap2() {
	$j('#gmap_canvas').css({ width: "768px", height: "475px" });
        if (GBrowserIsCompatible()) {
          var map = new google.maps.Map2(document.getElementById("gmap_canvas"));
          if (_stadt == 'graz') {
	          map.setCenter(new GLatLng(47.06792, 15.44172), 12);
	  } else if (_stadt == 'linz') {
	          map.setCenter(new GLatLng(48.3060741, 14.2862934), 12);
	  } else if (_stadt == 'eisenstadt') {
	          map.setCenter(new GLatLng(47.845876, 16.518073), 12);
	  } else if (_stadt == 'klagenfurt') {
	          map.setCenter(new GLatLng(46.623641, 14.307683), 12);
  	  } else if (_stadt == 'stpoelten') {
	          map.setCenter(new GLatLng(48.204536, 15.622661), 12);
	  } else if (_stadt == 'salzburg') {
	          map.setCenter(new GLatLng(47.800499, 13.04441), 12);
	  } else if (_stadt == 'innsbruck') {
	          map.setCenter(new GLatLng(47.262692, 11.3947), 12);
	  } else if (_stadt == 'bregenz') {
	          map.setCenter(new GLatLng(47.503042, 9.747067), 12);
	  } else {
	          map.setCenter(new GLatLng(48.208674, 	16.372271), 12);
	  }
          map.addControl(new GLargeMapControl());
          map.addControl(new GMapTypeControl());         
         
	  map.addControl(new google.elements.LocalSearch());
        }
}

/* map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20))); */

function init_gmap() {
	if (gmap_count > 0) {
		$j('#gmap').css({ width: "300px", height: "250px" });
		bounds = new GLatLngBounds();
		map = new google.maps.Map2(document.getElementById("gmap"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		markerCount = gmap_data.length;
		for (var i = 0; i < gmap_data.length; i++) {
			if ((gmap_data[i].lat != null) && (gmap_data[i].lng != null)) {
				var point = new GLatLng(parseFloat(gmap_data[i].lat), parseFloat(gmap_data[i].lng));
				bounds.extend(point);
				var marker = createMarker(point, i);
				map.addOverlay(marker);
				markerList.push(marker);
				if (markerList.length == markerCount) {
					setCenter();
				}
			}
		}
		$j('p.address, .branchenteaser .teaser').mouseover( function() {
			if ($j(this).hasClass('teaser')) {
				// Branchenteaser
				var _data = eval('({' + $j(this).attr('data') + '})');
			} else {
				// address list
				var _data = eval('({' + $j(this).find('span.data').text() + '})');
			}
			window.console.log(_data);
			var _point = new GLatLng(parseFloat(_data.lat), parseFloat(_data.lng));
			map.panTo(_point);
		});
		$j('p.address, .branchenteaser .teaser').hover(
			function() {
				$j(this).addClass('address-selected');
			},
			function() {
				$j(this).removeClass('address-selected');
			}
		);
		$j('#po li').mouseover( function() {
			var _data_str = $j(this).children('span.address').find('span.data').text();
			var _data = eval('({' + _data_str + '})');
			var _point = new GLatLng(parseFloat(_data.lat), parseFloat(_data.lng));
			map.panTo(_point);
			var _container = $j('#po > div');
			_container.hide();
			_container.each( function() {
				if ($j(this).children('div.address').find('span.data').text() == _data_str) {
					$j(this).show();
				}
			});
		});
		$j('#po li').hover(
			function() {
				$j('#po li').removeClass('selected');
				$j(this).addClass('selected');
			},
			function() {

			}			
		);
	} else {
		$j('#gmap').hide();
	}
}

function addAddress(params) {
	if ((params[5] != null) && (params[5] != '') && (params[6] != null) && (params[6] != '') && (params[3] != null) && (params[3] != '')) {
		gmap_data.push({
			company: params[0],
			firstname: params[1],
			lastname: params[2],
			address: params[3],
			building: params[4],
			zip: params[5],
			city: params[6],
			phone: params[7],
			mobile: params[8],
			fax: params[9],
			email: params[10],
			www: params[11],
			lng: params[12],
			lat: params[13]
		});
		gmap_count = gmap_count + 1;
	}
}

function showAddress() {
	google.setOnLoadCallback(init_gmap);
}

function showPlan() {
	_stadt = 'wien';
	google.setOnLoadCallback(init_gmap2);
}

function showPlanGraz() {
	_stadt = 'graz';
	google.setOnLoadCallback(init_gmap2);
}

function showPlanLinz() {
	_stadt = 'linz';
	google.setOnLoadCallback(init_gmap2);
}




function showPlanEisenstadt() {
	_stadt = 'eisenstadt';
	google.setOnLoadCallback(init_gmap2);
}

function showPlanStPoelten() {
	_stadt = 'stpoelten';
	google.setOnLoadCallback(init_gmap2);
}

function showPlanKlagenfurt() {
	_stadt = 'klagenfurt';
	google.setOnLoadCallback(init_gmap2);
}

function showPlanSalzburg() {
	_stadt = 'salzburg';
	google.setOnLoadCallback(init_gmap2);
}

function showPlanBregenz() {
	_stadt = 'bregenz';
	google.setOnLoadCallback(init_gmap2);
}

function showPlanInnsbruck() {
	_stadt = 'innsbruck';
	google.setOnLoadCallback(init_gmap2);
}

/* Fix 2010-11-09 Old profile page "{", "}" are filtered by typoscript */
function _loadgoogle() { google.load("maps","2");google.load("elements","1",{packages:["localsearch"]}); }
/* Fix 2010-11-09 End */
