// Global vars
var gCurrPg=null;
var gMap;
var gMarkers = new Object();
var gCurrMarker, gBusyMarker, gSpotmeMarker, gDnArrowMarker;
var gMarkerMgr;
var gMapAction;
var gBusyIcon, gHomeIcon, gZoomIcon, gDnArrow, gSpotmeIcon;
var gHomeMarker;
var gGeocoder;
var gStreetLevelZoom=15;
var gCurrTabIndex=0;
var GRID_SIZE=4;
var gZoomInPoint;
var gPrevBounds=null;
var gIsInfoOpen=false;
var gTabNo=0;
var gMtypes=new Object();
var gNumPages=0;
var gInfoOpenCenter=null;
var gshowmarkerid=null;
var gEditMarker=null;
var gSubType=null;
var gSelTypeid=null;
// only fit the bounds the first time the page is refreshed.
// donot fit the bounds on subsequent map activities such as pan or zoom
var gFitBounds=true;
var gWards=new Object();

var btnMsg = new Array()
btnMsg[1] = "Now find your home location on the map and click to set it."
btnMsg[2] = "Now click on the map to place the marker."
var gSpotmeText=null;

function CityLocation(latlng, cityname) {
	this.latlng = latlng;
	this.cityname = cityname;
}
function SubType(id, title, ispublic, grouptype) {
this.typeid = id;
this.title = title;
this.ispublic = ispublic;
this.grouptype = grouptype;
}

function DefaultLocations() {
	this.options = new Array(10);
	this.options[0]=new CityLocation("0", "Select City");
	this.options[1]=new CityLocation("12.974951,77.587337","Bengaluru");
	this.options[2]=new CityLocation("13.061503,80.247917","Chennai");
	this.options[3]=new CityLocation("15.394708,73.833336","Goa");
	this.options[4]=new CityLocation("17.385044,78.486671","Hyderabad");
	this.options[5]=new CityLocation("22.544903,88.334885","Kolkata");
	this.options[6]=new CityLocation("19.033560,72.847595","Mumbai");
	this.options[7]=new CityLocation("28.637869,77.205391","New Delhi");
	this.options[8]=new CityLocation("18.535769,73.852072","Pune");
	this.options[9]=new CityLocation("*","Other");
}

function setMapAction(n) {
	gMapAction = n;
	var msg;
	var clear='';
	if (n == 1 && !gUserInfo) {
		msg = '<span style="margin:5px;">You will need to login before using this feature.<br>&nbsp;Click <a href="/local/login/">here</a> to login.<br>&nbsp;Click <a href="signup.php">here</a> to signup for a FREE account.</span>';
		clear='clearBtns();';
	} else if (n == 1 && gUserInfo != null && gUserInfo.homelat != "" && gUserInfo.homelng != "") {
		go2Spotme(new GLatLng(gUserInfo.homelat, gUserInfo.homelng));
		return;
	} else {
		msg = btnMsg[n];
	}
	win.populate(msg);
	win.offsetY = 30;
	win.offsetX = 5;
	win.showPopup('btnMessage');
	setTimeout('win.hidePopup();'+clear, 3000);;
}

function getMM() {
	if (!gMarkerMgr || gMarkerMgr == undefined) {
		gMarkerMgr = new MarkerManager(gMap);
	}
	return gMarkerMgr;
}

function placeItFinalize() {
	gMap.closeInfoWindow();
	if (gCurrMarker) {
		gMap.setCenter(gCurrMarker.getPoint(), 16);
	}
	removeIt(); // remove the temp marker
	var dropdown = document.addPlaceForm.addplacetype;
	var typeid = dropdown.options[dropdown.selectedIndex].value;
	if (typeid != "") { gSelTypeid = typeid; }
	// Refresh the Map
	refreshMap();
}

function showAddPlace(flag) {
var div = document.getElementById("addplace");
if (!div || div == undefined) { return; }
if (flag) {
	div.style.display = "block";
	tinyMCE_geckoFix();
}
else { div.style.display = "none"; }
}

function removeIt() {
	showAddPlace(false);
	if (gCurrMarker) {
		gCurrMarker.remove();
		gCurrMarker=null;
	}
}

// convert the markerId number into a text value - otherwise the array size becomes from [0] to [highest-marker-id]
function getIndex(num) {
	return 'm'+num;
}

function fillMarkerInfo(markerId) {
	var action = "/getMarkerInfo.php";
	makeSyncRequest(action, "mid="+markerId, function(data) {
		var elem = document.getElementById("markerInfo");
		if (elem) elem.innerHTML = data;
	});
}

function addResponseSuccess(markerId) {
	setTimeout('fillMarkerInfo('+markerId+')', 1000);;
}

function addReviewSuccess(markerId) {
	setTimeout('fillReviewInfo('+markerId+')', 1000);;
}

function setUserHomeLocation(lat, lng) {
	GDownloadUrl("/saveHomeLocation.php?lat="+lat+"&lng="+lng, function(data, responseCode) {
		// show the spotmeurl
		spotmeClick();
	});
}

function fillReviewInfo(markerId) {
	GDownloadUrl("/getReviewInfo.php?mid="+markerId, function(data, responseCode) {
		document.getElementById("reviewInfo").innerHTML = data;
	});
}

function showarrow(flag, num) {
	if (num == undefined) { return; }
	marker = gMarkers[getIndex(num)];
	if (marker == undefined) { return; }
	if (flag) {
		gDnArrowMarker = new GMarker(marker.getPoint(), gDnArrow);
		gDnArrowMarker.markerId = num;
		gMap.addOverlay(gDnArrowMarker);
	} else {
		gDnArrowMarker.remove();
	}
}

function showgrouparrow(flag, num) {
	if (num == undefined) { return; }
	marker = gMarkers[getIndex(num)];
	if (marker == undefined) { return; }
	if (flag) {
		gDnArrowMarker = new GMarker(marker.getPoint(), gDnArrow);
		gMap.addOverlay(gDnArrowMarker);
	} else {
		gDnArrowMarker.remove();
	}
}

function markerClick(num) {
	if (num == undefined) { return; }
	marker = gMarkers[getIndex(num)];
	if (!marker) {
		alert("marker #"+num+" not found");
		return;
	}
	if (gTabNo == 1) {
		linkhtml = '[&nbsp;<a href="javascript:{};" onclick="javascript:gMap.closeInfoWindow();">Close</a>&nbsp;]';
		if (gMap.getZoom() <= gStreetLevelZoom) {
			gZoomInPoint = marker.getPoint();
			linkhtml += '&nbsp;&nbsp;[&nbsp;<a href="javascript:{};" onclick="javascript:zoomtostreet();">Zoom to Street Level</a>&nbsp;]';
		}
		var infoHtml = '<div id="markerInfo" class="infoWindow">'+getLoadingHTML()+'</div><div class="infolinks">'+linkhtml+'</div>';
		marker.openInfoWindowHtml(infoHtml);
		setTimeout('fillMarkerInfo('+num+')', 500);
	} else {
		linkhtml = '[&nbsp;<a href="javascript:{};" onclick="javascript:gMap.closeInfoWindow();">Close</a>&nbsp;]';
		var zoomhtml="";
		if (gMap.getZoom() <= gStreetLevelZoom) {
			gZoomInPoint = marker.getPoint();
			linkhtml += '&nbsp;&nbsp;[&nbsp;<a href="javascript:{};" onclick="javascript:zoomtostreet();">Zoom to Street Level</a>&nbsp;]';
		}
		var edithtml="";
		if (gUserInfo != null && marker.createdby == gUserInfo.userid) {
			gEditMarker = marker;
			linkhtml += '&nbsp;&nbsp;[&nbsp;<a href="javascript:{};" onclick="javascript:editmarker();">Edit Me</a>&nbsp;]';
		}
		var infoHtml = '<div id="markerInfo" class="infoWindow">'+getLoadingHTML()+'</div><div class="infolinks">'+linkhtml+'</div>';
		var revwHtml = '<div id="reviewInfo" class="infoWindow">'+getLoadingHTML()+'</div>';
		var infoTabs = [
			new GInfoWindowTab("Info", infoHtml),
			new GInfoWindowTab("Reviews", revwHtml)
		];
		marker.openInfoWindowTabsHtml(infoTabs);
		setTimeout('fillMarkerInfo('+num+')', 500);
		setTimeout('fillReviewInfo('+num+')', 500);
	}
}

function editmarker() {
gMap.closeInfoWindow();
if (!gEditMarker) { alert("Edit not available right now. Please try again later"); return; }

fillMtypes();
showAddPlace(true);
document.getElementById("placetitle").innerHTML="Edit Place";
document.addPlaceForm.typeid.value=gEditMarker.typeid;
document.addPlaceForm.title.value=gEditMarker.title;
tinyMCE_setDetails(gEditMarker.details);
document.addPlaceForm.submitplace.value="Update";
document.addPlaceForm.markerid.value=gEditMarker.markerId;

gEditMarker=null;
}

function homeMarkerClick(marker) {
	var infoHtml = '<div id="markerInfo" class="infoWindow">'+getLoadingHTML()+'</div>';
	marker.openInfoWindowHtml(infoHtml);
	GDownloadUrl("/getHomeMarkerInfo.php", function(data, responseCode) {
		document.getElementById("markerInfo").innerHTML = data;
	});
}

function showLoginReqd() {
	gMapAction = 0;
	createWindow('<b>Signup Required</b>', 320, '#f6f494', 1, 0, 100, 175);
}

function showMapLoading(flag) {
	if (flag) {
		gBusyMarker = new GMarker(gMap.getCenter(), gBusyIcon);
		gMap.addOverlay(gBusyMarker);
	} else {
		// add a little delay before removing the busy-marker
		setTimeout('removeBusyMarker()', 600);
	}
}

function removeBusyMarker() {
	gBusyMarker.remove();
}

function addPlace(point) {
	var mType = 1;
	if (gTabNo == 1) { mType = 2; }

	// add temp marker
	var markerType = gMtypes[mType];
	var icon=null;
	if (markerType != null) {
		icon = markerType.icon;
	}
	gCurrMarker = new GMarker(point, icon);
	gMap.addOverlay(gCurrMarker);
	// end add temp marker

fillMtypes();
document.getElementById("placetitle").innerHTML="Add Place";
document.addPlaceForm.submitplace.value="Place It";
document.addPlaceForm.markerid.value="";
	document.addPlaceForm.lat.value=point.lat();;
	document.addPlaceForm.lng.value=point.lng();;
	document.addPlaceForm.title.value="";
	showAddPlace(true);
tinyMCE_setDetails('<p>Please select a Type from the dropdown list above</p>');
typeidchange();
}

function addMessage(point) {
	var mType = 2;
	var markerType = gMtypes[mType];
	var icon=null;
	if (markerType != null) {
		icon = markerType.icon;
	}
	gCurrMarker = new GMarker(point, icon);
	gMap.addOverlay(gCurrMarker);
	var infoHtml = '<div id="placeitdiv" class="infoWindow">'+getLoadingHTML()+'</div>';
	gCurrMarker.openInfoWindowHtml(infoHtml);
	var action = "/getPostitForm.php";
	GDownloadUrl(action+"?lat="+point.lat()+'&lng='+point.lng(), function(data, responseCode) {
		document.getElementById("placeitdiv").innerHTML = data;
	});
}

function tinyMCE_setDetails(html) {
var inst = tinyMCE.getInstanceById('map_details');
if (inst) {
inst.setContent(html);
}
}

function typeidchange() {
	var dropdown = document.addPlaceForm.addplacetype;
	var typeid = dropdown.options[dropdown.selectedIndex].value;
	GDownloadUrl("/getTypeHtml.php?typeid="+typeid, function(data, responseCode) {
		tinyMCE_setDetails(data);
	});
}

function fillMtypes() {
	var dropdown = document.addPlaceForm.addplacetype;
	dropdown.options.length=0;
	dropdown.options[dropdown.options.length]=new Option("Select", "");
	var selIndex = -1;
	var isGroupAdded=false;
	for (typeid in gMtypes) {
		markerType = gMtypes[typeid];
		if (markerType.ispublic == "0") { continue; }
		if (typeid == "0") { continue; }
		var index = dropdown.options.length;
		dropdown.options[index]=new Option(markerType.title, typeid);
//U		if (gSubType && gSubType.typeid == typeid) { selIndex = index; }
		if (typeid == gSelTypeid) { selIndex = index; }
		if (gSubType && gSubType.typeid == typeid) { isGroupAdded = true; }
	}
	if (gSubType && !isGroupAdded) {
		index = dropdown.options.length;
		dropdown.options[index]=new Option(gSubType.title, gSubType.typeid);
	}
	if (selIndex == -1) {
		if (gSelTypeid == "0") { selIndex = 0; }
		else if (gSubType) { selIndex = dropdown.options.length-1; }
		else { selIndex = 0; }
	}
	dropdown.selectedIndex = selIndex;
	if (gSubType) { dropdown.disabled = true; }
}

function fillCtg() {
//	GDownloadUrl('/getMarkerTypes.php', function(data, responseCode) {
	makeSyncRequest("/getMarkerTypes.php", "", function(data) {
		var xml = GXml.parse(data);
		var markerTypes = xml.documentElement.getElementsByTagName("markertype");
		setMarkerTypes(markerTypes);
	});
}

function groupPlaceitClick(markerId) {
	if (markerId == undefined) { return; }
	marker = gMarkers[getIndex(markerId)];
	if (marker) {
		gZoomInPoint = marker.getPoint();
		/*
		var html = '<div class="groupInfoWindow">There are <b>'+marker.total+'</b> markers in this group. Please <a href="javascript:groupZoomIn();">zoom in</a> to view them.<br></div>';
		marker.openInfoWindowHtml(html);
		*/
		groupZoomIn();
	}
}

function zoomtostreet() {
	if (gMap && gZoomInPoint) {
		gMap.closeInfoWindow();
		gMap.setCenter(gZoomInPoint, gStreetLevelZoom+1);
	}
}

function groupZoomIn() {
	if (gMap && gZoomInPoint) {
		gMap.closeInfoWindow();
		var z = gMap.getZoom();
		var inc = 1;
//		if (z < 9) { inc = 4; }
//		else
		if (z < 14) { inc = 2; }
		inc = 1;
		gMap.setCenter(gZoomInPoint, gMap.getZoom()+inc);
	}
}

function showBounds(x1,y1,x2,y2,xinc,yinc) {
	for (var x=x1; x<x2; x+=xinc) {
		for (var y=y1; y<y2; y+=yinc) {
			var points = [];
			points.push(new GLatLng(x,y));
			points.push(new GLatLng(x+xinc,y));
			points.push(new GLatLng(x+xinc,y+yinc));
			points.push(new GLatLng(x,y+yinc));
			points.push(new GLatLng(x,y));

			points.sort(function(p1, p2) {
				return p1.lng() - p2.lng();
			});
			gMap.addOverlay(new GPolyline(points, '#ff0000'));
		}
	}
}

function nodeValue(node) {
	if (node.textContent) { return node.textContent; }
	else { return node.text; }
}

function setMarkerTypes(mtypes) {
	if (!mtypes) { return; }
	gMtypes = new Object();
	for (var i = 0; i < mtypes.length; i++) {
		var mtype = mtypes[i];
		var typeid = mtype.getAttribute("id");
		var title = mtype.getAttribute("title");
		var hasreview = mtype.getAttribute("hasreview");
		var hasdiscussion = mtype.getAttribute("hasdiscussion");
		var ispublic = mtype.getAttribute("ispublic");
		var grouptype = mtype.getAttribute("grouptype");

		var markertype = new MarkerType(typeid, title, hasreview, hasdiscussion, ispublic);
		gMtypes[typeid] = markertype; // store in global array

		var nodes = mtype.childNodes;
		var iconurl,iconsz,iconshdurl,iconshdsz;
		for (var j=0; j<nodes.length; j++) {
			if (nodes[j].nodeName == "iconurl") { iconurl = nodeValue(nodes[j]); }
			if (nodes[j].nodeName == "iconsz") { iconsz = nodeValue(nodes[j]); }
			if (nodes[j].nodeName == "iconshdurl") { iconshdurl = nodeValue(nodes[j]); }
			if (nodes[j].nodeName == "iconshdsz") { iconshdsz = nodeValue(nodes[j]); }
		}
		if (iconurl && iconsz) {
			markertype.seticon(createIcon(iconurl,iconsz,iconshdurl,iconshdsz));
		}
	}
}

function createIcon(url, size, shdurl, shdsize) {
	if (!url || !size) { return null; }
	var gicon = new GIcon();
	gicon.image = url;
	var arr = size.split(',');
	var w = parseInt(arr[0]);
	var h = parseInt(arr[1]);
	gicon.iconSize = new GSize(w,h);
	gicon.iconAnchor = new GPoint(w/2, h/2);
	gicon.infoWindowAnchor = new GPoint(w/2, 1);
	if (shdurl && shdsize) {
		gicon.shadow = shdurl;
		arr = shdsize.split(',');
		w = parseInt(arr[0]);
		h = parseInt(arr[1]);
		gicon.shadowSize = new GSize(w,h);
	}
	return gicon;
}

// ajax/getMarkers.php?b=37.365246,-122.257576,37.51844,-122.026176&z=12?=0.030638900200
function displayMarkers(x1, y1, x2, y2, xinc, yinc) {
	if (!gMap) { return; }
var fitBounds=null;

	gNumPages=0;
	var action = "/getMarkers.php";
	if (gTabNo == 1) { action = "/getChatter.php"; }
	var gm=1; // get markertypes
	if (gMtypes[1] != null) { gm=0; } // if markertypes already in memory - dont refetch

	var sm="";
	if (gshowmarkerid!=null) { sm=gshowmarkerid; }

//  add tid parameter here in the future to select specific places
//  by default - dont set tid so as to get all the places
	showMapLoading(true);
	var params = 'gm='+gm;
	params += '&a='+getRandomStr();
	params += '&b='+x1+','+y1+','+x2+','+y2;
	params += '&z='+gMap.getZoom();
	params += '&xi='+xinc;
	params += '&yi='+yinc;
	params += '&pg='+gCurrPg;
	params += '&sm='+sm;
	if (gFitBounds && gSubType != null && sm == "") {
		fitBounds=new GLatLngBounds();
		gFitBounds = false;
	}
	if (gSelTypeid != null && gSelTypeid != "0") {
		params += '&st='+gSelTypeid;
	}

	var actionUrl = action+'?'+params;
	makeSecureRequest(action, params, function(data) {
		var xml = GXml.parse(data);
		var summaryTag = xml.documentElement.getElementsByTagName("summary");
		if (summaryTag != undefined && summaryTag.length > 0) {
			gNumPages = summaryTag[0].getAttribute("numpages");
			var pageno = summaryTag[0].getAttribute("page");
			if (pageno != undefined && pageno != null) {  gCurrPg = pageno; }
		}
		var markers = xml.documentElement.getElementsByTagName("marker");
		var batch = [];
		var showid = null;
		for (var i = 0; i < markers.length; i++) {
			var marker = markers[i];
			var markerId = marker.getAttribute("id");
			var iszoom = (marker.getAttribute("iszoom") == "1");
			var avgrating = marker.getAttribute("avgrating");
			if (avgrating == undefined) { avgrating = 0; }
			var mType = marker.getAttribute("typeid");

			var nodes = marker.childNodes;
			var lat, lng;
			var title=null, details=null, total=null, permlink=null, createdby=null, numresp=null;
			lat = GXml.value(marker.getElementsByTagName("lat")[0]);
			lng = GXml.value(marker.getElementsByTagName("lng")[0]);
			title = GXml.value(marker.getElementsByTagName("title")[0]);
			details = GXml.value(marker.getElementsByTagName("details")[0]);
			details=details.slice(10, -4); // remove enclosing CDATA tags
			total = GXml.value(marker.getElementsByTagName("total")[0]);
			permlink = GXml.value(marker.getElementsByTagName("permlink")[0]);
			createdby = GXml.value(marker.getElementsByTagName("createdby")[0]);
			numresp = GXml.value(marker.getElementsByTagName("numresp")[0]);

			var point = new GLatLng(lat, lng);
			if (!gMap.getBounds().contains(point)) { continue; }

			var icon;
			if (iszoom) {
				icon = gZoomIcon;
				title = total + " marks. Click to zoom in.";
			} else {
				var markerType = gMtypes[mType];
				if (!markerType) {
				postLog("1", "markertype not found : "+mType);
				continue; } // remote chance
				icon = markerType.icon;
			}
			var mapMarker = new GMarker(point, { title: title, icon: icon});
if (fitBounds) { fitBounds.extend(point); }
			mapMarker.markerId = markerId;
			mapMarker.title = title;
			mapMarker.details = details;
			mapMarker.total = total;
			mapMarker.iszoom = iszoom;
			mapMarker.avgrating = avgrating;
			mapMarker.typeid = mType;
			mapMarker.permlink = permlink;
			mapMarker.createdby = createdby;
			mapMarker.numresp = numresp;

			gMarkers[getIndex(markerId)] = mapMarker;
			if (markerId == gshowmarkerid) { showid = markerId; }

			batch.push(mapMarker);
		}
		if (batch.length > 0) {
			bestFit(gMap, fitBounds);
			getMM().addMarkers(batch, 0);
			getMM().refresh();
		}
		showMapLoading(false);
		if (showid != null) { showarrow(true, showid); }
		gshowmarkerid = null;
	});
}

function bestFit(map, bounds) {
if (!bounds) { return; }
map.setZoom(map.getBoundsZoomLevel(bounds));
map.setCenter(bounds.getCenter());
}

// adjust the bounds
function moveEndCB() {
	if (!gMap) { return; }
	if (gIsInfoOpen) { return; } // dont refresh map if the moveend is caused by an open infowindow
	setCookie("smLastPos", gMap.getCenter().lat()+","+gMap.getCenter().lng()+","+gMap.getZoom());
	gCurrPg=1;
	refreshMap();
}

function initMap() {
	gPrevBounds = null;
	refreshMap();
}

function changeCategory() {
	var dropdown = document.ctgform.ctgselect;
	var typeid = dropdown.options[dropdown.selectedIndex].value;
/*U
	var mtype = null;
	if (typeid != "") { mtype = gMtypes[typeid]; }
	if (mtype) { gSubType = new SubType(mtype.typeid, mtype.title); }
	else { gSubType = null; }
*/
	gSelTypeid = typeid;
	gCurrPg=1;
	refreshMap();
}

function refreshMap(bounds) {
	gMarkers = new Object(); // empty the global var
	if (!gMap) { return; }
	getMM().clearMarkers();
	gMap.clearOverlays();
	refreshGrids(bounds);
	if (gSpotmeMarker) {
		gMap.addOverlay(gSpotmeMarker);
		if (!gSpotmeMarker.visited) {spotmeClick();}
	}
	if (gHomeMarker) { gMap.addOverlay(gHomeMarker); }
}

function refreshGrids(bounds) {
	if (!gMap) { return; }

	if (!bounds || bounds == undefined) {
		bounds = gMap.getBounds();
	}
	var x1 = bounds.getSouthWest().lat();
	var y1 = bounds.getSouthWest().lng();
	var x2 = bounds.getNorthEast().lat();
	var y2 = bounds.getNorthEast().lng();
	if (y1 > y2) { y2 = y2+360; }

	var xinc = (x2-x1)/GRID_SIZE;
	var yinc = (y2-y1)/GRID_SIZE;

	// adjust bounds to align with the grids of the previous bounds
	if (gPrevBounds) {
		var x11 = gPrevBounds.getSouthWest().lat();
		var y11 = gPrevBounds.getSouthWest().lng();
		var x22 = gPrevBounds.getNorthEast().lat();
		var y22 = gPrevBounds.getNorthEast().lng();
		while(x11 < x1) { x11 = x11 + xinc; }
		while(x11 > x1) { x11 = x11 - xinc; }
		while(y11 < y1) { y11 = y11 + yinc; }
		while(y11 > y1) { y11 = y11 - yinc; }
		while(x22 > x2) { x22 = x22 - xinc; }
		while(x22 < x2) { x22 = x22 + xinc; }
		while(y22 > y2) { y22 = y22 - yinc; }
		while(y22 < y2) { y22 = y22 + yinc; }
		x1 = x11; y1 = y11; x2 = x22; y2 = y22;
	}

	displayMarkers(x1, y1, x2, y2, xinc, yinc);

	gPrevBounds = new GLatLngBounds(new GLatLng(x1,y1), new GLatLng(x2,y2));
}

function mapGo2Home() {
	if (gHomeMarker) {
		gMap.setCenter(gHomeMarker.getPoint(), gStreetLevelZoom);
		document.getElementById("btn2").className="";
	}
}

function go2Spotme(point) {
	if (!gUserInfo) { return; }
	if (gSpotmeMarker && gSpotmeMarker.username != gUserInfo.username) {
		gSpotmeMarker.remove();
		gSpotmeMarker=null;
	}
	if (!gSpotmeMarker) {
		createHomeMarker(point);
	}
	if (gSpotmeMarker) {
		gMap.setCenter(point, gStreetLevelZoom+1);
		spotmeClick();
	}
}

function showAddress(address) {
	gGeocoder.getLatLng(address, function(point) {
		if (!point) {
			alert(address + " not found. Please try to be more specific.");
		} else {
			gMap.setCenter(point, gStreetLevelZoom);
			fillCities(new CityLocation(point.lat()+","+point.lng(),address));
			hideShowDiv("findPlace", "placeSelect");
			document.placeselectform.placelist.selectedIndex = document.placeselectform.placelist.length-2;
		}
	});
}

function fillCities(newcity) {
	var locs = new DefaultLocations();
	var dropdown = document.placeselectform.placelist;
if (!dropdown) { return; }
	dropdown.options.length=0;
	for(var i=0; i<locs.options.length; ++i) {
		if (newcity != null && locs.options[i].latlng == "*") {
			dropdown.options[dropdown.options.length]=new Option(newcity.cityname, newcity.latlng);
		}
		dropdown.options[dropdown.options.length]=new Option(locs.options[i].cityname, locs.options[i].latlng);
	}
	dropdown.selectedIndex = 0;
}

function getFullUrl(suburl) {
if (gBaseUrl) return gBaseUrl + "/" + suburl;
else return suburl;
}

function loadMap() {

	// create home icon
	gHomeIcon = new GIcon();
	gHomeIcon.image = getFullUrl("/images/home1.png");
	gHomeIcon.iconSize = new GSize(22, 22);
	gHomeIcon.iconAnchor = new GPoint(11, 22);
	gHomeIcon.infoWindowAnchor = new GPoint(5, 1);

	// create mapbusy icon
	gBusyIcon = new GIcon();
	gBusyIcon.image = getFullUrl("/images/mapbusy.gif");
	gBusyIcon.iconSize = new GSize(48, 48);
	gBusyIcon.iconAnchor = new GPoint(24, 24);
	gBusyIcon.infoWindowAnchor = new GPoint(5, 1);

	// create dbarrow icon
	gDnArrow = new GIcon();
	gDnArrow.image = getFullUrl("/images/mapicons/himark.gif");
	gDnArrow.iconSize = new GSize(32,32);
	gDnArrow.iconAnchor = new GPoint(16,16);

	// create zoom icon
	gZoomIcon = new GIcon();
	gZoomIcon.image = getFullUrl("/images/placeitGroup4.png");
	gZoomIcon.iconSize = new GSize(20, 34);
	gZoomIcon.iconAnchor = new GPoint(10, 17);
	gZoomIcon.infoWindowAnchor = new GPoint(10, 1);

	// spotme icon
	gSpotmeIcon = new GIcon();
	gSpotmeIcon.image = getFullUrl("/images/spotme.png");
	gSpotmeIcon.iconSize = new GSize(32, 32);
	gSpotmeIcon.iconAnchor = new GPoint(16, 32);
	gSpotmeIcon.infoWindowAnchor = new GPoint(16,16);

	// read the cookie for the home location
/*
	if (gUserInfo != null && gUserInfo.homelat != "" && gUserInfo.homelng != "") {
		createHomeMarker(new GLatLng(gUserInfo.homelat, gUserInfo.homelng));
	}
*/

	gMap = new GMap2(document.getElementById("gmap"));
	gMap.addControl(new GLargeMapControl());
	gMap.addControl(new GMapTypeControl());

	// if the user is logged in and the home location is set, then go to the home location

	var mydiv = document.getElementById("mydiv").innerHTML;
	gshowmarkerid=null;
	var centerSet=false;
	if (mydiv != undefined && mydiv != null) {
		if (gSpotmeMarker) gSpotmeMarker.visited = true; // dont show spotmewindow if mydiv is present
		var mydivarr = mydiv.split(',');
		if (mydivarr[0] == 'p' || mydivarr[0] == 'm') {
			gshowmarkerid=mydivarr[1];
			gMap.setCenter(new GLatLng(parseFloat(mydivarr[2]), parseFloat(mydivarr[3])), gStreetLevelZoom+1);
			centerSet=true;
		} else
		if (mydivarr[0] == "spotme") {
			tagme(mydivarr[1]);
			setSpotmeUser(mydivarr[1],parseFloat(mydivarr[2]),parseFloat(mydivarr[3]));
			gMap.setCenter(gSpotmeMarker.getPoint(), gStreetLevelZoom+1);
			centerSet=true;
		} else
		if (mydivarr[0] == "sub") {
			gSubType = new SubType(mydivarr[1],mydivarr[2],mydivarr[3],mydivarr[4]);
			gSelTypeid = gSubType.typeid;
			if (mydivarr.length >= 8) {
				gshowmarkerid=mydivarr[5];
				gMap.setCenter(new GLatLng(parseFloat(mydivarr[6]), parseFloat(mydivarr[7])), gStreetLevelZoom+1);
				centerSet=true;
			}
		}
	} else if (gHomeMarker) {
		mapGo2Home();
		centerSet=true;
	}

	if (!centerSet) { // center should be set before MarkerManager is created
		// read the cookie for the last position
		var smLastPos = getCookie("smLastPos");
		if (smLastPos && (gSelTypeid == null || gSelTypeid == "0")) {
			var arr = smLastPos.split(',');
			gMap.setCenter(new GLatLng(parseFloat(arr[0]), parseFloat(arr[1])), parseInt(arr[2]));
		} else {
			gMap.setCenter(new GLatLng(22.998852,79.277344), 5); // center around India
		}
	}

	initMap();

	GEvent.addListener(gMap, "infowindowopen", function() {
//		gMap.savePosition();
		gInfoOpenCenter=gMap.getCenter();
		gIsInfoOpen=true;
	});
	GEvent.addListener(gMap, "infowindowclose", function() {
//		gMap.returnToSavedPosition();
		gMap.setCenter(gInfoOpenCenter);
		gIsInfoOpen=false;
		removeIt();
	});
	GEvent.addListener(gMap, "click", function(marker, point, overlaypoint) {
		if (overlaypoint) { point = overlaypoint; }
		if (marker) {
			if (marker.iszoom) { // group place
				gZoomInPoint = marker.getPoint();
				groupPlaceitClick(marker.markerId);
			} else if (marker.isHomeMarker) { // click on home marker
				homeMarkerClick(marker);
			} else { // individual place
				markerClick(marker.markerId);
			}
		} else if (gMapAction == 1) { // click on home
			createHomeMarker(point);
			gMap.addOverlay(gSpotmeMarker);
			setUserHomeLocation(point.lat(), point.lng());
		} else if (gMapAction == 2) { // click on place-marker
			if (gTabNo == 0) { addPlace(point); }
			else             { addMessage(point); }
		}
	});
	GEvent.addListener(gMap, "moveend", moveEndCB);
}

function load() {
	fillCtg();
	if (GBrowserIsCompatible()) {
		gGeocoder = new GClientGeocoder();
		loadMap();
	} else {
		alert("Browser is not compatible: Supported browsers are Firefox v2 and IE v6 and above");
	}
}

function createHomeMarker(point) {
	if (gSpotmeMarker) { gSpotmeMarker.remove(); }
	gSpotmeMarker = new GMarker(point, gSpotmeIcon);
	gSpotmeMarker.username = gUserInfo.username;
	GEvent.addListener(gSpotmeMarker, "click", spotmeClick);
}

function removeHtmlTags(strIn) {
	if (!strIn) { return ""; }
	strInputCode = strIn.replace(/&(lt|gt);/g, function (strMatch, p1){
		return (p1 == "lt")? "<" : ">";
	});
	var strOut = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
	return strOut;
}

function getRatingsHtml(rating) {
	if (!rating || rating == "0") { return ""; }
	rating = Math.floor(parseFloat(rating)+0.5);
	var html = "";
	for (i=0; i<rating; i++) { html = html + '<img style="margin-bottom:3px;" src="/images/stary.gif" />'; }
	for (i=rating; i<5; i++) { html = html + '<img style="margin-bottom:3px;" src="/images/starn.gif" />'; }
	return html;
}

function getCommentsHtml(numresp) {
if (numresp == null || numresp == null || numresp == "") { return ""; }
numresp = parseInt(numresp);
if (numresp == 0) { return ""; }
var alt = numresp + ' comment';
if (numresp > 1) { alt = alt + 's'; } // plural
var html='<img src="/images/comments.gif" alt="' + alt + '" title="' + alt + '"/>';
html = html + '&nbsp;<span style="vertical-align:bottom;font-weight:bold;font-size:11px;margin:0px;padding:0px;font-color:#256;">[' + numresp + ']</span>';
return html;
}

function clearSideBar() {
	var div = document.getElementById("tabcontent");
	div.innerHTML = "";
	clearpg();
}

function showFeedbackForm() {
	GDownloadUrl("/getFeedbackForm.php", function(data, responseCode) {
		document.getElementById("tabcontent").innerHTML = data;
	});
}

function showFeedbackResults() {
	GDownloadUrl("/getFeedbackResults.php", function(data, responseCode) {
		document.getElementById("tabcontent").innerHTML = data;
	});
}

function getLoadingHTML() {
	return '<img src="/images/loading.gif"/>&nbsp;<i>Loading - Please Wait...</i>';
}

function setLocation() {
	var w = document.placeselectform.placelist.selectedIndex;
	if (w == 0) { return false; }
	var latlng = document.placeselectform.placelist.options[w].value;
	if (latlng == "*") { hideShowDiv("placeSelect", "findPlace"); }
	else {
		var arr = latlng.split(',');
		gMap.setCenter(new GLatLng(parseFloat(arr[0]), parseFloat(arr[1])), gStreetLevelZoom);
	}
}

function selectTab(tabNo) {
	gTabNo=tabNo;
	gCurrPg=1;
	btnDiv = document.getElementById('btn2');
	if (btnDiv == undefined) { return; }
	if (tabNo == 0) {
		btnDiv.innerHTML='<a href="javascript:{}" onFocus="if(this.blur)this.blur()"><img src="/images/placeit.gif" style="margin:0px;padding:0px;"/>&nbsp;Add To Map&nbsp;</a>';
		btnDiv.style.display = "inline";
		refreshMap();
	} else if (tabNo == 1) {
		btnDiv.innerHTML='<a href="javascript:{}" onFocus="if(this.blur)this.blur()"><img src="/images/chatsm.gif" style="margin:0px;padding:0px;"/>&nbsp;Post Message&nbsp;</a>';
		btnDiv.style.display = "inline";
		btnDiv.style.margin = "0px";
		btnDiv.style.padding = "0px";
		refreshMap();
	} else if (tabNo == 2) {
		if (gMap) gMap.clearOverlays();
		btnDiv.className="";
		btnDiv.style.display = "none";
		gMapAction = 0;
		getMM().clearMarkers();
		clearSideBar();
		showFeedbackForm();
	}
}
function ff_textarea_fix(/*Event*/ evt){
return false;
} 

