var gmap;
var gpoints = new Array();
var gclear = new Array();
var loclat='54.239550';
var loclng='-3.999023';
var loczoom=5;
var iconUnlet;
var iconLet;
var iconFood;
var iconClub;
var iconHotel;
var iconService;
var iconShop;

google.maps.Map.prototype.markers = new Array();
    
google.maps.Map.prototype.addMarker=function(marker){
	this.markers[this.markers.length] = marker;
};

google.maps.Map.prototype.getMarkers=function(){
	return this.markers
};

google.maps.Map.prototype.clearMarkers=function(){
	for(var i=0; i<this.markers.length; i++) this.markers[i].set_map(null);
};

function createMap(element,control)
{
	var startLatlng = new google.maps.LatLng(parseFloat(loclat),parseFloat(loclng));
	var gopt={
	  zoom: parseInt(loczoom),
	  center: startLatlng,
	  mapTypeId: google.maps.MapTypeId.ROADMAP,
	  mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}
	};
	gmap = new google.maps.Map(document.getElementById(element),gopt);
	if (gmap) return true;
	else return false;
}

function createMarker(lat,lng,html,icon)
{
	var point=new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
	gpoints.push(point);

	var marker = new google.maps.Marker({
		position: point,
		map: gmap,
        icon: icon
	});
	gclear.push(marker);

	if (html)
	{
		var infowindow = new google.maps.InfoWindow({
			content: html
		});
		google.maps.event.addListener(marker,'click',function(){
			infowindow.open(gmap,marker);
		});
	}
	return marker;
}

function clearMarkers()
{
    $(gclear).each(function(){
         this.setMap(null);
    });
	gclear = [];
}

function centreMap(lat,lng,zoom)
{
/* 	setZoom(zoom);
	gmap.panTo(new GLatLng(lat,lng)); */
}

function fitMap()
{
	var bounds = new google.maps.LatLngBounds();
	for (i=0;i<gpoints.length;i++)
	{
		bounds.extend(gpoints[i]);
	}
	gmap.fitBounds(bounds);
	/* zoom=gmap.getBoundsZoomLevel(bounds);
	if ((limit>0) && (zoom>limit)) zoom=limit;
	gmap.setZoom(zoom);
	gmap.setCenter(bounds.getCenter()); */
}

function placeMarker(location)
{
	var clickedLocation = new google.maps.LatLng(location);
	var marker = new google.maps.Marker({
		position: location, 
		map: gmap
	});
	gmap.set_center(location);
}

function pinFromClick(latinput,lnginput)
{
	google.maps.event.addListener(gmap,'click',function(event){
		gmap.clearMarkers();
		placeMarker(event.latLng);
		$('#'+latinput).val(event.latLng.lat());
		$('#'+lnginput).val(event.latLng.lng());
	});
}

function pinFromInput(latinput,lnginput)
{
	var lat=$('#'+latinput).val();
	var lng=$('#'+lnginput).val();
	if ((lat!=0) && (lng!=0))
	{
		zoom=15
	}
	else
	{
		lat=loclat;
		lng=loclng;
		zoom=loczoom;
	}
	createPin(lat,lng,zoom,latinput,lnginput);
}

function createPin(lat,lng,zoom,latinput,lnginput)
{
	var point=new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
	gmap.setCenter(point);
	gmap.setZoom(parseInt(zoom));

	var marker = new google.maps.Marker({
		position: point,
		map: gmap,
		draggable: true
	});
	
	google.maps.event.addListener(marker,"dragend",function(){
		var mark=marker.getPosition();
		mark=mark.toString();
		mark=mark.replace('(','');
		mark=mark.replace(')','');
		var coords=mark.split(',');
		$('#'+latinput).val(coords[0]);
		$('#'+lnginput).val(coords[1]);
	});
}

function newPin(lat,lng,zoom,latinput,lnginput)
{
	gmap.clearMarkers();
	createPin(lat,lng,zoom,latinput,lnginput);
}

function posFromInput(lat,lng,zoom)
{
	google.maps.event.addListener(gmap,'center_changed',function(){
		var center=gmap.getCenter();
		center=center.toString();
		center=center.replace('(','');
		center=center.replace(')','');
		var coords=center.split(',');
		$('#'+lat).val(coords[0]);
		$('#'+lng).val(coords[1]);
	});
	google.maps.event.addListener(gmap,'zoom_changed',function(){
		$('#'+zoom).val(gmap.getZoom());
	});
	//gmap.set_center(new GLatLng(loclat,loclng),loczoom);
}

function setIcons()
{
	iconUnlet=new google.maps.MarkerImage(url+'images/map/unlet.png',
		new google.maps.Size(20,33),
		new google.maps.Point(0,0),
		new google.maps.Point(10,33)
	);
	iconLet=new google.maps.MarkerImage(url+'images/map/let.png',
		new google.maps.Size(20,33),
		new google.maps.Point(0,0),
		new google.maps.Point(10,33)
	);

	var bwidth=40;
	var bheight=64;
	var bleft=20;
	var btop=64;

	iconClub=new google.maps.MarkerImage(url+'images/map/Club.png',
		new google.maps.Size(bwidth,bheight),
		new google.maps.Point(0,0),
		new google.maps.Point(bleft,btop)
	);
	iconFood=new google.maps.MarkerImage(url+'images/map/foo.png',
		new google.maps.Size(bwidth,bheight),
		new google.maps.Point(0,0),
		new google.maps.Point(bleft,btop)
	);
	iconHotel=new google.maps.MarkerImage(url+'images/map/hotel.png',
		new google.maps.Size(bwidth,bheight),
		new google.maps.Point(0,0),
		new google.maps.Point(bleft,btop)
	);
	iconService=new google.maps.MarkerImage(url+'images/map/service.png',
		new google.maps.Size(bwidth,bheight),
		new google.maps.Point(0,0),
		new google.maps.Point(bleft,btop)
	);
	iconShop=new google.maps.MarkerImage(url+'images/map/shop.png',
		new google.maps.Size(bwidth,bheight),
		new google.maps.Point(0,0),
		new google.maps.Point(bleft,btop)
	);
}

$.fn.gmapSetup=function(){
	return this.each(function(){
		$("#gmap-lat").each(function(){
			if ($(this).val().length>0) loclat=$(this).val();
		});
		$("#gmap-lng").each(function(){
			if ($(this).val().length>0) loclng=$(this).val();
		});
		$("#gmap-zoom").each(function(){
			if ($(this).val().length>0) loczoom=$(this).val();
		});
		$(this).addClass('map');
		$(this).text('We are sorry but something has gone wrong with our connection to Google maps. You can still search normally but will not be able to use the map until Google Maps starts working again.');
		createMap($(this).attr('id'));
		if (gmap)
		{
			setIcons();
		
			//$("input[name='gmap-marker']").gmapMarker();
			
			$("input[name='gmap-pin']").each(function(){
				var input=$(this).val().split(',');
				var lat=$('#'+input[0]).val();
				var lng=$('#'+input[1]).val();
				if ((lat.length>0) && (lng.length>0))
				{
					createPin(lat,lng,14,input[0],input[1]);
				}
				pinFromClick(input[0],input[1]);
			});
			
			$("input[name='gmap-pos']").each(function(){
				var input=$(this).val().split(',');
				posFromInput(input[0],input[1],input[2]);
			});
		}
	});
};

$.fn.gmapMarker=function(){
	return this.each(function(){
		var input=$(this).val().split(',');
		var icon;
		switch (input[3])
		{
			case 'house':
				icon=iconUnlet;
				break;
			case 'Food':
				icon=iconFood;
				break;
			case 'Nightclub':
				icon=iconClub;
				break;
			case 'Hotel':
				icon=iconHotel;
				break;
			case 'Service':
				icon=iconService;
				break;
			case 'Shop':
				icon=iconShop;
				break;
		}
		var marker=createMarker(input[0],input[1],input[2],icon);
		gmap.addOverlay(marker);
	});
};

$(document).ready(function(){
	$('#gmap').gmapSetup();
	
/* 	if (gmap)
	{
		$("input[name='gmap-marker']").gmapMarker();
		
		$("input[name='gmap-bus']").gmapBusiness();
		
		$("input[name='gmap-pin']").each(function(){
			var input=$(this).val().split(',');
			var lat=$('#'+input[0]).val();
			var lng=$('#'+input[1]).val();
			if ((lat.length>0) && (lng.length>0))
			{
				createPin(lat,lng,14,input[0],input[1]);
			}
		});
		
		$("input[name='gmap-pos']").each(function(){
			var input=$(this).val().split(',');
			posFromInput(input[0],input[1],input[2]);
		});
	} */
});