/*---------------MAP JAVASCRIPT---------------*/
 function IncreaseZIndex(marker,b) 
	{
	return GOverlay.getZIndex(marker.getPoint().lat()) + 1000000;
	}

 function DecreaseZIndex(marker) 
	{
	return GOverlay.getZIndex(marker.getPoint().lat()) - 1000000;
	}

preload_image = new Image(66,66); 
preload_image.src="/img/icons/ajax-loader.gif"; 
var ID;
var id;
var w;
var actArray;
var accommArray;
var q;
var g;
var temp;
var marker;
var center;
var Zoom;
var Zoom_Accomm;
var lastlat;
var lastlong;
var origlatlong;
var extensionForIcons = 1.3;	
var movingSensitivity = 3;
var onloadAccomms = false;
var onloadPics = false;
var onloadActs = false;
var canLoad;

var markerCluster;
var cluster_options = {maxZoom:13, gridSize:40};

var act_info = null;
var accomm_info = null;

//initializes the map
function initialize_region(latitude, longitude, latMax, longMax, latMin, longMin)
	{
    if (GBrowserIsCompatible()) {
	q = 0;
	w = 0;
	g = 0;
	origlatlong = latitude+" "+longitude;
	latlong = origlatlong;
	temp = new Array();
	actArray = new Array();
	accommArray = new Array();
    map = new GMap2(document.getElementById("map_canvas"));
	GEvent.addListener(map, "load", function()
		{
		$('#maploading').hide();
		});
	two=latlong.split(" ");
	lastlat = two[0];
	lastlong = two[1];
	center = new GLatLng(two[0], two[1]);
	
	var A = new GLatLng(latMin, longMin);
	var B = new GLatLng(latMax, longMax);

	var temp1 = new GLatLngBounds(A,B);
	zoom = map.getBoundsZoomLevel(temp1);
	Zoom = zoom;
	Zoom_Accomm = zoom;
	if(zoom>17)
		map.setMapType(G_HYBRID_MAP);
	else
		map.setMapType(G_NORMAL_MAP);
	map.setCenter(center, Zoom);

	//adding control to the maps
	map.addControl(new GLargeMapControl3D());
	map.addControl(new GMapTypeControl());
	map.addControl(new GOverviewMapControl());
	map.addControl(new GMapTypeControl());
	map.enableContinuousZoom();

	checkpics();
	checkacts();
	checkaccomms();
	
	GEvent.addListener(map, "moveend", function(overlay, latlng) {
		var centerloc = new GLatLng();
		centerloc = map.getCenter();
		var bounds = map.getBounds();
		var extend = bounds.toSpan();
		var extlat = extend.lat();
		var extlng = extend.lng();
		var latt = centerloc.lat();
		var lonn = centerloc.lng();
		var latchange = parseFloat(latt)-parseFloat(lastlat);
		var longchange = parseFloat(lonn)-parseFloat(lastlong);
		var difference = Math.sqrt(latchange*latchange + longchange*longchange);
		if(difference>extlat/movingSensitivity)
			{
			if($('#pics').attr('checked')==1)
				{
				lastlat = latt;
				lastlong = lonn;
		 		addpics(1);
				}
			if($('#acts').attr('checked')==1)
				{
				lastlat = latt;
				lastlong = lonn;
		 		addacts(1);
				}
			if($('#accomms').attr('checked')==1)
				{
				//markerCluster.clearMarkers();
				lastlat = latt;
				lastlong = lonn;
		 		addaccomms(0);
				}
			}
	});
	
	GEvent.addListener(map, "zoomend", function(oldlevel, newlevel) {

		var check = Math.abs(Zoom-newlevel);
		var check2 = Zoom_Accomm-newlevel;
		Zoom = newlevel;
		if(check>0)
			{
			if($('#pics').attr('checked')==1)			
				{
		 		addpics(0);
				}
			if($('#acts').attr('checked')==1)
				{
		 		addacts(0);
				}
			if($('#accomms').attr('checked')==1 && check2 > 0)
				{
				//markerCluster.clearMarkers();
				Zoom_Accomm = newlevel;
				Zoom = newlevel;
		 		addaccomms(0);
				}
			}
		});
	}
}	

function initialize(latitude, longitude, zoom_level, Id, actNamee) {
      if (GBrowserIsCompatible()) {
	IdentificationNumber = Id;
	actName = actNamee;
	q = 0;
	w = 0;
	g = 0;
	origlatlong = latitude+" "+longitude;
	latlong = origlatlong;
	temp = new Array();
	actArray = new Array();
	accommArray = new Array();
    map = new GMap2(document.getElementById("map_canvas"));
	GEvent.addListener(map, "load", function()
		{
		$('#maploading').hide();
		});
	two=latlong.split(" ");
	lastlat = two[0];
	lastlong = two[1];
	center = new GLatLng(two[0], two[1]);
	map.setMapType(G_NORMAL_MAP);
	Zoom = zoom_level;
	zoom = Zoom;
	map.setCenter(center, Zoom);
	var tinyIcon = new GIcon();
	tinyIcon.image = "http://www.google.com/uds/samples/places/temp_marker.png";
	tinyIcon.iconSize = new GSize(20, 34);
	tinyIcon.iconAnchor = new GPoint(10, 17);
	tinyIcon.infoWindowAnchor = new GPoint(5, 1);
	markerOptions = { icon:tinyIcon, zIndexProcess:IncreaseZIndex};
	marker = new GMarker(center,markerOptions);
	map.addOverlay(marker);
		
	//adding control to the maps
	map.addControl(new GLargeMapControl3D());
	map.addControl(new GMapTypeControl());
	map.addControl(new GOverviewMapControl());
	map.addControl(new GMapTypeControl());
	map.enableContinuousZoom();
	checkpics();
	checkacts();
	checkaccomms();
	GEvent.addListener(map, "moveend", function(overlay, latlng) {
		var centerloc = new GLatLng();
		centerloc = map.getCenter();
		var bounds = map.getBounds();
		var extend = bounds.toSpan();
		var extlat = extend.lat();
		var extlng = extend.lng();
		var latt = centerloc.lat();
		var lonn = centerloc.lng();
		var latchange = parseFloat(latt)-parseFloat(lastlat);
		var longchange = parseFloat(lonn)-parseFloat(lastlong);
		var difference = Math.sqrt(latchange*latchange + longchange*longchange);
		if(difference>extlat/movingSensitivity)
			{
			//alert('difference > extlat');
			if($('#pics').attr('checked')==1)
				{
				lastlat = latt;
				lastlong = lonn;
		 		addpics(1);
				}
			if($('#acts').attr('checked')==1)
				{
				lastlat = latt;
				lastlong = lonn;
		 		addacts(1);
				}
			if($('#accomms').attr('checked')==1)
				{
				lastlat = latt;
				lastlong = lonn;
		 		addaccomms(1);
				}
			}
	});
	
	GEvent.addListener(map, "zoomend", function(oldlevel, newlevel) {
		var check = Math.abs(Zoom-newlevel);
		if(check>1)
			{
			
			if($('#pics').attr('checked')==1)			
				{
				Zoom = newlevel;
		 		addpics(0);
				}
			if($('#acts').attr('checked')==1)
				{
				Zoom = newlevel;
		 		addacts(0);
				}
			if($('#accomms').attr('checked')==1)
				{
				Zoom = newlevel;
		 		addaccomms(0);
				}
			}
		});
	}
}	

function resett(){
	//resetting map info div
	$('#mapExtraInformation').html("");

	//unchecking all tick boxes
	document.mappp.pics.checked=false;
	document.mappp.acts.checked=false;
	document.mappp.accomms.checked=false;

	//resetting map position
	map.setCenter(center, zoom);
	map.setMapType(G_NORMAL_MAP);
	map.enableContinuousZoom();
	//removing all extra icons from map
	array = [];

	removeActs();
	removePics();
	removeAccomms();
}

//called onchange of pic click box, checks if clicked or not, if click
function checkpics(){
	if($('#pics').attr('checked')==1)
		addpics();
	else
		removePics();
}

function checkacts(){
		
	if($('#acts').attr('checked')==1)
		addacts();
	else
		removeActs();
}

function checkaccomms(){
	if($('#accomms').attr('checked')==1)
		addaccomms();
	else
		removeAccomms();
}

function addpics(keep){
	$('#picThinker').html('<img src="/img/icons/s_load.gif" height="16" width="16" alt="Adding Pictures" title="Adding Pictures to the Map" />');
	centerloc = new GLatLng();
	centerloc = map.getCenter();
	bounds = map.getBounds();
	extend = bounds.toSpan();
	var extlat = extend.lat();
	var extlng = extend.lng();
	var latt = centerloc.lat();
	var lonn = centerloc.lng();
	extlat = extlat*extensionForIcons;
	createPics(latt,lonn,extlat,keep);
}

function addacts(keep){
	$('#attrThinker').html('<img src="/img/icons/s_load.gif" height="16" width="16" alt="Adding Attractions" title="Adding Attractions to the Map" />');
	centerloc = new GLatLng();
	centerloc = map.getCenter();
	bounds = map.getBounds();
	extend = bounds.toSpan();
	var extlat = extend.lat();
	var extlng = extend.lng();
	var latt = centerloc.lat();
	var lonn = centerloc.lng();
	extlat = extlat*extensionForIcons;
	numberResults = 30;
	if(map.getZoom()>=14)
		numberResults = 45;
	createActs(latt,lonn,extlat,numberResults,keep);
}

function addaccomms(keep){
	$('#accommThinker').html('<img src="/img/icons/s_load.gif" height="16" width="16" alt="Adding Accommodation" title="Adding Accommodation to the Map" />');
	centerloc = new GLatLng();
	centerloc = map.getCenter();
	bounds = map.getBounds();
	extend = bounds.toSpan();
	var extlat = extend.lat();
	var extlng = extend.lng();
	var latt = centerloc.lat();
	var lonn = centerloc.lng();
	extlat = extlat*extensionForIcons;
	createAccomms(latt,lonn,extlat,keep);
}

 function removePics(){
	$('#picThinker').html('');
 	for(r = 0; r < q; r++)
		map.removeOverlay(temp[r]);
	q = 0;
	pics = [];
 }

 function removeActs(){
	$('#attrThinker').html('');
  	for(r = 0; r < w; r++)
		map.removeOverlay(actArray[r]);
	w = 0;
 }

 function removeAccomms(){
	$('#accommThinker').html('');
	markerCluster.clearMarkers();
	g = 0;
	accommArray = [];
  	//for(r = 0; r < g; r++)
	//	map.removeOverlay(accommArray[r]);
	g = 0;
 }

function createPics(lat,lng,off,keep){
	Offset = parseFloat(off);
	var Minx = parseFloat(lng-Offset);
	var Miny = parseFloat(lat-Offset);
	var Maxx = parseFloat(parseFloat(lng)+Offset);
	var Maxy = parseFloat(parseFloat(lat)+Offset);
	var string = '/ajax/get_panoramia.php?order=popularity&set=full&from=0&to=40&minx='+Minx+'&miny='+Miny+'&maxx='+Maxx+'&maxy='+Maxy+'&size=small';
	$.get('/ajax/get_panoramia.php?order=popularity&set=full&from=0&to=40&minx='+Minx+'&miny='+Miny+'&maxx='+Maxx+'&maxy='+Maxy+'&size=small', function(data){
			var jso = data;
			var tempo = eval('('+jso+')');
			if(keep==0)
				removePics();
			for(y = 0; y < tempo.photos.length;y++)
				{
				createPic(tempo.photos[y].owner_name,tempo.photos[y].photo_title,tempo.photos[y].photo_file_url,tempo.photos[y].latitude,tempo.photos[y].longitude,tempo.photos[y].width,tempo.photos[y].height,tempo.photos[y].owner_id,tempo.photos[y].photo_id);
				}
			$('#picThinker').html("<img src='/img/icons/15x15pic.png' height='11' width='13' alt='Pictures' title='Pictures are show with this icon on the map' style='margin-top:2px;' />");
		},'html');
}

function createActs(lat,lng,off,num,keep){
	Offset = parseFloat(off);
	var Minx = parseFloat(lng-Offset);
	var Miny = parseFloat(lat-Offset);
	var Maxx = parseFloat(parseFloat(lng)+Offset);
	var Maxy = parseFloat(parseFloat(lat)+Offset);
	$.get('/ajax/get_acts.php?minx='+Minx+'&miny='+Miny+'&maxx='+Maxx+'&maxy='+Maxy+'&numresults='+num+'&new=1', function(data){
		act_info = data;
		if(act_info!="")
			{
			var activities = act_info.split("!!@@@!!");
			if(keep==0)
				removeActs();
			for(y = 0; y < activities.length;y++)
				{
				tempoo = activities[y].split("<<#$%>>");
				if(tempoo[0]!=null)
					createAct(tempoo[0],tempoo[1],tempoo[2],tempoo[3],tempoo[4],tempoo[5],tempoo[6]);
				}
			}
		$('#attrThinker').html('<img src="/img/icons/hicontinfo.png" height="15" width="15" alt="Attractions" title="Attractions are shown with this icon on the Map" />');
	},'html');
}

function get_grading_hash()
	{
	var grading_array = [];
	for(var i = 0; i < 6; i++)
		if($('#Grading'+i).attr('checked')==1)
			grading_array[i] = 1;
		else
			grading_array[i] = 0;
	return grading_array;
	}

function get_type_hash()
	{
	var type_array = [];
	for(var i = 0; i < 20; i++)
		type_array[i] = 1;
	if($('#Type4').attr('checked')!=1)
		type_array[4] = 0;
	if($('#Type5').attr('checked')!=1)
		type_array[5] = 0;
	if($('#Type2').attr('checked')!=1)
		type_array[2] = 0;
	if($('#Type9').attr('checked')!=1)
		type_array[9] = 0;
	if($('#Type3').attr('checked')!=1)
		type_array[3] = 0;
	if($('#Type11').attr('checked')!=1)
		type_array[11] = 0;
	if($('#Type6').attr('checked')!=1)
		type_array[6] = 0;
	if($('#Type10').attr('checked')!=1)
		type_array[10] = 0;
	return type_array;
	}

function createAccomms(lat,lng,offf,keep){
	var twoo = origlatlong.split(" ");
	lattt = twoo[0];
	longgg = twoo[1];
	var Offset = parseFloat(offf);
	var Minx = parseFloat(lng-Offset);
	var Miny = parseFloat(lat-Offset);
	var Maxx = parseFloat(parseFloat(lng)+Offset);
	var Maxy = parseFloat(parseFloat(lat)+Offset);

	var grading_hash = get_grading_hash();
	var type_hash = get_type_hash();

	$.get('/ajax/get_quick_accomms.php?minx='+Minx+'&miny='+Miny+'&maxx='+Maxx+'&maxy='+Maxy, function(data){
		accomm_info = data;
		if(accomm_info!="" && $('#accomms').attr('checked')==1)
			{
			var activities = accomm_info.split("!@@@@@!");
			accommArray = [];
			g = 0;
			if (markerCluster != null) 
				markerCluster.clearMarkers();	
			for(y = 0; y < activities.length;y++)
				{
				tempoo = activities[y].split("#^^#");
				if(tempoo[0]!=null && type_hash[tempoo[4]]==1 && grading_hash[tempoo[5]]==1)
					createAccommQuick(tempoo[0],tempoo[1],tempoo[2], tempoo[3]);
				}
			Zoom_Accomm = Zoom; 
			markerCluster = new MarkerClusterer(map, accommArray, cluster_options);  
			$('#accommThinker').html('<img src="http://labs.google.com/ridefinder/images/mm_20_red.png" height="20" width="12" alt="Accommodation" title="Accommodation is shown with this icon on the Map" />');
			}
		else
			$('#accommThinker').html('');
	},'html');
}

function js_refine()
	{
	var grading_hash = get_grading_hash();
	var type_hash = get_type_hash();
	if(accomm_info!="" && $('#accomms').attr('checked')==1)
			{
			var activities = accomm_info.split("!@@@@@!");
			accommArray = [];
			g = 0;
			if (markerCluster != null) 
				markerCluster.clearMarkers();	
			for(y = 0; y < activities.length;y++)
				{
				tempoo = activities[y].split("#^^#");
				if(tempoo[0]!=null && type_hash[tempoo[4]]==1 && grading_hash[tempoo[5]]==1)
					createAccommQuick(tempoo[0],tempoo[1],tempoo[2], tempoo[3]);
				}
			Zoom_Accomm = Zoom; 
			markerCluster = new MarkerClusterer(map, accommArray, cluster_options);  
			$('#accommThinker').html('<img src="http://labs.google.com/ridefinder/images/mm_20_red.png" height="20" width="12" alt="Accommodation" title="Accommodation is shown with this icon on the Map" />');
			}
	}

var time_out = 1000;
var time_out2 = 1000;
var duration_time = 350;
var out;
var cant_slide_in;
function SlideOut(Info)
	{
	out = true;
	$('#mapExtraInformation').animate({right:250},{duration:duration_time});
	$('#mapExtraInformation').html(Info);
	cant_slide_in = true;
	setTimeout("cant_slide_in = false;",time_out2);
	}

function try_slidein()
	{
	out = false;
	setTimeout("SlideIn();",time_out);
	}

function SlideIn()
	{
	if(!out&&!cant_slide_in)
		{
		$('#mapExtraInformation').animate({right:0},{duration:duration_time});
		}
	}


var g = 0;
var accommArray = new Array();
function createAccomm(data,lat,lng,permalink,id,namee,starsHTML){
	var tinyIcon = new GIcon();
	tinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	tinyIcon.iconSize = new GSize(12, 20);
	tinyIcon.iconAnchor = new GPoint(6, 20);
	tinyIcon.infoWindowAnchor = new GPoint(5, 1);
		
	markerOptions = { icon:tinyIcon };
	
	accommArray[g] = new GMarker(new GLatLng(lat, lng), markerOptions);
		
		GEvent.addListener(accommArray[g],"mouseover",function(){
			SlideOut(data);
			});
			
		GEvent.addListener(accommArray[g],"mouseout",function(){
			try_slidein();
			});		
			
		GEvent.addListener(accommArray[g],"mousedown",function(){
			//opens a page about that accommodation, where user can look up closest suppliers etc...
			map.openInfoWindowHtml(new GLatLng(lat, lng),"<div style='padding-bottom:30px;width:220px;'><strong>"+namee+"</strong>"+starsHTML+"<br/><div style='padding-top:8px;width:100%;text-align:center;'><a href='/accommodation/"+permalink+"'>View "+namee+"'s page</a></div></div>",{maxWidth:250});
			});
			
		GEvent.addListener(accommArray[g],"dblclick",function(){
			//opens a page about that activity, where user can look up closest suppliers etc...
			window.location = "/accommodation/"+permalink;
			});
	//map.addOverlay(accommArray[g]);
	g++;
	
}

function ajax_show_accomm(id)
	{
	$("#mapExtraInformation").html("<div style='width:100%;text-align:center;'><img border='0' style='margin-top:50px;' alt='Loading, please wait...' src='/img/icons/ajax-loader.gif'/><br/><br/><br/><span style='color:#444;font-size:16px;'>Loading Information...</span></div>");
	$.post('/ajax/view/ajax_show_accomm.php', {id: id}, function(data){
		$("#mapExtraInformation").html(data);
		});
	}

function createAccommQuick(lat,lng,id, permalink){
	var tinyIcon = new GIcon();
	tinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	tinyIcon.iconSize = new GSize(12, 20);
	tinyIcon.iconAnchor = new GPoint(6, 20);
	tinyIcon.infoWindowAnchor = new GPoint(5, 1);
		
	markerOptions = { icon:tinyIcon };
	
	accommArray[g] = new GMarker(new GLatLng(lat, lng), markerOptions);
		
		GEvent.addListener(accommArray[g],"mouseover",function(){
			$('#map_refines').hide();
			$('#mapExtraInformation').show();
			ajax_show_accomm(id);
			});
			
		GEvent.addListener(accommArray[g],"mouseout",function(){
			$('#mapExtraInformation').hide();
			$('#map_refines').show();
			});		
			
		GEvent.addListener(accommArray[g],"mousedown",function(){
			//opens a page about that accommodation, where user can look up closest suppliers etc...
			map.openInfoWindowHtml(new GLatLng(lat, lng),"	<div style='padding-bottom:5px;width:410px;height:90px;' id='accomm_window'><div style='text-align:center;width:100%;'><img border='0' style='margin-top:15px;margin-bottom:5px;' alt='Loading...' src='/img/icons/thinkers/ajax-loader.gif' height='32' width='32' /><br/><span style='color:#444;font-size:14px;'>Loading Information...</span></div></div>",{maxWidth:420});
			$.post('/ajax/view/ajax_show_accomm_small.php', {id: id}, function(data){
				$("#accomm_window").html(data);
				});
			});
			
		GEvent.addListener(accommArray[g],"dblclick",function(){
			//opens a page about that activity, where user can look up closest suppliers etc...
			window.location = "/accommodation/"+permalink;
			});
	//map.addOverlay(accommArray[g]);
	g++;
	
}


function closeWindow()
	{
	map.closeInfoWindow();
	}

var w = 0;
var actArray = new Array();
function createAct(data, lat, lng, namee, link, id, icon){
	if(icon=="")
	   icon = "hicontinfo.png";
	   var tinyIcon = new GIcon();
	   tinyIcon.image = "/img/icons/"+icon;
	   tinyIcon.iconSize=new GSize(15,15);
	   tinyIcon.iconAnchor=new GPoint(7,7);
	   tinyIcon.infoWindowAnchor=new GPoint(7,7);
		
	markerOptions = { icon:tinyIcon };
	
	actArray[w] = new GMarker(new GLatLng(lat, lng), markerOptions);
		
		GEvent.addListener(actArray[w],"mouseover",function(){
			$('#map_refines').hide();
			$('#mapExtraInformation').show();
			SlideOut(data);
			});
			
		GEvent.addListener(actArray[w],"mouseout",function(){
			$('#mapExtraInformation').hide();
			$('#map_refines').show();
			try_slidein();
			});	
		
		GEvent.addListener(actArray[w],"mousedown",function(){
			//opens a page about that activity, where user can look up closest suppliers etc...
			map.openInfoWindowHtml(new GLatLng(lat, lng),"<div style='width:180px;'><a href='/attractions/"+link+"'>View "+namee+"'s page</a></div>",{maxWidth:200});
			});
			
		GEvent.addListener(actArray[w],"dblclick",function(){
			//opens a page about that activity, where user can look up closest suppliers etc...
			window.location = link;
			});

 	DecreaseZIndex(actArray[w]); 
	map.addOverlay(actArray[w]);
	w++;
}

var q = 0;
var temp = new Array();
function createPic(namE,title,url,lat,lng,w,h,ownerID,picID){
		var tinyIcon = new GIcon();
		tinyIcon.image = "/img/icons/15x15pic.png";
		   tinyIcon.iconSize=new GSize(13,11);
		   tinyIcon.iconAnchor=new GPoint(7,5);
		   tinyIcon.infoWindowAnchor=new GPoint(7,5);

			markerOptions = { icon:tinyIcon };


			temp[q] = new GMarker(new GLatLng(lat,lng),markerOptions);
				
		GEvent.addListener(temp[q],"mouseover",function(){
			$('#map_refines').hide();
			$('#mapExtraInformation').show();
			var s = url.replace(/small/,"medium");
			SlideOut('<span style="font-size:14px;font-weight:bold;">'+title+'</span><br/><br/><div><div style="text-align:center;width:100%;"><a style="border:none;text-decoration:none;" target="_blank" href="http://www.panoramio.com/photo/'+picID+'"><img style="border:none;text-decoration:none;" src="'+url+'" width="'+w+'" height="'+h+'"/> </a> <br/><img src="/img/panoramio.jpg"/> </div>By: <a target="_blank" href="http://www.panoramio.com/user/'+ownerID+'">'+namE+'</a><br/><small>Photos provided by Panoramio are under the copyright of their owners</small></div>');
			});
			
		GEvent.addListener(temp[q],"mouseout",function(){
			$('#mapExtraInformation').hide();
			$('#map_refines').show();
			try_slidein();
			});	
		
		GEvent.addListener(temp[q],"mousedown",function(){
			});
			
			map.addOverlay(temp[q]);
			q++;	
}

