//<![CDATA[

var safari=(navigator.userAgent.toLowerCase().indexOf('safari')!=-1);

var container;
var map;
var highlightIndex = 0;
var t;
var scrlPos;
var glang = 0; // language


var centerPoint = new GLatLng(35, -95);

//Entered city ceter point for the recenter button
var cityCenterLat = centerPoint.x; 
var cityCenterLng = centerPoint.y;
//*************************************************

var locName = "";
var geocoder;

var gmarkers = [];
var mksLength = 0;  //For centerMap
var cntMarker = 0;
var working = 0;

var baseIcon = new GIcon();
//baseIcon.shadow = "/images/mp/shadow2.png";
baseIcon.shadow = "http://imfimg.com/static/0/img/mapicon/shadow.png";
baseIcon.iconSize = new GSize(24, 32);
baseIcon.shadowSize = new GSize(31, 32);
baseIcon.iconAnchor = new GPoint(2, 31);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(10, 22);



// icon for center of radius search
var sicon = new GIcon();
sicon.image  = "http://imfimg.com/static/0/img/mapicon/icon_flag.png";
sicon.shadow = "http://imfimg.com/static/0/img/mapicon/icon_flag_shadow.png";
sicon.iconSize = new GSize(31, 31);
sicon.shadowSize = new GSize(35, 31);
sicon.iconAnchor = new GPoint(0, 31);
sicon.infoWindowAnchor = new GPoint(9, 2);
sicon.infoShadowAnchor = new GPoint(18, 25);


var hMarker //Declare the Active/Hover Marker variables
// icon for highlight
var hicon = new GIcon();
hicon.image  = "/images/map/marker_yellow.png";
hicon.iconSize = new GSize(20, 34);
hicon.shadowSize = new GSize(37, 34);
hicon.iconAnchor = new GPoint(9, 34 + 20);

hicon.image  = "/images/mp/markerA_h.png";
hicon.iconSize = new GSize(24, 32);
hicon.iconAnchor = new GPoint(2, 31 + 20);

var INIT_ZOOM = 13;
var MAP_MIN_HEIGHT = 640;
var MAP_MIN_WIDTH = 500;

var mapDiv;
var satelliteDiv;
var exeCount = 1;
var EVENT_THRESHOLD = 4;
//var spanishFlag = 1; //Later change this to SpanishFlag
var resultDisplayed = 'N';
var isLoadingFinished = false;		

var searchCriteria = {
	impId: "0",
	sicCode: "", 
	stype: "", 
	name: "", 
	start: 0, 
	lang: "",
	eventFired:0,
	centerLat:centerPoint.x,
	centerLng:centerPoint.y
};

var iMap = {
	isDEBUG: false,
	markers: [],
	isRefreshMapOn: true,
	isZoomIgnored: false,
	largeMapControl: new GLargeMapControl(),
	smallMapControl: new GSmallMapControl(),
	isPanLoaded: false,
	
	log: function(msg) {
		if(this.isDEBUG) 
			GLog.write(msg);
	},
	
	getMarkerOf: function() {
		//var ll = this.markers[idx].getLatLng();
		var ll,mk;

		var bounds = map.getBounds();

		for(var i = 1; i < gmarkers.length; i++) {
			if(gmarkers[i]) {
				ll = gmarkers[i].getLatLng();
				mk = gmarkers[i];
				if(bounds.containsLatLng(ll))
					break;
			}
		}
		//GLog.write(mk._can_id_ch + '> iMap - lat : ' + ll.lat() + ", lng : " + ll.lng() + " at " + i);

		//return {lat:ll.lat(), lng:ll.lng()};
		return mk;
	},

	clearMarkers: function() {
		for (var i = 0; i < iMap.markers.length; i++) {
			map.removeOverlay(iMap.markers[i]);
		}
		iMap.markers.length = 0;
	},

	showListing: function(text) {
		document.getElementById("listing_container").innerHTML = text;

		resizeMap();
	},

	hideListing: function() {
		document.getElementById("listing_container").innerHTML = "";
	},

	showMessage: function(text) {
		var msg = "No Listing results.";
		if (searchCriteria.lang=="1") {
			msg = "Sin resultados";
		}
		var noMsg = '<div class="list_container" style="background:none;border:0;">' +
					'	<table cellpadding=0 border=0>' +
					'	<tr>' +
					'		<td width="33" align="center"><img src="http://cpgimg.com/images/icon_warning.gif" width="21" height="21" alt="" /></td>' +
					'		<td><span style="font-size:12px; font-weight:bold;">'+msg+'</span></td>' +					
					'	</tr>' +
					'	<tr>' +
					'		<td>&nbsp;</td>' +
					'		<td><span style="font-size:10px; font-weight:normal;">'+text+'</span></td>' +
					'	</tr>' +
					'	</table>' +
					'</div>';	
		
		this.showListing(noMsg);
	},

	showResultCount: function(text) {
		var res1 = document.getElementById("resultCount1");
		var res2 = document.getElementById("resultCount2");
		
		res1.innerHTML = text;
		res2.innerHTML = text;
	},

	hideResultCount: function() {
		var res1 = document.getElementById("resultCount1");
		var res2 = document.getElementById("resultCount2");
		
		res1.innerHTML = "";
		res2.innerHTML = "";
	},
	
	doIMapQuery: function (start) {
		if (working == 1) {
//			alert('Query in progress...');
			return;
		}
		
		var neLat = 0;
		var neLng = 0;
		var swLat = 0;
		var swLng = 0;
		var weatherLat = 0;
		var weatherLng = 0;
		
		if (searchCriteria.eventFired==0) {
			weatherLat = searchCriteria.centerLat;
			weatherLng = searchCriteria.centerLng;
		}
		else {
			neLat = map.getBounds().getNorthEast().lat();
			neLng = map.getBounds().getNorthEast().lng();
			swLat = map.getBounds().getSouthWest().lat();
			swLng = map.getBounds().getSouthWest().lng();		
			
			var latDelta = (neLat - swLat) * 0.01;
			var lngDelta = (neLng - swLng) * 0.01;		
			
			// make proper boundaries
			neLat = neLat - latDelta;
			neLng = neLng - lngDelta*0.4;
			swLat = swLat - latDelta;
			swLng = swLng - lngDelta*2;
			
			weatherLat = (neLat+swLat)/2; 
			weatherLng = (neLng+swLng)/2;
			
			var cLatLng = map.getCenter().toString();
		   	searchCriteria.centerLat = cLatLng.substring(1, cLatLng.indexOf(','));
		   	searchCriteria.centerLng = cLatLng.substring(cLatLng.indexOf(',')+2, cLatLng.length-1);
		}
		
		Webcam.map.addControl(waitControl.prototype);
		
		/*
		GLog.write("searchCriteria.centerLat : " + searchCriteria.centerLat + ", " + 
				   "searchCriteria.centerLng : " + searchCriteria.centerLng + ", " +
				   "centerPoint.x : " + centerPoint.x + ", " +
				   "centerPoint.y : " + centerPoint.y); */
		
		var divWait = document.getElementById("wait");
		divWait.style.display="block";
		working = 1;

		clearMarkers();
		var url = "";
		var that = this;
		
		if (searchCriteria.eventFired == 0) {  //Without any event - initial listings
			var radius = document.form2.radius.value;
			
			url = '/ms/search.jsp?radius=' + radius
				+ '&lang=' + searchCriteria.lang
				+ '&stype=' + searchCriteria.stype
				+ '&start=' + start
				+ '&lat=' + centerPoint.y
				+ '&lng=' + centerPoint.x
				+ '&sic=' + searchCriteria.sicCode 
				+ '&name=' + searchCriteria.name
				+ '&locName=' + locName;
			
			exeCount = 1;  //reset this variable to the initial
		}
		else {			
			url = '/search_area_i.jsp?' // to handle with moving map event
				+ '&imp=' + searchCriteria.impId
				+ '&lang=' + searchCriteria.lang
				+ '&nt=' + searchCriteria.stype
				+ '&str=' + start 
				+ '&ar=' + swLat + ',' + swLng + ',' + neLat + ',' + neLng 
				+ '&hid=' + searchCriteria.sicCode
				+ '&na=' + searchCriteria.name
				+ '&locName=' + locName
				+ '&vm=';		
		}
		
		//GLog.write(url);			

		var request = GXmlHttp.create();

		if (searchCriteria.name=='') document.form2.name.value = '';

		request.open("GET", url, true);

		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				working = 0;
				divWait.style.display="none";

				var xmlDoc = request.responseXML;

				if (xmlDoc != null) {
					// parse header					
					var hdr = xmlDoc.documentElement.getElementsByTagName("header");	
					var catText = hdr[0].getAttribute("catText");
					
					if (catText != "NO_DATA_FOUND")
					{
						var listingInfo = hdr[0].getAttribute("listingInfo");
						var resText = hdr[0].getAttribute("resText");
						var navText = hdr[0].getAttribute("navText");
						var stype = hdr[0].getAttribute("stype");
						var impId = hdr[0].getAttribute("impId");
						
						searchCriteria.impId = impId;

						setStype(stype);					
						
						if (resText == "") 
							hideResult();
						else
							showResult(resText);
							
						if (navText == "") 
							hideNav();
						else
							showNav(navText);
		
						if (catText == "") 
							hideCategory();
						else
							showCategory(catText);
		
						// obtain the array of markers and loop through it
						var mks = xmlDoc.documentElement.getElementsByTagName("marker");
						mksLength = mks.length;
			            
						// hide the info window, otherwise it still stays open where the removed marker used to be
						map.getInfoWindow().hide();		            
		
						if (mksLength > 0) {
							for (var i = 0; i < mks.length; i++) {
								// obtain the attribues of each marker
								var index = mks[i].getAttribute("index");
								var lat = parseFloat(mks[i].getAttribute("lat"));
								var lng = parseFloat(mks[i].getAttribute("lng"));
								var point = new GLatLng(lat,lng);
								var html = mks[i].getAttribute("html");
								var label = mks[i].getAttribute("label");
			
								// create the marker
								var marker = createMarker(point,index,html);
								map.addOverlay(marker);
								
							}
							
							if (searchCriteria.eventFired == 0) { //If not, getZoomLevel() of GoCenterMap calls zoomend event so that IMap.doIMapQuery() can be called again
								GoCenterMap2();								
							}
							showListing(listingInfo);
						}
						
					else {
						hideListing();
						if (searchCriteria.eventFired==1) setNoDataMsg();
						else {
							if (catText == "") setNoDataMsg();  //If there are not both sub-category and data
						}
					}
				}
				else {
					setNoDataMsg();
				}		
				showResult(searchCriteria.name);
			}

			Webcam.getWebcamMarkers();

			that.getWeather(weatherLat, weatherLng, searchCriteria.lang, map.getZoom());
			//that.getNews((neLat+swLat)/2, (neLng+swLng)/2, lang, map.getZoom());

			Webcam.map.removeControl(waitControl.prototype);				
		}
	}
		
	request.send(null);
	},
		
	getWeather: function(lat, lng, lang, zoom) {
		var url = '/weather/search.jsp?&lang=' + lang	+ '&lat=' + lat	+ '&lng=' + lng + '&zoom=' + zoom;
		//GLog.write(url);

		var request = GXmlHttp.create();

		request.open("GET", url, true);

		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
	
				// parse header
				var hdr = xmlDoc.documentElement.getElementsByTagName("header");
				var resText = hdr[0].getAttribute("resText");
				//var cityName = hdr[0].getAttribute("cityName");
				//var prov = hdr[0].getAttribute("prov");								
	
				(function($){
					$("#ms_weather").html(resText);
					//$("#iMap_cityNav").html(cityName);
					//$("#iMap_provNav").html(prov);
				})(jQuery);

			}
		}

		request.send(null);
	},
	
	deSelectedVM: function(vmUrl) {
			var vmVal = "";
			
			(function($){
				if(vmUrl.indexOf("vm=") >= 0)
					vmVal = vmUrl.substring(vmUrl.indexOf("vm=")+3);

				$("#iMap_vm").html(vmVal);
			})(jQuery);
			
			this.doIMapQuery(1);
	}
};

function loadMap(spanishFlag, impId, impCountry, defaultCity) {
	window.onresize = resizeMap;
	/*if (GBrowserIsCompatible()) {
		container = document.getElementById("mapMS");

		map = new GMap2(container, {draggableCursor:"crosshair"});
		map.setCenter(centerPoint, 4);
		map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
	*/
	
    	var ps = centerPoint.toString();
    	var lat = ps.substring(1, ps.indexOf(','));
    	var lng = ps.substring(ps.indexOf(',')+2, ps.length-1);		
		searchCriteria.centerLat = lat;
		searchCriteria.centerLng = lng;
	
		var opts = {mapId:"mapMS", 
					mapMinHeight:MAP_MIN_HEIGHT, 
					mapMinWidth:MAP_MIN_WIDTH, 
					resizeCallback:resizeMap, 
					centerPoint:[lat,lng],
					draggableCursor:"crosshair",
					webcamControlId:"webcamContainer",
					spanishFlag:spanishFlag,
					largeMapControl:"Y",
					impId:impId};
			
		map = i$.initializeMap(opts);	
	
		geocoder = new GClientGeocoder();
		if (spanishFlag=='T')
	      	geocoder.setBaseCountryCode("es");

		map.enableDoubleClickZoom();
		map.enableContinuousZoom();
		GEvent.addDomListener(document.getElementById("mapMS"), "DOMMouseScroll", wheelZoom); 
		GEvent.addDomListener(document.getElementById("mapMS"), "mousewheel", wheelZoom);
		Webcam.get(map, spanishFlag);
		
		GEvent.addListener(map, "dragend", function() { 
			if(iMap.isRefreshMapOn) {				
				if (resultDisplayed=='Y') {
					searchCriteria.eventFired = 1;
					iMap.doIMapQuery(1);
				}
				else {
					doWebcams();
				}
			}
			else {
				if(!i$.getStreetViewInstance())
					Webcam.getWebcamMarkers();
			}
		});

		// because of resizing after loading map the map is zoomed in by resizeMap function
		// sometimes zoom-in is occurred two times or three times. That is why I'm using two events, moveend, zoomend
		GEvent.addListener(map, "moveend", function() {			
	    	if(!isLoadingFinished && exeCount == 1) {
	    		//Webcam.get(map, spanishFlag);
	    		if (WebcamObj.getNumberOfNonHotSpots() > 0) {
	    			map.addControl(webcamSelectTypeControl.prototype);
	    		}
				isLoadingFinished = true;
				//GLog.write('moveend - finished : ' + exeCount);
				exeCount++;
				//GLog.write('moveend - finished reset : ' + exeCount);
	    	}
	    	else {
	    		//Setting exeCount to EVENT_THRESHOLD means that dragend event is called or ready to call zoomend by user action.
	    		exeCount = EVENT_THRESHOLD;
	    		//GLog.write('moveend - not finished : ' + exeCount);
	    	}
		}); 

		GEvent.addListener(map, "zoomend", function() {
			if(isLoadingFinished) {
				if(iMap.isRefreshMapOn && !iMap.isZoomIgnored && resultDisplayed=='Y'){
					//GLog.write('zoomend - isLoadingFinished : ' + exeCount);
					searchCriteria.eventFired = 1;
					iMap.doIMapQuery(1);
				}
				else {
					if (!i$.getStreetViewInstance())
						Webcam.getWebcamMarkers();
				}
			}
			else {
				//At the beginning, when IMap.doIMapQuery() calls search.jsp, exeCount is reset to 1
				//So it never call this routine whenever you click a category or name search which calls doQuery().
				//GLog.write('zoomend - not finished before If statement: ' + exeCount);
				if (exeCount >= EVENT_THRESHOLD && resultDisplayed=='Y') { 
					searchCriteria.eventFired = 1;
					iMap.doIMapQuery(1);
					//GLog.write('zoomend - doIMapQuery was executed. ');
				}
				else {
					//GLog.write('zoomend - doWebcams only. ' + exeCount);
					doWebcams();
				}
				exeCount++;				
			}		
		});	
		
		map.addControl(moveRefreshControl.prototype);
		map.addControl(mapControl.prototype);
		map.addControl(recenterControl.prototype);

		getInitMap(impCountry, defaultCity);
		
		resizeMap();
	
//		map.setMapType(G_HYBRID_TYPE); // 	Switches this map to the given map type (G_MAP_TYPE, G_HYBRID_TYPE, or G_SATELLITE_TYPE).		
	//}	
}

function doWebcams() {
	var neLat = map.getBounds().getNorthEast().lat();
	var neLng = map.getBounds().getNorthEast().lng();
	var swLat = map.getBounds().getSouthWest().lat();
	var swLng = map.getBounds().getSouthWest().lng();		
	
	var latDelta = (neLat - swLat) * 0.01;
	var lngDelta = (neLng - swLng) * 0.01;		
	
	// make proper boundaries
	neLat = neLat - latDelta;
	neLng = neLng - lngDelta*0.4;
	swLat = swLat - latDelta;
	swLng = swLng - lngDelta*2;	
	
	Webcam.map.addControl(waitControl.prototype);
	Webcam.getWebcamMarkers();
	iMap.getWeather((neLat+swLat)/2, (neLng+swLng)/2, searchCriteria.lang, map.getZoom());
	Webcam.map.removeControl(waitControl.prototype);
}

function wheelZoom(a) { 
	(a.detail || -a.wheelDelta) < 0 ? map.zoomIn() : map.zoomOut(); 
} 


function resizeMap() {	
	var minHeight = 640;
	var minWidth  = 300;
	var clHeight = j$(window).height();//document.documentElement.clientHeight;
	var clWidth = document.body.clientWidth;
	var mapTop = 0;
	var newHeight = 0;
	var newWidth = 0;
	var topOffset = 0;
	
	//newWidth = Math.max(minWidth, j$(window).width() - j$("#leftNavMP").width() - 30);
	newWidth = Math.max(minWidth, j$(window).width() - j$("#mapMS").offset().left - 5);
	
	if(i$.isStreetView()) {
		mapTop = j$("#mapStreet").offset().top;
	} else {
		mapTop = j$("#mapMS").offset().top;//mapDiv.offsetTop;
	}
	
	topOffset = j$("#mapMS").offset().top;
	newHeight = Math.max(minHeight, clHeight - topOffset - 80);

	j$("#mapMS").height(newHeight);	
	j$("#leftNavMP").height(newHeight+20);//listingDiv.style.height = newHeight + 'px';
	newHeight = Math.max(minHeight, clHeight - mapTop - 80);
	if(i$.isStreetView()) {
		j$("#mapStreet").width(newWidth);
		j$("#mapMS").width(newWidth).height(newHeight - j$("#mapStreet").height() - 3); // -3 is added to adjust with listing height;
	} else {
		j$("#mapMS").width(newWidth).height(newHeight);
	}
	
	resizeListingContainer();

	if(map) {
		map.checkResize();
		if(i$.getStreetViewInstance()) {
			i$.getStreetViewInstance().checkResize();
		}
	}	

/*
	var clWidth = document.body.clientWidth;
//	var clHeight = document.body.clientHeight;
	var clHeight = document.documentElement.clientHeight;

//   if (safari) {
//		return;
//   }
   
	var topOffset = container.offsetTop;

	var minWidth = 500;
	var minHeight = 550;


	var leftNav = document.getElementById("leftNavMP");
	var maptNav = document.getElementById("mapNav");

	var widthSearch = leftNav.clientWidth;
	//alert(widthSearch);

	var newWidth = Math.max(minWidth, clWidth - 30 - widthSearch);
	var newHeight = Math.max(minHeight, clHeight - topOffset - 80);


//	container.style.width = newWidth + 'px';
	container.style.height = newHeight + 'px';

//	mapNav.style.width = newWidth + 'px';

	var leftHeight = newHeight + 20;
	leftNav.style.height = leftHeight + 'px';
	resizeListingContainer();
		
	if (map) {
		map.checkResize();
	}
*/
}

function resizeListingContainer() {
	var listingContainer = document.getElementById("listing_container");
	var map = document.getElementById("mapMS");
	var mapStreet = document.getElementById("mapStreet");

	var newHeight = 0;
	
	if(i$.isStreetView()) newHeight = map.clientHeight + mapStreet.clientHeight - listingContainer.offsetTop +24;
	else newHeight = map.clientHeight - listingContainer.offsetTop +24;

	listingContainer.style.height = newHeight + 'px';
}

// Removes leading whitespaces
function LTrim( value ) {
	
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
	
}

// Removes ending whitespaces
function RTrim( value ) {
	
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
	
}

// Removes leading and ending whitespaces
function trim( value ) {
	
	return LTrim(RTrim(value));
	
}

function getMap(address, country, defaultCity) {
    glang = document.form2.lang.value; 
    
	if (trim(address)=='') {
		//alert('empty');
		showLocation(defaultCity);
		return;
	}
	else {
		if (country=="CL") { //Chile
			if (address.indexOf("CL")==-1) {
				var temp = address.split(",");
				address = temp[0] + ", " + country;				
			}
		}
	}
	
//	showMessage('Please wait...');
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					hideSearch();
					hideResult();
					hideNav();
					hideCategory();
					hideListing();
					hideWeather();
					if (map) map.clearOverlays();											
					if (i$.isStreetView()) {
						i$.toggleView();
						jQuery("#sv_toogle").get(0).checked = false;
					}					
					var msg = "<b>We were not able to find this location.<br/>Please try again.</b><br/><br/>";
					if (searchCriteria.lang=="1") {
						msg = "<b>No pudimos encontrar esta localización.<br/>Por favor intente de nuevo.</b><br/><br/>";
					}
					showMessage(msg);
					showLocation(defaultCity);
            } else {
					showSearch();
					hideMessage();
					hideResult();
					hideNav();
					hideCategory();
					hideListing();
					centerPoint = point;  // save the poi
					locName = address;
					
					map.clearOverlays();
					map.addOverlay(createCenterMarker(point, address));
					if (i$.isStreetView()) {
						i$.toggleView();
						jQuery("#sv_toogle").get(0).checked = false;
					}
					i$.setAnyMarker(createCenterMarker(point, address));
					map.setCenter(point, INIT_ZOOM);
					
					searchCriteria.centerLat = centerPoint.y;
					searchCriteria.centerLng = centerPoint.x;
					cityCenterLat = centerPoint.y;
					cityCenterLng = centerPoint.x;
										
					saveAddress(address);  // save address in session
					doWeatherQuery(centerPoint.y, centerPoint.x, glang);

					var orgMsg = BigNavMessage();
					window.setTimeout(function() {
						mapNavMessage(orgMsg);
						}, 2000);						
					
            	}
			}
		);
	}
}

function showLocation(address) {
	if (address=='null' || address=='' || address==null) address = 'Washington,DC';
	if (geocoder) {
		geocoder.getLatLng(
		address,
		function(point) {
			if (!point) {
//		   		alert("not found:" + address);
				map.clearOverlays();
			} else {
//		   		alert("found:" + address);
				map.clearOverlays();
				map.addOverlay(new GMarker(point));
				map.setCenter(point, 13);
			}
		});
	}
}
      
function BigNavMessage() {
	var mapNav = document.getElementById("mapNav");
	var orgMsg = mapNav.innerHTML;

	mapNav.innerHTML = '<font size=3>' + orgMsg + '</font>';
	return orgMsg;
}
     
function createCenterMarker(point, info) {
//	var marker = new GMarker(point, sicon);
	var marker = new GMarker(point, {draggable:true,icon:sicon});
//	marker.icon = sicon;

	GEvent.addListener(marker, "click", function() {	
		  if(i$.isStreetView())
			  i$.getStreetView(marker.getLatLng());
		  else			
			  marker.openInfoWindowHtml('<b style="font-size:13px">' + info + '</b>');
	});
/*
	GEvent.addListener(marker, "dragstart", function() {  
//		map.closeInfoWindow();  
	});
*/
		
	GEvent.addListener(marker, "dragend", function() {  
//		marker.openInfoWindowHtml("Just bouncing along...");  

//					showSearch();
//					hideMessage();
//					hideResult();
//					hideNav();
//					hideCategory();
//					hideListing();
					centerPoint = marker.getPoint();  // save the poi
					doWeatherQuery(centerPoint.y, centerPoint.x, glang);

/*
		var centerP = document.getElementById("centerPoint");
		centerP.innerHTML  = " (" + Math.round(centerPoint.y * 100000)/100000 + ", " + 
						Math.round(centerPoint.x * 100000)/100000 + ")"
*/
						
		window.setTimeout(function() {
		  map.panTo(marker.getPoint());
			}, 500);						
		});

	return marker;
}

/*
function createMarker(point,name,html) {
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});

	idx++;
	gmarkers[idx] = marker;
	
	return marker;
}
*/

/*
function createMarker(point, index, html) {
  // Create a lettered icon for this point using our icon class
  var letter = String.fromCharCode("A".charCodeAt(0) + (index -1));
  var icon = new GIcon(baseIcon);
  icon.image = "/images/mp/marker" + letter + ".png";
//alert(index+","+letter+","+icon.image);
  var marker = new GMarker(point, icon);
//	idx++;
//	gmarkers[idx] = marker;
   gmarkers[index] = marker;

  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });
  GEvent.addListener(marker, "mouseover", function() {
    showListingBox(index);
    highlightBox(index);
  });
  GEvent.addListener(marker, "mouseout", function() {
    hideIcon(index);
    unhighlightBox(index);
  });
  return marker;
}
*/

function createMarker(point, index, html){
  // Create a lettered icon for this point using our icon class
//  var letter = String.fromCharCode("A".charCodeAt(0) + (index -1));
//  var icon = new GIcon(baseIcon);
//  icon.image = "/images/mp/marker" + letter + ".png";

  var letter = String.fromCharCode("a".charCodeAt(0) + (index -1));
  var icon = new GIcon(baseIcon);
  icon.image = "http://imfimg.com/static/0/img/mapicon/" + letter + "_off.png";


  var marker = new GMarker(point, icon);
	cntMarker++;
   gmarkers[index] = marker;

  var aicon = new GIcon(baseIcon);
//  aicon.image = "/images/mp/marker" + letter + "_h.png";
  aicon.image = "http://imfimg.com/static/0/img/mapicon/" + letter + "_on.png";

  GEvent.addListener(marker, 'click', function(){
	  if(i$.isStreetView())
		  i$.getStreetView(marker.getLatLng());
	  else		  
		  marker.openInfoWindowHtml(html);
  });

 GEvent.addListener(marker, 'mouseover', function(){
  try { map.removeOverlay(hMarker); } catch (e) {}
  hMarker = new GMarker(marker.getPoint(), aicon);

  GEvent.addListener(hMarker, 'mouseout', function(){
//   map.removeOverlay(hMarker);
		hMarker.hide();
//    hideIcon(index);
    unhighlightBox(index);
    clearTimeout(t);
  });

  GEvent.addListener(hMarker, 'click', function(){
	  if(i$.isStreetView())
		  i$.getStreetView(hMarker.getLatLng());
	  else		  
		  hMarker.openInfoWindowHtml(html);
  });

    showListingBox(index);
    highlightBox(index);
	 map.addOverlay(hMarker);
 });
/*
  GEvent.addListener(marker, "mouseout", function() {
    hideIcon(index);
    unhighlightBox(index);
  });
*/
 return marker;
}


function doCategorySearch(sicCode, lang) {
	searchCriteria.sicCode = sicCode;
	searchCriteria.stype = "C";
	searchCriteria.name = "";
	searchCriteria.start = 1;
	searchCriteria.lang = lang;	
	searchCriteria.eventFired = 0;
	iMap.doIMapQuery(1);
}

function doCategoryNameSearch(catName, lang) {
	document.form2.name.value = '';
	searchCriteria.sicCode = "";
	searchCriteria.stype = "C";
	searchCriteria.name = catName;
	searchCriteria.start = 1;
	searchCriteria.lang = lang;	
	searchCriteria.eventFired = 0;
	iMap.doIMapQuery(1);
}

function doNameSearch(name, lang) {
	searchCriteria.sicCode = "";
	searchCriteria.stype = "N";
	searchCriteria.name = name;
	searchCriteria.start = 1;
	searchCriteria.lang = lang;
	searchCriteria.eventFired = 0;
	iMap.doIMapQuery(1);
}

//Don't remove this function even though this is same as doIMapQuery() because this is called in search.jsp again.
function doQuery(sicCode, stype, name, start, lang) {
	if (working == 1) {
//		alert('Query in progress...');
		return;
	}
	
	isLoadingFinished = false; //This variable should be reset so that automatic zoomend event can NOT be called.
	searchCriteria.sicCode = sicCode;
	searchCriteria.stype = stype;
	searchCriteria.name = name;
	searchCriteria.start = start;
	searchCriteria.lang = lang;	
	searchCriteria.eventFired = 0;

	iMap.doIMapQuery(start);
	//This variable should be increased so that zoomend event by user can be called.
	//Next link with search.jsp reset exeCount to 2 so zoomend event by user was not called.
	if (start > 1) exeCount++;  	                             
}

function setStype(stype) {
   var radioObj = document.form2.stype;
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == stype);
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == stype) {
			radioObj[i].checked = true;
		}
	}
}

function saveAddress(address) {

	var url = '/ms/saveAddress.jsp?address=' + address;
//alert(url);			

	var request = GXmlHttp.create();

	request.open("GET", url, true);

	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;
			
			null;
		}
	}
	
	request.send(null);
}

function clearMarkers() {
	for (var i = 1; i <= cntMarker; i++) {
		try {
			map.removeOverlay (gmarkers[i]);
		} catch (e) {};
	}

	gmarkers = [];	// empty the array
	cntMarker = 0;			// reset the count
}

function GoCenterMap() {  //For the recenter button on the map
	searchCriteria.centerLat = cityCenterLat;
	searchCriteria.centerLng = cityCenterLng;
	
	if (searchCriteria.eventFired == 1 && mksLength > 0) {
/*		GLog.write("searchCriteria.stype : " + searchCriteria.stype + ", " +
				   "searchCriteria.sicCode : " + searchCriteria.sicCode + ", " +
				   "searchCriteria.name : " + searchCriteria.name + ", " +
				   "searchCriteria.lang : " + searchCriteria.lang + ", " +
				   "searchCriteria.eventFired : " + searchCriteria.eventFired); */
		if (searchCriteria.stype=="C") {
			if (searchCriteria.sicCode=="") {
				doCategoryNameSearch(searchCriteria.name, searchCriteria.lang);
			}
			else {
				doCategorySearch(searchCriteria.sicCode, searchCriteria.lang);
			}
		}
		else {		
			doNameSearch(searchCriteria.name, searchCriteria.lang);
		}
	}
	else {
		window.setTimeout(function() {
			//GLog.write("GoCenterMap() searchCriteria.centerLat : " + searchCriteria.centerLat + ", searchCriteria.centerLng : " + searchCriteria.centerLng);
			map.panTo(new GLatLng(searchCriteria.centerLat, searchCriteria.centerLng));
			doWeatherQuery(searchCriteria.centerLat, searchCriteria.centerLng, searchCriteria.lang);
		}, 500);	
	}
	
	map.closeInfoWindow();
}
 
function GoCenterMap2() {
   var minLat = 180;
   var maxLat = -180;
   var minLng = 180;
   var maxLng = -180;

	minLat = centerPoint.y;
	maxLat = centerPoint.y;
	minLng = centerPoint.x;
	maxLng = centerPoint.x;
	
   for (var i=1; i <= cntMarker; i++) {
      var marker = gmarkers[i];
      var point = marker.getPoint();
      
	   if (point.y > maxLat) maxLat = point.y;
	   if (point.y < minLat) minLat = point.y;

	   if (point.x > maxLng) maxLng = point.x;
	   if (point.x < minLng) minLng = point.x;
   }
   if (minLat ==  180) minLat = 40;
   if (maxLat == -180) maxLat = 65;
   if (minLng ==  180) minLng = -140;
   if (maxLng == -180) maxLng = -60;
      
   var centerLat = (minLat + maxLat) / 2;
   var centerLng = (minLng + maxLng) / 2;
//alert(minLat+","+maxLat+" : "+ minLng+","+maxLng);

	// include the base lcoation

   maxLat += 0.001;
   maxLng += 0.001;
         
   minLat -= 0.001;
   minLng -= 0.001;

   bounds = new GLatLngBounds;
   bounds.extend(new GLatLng(minLat, minLng));
   bounds.extend(new GLatLng(maxLat, maxLng));

	if (cntMarker >= 1) {
	   map.setCenter(new GLatLng(centerLat,centerLng),map.getBoundsZoomLevel(bounds));
	   //alert(searchCriteria.eventFired);
	   //iMap.doIMapQuery(1);
//	   alert("1");
	} else {
		window.setTimeout(function() {
		  map.panTo(new GLatLng(minLat, minLng));
			}, 500);						
//	   alert("2");
	}
		
	map.closeInfoWindow();
}
      
      
function showSearch() {
	var mapSearch = document.getElementById("leftSearch");
	mapSearch.style.display = 'block';
}      

function hideSearch() {
	var mapSearch = document.getElementById("leftSearch");
	mapSearch.style.display = 'none';
}      

function getSelectedValue(selectObject) {
	return selectObject.options[selectObject.selectedIndex].text;
}

function getRadioValue(theObj) {
	for (var i=0; i<theObj.length; i++) {
		if (theObj[i].checked) { return theObj[i].value;}
	}
	return "";
}

function searchMap() {
	var stype = getRadioValue(document.form2.stype);
	var name = document.form2.name.value;
	var lang = document.form2.lang.value;

	if (trim(name) == '') return;
//alert("stype:" + stype);
//alert("name:" + name);
	if (stype == 'C') {
		doCategoryNameSearch(name, lang);
	}
	else {
		doNameSearch(name, lang);
	}

}      

function showMessage(text) {
	var msg = document.getElementById("leftMessage");
	var msgTxt = document.getElementById("leftMessageText");
	msgTxt.innerHTML = text;
	msg.style.display = 'block';
}

function hideMessage() {
	var msg = document.getElementById("leftMessage");
	msg.style.display = 'none';
}

function mapNavMessage(text) {
	var msg = document.getElementById("mapNav");
	msg.innerHTML = text;
}

function showResult(text) {
	var res = document.getElementById("searchResult");
	res.style.display = 'block';

	var resTxt = document.getElementById("searchResultText");
	resTxt.innerHTML = text;
}

function hideResult() {
	var res = document.getElementById("searchResult");
	res.style.display = 'none';
}

function showNav(text) {
	var res = document.getElementById("searchNav");
	res.style.display = 'block';

	var resTxt = document.getElementById("searchNavText");
	resTxt.innerHTML = text;
	resultDisplayed = 'Y';
}

function hideNav() {
	var res = document.getElementById("searchNav");
	res.style.display = 'none';
	resultDisplayed = 'N';
}

function showCategory(text) {
	var res = document.getElementById("searchCategory");
	res.style.display = 'block';
	res.innerHTML = text;
}

function hideCategory() {
	var res = document.getElementById("searchCategory");
	res.style.display = 'none';
}

function showListing(text) {
	var cont = document.getElementById("listing_container");
	cont.style.display = 'block';

	var res = document.getElementById("leftListing");
	res.innerHTML = text;

	resizeListingContainer();
}

function hideListing() {
	document.getElementById("searchNav").style.display = 'none';
	document.getElementById("listing_container").style.display = 'none';
	resultDisplayed = 'N';
}



function showListingBox(index) {
   var ct = document.getElementById("listing_container");
   var top = document.getElementById("box1");
   var bx = document.getElementById("box"+index);

	var start = bx.offsetTop - top.offsetTop;
	var end = start + bx.offsetHeight+ 30;

	var c_start = ct.scrollTop;
	var c_end = c_start + ct.offsetHeight+5;

	if (start < c_start) {
		scrlPos = start;
		t = setTimeout('scrlTo()', 1000);
	}
	else {
		scrlPos = start;
		if ((start + ct.offsetHeight) > (ct.scrollHeight))
			scrlPos = ct.scrollHeight - ct.offsetHeight + 15;
		
		t = setTimeout('scrlTo()', 1000);
	}
}


function scrlTo() {
	var ct = document.getElementById("listing_container");
	if (!(ct.scrollTop == scrlPos)) {
//	if (ct.scrollTop > (scrlPos + 2) || ct.scrollTop < (scrlPos - 2)) {
		var diff = Math.round((scrlPos - ct.scrollTop) / 5);
		if (diff > 50) diff = 50;
		else if (diff < -50) diff = -50;
		
		if (diff <= 3 && diff >= -3) {
			ct.scrollTop = scrlPos;
			clearTimeout(t);
		}
		else {
			ct.scrollTop += diff;
			t=setTimeout('scrlTo()',10);
		}
	}
	else clearTimeout(t);
}


function highlightBox(index) {
   if (highlightIndex > 0 && highlightIndex != index) unhighlightBox(highlightIndex);

	var bx = document.getElementById("colorbox"+index);
	bx.bgColor='#ffffcc';
	highlightIndex = index;
}

function unhighlightBox(index) {
	var bx = document.getElementById("colorbox"+index);
	bx.bgColor='#ffffff';
	highlightIndex = 0;
}

function setCenter() {
	var mapNav = document.getElementById("mapNav");
	var orgMsg = mapNav.innerHTML;
	
	var msg = "Please click on the map for a new center.";
	if (searchCriteria.lang=="1") {
		msg = "Por favor haga click en el mapa para un nuevo centro.";
	}
	mapNavMessage(msg);
//	hideSearch();
//	hideResult();
//	hideListing();

	var lsnr;
	lsnr = GEvent.addListener(map, "click", function(marker, point) {
		if (marker) {
			null;
		} else {
//			showSearch();
//			hideMessage();
//			hideResult();
//			hideListing();
			mapNavMessage(orgMsg);
			centerPoint = point;  // save the poi
			doWeatherQuery(centerPoint.y, centerPoint.x, glang);

			hideResult();
			hideListing();
     		map.clearOverlays();

			map.addOverlay(createCenterMarker(point, "center"));
			GEvent.removeListener(lsnr);

			window.setTimeout(function() {
			  map.panTo(point);
				}, 500);						

		}
	});
}


function highlightIcon(index) {
   if (highlightIndex > 0 && highlightIndex != index) {
		GEvent.trigger(gmarkers[highlightIndex],'mouseout'); 
	}
   try { map.removeOverlay(hMarker); } catch (e) {}

	var marker = gmarkers[index];
	try{
		hMarker = createHighlightMarker(marker.getPoint(), index);
 		map.addOverlay(hMarker);
 	} catch (e) {};

//	var marker = gmarkers[index];
//	GEvent.trigger(gmarkers[index],'mouseover'); 
	highlightIndex = index;
 	
}

function unhighlightIcon() {
	try { map.removeOverlay(hMarker); } catch (e) {}
/*	
   if (lastIndex > 0) {
		GEvent.trigger(gmarkers[lastIndex],'mouseout'); 
	}

	lastIndex = 0;
*/	
}

function createHighlightMarker(point, index) {
	// ------ turn the latlng to pixels position
   var hPoint =
		map.getCurrentMapType().getProjection().fromLatLngToPixel(point ,	map.getZoom());

	// -------- create a GLatLng with a 20 pixels offset south
	var southLatLng =
		map.getCurrentMapType().getProjection().fromPixelToLatLng(new GPoint(
		hPoint.x , hPoint.y + 20 ) , map.getZoom());

  // Create a lettered icon for this point using our icon class
  var letter = String.fromCharCode("a".charCodeAt(0) + (index -1));
  //hicon.image = "/images/mp/marker" + letter + "_h.png";
  hicon.image = "http://imfimg.com/static/0/img/mapicon/" + letter + "_on.png";

	// ------- create the highlighted marker using the highlighted icon
	var highlightMarker = new GMarker(southLatLng, hicon);

  return highlightMarker;
} 

function getInitMap(impCountry, defaultCity) {
	getMap(document.form_ms.city.value, impCountry, defaultCity);
}


function zoomTo(index) {

	var marker = gmarkers[index];
	var curLevel = map.getZoom();
	if (curLevel < 15) {
		map.setCenter(marker.getPoint(), 15);
	}
	window.setTimeout(function() {
		map.panTo(marker.getPoint());
	}, 500);

	GEvent.trigger(gmarkers[index],'click'); 
	unhighlightIcon();
}

function hideWeather() {
	var weatherDiv = document.getElementById("ms_weather");

	weatherDiv.innerHTML = '';
}

function showWeather(text) {
	var weatherDiv = document.getElementById("ms_weather");

	weatherDiv.innerHTML = text;
}

function doWeatherQuery(lat, lng, lang) {
	hideWeather();

	var url = '/weather/search.jsp?&lang=' + lang
			+ '&lat=' + lat 
			+ '&lng=' + lng;

	var request = GXmlHttp.create();

	request.open("GET", url, true);

	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = request.responseXML;

			// parse header
			var hdr = xmlDoc.documentElement.getElementsByTagName("header");
			var resText = hdr[0].getAttribute("resText");
			
			showWeather(resText);
			
		}
	}
	
	request.send(null);
}

function setNoDataMsg() {
	hideNav();
	var text = "";
	//ready for dragend or zoomend event
	exeCount = EVENT_THRESHOLD;
	resultDisplayed = "N";	
		
	if (searchCriteria.stype=="N") { //In case of name search						
		text = "Please enter another search word to see listing results.";
		if (searchCriteria.lang=="1") {
			text = "Por favor entre otra palabra de búsqueda para ver lista de resultados.";
		}		
		document.form2.name.value = '';
		document.form2.name.focus();
	}
	else {
		if (searchCriteria.eventFired==0) {
			text = "Please click another category or enter a search word to see listing results.";
			if (searchCriteria.lang=="1") {
				text = "Porfavor ingrese otra categoría o nombre.";
			}
		}
		else { 
			text = "Please drag and move map to another area to see listing results.";
			if (searchCriteria.lang=="1") {
				text = "Por favor arrastre y mueva el mapa a otra área para ver lista de resultados.";
			}
			resultDisplayed = "Y";
		}
	}
	
	var msg = "No listing results.";
	if (searchCriteria.lang=="1") {
		msg = "Sin resultados.";
	}
			
	var noMsg = '<div class="list_container" style="background:none;border:0;">' +
				'	<table cellpadding=0 border=0>' +
				'	<tr>' +
				'		<td width="33" align="center"><img src="http://cpgimg.com/images/icon_warning.gif" width="21" height="21" alt="" /></td>' +
				'		<td><span style="font-size:12px; font-weight:bold;">'+msg+'</span></td>' +					
				'	</tr>' +
				'	<tr>' +
				'		<td>&nbsp;</td>' +
				'		<td><span style="font-size:10px; font-weight:normal;">'+text+'</span></td>' +
				'	</tr>' +
				'	</table>' +
				'</div>';
	
	showListing(noMsg);

}


//]]>

