var minimumRes = 9;
var maximumRes = 17;
var map = {};
var mrg = {};
var categories = [];
var tags = [];
var labels = [];

function drawCircle(lat, lng, range){
	with (Math) {
		var d = range/6378.8;	// radians

		var lat = (PI/180)* lat; // radians
		var lng = (PI/180)* lng; // radians
		
		var bounds = new google.maps.LatLngBounds();
		var circlePoints = Array();

		for (var a = 0 ; a < 361 ; a++ ) {
			var tc = (PI/180)*a;
			var y = asin(sin(lat)*cos(d)+cos(lat)*sin(d)*cos(tc));
			var dlng = atan2(sin(tc)*sin(d)*cos(lat),cos(d)-sin(lat)*sin(y));
			var x = ((lng-dlng+PI) % (2*PI)) - PI ; // MOD function
			var point = new google.maps.LatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
			circlePoints.push(point);
			bounds.extend(point);
		}

		if (d < 1.5678565720686044) {
			circle = new google.maps.Polygon(circlePoints, '#EF6500', 3, 0.5, '#FFD800', 0.25);	
		}
		else {
			circle = new google.maps.Polygon(circlePoints, '#EF6500', 1, 0.5);	
		}

		map.addOverlay(circle); 
	}
}

function createMarker(pin, cat_id) {
    var cat_icon = new google.maps.Icon(G_DEFAULT_ICON);
	var cat_image = $("#"+cat_id).find("img");
    cat_icon.image = cat_image.attr("src");
    cat_icon.shadow = "/images/layout/shadow.png";
	cat_icon.iconSize = new google.maps.Size(30, 40);
	cat_icon.shadowSize = new google.maps.Size(40, 51);
	cat_icon.iconAnchor = new google.maps.Point(0, 40);
	cat_icon.infoWindowAnchor = new google.maps.Point(30, 0);
	cat_icon.imageMap = [0,0, 30,0, 30,30, 0,30];

	var marker = new google.maps.Marker(new google.maps.LatLng(pin.lat, pin.lng), {title: pin.title, icon: cat_icon});
	google.maps.Event.addListener(marker, 'click', function() {
		var cat_url = cat_image.attr("src");
		cat_url = cat_url.substring(cat_url.indexOf('_')+1, cat_url.lastIndexOf('.'));
		var html = "<a href='/profiel/"+pin.urltitle+ "/' title='" + pin.title + "' class='namePlace'>" + pin.title + "</a> - ";
		html += '<a href="/profiel/lijst/'+cat_url+'/" title="'+cat_image.attr("alt")+'" class="catPlace">'+cat_image.attr("alt")+'</a><br />';
		html += '<p>'+pin.street+'<br />';
		html += pin.city+'</p>';
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function getPoint(profile_element){
	var pin = {};
	pin.lat = $(".lat",profile_element).html();
	pin.lng = $(".lng",profile_element).html();
	pin.title = $(".namePlace", profile_element).html();
	pin.urltitle = $(".urltitle", profile_element).html();
	pin.street = $(".street", profile_element).html();
	pin.city = $(".city", profile_element).html();
	var cat_id = "cat_"+$(".cat_id",profile_element).html();
    
    return createMarker(pin, cat_id);
}

function initMap()
{
	$.getScript("/js/markermanager_packed_special.js", function(){
		map = new google.maps.Map2(document.getElementById("zoekresultaten-map"));
		var topRight = new google.maps.ControlPosition(G_ANCHOR_TOP_RIGHT, new google.maps.Size(10,10));
		map.addControl(new google.maps.LargeMapControl3D(), topRight);
		var center = new google.maps.LatLng(51.053562, 3.720867);
		var mapTypes = map.getMapTypes();
		for (var i=0; i < mapTypes.length; i++) {
			mapTypes[i].getMinimumResolution = function(){return minimumRes;};
			mapTypes[i].getMaximumResolution = function(){return maximumRes;};
		}
		
		map.setCenter(center, 9);
		
		mrg = new MarkerManager(map);
		
		var markers = [];
		$(".result_member").each(function(){
			var marker = getPoint(this);
			markers.push(marker);
		});
		mrg.addMarkers(markers,9);
		mrg.refresh();
		
		var lat = $("#address_lat").html();
		var lng =  $("#address_lng").html();
		var range = $("#address_range").html();
		if(lat && lng && range){
			drawCircle(lat, lng, range);
			switch(range){
				case '1':
					map.setCenter(new google.maps.LatLng(lat, lng), 14);
					break;
				case '5':
					map.setCenter(new google.maps.LatLng(lat, lng), 12);
					break;
				case '10':
					map.setCenter(new google.maps.LatLng(lat, lng), 11);
					break;
				case '20':
					map.setCenter(new google.maps.LatLng(lat, lng), 10);
					break;
			}
		}
	});
}

function updateDropResults(dropcontainer, items)
{
	dropcontainer.html("");
	var toAdd = "";
	for(i=0;i<items.length;i++)
	{
		var title = items[i].title;
		toAdd += '<span>'+title+'</span>';
	}
	dropcontainer.html(toAdd);
}

function itemExists(item, arr)
{
	for(i=0;i<arr.length;i++)
	{
		if(arr[i].id == item.id) return true
	}
	return false;
}

function deleteInArray(title, arr, type)
{
	for(i=0;i<arr.length;i++)
	{
		if(arr[i].title == title)
		{
			$('#hidden_'+type+'_'+arr[i].id).remove();
			arr.splice(i,1);
		}
	}
}

function handleClickSpan(span, arr, type)
{
	var title = span.html();
	span.remove();
	deleteInArray(title, arr, type);
}

function handleClickAdd(dropdown,type,arr,container)
{
	var id = dropdown.val();
	var title = $("#drop"+type+"_"+id).html();
	var item = {"id": id, "title": title};
	
	if(id > 0 && title != '' && itemExists(item, arr) == false)
	{
		arr.push(item);
		updateDropResults(container, arr);
		$("#hiddenvalues").append('<input id="hidden_'+type+'_'+id+'" name="'+type+'[]" value="'+id+'" type="hidden" />');
	}
}

$(document).ready(function()
{
	if($("body").hasClass("zoekresultaten"))
	{
		google.load("maps","2", {"callback" : initMap});
	}
	
	var $catdrop = $("#category_drop");
	var $labdrop = $("#label_drop");
	var $tagdrop = $("#tag_drop");
	
	var $catcont = $("#catdrop_results");
	var $labcont = $("#labdrop_results");
	var $tagcont = $("#tagdrop_results");	
	
	$("#add_category").click(function(){handleClickAdd($catdrop,"category",categories,$catcont);});
	$("#add_tag").click(function(){handleClickAdd($tagdrop,"tag",tags,$tagcont);});
	$("#add_label").click(function(){handleClickAdd($labdrop,"label",labels,$labcont);});
	
	$("span", $catcont).live("click",function(){handleClickSpan($(this),categories, "category");});
	$("span", $tagcont).live("click",function(){handleClickSpan($(this),tags, "tag");});
	$("span", $labcont).live("click",function(){handleClickSpan($(this),labels, "label");});
});