/**
 * The map object, null until script loads in.
 * @type {GMap2}
 */
var map = null;  
var map2 = null;  

/**
 * The bounds of the markers once loaded in.
 * @type {GLatLngBounds}
 */
var bounds = null;

/**
 * The marker with currently opened info window.
 * @type {GMarker}
 */
var currentMarker = null;

/**
 * The dom element that the map is loaded into
 * @type {Element}
 */
var mapDiv = null;
var mapDiv2 = null;

/**
 * The dom element that everything is a child of.
 * @type {Element}
 */
var containerDiv = null;

/**
 * Position of mouse click (clientX) on map div when in static mode.
 * @type {Number}
 */
var clickedX = 0;

/**
 * Position of mouse click (clientY) on map div when in static mode.
 * @type {Number}
 */
var clickedY = 0;

/**
 * Indicates whether we've created a script tag with Maps API yet
 * @type {Boolean}
 */
var lat = [];
var lng = [];
var geo = null;
var Accu = [];
html = [];
var html=[];
var status=[];

var bigMarker=[];
var miniMarker=[];
var precis=[];
var iwn=0;
var poet=[];
var latitude=[];
var longitude=[];
var country=[];
var icon=[];
var overV=null;


var isLoaded = false;
var smallMapIsLoaded = false;
var clickOnMap = false;
var gmarkers = [];
var GMapIsDone = false;
var newObject=false;
var objectsOnMap=[];
var locationsMarker=[];
var mapMouseClick = false;
var mapMouseMove = false;
var gdir = false;
var startLocation = false;
var endLocation = false;
var directoryMarkers=[];
var hotelsOnMap = [] ;
var hotelMarkers = [] ;
var afterLoadAction = false;
var startPoint = null;
/**
 * Called after script is asynchronously loaded in.
 * Creates the GMap2, GMarker objects and performs actions according to 
 * what the user did to trigger the map load (search, zoom, click etc).
 */

function loadMap() {
	//try
	{
	  if (GBrowserIsCompatible()) {
		  if ($('gMap')){
		    map = new GMap2(mapDiv);
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
		    bounds = new GLatLngBounds();
			geo = new GClientGeocoder();
			overV=new GOverviewMapControl(new GSize(200, 150))
			
			status[G_GEO_SUCCESS]            = "Success";
			status[G_GEO_MISSING_ADDRESS]    = "Missing Address";
			status[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address";
			status[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address";
			status[G_GEO_BAD_KEY]            = "Bad Key";
			status[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries";
			status[G_GEO_SERVER_ERROR]       = "Server Error";

			if (window.currentObject) {
				calculateBounds(currentObject);
				
			      var marker = createMarker(currentObject,-1,'mainHotel');
			      var latlng = marker.getLatLng();
			      var pixel = map.fromLatLngToDivPixel(latlng);
			      if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
					
				    GEvent.trigger(marker, 'click'); 

			      }
			      map.addOverlay(marker);
			}
			if (window.newObject) {
			  var marker = createMarker(newObject.src,newObject.ind,newObject.type);
			  var latlng = marker.getLatLng();
			  var pixel = map.fromLatLngToDivPixel(latlng);
			  if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
				
				GEvent.trigger(marker, 'click'); 

			  }
			  map.addOverlay(marker);

//			  GEvent.trigger(marker, 'click'); 
			

			  calculateBounds(newObject.src[newObject.ind]);
			} else if (window.center) {

				map.setCenter(new GLatLng(center.lat ,center.lng),12);
				//var marker = createMarker(center,-1);
				//map.addOverlay(marker);
			}
			if (window.boundary) {
				 bounds.extend(new GLatLng(boundary.bSouth, boundary.bWest));
				 bounds.extend(new GLatLng(boundary.bNorth, boundary.bEast));
				map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

			}

		}
		/*
		if (window.boundary) {
			bounds.extend(new GLatLng(boundary.minLat, boundary.minLon));
			bounds.extend(new GLatLng(boundary.maxLat, boundary.maxLon));
			var marker = new GMarker(new GLatLng(boundary.minLat, boundary.minLon));
			map.addOverlay(marker);
			var marker = new GMarker(new GLatLng(boundary.maxLat, boundary.maxLon));
			map.addOverlay(marker);
			calculateBounds(center);
			
		}
		*/
	    isLoaded = true;
	  }
	  if (afterLoadAction) {
		eval(afterLoadAction);
	  }
	  	addUnLoadEvent(function () { GUnload(); 
		bigMarker=null;miniMarker=null;precis=null;poet=null;latitude=null;longitude=null;country=null;icon=null;gmarkers =null;objectsOnMap=null;locationsMarker=null;directoryMarkers=null;hotelsOnMap = null;hotelMarkers = null ;
		});

	  GMapIsDone = true;
	  if (clickOnMap) startClick(map);
  //} catch(err) {
//	debug(err);
  }
}

/**
 * Zooms to the viewport that fits all the markers.
 */

function zoomToAll() {
  map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
}
function calculateBounds(newMarker){
	bounds.extend(new GLatLng(newMarker.lat, newMarker.lng));
	var latSpan = bounds.toSpan().lat();
	var zoomLevel = map.getBoundsZoomLevel(bounds);
	if (zoomLevel>15) zoomLevel=15;
	map.setCenter(bounds.getCenter(), zoomLevel);
	var newBounds = map.getBounds();
	var newLatSpan = newBounds.toSpan().lat();
	if (latSpan/newLatSpan > .90) { map.zoomOut(); }

}

/**
 * Creates a marker for the given business.
 * @param {Number} ind
 * @return {GMarker}
 */

function createMarker(source,ind, icon) {
	switch (icon) {
		case 'mainHotel':
			var iconObject = new GIcon();
			iconObject.image = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/current_hotel_icon.gif";
			iconObject.shadow = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/current_hotel_icon_shadow.png";
			iconObject.iconSize = new GSize(31, 28);
			iconObject.shadowSize = new GSize(37, 28);
			iconObject.iconAnchor = new GPoint(15, 14);
			iconObject.infoWindowAnchor = new GPoint(15, 14);
		break;
		case 'nearHotel':
			var iconObject = new GIcon();
			iconObject.image = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/icong"+(ind+1)+".png";
			iconObject.shadow = "http://maps.google.com/intl/en_ALL/mapfiles/shadow50.png";
			iconObject.iconSize = new GSize(20, 34);
			iconObject.shadowSize = new GSize(37, 34);
			iconObject.iconAnchor = new GPoint(8, 8);
			iconObject.infoWindowAnchor = new GPoint(8, 8);
		break;
		case 'nearLocation':
			var iconObject = new GIcon();
			iconObject.image = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/iconr"+(ind+1)+".png";
			iconObject.shadow = "http://maps.google.com/intl/en_ALL/mapfiles/shadow50.png";
			iconObject.iconSize = new GSize(20, 34);
			iconObject.shadowSize = new GSize(37, 34);
			iconObject.iconAnchor = new GPoint(8, 8);
			iconObject.infoWindowAnchor = new GPoint(8, 8);
		break;
		case 'airport':
			var iconObject = new GIcon();
			iconObject.image = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/plane.png";
			iconObject.shadow = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/plane.shadow.png";
			iconObject.iconSize = new GSize(32, 32);
			iconObject.shadowSize = new GSize(59, 32);
			iconObject.iconAnchor = new GPoint(8, 8);
			iconObject.infoWindowAnchor = new GPoint(8, 8);
		break;
		case 'startPoint':
			var iconObject = new GIcon();
			iconObject.image = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/start_point.png";
			iconObject.shadow = "http://www.bookingspot.com/bs/designs/default/images/gm_icons/start_point_shadow.png";
			iconObject.iconSize = new GSize(19, 26);
			iconObject.shadowSize = new GSize(32, 26);
			iconObject.iconAnchor = new GPoint(1, 26);
			iconObject.infoWindowAnchor = new GPoint(8, 8);
		break;
		default:
		break;
	}
	
	if (ind<0) { 
		var object=source;
	} else {
		var object = source[ind];
	}
	
  var marker = new GMarker(new GLatLng(object.lat, object.lng),{icon:iconObject,draggable:(object.drag?object.drag:false),zIndexProcess:importanceOrder});
  marker.importance = 1;
  if (object.stars) { var star= '<div class="rating" title="'+object.stars+' stars"><span class="s'+object.stars+'">'+object.stars+' stars</span></div>';} else { var star='';}
  if (object.img) {preloadImage(object.img); var img = '<div style="height:160px;"><img src="'+object.img+'" /></div>'; } else { var img = '';}
  if (object.address) { var addr = '<br /><small>'+unescape(object.address)+'</small>'; } else { var addr = '';}
  if (object.url) {var aurl = '<a href="'+object.url+'">'; var aurle='</a>';} else {var aurl = '';var aurle='';}
  if (object.price) {var price = '<div class="price">'+object.price+'</div>';} else {var price= '';}
  if (window.startLocation) {	
			var drv = '<div class="small">';
			drv+='Drive: <a href="#page=map" onclick="setDirections('+object.lat+', '+object.lng+','+startLocation.lat+','+startLocation.lng+',\'en_US\', \'drive\');">From here</a> | <a href="#page=map" onclick="setDirections('+startLocation.lat+','+startLocation.lng+','+object.lat+', '+object.lng+',\'en_US\', \'drive\');">To here</a>';
//			if (object.distNum<5000) {drv+='<br /> Walk: <a href="#page=map" onclick="setDirections('+object.lat+', '+object.lng+','+startLocation.lat+','+startLocation.lng+',\'en_US\', \'walk\');">From here</a> | <a href="#page=map" onclick="setDirections('+startLocation.lat+','+startLocation.lng+','+object.lat+', '+object.lng+',\'en_US\', \'walk\');">To here</a>';}
			drv+='</div>';
	}
//	for(i in object) { alert (i+': '+object[i]);}
  if (object.name) {
	
	var html  = ['<div class="gminfo">',
				aurl,
			   img,
			   star,
			   '<b>', unescape(object.name), '</b>',
			   addr,
			   price,
			   aurle,
			   drv
			   ].join('');
		GEvent.addListener(marker, 'click', function(e) {
		    marker.html = html;
		    currentMarker = marker;
		    marker.openInfoWindowHtml(marker.html);
			//stopClick();
			//Event.stop(e);
		});
	}
	//gmarkers.push({marker:marker, info:html});
  return marker;
}

/**
 * Formats business info into a URL-friendly version for maps url.
 * @param {Object} business
 * @return {String}

function formatAddressForMaps(business) {
  var address = business.street + ' ' + business.city + ' ' + business.state + ' ' + business.zip;
  return escape(address.replace(' ', '+'));
}

/**
 * Convenience function for creating an element and assigning an id to it.
 * @param {String} elementType
 * @param {String} id
 * @return {Element} 
 */
 /*
function _cel(elementType, id) {
  var element = document.createElement(elementType);
  element.id = id;
  return element;
}
*/
function showObject(object){
	var str='';
	for(prop in object)
	  {
		str+=prop + " value :"+ object[prop]+"\n";
	  }
	return str;
}
function showHotel(i) {
try{
		map.clearOverlays();
		if (window.startLocation) {		
			var marker = createMarker({lat: startLocation.lat,lng:startLocation.lng},-1,'startPoint');
			map.addOverlay(marker);
		}
		var marker = createMarker(hotelsOnMap,i,'nearHotel');
		var latlng = marker.getLatLng();
		var pixel = map.fromLatLngToDivPixel(latlng);
		if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
			//GEvent.trigger(marker, 'click');
		}
		map.addOverlay(marker);
		Effect.ScrollTo('gMap', {duration:0.5});
		GEvent.trigger(marker, 'click');
		var zoomLevel = map.getZoom();
		if (zoomLevel>18) zoomLevel=18;
		go(hotelsOnMap[ind].lat,hotelsOnMap[ind].lng, zoomLevel);
} catch (err){ 
	debug (err);
}	
}
function mapHotel(ind) {
	try{
	//	return false;
		if (GMapIsDone==true) {
	//		map.clearOverlays();
			showBigMap();
			Effect.ScrollTo('gMap', {duration:0.5});
			fixMap();
			var zoomLevel = map.getZoom();
			if (zoomLevel>18) zoomLevel=18;
			go(listedHotels[ind].lat,listedHotels[ind].lng, zoomLevel);
			markHotel(ind);
		} else {
			Effect.ScrollTo('gMap', {duration:0.5});
			showBigMap("markHotel("+ind+");");
		}
	} catch (err){ 
		debug (err);
	}	
}
/*
function showAllHotelsOnMap() {
	try{
	var totalHotels = hotelsOnMap.length;
	map.clearOverlays();

	for (a=0;a<totalHotels;a++) {
		var marker = createMarker(hotelsOnMap,a,'nearHotel');
		map.addOverlay(marker);
	}
	Effect.ScrollTo('gMap', {duration:0.5});
	} catch (err) {
		//alert(err);
	}
}
*/

/**
 * Loads in the Maps API script. This is called after some sort of user interaction.
 * The script loads asynchronously and calls loadMap once it's in.
 */
function loadScript(options) {
//try 
{
  if (!isLoaded) {
	if (options && options.afterLoad) {
		afterLoadAction = options.afterLoad;
	}
	mapDiv = $('gMap');
	mapDiv.style.position="relative";
	var mapDivH = mapDiv.getHeight();
	var mapDivW = mapDiv.getWidth();
	if (mapDivH<100) {
		mapDiv.style.height="450px";
		mapDivH = 450;
		mapDivW = 850;
	}
    var div = document.createElement('div');
    div.className = 'gmessage';
    div.innerHTML = TXT_Loading;
    div.style.left = (mapDivW/2-50) + 'px';
    div.style.top = (mapDivH/2-20) + 'px'; 
	div.style.position="absolute";
	mapDiv.appendChild(div);
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://maps.google.com/maps?file=api&v=2.x&hl='+gmLang+ 
//    script.src = 'http://maps.google.com/maps/api/js?sensor=false&hl='+gmLang+ 
                 '&async=2&callback=loadMap&key='+googleKey;
    document.body.appendChild(script);
  }
// } catch (err) {
//	debug (err);
 }
}

/*
function showObjectsOnMap(ind){
	try{
	if (objectsOnMap[ind]==true) {
		calculateBounds(otherObjects[ind]);
		openTab('map');
		return;
	}
	if (GMapIsDone==true) {
		openTab('map');
		var marker = createMarker(otherObjects,ind,'nearHotel');
		var latlng = marker.getLatLng();
		var pixel = map.fromLatLngToDivPixel(latlng);
		if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
			GEvent.trigger(marker, 'click'); 
		}
		map.addOverlay(marker);
		GEvent.trigger(marker, 'click'); 
//		calculateBounds(otherObjects[ind]);
	} else {
		openTab('map');
		loadScript();
		newObject = {src: otherObjects, ind:ind, type:'nearHotel'};
	}
	objectsOnMap[ind] = true;
	} catch (err) {
		debug (err);
	}
	Effect.ScrollTo('map', {duration:0.2});
}

function showNearObject(source,ind,icon){
	if (GMapIsDone==true) {
		var marker = createMarker(source,ind,icon);
		var latlng = marker.getLatLng();
		var pixel = map.fromLatLngToDivPixel(latlng);
		if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
			GEvent.trigger(marker, 'mousedown'); 
		}
		map.addOverlay(marker);
		fitToMarkers(source[ind]);
	}
	objectsOnMap[ind] = true;

}
*/
function fitToMarkers(newMarker){
	bounds.extend(new GLatLng(newMarker.lat, newMarker.lng));
	var latSpan = bounds.toSpan().lat();
	var zoomLevel = map.getBoundsZoomLevel(bounds);
	if (zoomLevel>18) zoomLevel=18;
	map.setCenter(bounds.getCenter(), zoomLevel);
	var newBounds = map.getBounds();
	var newLatSpan = newBounds.toSpan().lat();
	if (latSpan/newLatSpan > .90) { map.zoomOut(); }
}
/*
function startClick(){
	var lastPoint;
	var isHidden;
	mapMouseMove = GEvent.addListener(map, "mousemove", function(point){
		lastPoint = point;
		isHidden = map.getInfoWindow().isHidden();	
	});
	mapMouseClick = GEvent.addListener(map, "click", function(){
		if (clickOnMap==false || isHidden==false) return;
		gmarkers = [];
		map.clearOverlays() ;
		var latStr = lastPoint.lat().toFixed(8);
		var lngStr = lastPoint.lng().toFixed(8);
		var marker = createMarker({'lat':latStr, 'lng':lngStr},-1,'startPoint');
		map.addOverlay(marker);
		startLocation = {lat:latStr, lng:lngStr};
		gmarkers.push({marker: marker});
		lastLat = latStr;
		lastLng = lngStr;
		//$$('#nearest_hotels table')[0].setOpacity('.3');
		//$('m_chkinout').submit();
		getNearestHotels();
		return false;
		//getNearestHotels({lat:latStr, lng:lngStr, limit: $('num_hotels').value});
	});
}
function stopClick(){
	if (mapMouseClick) {
		GEvent.removeListener(mapMouseClick);
		GEvent.removeListener(mapMouseMove);
		
	}
}
function clearNearestObjects() {
	map.clearOverlays();
	startClick();
	$('clr_clck_btn').style.display = "none";
	gmarkers = [];
	
}
*/
function showAddress(search)
{
	map.clearOverlays();
	lat.length=0;
	hotelMarkers = gmarkers;
	gmarkers = [];
	$("message").update(MSG_SEARCHING);
	geo.getLocations(search, function (result)
	{ 
		// show status code

		if (result.Status.code == G_GEO_SUCCESS) 
		{
		
			var object = new Array();
			$("message").update();
			var adr_cont = $("al_in");
			adr_cont.update();
			var data = [];
			data.push("<ol>");
			var markers_count = result.Placemark.length;
			for (var i=0; i<markers_count; i++) 
			{
				object[i] = {
					lat:result.Placemark[i].Point.coordinates[1],
					lng:result.Placemark[i].Point.coordinates[0],
					name:result.Placemark[i].address
				}
				if(result.Placemark[i].AddressDetails){
					Accu[i]=result.Placemark[i].AddressDetails.Accuracy;
				}
				var point=new GLatLng(lat[i],lng[i]);
				bigMarker[i]= createMarker(object,i,'nearLocation');
				map.addOverlay(bigMarker[i]);
				GEvent.addListener(bigMarker, "mouseover", function() {
					bigMarker.openInfoWindow(result.Placemark[i].address);
				});
				bounds.extend(bigMarker[i].getPoint());
				var addr=result.Placemark[i].address;
				if(result.Placemark[i].AddressDetails){
					var iso=result.Placemark[i].AddressDetails.Country.CountryNameCode;
				}
				data.push('<li><a href="#page=map" onmouseover="showLocation({lat:'+object[i].lat+',lng:'+object[i].lng+',num:'+i+',name:\''+escape(object[i].name)+'\'})" onclick="searchHotelByAddress({lat:'+object[i].lat+',lng:'+object[i].lng+',num:'+i+'})">'+object[i].name+'</a></li>');
			}
			data.push("</ol>");
			adr_cont.innerHTML = data.join('');
			if (markers_count==1) {
				map.clearOverlays();
				var marker = createMarker(object,0,'startPoint');
				map.addOverlay(marker);
				object[0].limit=$('num_hotels').value;
				object[0].type='hotel';
				var zoom = map.getZoom();
				go(object[0].lat,object[0].lng,zoom);
				getNearestObjects(object[0]);
			}
			gmarkers.push({marker:object});
		} else {
			$("message").update(status[result.Status.code]);
		}
	}
	);
}
function searchHotelByAddress(object) {
	map.clearOverlays();
	var marker = createMarker({'lat':object.lat, 'lng':object.lng},-1,'startPoint');
	map.addOverlay(marker);
	getNearestObjects({lat:object.lat,lng:object.lng,type:'hotel',limit:$('num_hotels').value});
	var zoom = map.getZoom();
	go(object.lat,object.lng,zoom);
	$("al_in").update();
}
function map2Go(data){
	map2.clearOverlays() ;
	if (!data.zoom) { zoom = map2.getZoom(); } else {zoom = data.zoom;}
	map2.setZoom(zoom);
	map2.panTo(new GLatLng(data.lat,data.lng));
	var marker = createMarker({'lat':data.lat, 'lng':data.lng,'name':data.name},-1,data.objType)
	map2.addOverlay(marker);
}
function go(lat,lng,zoom){
	if (!zoom) { zoom = map.getZoom(); }
	map.setZoom(zoom);
	map.panTo(new GLatLng(lat,lng));
}
function spit(){
	var center = bounds.getCenter();
	map.closeInfoWindow();
	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(center);
	map.panDirection(0,0.1);
};
function fixMap(){
	if (map) { map.checkResize(); }
	if (map2) { map2.checkResize(); }
}
function syncCenter(from,to){
	if (!from || !to) return;
	to.setCenter(new GLatLng(center.lat, center.lng),10);
}

function initGDir() {
    gdir = new GDirections(map, document.getElementById("directions"));
    GEvent.addListener(gdir, "error", handleErrors);
    GEvent.addListener(gdir, "addoverlay", onGDirectionsAddOverlay); // Triggers marker swap, Esa
//    map.setCenter(new GLatLng(0,0),0);	// inital setCenter()  added by Esa.
}


function setDirections(fromAddressX, fromAddressY, toAddressX, toAddressY, locale, type) {
  if (!gdir) initGDir();
  if (type=='walk') { var travMode = G_TRAVEL_MODE_WALKING;} else { var travMode = G_TRAVEL_MODE_DRIVING;} 
  gdir.load("from: " + fromAddressX+","+fromAddressY + " to: " + toAddressX+","+toAddressY,  { "locale": locale , "getSteps":true, travelMode:travMode});
  BFaddClassName($('inner_map'),'dir');
  fixMap();
  if (!$('closelink'))
	$('dir').insert(makeElement('a',{id:'closelink',href:'#page=map',onclick:'closeDir(); return false;', innerText: txt_CLOSE}));
}
function closeDir(){
  BFremoveClassName($('inner_map'),'dir');
  
}
function handleErrors(){
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
    alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
    alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
    alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  else if (gdir.getStatus().code == G_GEO_BAD_KEY)
    alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
    alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  else alert("An unknown error occurred.");
}

function onGDirectionsAddOverlay(){ 
  // Remove the draggable markers from previous function call.
  for (var i=0; i<directoryMarkers.length; i++){
    map.removeOverlay(directoryMarkers[i]);
  }

  // Loop through the markers and create draggable copies
  for (var i=0; i<=gdir.getNumRoutes(); i++){
    var originalMarker = gdir.getMarker(i);
    latLngs[i] = originalMarker.getLatLng();
    icons[i] = originalMarker.getIcon();
    directoryMarkers[i] = new GMarker(latLngs[i],{icon:icons[i], draggable:true, title:'Draggable'});
    map.addOverlay(directoryMarkers[i]);

    // Get the new waypoints from the directoryMarkers array and call loadFromWaypoints by dragend
    GEvent.addListener(directoryMarkers[i], "dragend", function(){
      var points = [];
      for (var i=0; i<directoryMarkers.length; i++){
        points[i]= directoryMarkers[i].getLatLng();
      }
      gdir.loadFromWaypoints(points);
    });

    //Bind 'click' event to original markers 'click' event
    copyClick(directoryMarkers[i],originalMarker);

    // Now we can remove the original marker safely
    map.removeOverlay(originalMarker);
  }

  function copyClick(newMarker,oldMarker){
    GEvent.addListener(newMarker, 'click', function(){
      GEvent.trigger(oldMarker,'click');
    });
  }
}
function showLocation(object){ 
	map.clearOverlays();
	var marker = createMarker({'lat':object.lat, 'lng':object.lng},-1);
	startLocation = marker;
	map.addOverlay(marker);
	var zoom = map.getZoom();
	go(object.lat,object.lng,zoom);
}
function hideLocation(){
	gmarkers = [];
	map.clearOverlays();
	for (var a=0;a<hotelMarkers.lenght;a++) {
		var marker = createMarker(hotelMarkers,a,'hotel');
		map.addOverlay(marker);
	}
	hotelMarkers = [];
}
function showBigMap(extActions){ 
	if (typeof(extActions)!='string') extActions='';
	$('gmapout').show();
	$('smap').hide();
	$('smap_opt').show();
	afterLoadAction = 'addHotelsOnMap(listedHotels);if (window.startPointer) addStartPointOnMap(startPointer);'+(extActions?extActions:'');
	loadScript();
	//createCookie('showmap', 'big', 365);
	fixLines();
}
function closeMap(){ 
	$('smap_opt').hide();
	$('gmapout').hide();
	$('smap').show();
	//createCookie('showmap', 'small', 365);
	fixLines();
}
var inz=0;
function addHotelsOnMap(hotelsArray){
	map.clearOverlays();
	for (a=1;a<hotelsArray.length;a++) {
		if (typeof(hotelsArray[a])=='object') {
			inz ++;
			var marker = createMarker(hotelsArray,a,'hotel');
			marker.importance=inz;
			map.addOverlay(marker);
			fitToMarkers(hotelsArray[a]);
			gmarkers.push(marker);
		}
	}
	
}
function toggleSearchBar(el) {
	if (el.innerHTML.match(/Hide/)){
		map.disableGoogleBar();
		el.update("Show search Bar");
	} else {
		map.enableGoogleBar();
		el.update("Hide search Bar");
	}
	return false
}
function dropPin(){
//try{
	var bounds = map.getBounds() ;
	var rcenter = map.getCenter();
	if (!startPoint) {
		var marker = createMarker({'lat':rcenter.y, 'lng':rcenter.x, 'drag':true},-1,'startPoint');
		marker.importance = 100;
		map.addOverlay(marker);
		GEvent.addListener(marker, "dragend", function(){
			var point = marker.getLatLng();
			pointLocation({'lat':point.y, 'lng':point.x},.2);
		});
		var point = marker.getLatLng();
		startPoint = marker;
		pointLocation({'lat':point.y, 'lng':point.x},1);
	} else {
		startPoint.setLatLng(new GLatLng(rcenter.y, rcenter.x));
		pointLocation({'lat':rcenter.y, 'lng':rcenter.x}, 1);
	}
	$('drpn').hide();
	$('rmpn').show();
	//submitForm('filterform',true);
	//var zoom = map.getZoom();
	//go(center.lat,center.lng,zoom);
//}catch (e) {
//	alert(e);
//}
}
function removePin(){
	$('fromlat').value='';
	$('fromlng').value='';	
	submitForm('filterform',true);
}
function addStartPointOnMap(point) {
	var marker = createMarker({'lat':point.lat, 'lng':point.lng, 'drag':true},-1,'startPoint');
	marker.importance = 100;
	map.addOverlay(marker);
	GEvent.addListener(marker, "dragend", function(){
		var point = marker.getLatLng();
		pointLocation({'lat':point.y, 'lng':point.x},.2);
	});
	startPoint = marker;	
	fitToMarkers(point);
}
function pointLocation(obj,delay){
	$('fromlat').value=obj.lat;
	$('fromlng').value=obj.lng;
	window.setTimeout("submitForm('filterform',true)",delay*1000);
}

var ix=0;
var fmarker=null;
var ddd =0;
var defImage = null;
function markHotel(id){	
	inz++;
	var vvv = gmarkers[id-1].getIcon();
	if(window.defIMage==null) {
		defImage = vvv.image;
	}
	for(a=0;a<gmarkers.length;a++) {
		if (typeof(gmarkers[a])=='object') {
			gmarkers[a].setImage(defImage);
		}
	}
	gmarkers[id-1].importance = inz;
	gmarkers[id-1].remove();
	map.addOverlay(gmarkers[id-1]);
	gmarkers[id-1].setImage('http://www.bookingspot.com/bs/designs/default/images/gm_icons/blue-pushpin.png');
}
function importanceOrder(marker,b){
	return GOverlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000;
}
function showNearestHotel(id){
	openTab('map');
	if (!isLoaded) {
		afterLoadAction = 'showNearestHotel('+id+');';
		loadScript();
	} else {
		map.clearOverlays();
		var marker = createMarker(currentObject,-1,'mainHotel');
		map.addOverlay(marker);
		var marker = createMarker(nearestHotels,id);
		map.addOverlay(marker);
		var zoomLevel = map.getZoom();
		if (zoomLevel>18) zoomLevel=18;
		go(nearestHotels[id].lat,nearestHotels[id].lng, zoomLevel);
		Effect.ScrollTo('gMap', {duration:0.5});
	}
	
}
