var minlat;
var minlng;
var maxlat;
var maxlng;
var nodeId;
var blogpostId
var tripcollectionId;
var curmap;
var gtemplateaccomimage = '<div style="background: #fff"><a class="omaptitle" href="[!link!]" target="_blank">[!title!]</a><p style="width:250px;"><a href="[!link!]" target="_blank"><img style="height:45px;float:left;margin:4px 6px 0 0;" src="[!image!]" border="0"/></a><img style="width:40px;height:40px;float:right;" src="[!logo!]" />[!description!]</p></div>';
var gtemplateimage 		= '<div style="background: #fff"><a class="omaptitle" href="[!link!]">[!title!]</a><p style="width:200px;"><img style="width:60px;height:45px;float:left;margin:4px 6px 0 0;" src="[!image!]" />[!description!]</p></div>';
var gtemplateuser 		= '<a class="omaptitle" href="[!link!]">[!title!]<br /><img style="width:50px;height:50px;float:left;margin:4px 6px 0 0;" src="[!image!]" border="0"/></a>[!description!]';
var gtemplate 			= '<div style="background: #fff"><a class="omaptitle" href="[!link!]">[!title!]</a><p style="width:200px;">[!description!]</p></div>';
var markers;
var campaignIds;
var campaignNames;
var campaignOverlays;
var isTripcollection = false;

function setTripcollectionMapEvents(pmap, id) {
	curmap = pmap;
	curmap.initCenter();
	isTripcollection = true;
	
	markers = new Array();
	campaignIds = new Array();
	campaignNames = new Array();
	campaignOverlays = new Object();
	
	tripcollectionId = id;
	postTripcollectionMapAjax();
}

function setLocationMapEvents(pmap,pnodeId,platlng, pzoomlevel){
	var d = document.getElementById('mapcheckboxAccom');
	if (d) d.style.display = 'inline';

	curmap = pmap;
	curmap.initCenter( null, null );
	curmap.setCenterAndZoomFromPoints(platlng, pzoomlevel);

	nodeId = pnodeId;
	markers = new Array();
	campaignIds = new Array();
	campaignNames = new Array();
	campaignOverlays = new Object();
	setBounds();
	postMapAjax();
	OEvent.addEvent(m,'dragend',fireMoveEndBlockMap);
	OEvent.addEvent(m,'zoomend',fireMoveEndBlockMap);
}

function setSearchMapEvents(pmap,pNodeIds){
	curmap = pmap;
	curmap.initCenter();
	markers = new Array();
	campaignIds = new Array();
	campaignNames = new Array();
	campaignOverlays = new Object();
	postSearchMapAjax(pNodeIds);
}

function setUserMapEvents(pmap,pnodeId,pblogpostId){
	curmap = pmap;
	nodeId = pnodeId;
	if (pblogpostId!=undefined){
		blogpostId = pblogpostId;
	} else {
		blogpostId = 0;
	}
	curmap.initCenter();
	markers = new Array();
	campaignIds = new Array();
	campaignNames = new Array();
	campaignOverlays = new Object();
	postUserMapAjax();
/*	if (blogpostId>0){
		OEvent.addEvent(m,'dragend',fireMoveEndBlogpostMap);
		OEvent.addEvent(m,'zoomend',fireMoveEndBlogpostMap);
	}*/
}

function setMainMapEvents(pmap){
	var d = document.getElementById('mapcheckboxAccom');
	if (d) d.style.display = 'inline';

	curmap = pmap;
	curmap.initCenter(new OLatLng(51.455718,3.579826), 2);
	nodeId = 0;
	markers = new Array();
	campaignIds = new Array();
	campaignOverlays = new Object();
	campaignNames = new Array();
	setBounds();
	postMapAjax(150);
	OEvent.addEvent(m,'dragend',fireMoveEndBlockMap);
	OEvent.addEvent(m,'zoomend',fireMoveEndBlockMap);
}

function fireMoveEndBlockMap(){
	setBounds();
	postMapAjax();
}

function fireMoveEndBlogpostMap(){
	setBounds();
	postBlogPostMapAjax();
}

function changeVisibilityMarkers(){
	var mapblogposts = document.getElementById('mapblogposts');
	if (mapblogposts==null){
		for (var i=0; i<markers.length; i++){
			markers[i].show();
		}
		return;
	}
	var mapcities = document.getElementById('mapcities');
	var mappois = document.getElementById('mappois');
	var mapaccom = document.getElementById('mapaccom');
	for (var i=0; i<markers.length; i++){
		var toShow = false;
		switch (markers[i].markerType){
			case 'blogpost':
				toShow = mapblogposts.checked;
				break;
			case 'city':
				toShow = mapcities.checked;
				break;
			case 'poi':
				//toShow = mappois.checked;
				break;
			case 'accom':
				toShow = mapaccom.checked;
				break;
			case 'user':
				toShow = true;
				break;
		}
		if (toShow){
			markers[i].show();
		} else {
			markers[i].hide();
		}
	}
}

function showCampaignOverlay(aCampaign){
	for (a in campaignOverlays){
		if (campaignOverlays[a].visible){
			curmap._map.removeOverlay(campaignOverlays[a]);
		}
		campaignOverlays[a].visible = false;
		if (a==aCampaign){
			curmap._map.addOverlay(campaignOverlays[a]);
			campaignOverlays[a].visible = true;
		}
	}
}

function changeVisibilityOverlays(){
	var inHTML = "";
	for (var i=0; i<campaignIds.length; i++){
		var obj = document.getElementById("mapcampaign"+campaignIds[i]);
		var spanobj = document.getElementById("spanmapcampaign"+campaignIds[i]);
		var checkstate = obj.checked && (spanobj.style.display!='none');
		if (checkstate){
			inHTML += "<h4>"+campaignNames[i]+'</h4><ul class="std">';
			for (a in campaignOverlays){
				var chunks = a.split('_');
				if (chunks[0]==campaignIds[i]){
					inHTML += '<li><img src="'+campaignOverlays[a].icon+'" /> <a onclick="showCampaignOverlay(\''+a+'\');">'+campaignOverlays[a].name+'</a></li>';
				}
			}
			inHTML += "</ul>";
		} else {
			for (a in campaignOverlays){
				var chunks = a.split('_');
				if (chunks[0]==campaignIds[i]){
					if (campaignOverlays[a].visible){
						curmap._map.removeOverlay(campaignOverlays[a]);
					}
					campaignOverlays[a].visible = false;
				}
			}
		}
	}
	//alert(inHTML);
	if (inHTML!=''){
		document.getElementById("mapcampaignspace").innerHTML = inHTML;

		if(document.getElementById("extramapoptions")){
			document.getElementById("extramapoptions").style.display = "block";
		}
	} else {
		if(document.getElementById("extramapoptions")){
			document.getElementById("extramapoptions").style.display = "none";
		}
	}
}

function setBounds(){
	var bounds = curmap.getBounds();
	minlat = bounds[0].lat();
	minlng = bounds[0].lng();
	maxlat = bounds[1].lat();
	maxlng = bounds[1].lng();
}

function postUserMapAjax(){
	var postData = "userId="+nodeId;
	postData += "&blogpostId="+blogpostId;
	postData += "&type=nodesForUser";

	var request = YAHOO.util.Connect.asyncRequest('POST', '/call/retrieveOverlay.php', {success:handleSuccessMapScale, failure:null},postData); // responseDefaultFailure
}

function postTripcollectionMapAjax(){
	var postData = "tripcollectionId="+tripcollectionId;
	postData += "&type=tripcollection";
	var request = YAHOO.util.Connect.asyncRequest('POST', '/call/retrieveOverlay.php', {success:handleSuccessMapScale, failure:null}, postData);//responseDefaultFailure},postData);
}

function postBlogPostMapAjax(){
	var postData = "nodeId="+nodeId;
	postData += "&minlat="+ minlat;
	postData += "&minlng="+ minlng;
	postData += "&maxlat="+ maxlat;
	postData += "&maxlng="+ maxlng;
	postData += "&type=blogpostsFromSquare";
	var request = YAHOO.util.Connect.asyncRequest('POST', '/call/retrieveOverlay.php', {success:handleSuccessMap, failure:null}, postData);//responseDefaultFailure},postData);
}

function postSearchMapAjax(pNodeIds){
	var postData = "";
	for (var i=0; i<pNodeIds.length; i++){
		postData += "nodes[]="+pNodeIds[i]+"&";
	}
	if (postData != ""){
		postData += "type=nodesForSearch";
		var request = YAHOO.util.Connect.asyncRequest('POST', '/call/retrieveOverlay.php', {success:handleSuccessMapScale, failure:null},postData); // responseDefaultFailure
	}
}

function handleSuccessMapScale(o){
	handleSuccessMap(o);
	var points = new Array();
	for (var i=0; i<markers.length; i++){
		points.push( new OLatLng(markers[i].lat1,markers[i].long1) );
		if ( !((markers[i].lat1==markers[i].lat2) && (markers[i].long1==markers[i].long2)) ){
			points.push( new OLatLng(markers[i].lat2,markers[i].long2) );
		}
	}
	curmap.setCenterAndZoomFromPoints(points,12);
	if (blogpostId>0){
		OEvent.addEvent(m,'dragend',fireMoveEndBlogpostMap);
		OEvent.addEvent(m,'zoomend',fireMoveEndBlogpostMap);
	}
	
	if (isTripcollection) {
		var pts = new Array();
		for (var i=0; i<markers.length; i++) {
			pts.push( new OLatLng((markers[i].lat1 + markers[i].lat2) / 2, (markers[i].long1 + markers[i].long2) / 2) );
		}	
		var p = new OPolygon(pts);
		curmap.addOverlay(p);
	}

}

function postMapAjax(limit){
	var postData = "nodeId="+nodeId;
	postData += "&minlat="+ minlat;
	postData += "&minlng="+ minlng;
	postData += "&maxlat="+ maxlat;
	postData += "&maxlng="+ maxlng;
	postData += "&type=nodesFromSquare";
	if (limit == undefined) {
		postData += "&limit=20";
	} else {
		postData += "&limit=50";
	}
	var request = YAHOO.util.Connect.asyncRequest('POST', '/call/retrieveOverlay.php', {success:handleSuccessMap, failure:null}, postData);//responseDefaultFailure},postData);
}

function handleSuccessMap(o){
	var resXML = o.responseXML;
	var rootNode = resXML.firstChild;

	while (rootNode.nodeName!='overlay'){
		rootNode = rootNode.nextSibling;
		if (rootNode==null){
			return;
		}
	}

	for (var i=0; i<markers.length; i++){
		if(markers[i] != undefined){
			curmap.removeOverlay(markers[i]);
		}
	}
	markers = new Array();
	var visiblemapcampaigns = new Array();
	// set all old markers to be deleted
	for (var i=0; i<rootNode.childNodes.length; i++){
		var toAdd = false;
		var nodeName = rootNode.childNodes[i].nodeName;

		if (nodeName == 'blogpost' || nodeName == 'city' || nodeName == 'accom' || nodeName == 'user') {
			toAdd = true;
			var blogpostNode 	= rootNode.childNodes[i];
			var lat1 			= parseFloat(blogpostNode.getAttribute('lat1'));
			var long1 			= parseFloat(blogpostNode.getAttribute('long1'));
			var lat2 			= parseFloat(blogpostNode.getAttribute('lat2'));
			var long2 			= parseFloat(blogpostNode.getAttribute('long2'));
			var lat 			= (lat1+lat2)/2;
			var long 			= (long1+long2)/2;
			var webtitle 		= blogpostNode.getAttribute('webtitle');
			var title 			= '';
			var description 	= '';
			var image 			= '';
			var link 			= '';
			var logo 			= '';
			for (var j=0; j<blogpostNode.childNodes.length; j++){
				var propNode = blogpostNode.childNodes[j];
				if (propNode.nodeName=='title'){
					title = propNode.firstChild.nodeValue;
				} else if (propNode.nodeName=='description'){
					description = propNode.firstChild.nodeValue;
				} else if (propNode.nodeName=='image'){
					if (propNode.hasChildNodes()){
						image = propNode.firstChild.nodeValue;
					}
				} else if (propNode.nodeName=='link'){
					link = propNode.firstChild.nodeValue;
				} else if (propNode.nodeName=='logo'){
					logo = propNode.firstChild.nodeValue;
				}
			}

			if (nodeName=='blogpost'){
				var icon = new OImageIcon('/img/map/blog.gif',10,25,20,25);
				var markerType="blogpost";
			} else if (nodeName=='city'){
				var icon = new OImageIcon('/img/map/city.gif',10,25,20,25);
				var markerType="city";
			} else if (nodeName=='accom'){
				var icon = new OImageIcon('/img/map/adv.gif',10,25,20,25);
				var markerType="accom";
			} else if (nodeName=='user'){
				var icon = new OImageIcon('/img/map/user.gif',10,25,20,25);
				var markerType="user";
			} else {
				var icon = new OImageIcon('/img/map/poi.gif',10,25,20,25);
				var markerType="poi";
			}
		} else if (nodeName=='campaign' && curmap.getZoom() > 3){
			var campaignNode = rootNode.childNodes[i];
			var campaignId = campaignNode.getAttribute('id');
			visiblemapcampaigns.push(campaignId);
			var newCampaign = true;
			for (var j=0; j<campaignIds.length; j++){
				if (campaignId==campaignIds[j]){
					newCampaign = false;
					//alert('no new campaign');
					break;
				}
			}
			if (newCampaign){
				campaignIds.push(campaignId);
				//alert('campaignId:'+campaignId);
				var campaignName = '';
				var campaignItems = new Array();
				for (var j=0; j<campaignNode.childNodes.length; j++){
					switch (campaignNode.childNodes[j].nodeName){
						case 'name':
							campaignName = campaignNode.childNodes[j].firstChild.nodeValue;
							break;
						case 'item':
							var item = new Object();
							var itemNode = campaignNode.childNodes[j];
							for (var k=0; k<itemNode.childNodes.length; k++){
								switch (itemNode.childNodes[k].nodeName){
									case 'icon':
										item['icon'] = itemNode.childNodes[k].firstChild.nodeValue;
										break;
									case 'kml':
										item['kml'] = itemNode.childNodes[k].firstChild.nodeValue;
										break;
									case 'name':
										item['name'] = itemNode.childNodes[k].firstChild.nodeValue;
										break;
								}
							}
							campaignItems.push(item);
							break;
					}
				}
				campaignNames.push(campaignName);
				for (var j=0; j<campaignItems.length; j++){
					campaignOverlays[campaignId+'_'+j] = new GGeoXml(campaignItems[j].kml);
					campaignOverlays[campaignId+'_'+j].kml = campaignItems[j].kml;
					campaignOverlays[campaignId+'_'+j].name = campaignItems[j].name;
					campaignOverlays[campaignId+'_'+j].icon = campaignItems[j].icon;
					campaignOverlays[campaignId+'_'+j].visible = false;
				}
			}
		}
		
		if (toAdd){
			if (markerType=='accom'){
				var tpl = gtemplateaccomimage;
				tpl = tpl.replace('[!logo!]', logo);
				var marker = new OMarker(new OLatLng(lat+900,long),icon,tpl,title,description,image,"lees meer",link);
			} else if (markerType=='user'){
				var marker = new OMarker(new OLatLng(lat+900,long),icon,gtemplateuser,title,description,image,"lees meer",link);
			} else if (image!=''){
				var marker = new OMarker(new OLatLng(lat+900,long),icon,gtemplateimage,title,description,image,"lees meer",link);
			} else {
				var marker = new OMarker(new OLatLng(lat+900,long),icon,gtemplate,title,description,image,"lees meer",link);
			}
			marker.webtitle = webtitle;
			marker.markerType = markerType;
			marker.lat1 = lat1
			marker.lat2 = lat2
			marker.long1 = long1
			marker.long2 = long2
			curmap.addOverlay(marker);
			marker.setLatLng(new OLatLng(lat,long));
			marker.hide();
			markers.push(marker);
			// add push event to markers that will be added
		}
	}
	for (var j=0; j<campaignIds.length; j++){
		document.getElementById("spanmapcampaign"+campaignIds[j]).style.display = "none";
	}
	for (var j=0; j<visiblemapcampaigns.length; j++){
		document.getElementById("spanmapcampaign"+visiblemapcampaigns[j]).style.display = "inline";
	}
	changeVisibilityOverlays();
		
	changeVisibilityMarkers();
}