var centerLatitude = 47.204642;
var centerLongitude = 18.962402;
var startZoom = 7;
var overviewMap;
var detailviewMap;
var deselectCurrent = function() {}; // Empty function for controlling the highlight of list-items in the sidebar
var markerData = [];
var polylineEncoder = new PolylineEncoder();
window.onload = init;

function init() {
    overviewMap = new GMap2(document.getElementById("overviewMap"));
    overviewMap.addControl(new GSmallMapControl());
    overviewMap.addControl(new GMapTypeControl());
//	overviewMap.checkResize();
//    overviewMap.panTo(new GLatLng(centerLatitude, centerLongitude));
//alert(overviewMap.getCenter());
	retrieveVineyardEncodedPolygons();
    overviewMap.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
	
	detailviewMap = new GMap2(document.getElementById("detailviewMap"));
    detailviewMap.addControl(new GSmallMapControl());
    detailviewMap.addControl(new GMapTypeControl());
    detailviewMap.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);

	//check if any vineyard was selected in detailview before, if so: load this one again (by item_id)
	var statusRequest = new Request.HTML({method: 'get', url: '/?', onSuccess: function(response1,response2,response3,response4) {
		if(response3 != '') {
			retrieveActionpoints(response3);
			}
		}
	});
	//call request
	statusRequest.send('eID=travelconfig&command=get_config_status&code=item_id');
}

function initializeSortTab(type) {
	var listItem = document.createElement('option');
	listItem.setAttribute('value', type, 1);
	listItem.innerHTML = type;
	//generate new array with new indexes, so that indexes are in correct order with no gaps (the gaps in markerData are generated because of actionpoints with no lon/lat-data. in this case the function "retrieveActionpoints" skips that actionpoint.
	cleanedArray = markerData.clean();
	listItem.onclick = function() {
		for (var i = 0; i < cleanedArray.length; i++) {
			if (cleanedArray[i].type == type || 'All' == type) {
				cleanedArray[i].show();
			} else {
				cleanedArray[i].hide();
			}
		}
		return false;
	}
	document.getElementById('tx-travelconfig-pi1-detailview-filters').appendChild(listItem);
}

function storeMarker(){
    var lng = document.getElementById("longitude").value;
    var lat = document.getElementById("latitude").value;

    var getVars =  "?found=" + document.getElementById("found").value
        + "&left=" + document.getElementById("left").value
        + "&icon=" + document.getElementById("icon").value
        + "&lng=" + lng
        + "&lat=" + lat ;

    var request = GXmlHttp.create();

    //Anforderung an storeMarker.php auf dem Server
    request.open('GET', 'storeMarker.php' + getVars, true);
    request.onreadystatechange = function() {
       if (request.readyState == 4) {
            //Anforderung abgeschlossen

            var xmlDoc = request.responseXML;

            //root-Dokumentelement (response) übernehmen
            var responseNode = xmlDoc.documentElement;

            //type-Attribut des Knotens übernehmen
            var type = responseNode.getAttribute("type");

            //Inhalt von responseNode übernehmen
            var content = responseNode.firstChild.nodeValue;

            //Prüfung: Fehler oder Erfolg?
            if(type!='success') {
//                alert(content);
            } else {
                //Neuen Marker erzeugen und Info-Fenster hinzufügen
                var latlng = new GLatLng(parseFloat(lat),parseFloat(lng));

                var iconImage = responseNode.getAttribute("icon");
                var marker = createMarker(latlng, content, iconImage)

                overviewMap.addOverlay(marker);
                overviewMap.closeInfoWindow();
            }
       }
    }
    request.send(null);
    return false;
}

//do not delete! needed for actionpoints
function createMarker(markerData) {
//alert(markerData.title);
		var icon_width = 32;
		var icon_height = 32;
		var icon_cornerColor = "#CCCCCC";
		var icon_strokeColor = "#000000";

		switch (markerData.type) {
		  case "Restaurant":
			var iconImage = "typo3conf/ext/travelconfig/res/css/gmap_icon_restaurant.png";
			break;
		  case "Weinfest":
			var iconImage = "typo3conf/ext/travelconfig/res/css/gmap_icon_weinfest.png";
			break;
		  case "Rahmenprogramm":
			var iconImage = "typo3conf/ext/travelconfig/res/css/gmap_icon_rahmenprogramm.png";
			break;
		  case "Unterkunft":
			var iconImage = "typo3conf/ext/travelconfig/res/css/gmap_icon_unterkunft.png";
			break;
		  case "Weingut":
			var iconImage = "typo3conf/ext/travelconfig/res/css/gmap_icon_weingut.png";
			break;
		  case "Vinothek":
			var iconImage = "typo3conf/ext/travelconfig/res/css/gmap_icon_vinothek.png";
			break;			
		  default:
			var iconImage = "typo3conf/ext/travelconfig/res/css/gmap_icon_vinothek.png";
			break;
		}
		
//		alert('<h3>' + markerData[i].title + '</h3>' + markerData[i].html);
//		alert(markerData.length);
		var visible = false;
	//	alert(markerData.latitude);
	//	alert(tab_id);

		var icon = new GIcon();
		var point = new GPoint(markerData.longitude, markerData.latitude);
		icon.image = iconImage;
		icon.shadow = "typo3conf/ext/travelconfig/res/css/gmap_shadow.png";
		icon.iconSize = new GSize(31, 37);
		icon.iconAnchor = new GPoint(0, 37);
		icon.infoWindowAnchor = new GPoint(15, 17);
		var marker = new GMarker(point, icon);

		//call dynamic-icon-maker (mapiconmaker_packed.js)
//		var icon = get_marker_icon(icon_width,icon_height,icon_primaryColor,icon_cornerColor,icon_strokeColor);
//		var marker = new GMarker(point, icon);
		// list item in sidebar-left
		var listItem = document.createElement('li');
		var listItemLink = listItem.appendChild(document.createElement('a'));				
		listItemLink.href = "#";
		
//		listItemLink.innerHTML = '<h3>' + markerData.title + '</h3>';
		listItemLink.innerHTML = markerData.title;
//		alert(markerData.title);
		var focusPoint = function() {
			deselectCurrent();
			listItem.className = 'current';
			deselectCurrent = function() { 
				listItem.className = ''; 
			}
//			alert('hoho');
//			alert(markerData.picture);

		//generate full address for the bubble-tab "details":
		var full_address;

		if((markerData.zip == '') && (markerData.address == '') && (markerData.city == '')) {
				full_address = '';
		}
		else if (markerData.address != '') {
			full_address = '<p>';			
			full_address += markerData.address;
			if ((markerData.zip != '') || (markerData.city != '')) {
				full_address += '<br />';
				if ((markerData.zip != '') && (markerData.city != '')) {
					full_address += markerData.zip;
					full_address += ' ';
					full_address += markerData.city;
					}
					else {
						full_address += markerData.zip;
						full_address += markerData.city;
					}
			}
			full_address += '</p>';
		}
		else if ((markerData.zip != '') && (markerData.city != '')) {
			full_address += '<p>';
			full_address += markerData.zip;
			full_address += ' ';
			full_address += markerData.city;
			full_address += '</p>';			
		}
		else {
			full_address += '<p>';
			full_address += markerData.zip;
			full_address += markerData.city;
			full_address += '</p>';			
		}
			
var infoTabs = [ new GInfoWindowTab("Kurzinfo", '<div class="g-maps-info-bubble"><h3>' + markerData.title + '</h3><p>' + markerData.abstract + '</p></div><p>' + markerData.html + '</p>'),new GInfoWindowTab("Bild", '<div class="g-maps-info-bubble-pic"><h3>' + markerData.title + '</h3>' + markerData.picture + '</div>'), new GInfoWindowTab("Details", '<div class="g-maps-info-bubble"><h3>' + markerData.title + '</h3>' + full_address + '<a class="g-maps-info-bubble-detail-link" href="/?id=' + markerData.detaillink + '" target="_self">Detailseite</a><p>' + markerData.price + '</p><p>' + markerData.html + '</p></div>') ];

//		var markerHTML = '<div class="g-maps-info-bubble"><h3>' + markerData.title + '</h3><p>' + markerData.abstract + '</p><p>' + markerData.detaillink + '</p><p>' + markerData.price + '</p>'+ 			markerData.html + '</div>';
//		marker.openInfoWindowHtml(markerHTML);
		marker.openInfoWindowTabs(infoTabs); 
//		map.panTo(marker);
		return false;
		}
		
		GEvent.addListener(marker, 'click', focusPoint);
		listItemLink.onclick = focusPoint;
		document.getElementById('tx-travelconfig-pi1-' + markerData.tab_id + '-actionpoints-list').appendChild(listItem);
		markerData.show = function() {
			if (!visible) {
				document.getElementById('tx-travelconfig-pi1-' + markerData.tab_id + '-actionpoints-list').appendChild(listItem);
				detailviewMap.addOverlay(marker);
				visible = true;
				}
			}
	
		markerData.hide = function() {
			if (visible) {
				document.getElementById('tx-travelconfig-pi1-' + markerData.tab_id + '-actionpoints-list').removeChild(listItem);
				detailviewMap.removeOverlay(marker);
				visible = false;
				}
			}
		markerData.show();
	
    return true;
}

function get_marker_icon (icon_width,icon_height,icon_primaryColor,icon_cornerColor,icon_strokeColor) {
	var iconOptions = {};
	iconOptions.width = icon_width;
	iconOptions.height = icon_height;
	iconOptions.primaryColor = icon_primaryColor;
	iconOptions.cornerColor = icon_cornerColor;
	iconOptions.strokeColor = icon_strokeColor;
	return MapIconMaker.createMarkerIcon(iconOptions);
}

//function to draw polygons based on encoded-polylines-data
function drawEncodedPolygon (points,html,title,tab_id,make_list) {
//	alert('hoho');
/*
var polygon = new GPolygon.fromEncoded({
	  polylines: [
		{points: encoded_string,
//		 levels: "P?P",
		 levels: encoded_string,
		 color: "#374D65",
		 opacity: 0.9,
		 weight: 2,
//		 verySmall: 0.00001,
		 numLevels: 18,
		 zoomFactor: 2}],
	  fill: true,
	  color: "#0000ff",
	  opacity: 0.4,
	  outline: true
	});
*/
	if (GBrowserIsCompatible()) {
	// Make sure that SVG is on.
	if(document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#SVG","1.1")){ 
		_mSvgEnabled = true;
		_mSvgForced  = true;
		}
	}
	var polygon = polylineEncoder.dpEncodeToGPolygon([points]);
	
	// list item in sidebar-left
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));				
	listItemLink.href = "#";
	listItemLink.innerHTML = title;
					   
	var focusPoint = function() {
		deselectCurrent();
		listItem.className = 'current';
		deselectCurrent = function() { 
			listItem.className = ''; 
		}
		var pbounds = polygon.getBounds().getCenter();
		overviewMap.openInfoWindowHtml(pbounds,html);
		return false;
	}

	GEvent.addListener(polygon, "click", focusPoint);
	listItemLink.onclick = focusPoint;
	if (make_list == 1) {
		document.getElementById('tx-travelconfig-pi1-' + tab_id + '-actionpoints-list').appendChild(listItem);
	}
	return polygon;
}

//function to draw polygons based on encoded-polylines-data
function retrieveVineyardEncodedPolygons(item_id) {
//$('tx-travelconfig-pi1-overview-actionpoints').addClass('ajax-loading');
var item_id = item_id;
//var polygon0;
var request = GXmlHttp.create();
//alert(item_id);
//check if item_id is given to this function, if NOT -> render ALL vineyards, otherwise only one particular vineyard
if (typeof(item_id) == 'undefined') {

//request mitteilen, woher Daten übernommen werden
	request.open('GET', '?eID=travelconfig&command=get_vineyards', true);

	//request mitteilen, was bei Statusänderung geschehen soll
	request.onreadystatechange = function() {
		if (request.readyState == 4) {

			var xmlDoc = GXml.parse(request.responseText);
			var arr_vineyards = xmlDoc.documentElement.getElementsByTagName("vineyard");
			for (var i = 0; i < arr_vineyards.length; i++) {

					var trkPoints = arr_vineyards[i].getElementsByTagName("trkpt");
					var points = new Array(0);
					for (j = 0; j<trkPoints.length; j++) {
						points[j] = new GLatLng(parseFloat(trkPoints[j].getAttribute("lat")),
							parseFloat(trkPoints[j].getAttribute("lon")));
					}
					var title = arr_vineyards[i].getAttribute("name");
					var html = '<div><h3>'
						+ title
						+ '</h3>'
//setTimeout(\'window.detailviewMap.checkResize()\', 100) is needed here for proper function of getCenter of the particular vineyard, very short time defined so that resize is done before setCenter
						+ '<a href="#" onclick="(function(){ window.detailviewMap.checkResize(); }).delay(250); if(typeof(tabs26)==\'object\') tabs26.select(2); retrieveActionpoints(' + arr_vineyards[i].getAttribute("id") + '); new Request.HTML({method: \'get\', url: \'/?\', onComplete: function() {$(\'tx-travelconfig-pi1-detailview-my-journey\').removeClass(\'ajax-loading\');}, onRequest: function() {$(\'tx-travelconfig-pi1-detailview-my-journey\').addClass(\'ajax-loading\');}}).send(\'eID=travelconfig&command=show_one_vineyard&item_id=' + arr_vineyards[i].getAttribute("id") + '&tab_id=detailview\'); new Request.HTML({method: \'get\', url: \'/?\', update: $(\'tx-travelconfig-pi1-detailview-my-journey\')}).send(\'eID=travelconfig&command=print_full_ses_data&tab_id=detailview\'); new Request.HTML({method: \'get\', url: \'/?\'}).send(\'eID=travelconfig&command=set_config_status&show_tc=1&tab_id=detailview&item_id=' + arr_vineyards[i].getAttribute("id") + '\');" class="vineyard-selector">Gehe zu diesem Weinbaugebiet</a>';
						if (i == 0) {
							//clear list with vineyards in the left column of the configurator before adding new ones to prevent duplicates
							var ulItem = document.getElementById('tx-travelconfig-pi1-overview-actionpoints-list');
							removeAllChildren(ulItem);
							//encode all vineyards in one step via the local poly_encoder.js
						}
						var polygon0 = drawEncodedPolygon(points,html,title,'overview',1);
//						alert('hoho');
						overviewMap.addOverlay(polygon0);
/*
					var kml = new GGeoXml("http://weinreisen.www72.gugler.at/fileadmin/root_weinreisen/maps/weinbaugebiete.kml");
					overviewMap.addOverlay(kml)
*/					
					}//for1
		} //if
	} //function
	request.send(null);
//	$('tx-travelconfig-pi1-overview-actionpoints').removeClass('ajax-loading');
	}
	
else {
//request mitteilen, woher Daten übernommen werden
	request.open('GET', '?eID=travelconfig&command=get_vineyards&item_id=' + item_id, true);
//alert(item_id);
	//request mitteilen, was bei Statusänderung geschehen soll
	request.onreadystatechange = function() {
		if (request.readyState == 4) {

			var xmlDoc = GXml.parse(request.responseText);
			var arr_vineyards = xmlDoc.documentElement.getElementsByTagName("vineyard");
			for (var i = 0; i < arr_vineyards.length; i++) {
					var trkPoints = arr_vineyards[i].getElementsByTagName("trkpt");
					var points = new Array(0);
					for (j = 0; j<trkPoints.length; j++) {
						points[j] = new GLatLng(parseFloat(trkPoints[j].getAttribute("lat")),
							parseFloat(trkPoints[j].getAttribute("lon")));
					}
					var title = arr_vineyards[i].getAttribute("title");
					var html = '<strong>' + title + '</strong>';
					var polygon0 = drawEncodedPolygon(points,html,title,'detailview',0);
					detailviewMap.addOverlay(polygon0);
//					alert(typeof(polygon0));
					}//for1
		} //if
	//TO-DO: set zoomlevel variabel (so that vineyard fits exactly)
	if (typeof(polygon0) == 'object') {
		var polygon_center = polygon0.getBounds().getCenter();
		detailviewMap.setCenter(polygon_center,10);
		}
	} //function
	request.send(null);
//	$('tx-travelconfig-pi1-overview-actionpoints').removeClass('ajax-loading');		
	}
}

function retrieveActionpoints(item_id) {
//$('tx-travelconfig-pi1-detailview-container-filter-actionpoints').addClass('ajax-loading');
var type;
var allTypes = { 'All':[] };
markerData = [];
//clear list with actionpoints in the left column of the configurator before adding new ones to prevent duplicates
var ulItem = document.getElementById('tx-travelconfig-pi1-detailview-actionpoints-list');
removeAllChildren(ulItem);
//	clear old actionpoints and polygon from other vineyards
detailviewMap.clearOverlays(); 
var request = GXmlHttp.create();
// retrieve polygon for this vineyard
retrieveVineyardEncodedPolygons(item_id);

//request mitteilen, woher Daten übernommen werden
	request.open('GET', '?eID=travelconfig&command=show_one_vineyard&item_id=' + item_id, true);

	//request mitteilen, was bei Statusänderung geschehen soll
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = GXml.parse(request.responseText);
			var markers = xmlDoc.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				//lng und lat prüfen, damit MSIE keinen Fehler bei parseFloat eines Nullwerts verursacht
				if((markers[i].getAttribute("lat") != '') && (markers[i].getAttribute("lon") != '')) {
					//create asooc. array with data of all the actionpoints
					markerData[i] = {
						'latitude': markers[i].getAttribute("lat"),
						'longitude': markers[i].getAttribute("lon"),
						'title': markers[i].getAttribute("title"),
						'type': markers[i].getAttribute("category"),
						'tab_id': 'detailview',
						'abstract': markers[i].getAttribute("abstract"),
						'picture': markers[i].getAttribute("picture"),
						'address': markers[i].getAttribute("address"),												
						'zip': markers[i].getAttribute("zip"),						
						'city': markers[i].getAttribute("city"),						
						'detaillink': markers[i].getAttribute("detaillink"),
						'price': markers[i].getAttribute("price"),
						'html': '<a href="#" class="g-maps-info-bubble-add-link" onclick="new Request.HTML({method: \'get\', url: \'/?\', update: $(\'tx-travelconfig-pi1-detailview-my-journey\'), onComplete: function() {$(\'tx-travelconfig-pi1-detailview-my-journey\').removeClass(\'ajax-loading\');}, onRequest: function() {$(\'tx-travelconfig-pi1-detailview-my-journey\').addClass(\'ajax-loading\');}}).send(\'eID=travelconfig&command=get&item_id=' + markers[i].getAttribute("id") + '&tab_id=detailview\');">Zu meiner Weinreise hinzufügen</a>'
						};
//					alert(markerData[i].picture);
//					var latlng = new GLatLng(parseFloat(lat), parseFloat(lon));

					
				}
			//call function only if current element of markerData is NOT undefined
//			alert(markerData[i].title);
			if (typeof(markerData[i]) != 'undefined') {
				var marker = createMarker(markerData[i]);
				allTypes[markerData[i].type] = true;
			}
//			alert(allTypes[markerData[i].type]);
//			detailviewMap.addOverlay(marker);
			} //for
			//clear filter-list-items
			var selectFilter = document.getElementById('tx-travelconfig-pi1-detailview-filters');
			removeAllChildren(selectFilter);
			
		for(type in allTypes) {
			initializeSortTab(type);
			}
		} //if
	} //function
	request.send(null);
//		$('tx-travelconfig-pi1-detailview-container-filter-actionpoints').removeClass('ajax-loading');
}

function removeAllChildren(targetElement) {
    if (targetElement && targetElement.childNodes) {
        for (var rloop = targetElement.childNodes.length -1; rloop >= 0 ; rloop--) {
            targetElement.removeChild(targetElement.childNodes[rloop]);
        }//if
    }//for
}//function
