var map, clsstyles, mapoverlay, casaicon, groupicon, hotelicon;
var markerClusterer = false;
var markers_ = new Array();
var maprequest = false;

function updateSearchMap(sendPosition) {

	$('mapTools').addClass('loading');

	var bounds		= map.getBounds();
	var northEast	= bounds.getNorthEast();
	var southWest	= bounds.getSouthWest();
	var zoom		= map.getZoom();

	var ne_lat		= northEast.lat();
	var ne_lng		= northEast.lng();
	var sw_lat		= southWest.lat();
	var sw_lng		= southWest.lng();

	var request_url	= baseUrl+'mapsearch/index/'+ne_lat+'/'+ne_lng+'/'+sw_lat+'/'+sw_lng+'/'+zoom+'/';

	if(maprequest)maprequest.cancel();


	maprequest = new Request.HTML({url:request_url}).send().addEvents({'onSuccess': function(responseTree, responseElements, responseHTML, responseJavaScript){
		var data = JSON.decode(responseHTML);
		var markers = new Array();

		if(parseInt(data.zoom) != zoom) {
			map.setZoom(parseInt(data.zoom));
		}

		data.markers.each(function(m, index){
			if(!markers_[m.id]) {

				var latLng = new google.maps.LatLng(m.lat, m.lng);
				if(m.type == 'casarural')var marker = new google.maps.Marker({id: m.id, position: latLng, icon: casaicon});
				if(m.type == 'hotels')var marker = new google.maps.Marker({id: m.id, position: latLng, icon: hotelicon});
				if(m.type == 'groups')var marker = new google.maps.Marker({id: m.id, position: latLng, icon: groupicon});				

				markerClusterer.addMarker(marker);
				markers_[m.id] = marker;

				google.maps.event.addListener(marker, 'click', function(event) {
					markerWinShow(marker);
				});
			}
		});

		$('mapTools').removeClass('loading');

	}});
}

function markerWinShow(marker) {

	var projection	= mapoverlay.getProjection();
	var mapposition	= projection.fromLatLngToDivPixel(map.getCenter());
	var mrkposition	= projection.fromLatLngToDivPixel(marker.getPosition());
	var mapPos		= $('searchMap').getPosition();
	var mapSize		= $('searchMap').getSize();

	var x			= (mapPos.x+(mapSize.x/2))+(mrkposition.x-mapposition.x);
	var y			= (mapPos.y+(mapSize.y/2))+(mrkposition.y-mapposition.y);

	$('mapTools').addClass('loading');

	var request_url	= baseUrl+'mapsearch/markerInfo/'+marker.id+'/';

	new Request.HTML({url:request_url}).send().addEvents({'onSuccess': function(responseTree, responseElements, responseHTML, responseJavaScript){
		$('mapInfoWindow').removeClass('full');
		$('mapInfoWindow').set('html', responseHTML);

		$('mapInfoWindow').setStyles({
			'display': '',
			'visibility': 'hidden'
		});

		var winSize		= window.getSize();
		var winScrl		= window.getScroll();
		var infSize		= $('mapInfoWindow').getSize();
		var barrow		= $('mapInfoWindow').getElement('.barrow');
		var tarrow		= $('mapInfoWindow').getElement('.tarrow');

		$('mapInfoWindow').removeClass('b');
		$('mapInfoWindow').removeClass('r');

		var left = x-12;
		var top = (y-infSize.y)-35;

		if(top < (winScrl.y)) {
			$('mapInfoWindow').addClass('b');
			top = y+3;
		}

		if((left+infSize.x) > (winSize.x+winScrl.x)) {
			$('mapInfoWindow').addClass('r');
			left = (x-infSize.x)+12;
		}

		$('mapInfoWindow').addClass('full');

		var mapOptions = {
			zoom: 12,
			center: marker.getPosition(),
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			mapTypeControl: false,
			navigationControl: false
		};

		var smap = new google.maps.Map($('mapInfoWindow').getElement('.descMap'), mapOptions);

		var smarker = new google.maps.Marker({
			position: marker.getPosition(),
			map: smap
		});

		$('mapInfoWindow').setStyles({
			'visibility': 'visible',
			'left': left,
			'top': top
		});

		$('mapInfoWindow').removeClass('full');

		$('mapTools').removeClass('loading');
	}});
}

function centerZoom(lat,lng) {
	$('mapInfoWindow').setStyle('display', 'none');
	map.setZoom(18);
	map.setCenter(new google.maps.LatLng(lat, lng));
}

function showMarkerDetails()
{
	if($('mapInfoWindow').get('class').indexOf('full') >= 0) {
		$('mapInfoWindow').removeClass('full');
	}

	else {
		$('mapInfoWindow').addClass('full');
	}
}


function mapViewChange(type) {
	if(type=='map') {
		$('mapview1').addClass('mapToolActive');
		$('mapview2').removeClass('mapToolActive');
		map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
	}

	else {
		$('mapview2').addClass('mapToolActive');
		$('mapview1').removeClass('mapToolActive');
		map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
	}
}


function mapZoom(zoom) {
	var zoom = map.getZoom()+zoom;
	map.setZoom(zoom);

}

window.addEvent('domready', function() {
	if($("homeGoogleMap")) {
		clsstyles = [[{
			url: baseUrl+'webroot/images/mapmarkers/cls2.png',
			height: 42,
			width: 27,
			opt_anchor: [16, 0],
			opt_textColor: '#fff',
			opt_textSize: 10,
			topPadding: 3
		  }, {
			url: baseUrl+'webroot/images/mapmarkers/cls1.png',
			height: 46,
			width: 35,
			opt_anchor: [16, 0],
			opt_textColor: '#fff',
			opt_textSize: 10,
			topPadding: 3
		  }, {
			url: baseUrl+'webroot/images/mapmarkers/cls1.png',
			height: 46,
			width: 35,
			opt_anchor: [16, 0],
			opt_textColor: '#fff',
			opt_textSize: 10,
			topPadding: 3
		  }]];

		
		var defaultPoint = new google.maps.LatLng(36.509937,-4.886352);

		var mapOptions = {
			zoom: 12,
			center: defaultPoint,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			mapTypeControl: false,
			navigationControl: false
		};

		map = new google.maps.Map($("searchMap"), mapOptions);

		markerClusterer = new MarkerClusterer(map, markers_, {
			maxZoom: 16,
			gridSize: 35,
			styles: clsstyles[0]
		});

		google.maps.event.addListener(map, 'idle', function(event) {
			updateSearchMap();
		});

		google.maps.event.addListener(map, 'bounds_changed', function(event) {
			$('mapInfoWindow').setStyle('display', 'none');
		});

		mapoverlay = new google.maps.OverlayView();
		mapoverlay.onAdd = function() { }
		mapoverlay.onRemove = function() { }
		mapoverlay.draw = function() {}	

		casaicon = new google.maps.MarkerImage("/webroot/images/mapmarkers/casarural.png", null, null, new google.maps.Point(0, 32));
		hotelicon = new google.maps.MarkerImage("/webroot/images/mapmarkers/hotel.png", null, null, new google.maps.Point(0, 32));
		groupicon = new google.maps.MarkerImage("/webroot/images/mapmarkers/grouprural.png", null, null, new google.maps.Point(0, 32));

		mapoverlay.setMap(map);
	}
});