﻿var map;
var mgr;
var areaSetup = false;
var businessSetup = false;
var mapLang = 'Heb';
var areaOpacity = 0.3;

var isIE   = false;
var ltrMap = false;

var baseIcon = new GIcon();    
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);
var typeIcons   = {};
var zoomMarkers = {};

function contentWrapper(content){
	var tmpContent;
	if (mapLang == 'Eng') {
		tmpContent = "<div dir='ltr' style='width:230px;direction:ltr' align='left'>" + content + "</div>";	
	}
	else {
		tmpContent = "<div dir='rtl' style='width:230px;direction:rtl' align='right'>" + content + "</div>";
	}
	return tmpContent
}

function setMapDirection(mapObject){
	// checking of IE 
	if (document.compatMode && document.all) {
		isIE = true;
		
		//alert(' navigator.systemLanguage  ' + navigator.systemLanguage)
		//alert(' navigator.browserLanguage ' + navigator.browserLanguage)
		// Language is RTL , so should be the map object
		if (navigator.browserLanguage == 'he') {
			//alert('IE - hebrew !' )
			mapObject.style.direction = 'rtl';
		}
		else {
			//alert('IE - english!' )
			mapObject.style.direction = 'ltr';		
		}
		mapObject.style.direction = 'ltr';		
		
	}
	else {
		//alert('not IE !' )
	}
	ltrMap = (mapObject.style.direction == 'ltr');
	//alert('ltrMap ' + ltrMap)
}

function loadMap() 
{
	if (GBrowserIsCompatible()) 
	{
		var startPoint = new GLatLng(lat, lng)
		 
		// Initializing the map object
		var mapObject = document.getElementById('map');
		
		setMapDirection(mapObject);
		map = new GMap2(mapObject);


		map.setCenter(startPoint, startZoom);
		map.setMapType(G_SATELLITE_MAP);                // Satellite view                        

		map.addControl(new GSmallMapControl());         // Add navigation buttons
		//map.addControl(new GOverviewMapControl());    // Add small overview map
		//map.addControl(new GMapTypeControl());        // Add map types buttons

		mgr = new MarkerManager(map, {trackMarkers:true});
		
		window.setTimeout('specialMapLoad()', 100);
	}
}


function setupBusinessMarkers() 
{
	if (!businessSetup) {
		businessSetup = true;
		for (var i in businessInfo) 
		{
			var layer 	  = businessInfo[i];
			var layerType = layer["type"];
			var markers = [];
			var icon = getIcon(layerType);
			//businessLayer[layerType].markers.length = 0;
		
			for (var j in layer["places"]) 
			{
				var place = layer["places"][j];
				//var title = place["name"];
				var posn = new GLatLng(place["posn"][0], place["posn"][1]);
				var content = place["content"];
				var businessCode = place["code"]
				
				var marker = createMarker(posn,businessCode,content,icon); 
				marker.fromZoom	 = layer["zoom"][0];
				markers.push(marker);
				zoomMarkers['b' + businessCode] = marker;
				
				if (place["zoom"] == "Yes") {
					//zoomMarkers[place["code"]] = marker;
				}
				// adding marker to layer array
				businessLayer[layerType].markers.push(marker);
				//allmarkers.push(marker);
			}
		
			mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
		}
		mgr.refresh();
	}
  
}

function zoomArea(areaCode){
	var areaData
	areaData = areaInfo[areaCode];
	if (areaData) {
		var areaPoint = new GLatLng(areaData["posn"][0], areaData["posn"][1]);
		var areaZoom  = Number(areaData["zoom"]);
		//var content   = areaData["content"];
		var content = contentWrapper(areaData["content"]);

		//alert(areaZoom)
		map.setCenter(areaPoint,areaZoom );	
		if ( (ltrMap && (mapLang != 'Eng')) || ((!ltrMap) && (mapLang == 'Eng'))) {
			//alert('heheh');
			map.openInfoWindowHtml(areaPoint,content, {buttons:{close:{height:10,width:235}}}  )    
		}
		else{
			map.openInfoWindowHtml(areaPoint,content  ) 
		}
		//map.openInfoWindowHtml(areaPoint,content, {buttons:{close:{height:10,width:235}}});     
	}
}

function triggerMarkerEvent(marker,eventStr){
	GEvent.trigger(marker, eventStr );

}

function showMarker(businessCode){
	var zoomMarkerData = zoomMarkers['b'+businessCode];
	if (zoomMarkerData) {
		GEvent.trigger(zoomMarkerData, "mouseover" )		
	}
	else {
		alert('no marker');
	}

}

function zoomMarker(businessCode){
	var zoomMarkerData = zoomMarkers['b'+businessCode];
	if (zoomMarkerData) {
		map.setCenter(zoomMarkerData.getLatLng(),16 );	
		window.setTimeout('showMarker('+businessCode + ')', 200);
		//GEvent.trigger(zoomMarkerData, "mouseover" )		
		//alert(areaZoom)
	}
}

function areaVisibility(showArea){
	if ((showArea) && (!areaSetup)) setupAreaData();
	for (var i in areaInfo) {
		var areaPoly 	= areaInfo[i]["poly"]
		var areaMarker 	= areaInfo[i]["marker"]
		if (showArea) {
			if (areaPoly) {
				areaPoly.opacity = areaOpacity;
				areaPoly.outline = true;
				areaPoly.redraw(true);
				areaInfo[i].visible  = true;

			}
			//if (areaPoly) areaPoly.show();			
		}
		else {
			//if (areaPoly) areaPoly.hide();
			if (areaPoly) {
				areaPoly.opacity = 0;
				areaPoly.outline = false;
				areaPoly.redraw(true);
				areaInfo[i].visible  = false;
			}
		}
	}
}

function toggleAreas() {
	map.getInfoWindow().hide() 
	var showArea = document.getElementById('area').checked;
	areaVisibility(showArea);
}

function setupAreaMarkers(){
	var areaMarkers = [];
	for (var i in areaInfo) 
	{
		var areaData;
		areaData = areaInfo[i];
		var title = areaData["name"];
		var posn = new GLatLng(areaData["posn"][0], areaData["posn"][1]);
		
		var content = contentWrapper(areaData["content"]);
		var marker = createAreaMarker(areaData["code"],posn,title,content); 	
		areaData["marker"] = marker;
		areaMarkers.push(marker);
	}
	
	// adding the markers  
	mgr.addMarkers(areaMarkers, 12, 17);
	mgr.refresh();
	for (var i=0; i< areaMarkers.length; i++) 
	{
		areaMarkers[i].hide();
	}
}

function removeAreaBorders()
{
	for (var i in areaInfo) {
		var areaPoly 	= areaInfo[i]["poly"]
		if (areaPoly) map.removeOverlay(areaPoly);			
	}
}

function removeAreaMarkers(){
	for (var i in areaInfo) {
		var areaMarker 	= areaInfo[i]["marker"]
		if (areaMarker) map.removeOverlay(areaMarker);			
	}
}

function removeAreaData(){
	removeAreaMarkers();
	removeAreaBorders();
}

function inArea(areaCode) {
	setCurArea(areaCode); 
	if (areaInfo[areaCode].visible) areaInfo[areaCode].marker.show()

}

function outArea(areaCode) {
	setCurArea(0); 
	areaInfo[areaCode].marker.hide()

}

function setupAreaBorders() 
{
	//alert('Setting area Markers' + areaInfo.length);
	if (!areaSetup) {
		areaSetup = true;	
		for (var i in areaInfo) 
		{
			var areaData;
			areaData = areaInfo[i];
			var areaColor = areaData["color"];
			var areaCode  = areaData["code"];
			if (areaColor == '') areaColor = '#ff0000';

			var borderPoints = [] ;
			for (var i in areaData["border"]){
				var point = areaData["border"][i];
				borderPoints.push(new GLatLng(point[0],point[1]));
			}
			
			if (borderPoints.length > 2){
				var newPoly = new GPolygon(borderPoints, areaColor, 1, 0.5, areaColor, areaOpacity);
				newPoly.areaCode = areaCode;
				
				//areaPolys[areaData["code"]] = newPoly;
				areaData["poly"] 	= newPoly;
				areaData["visible"] = true;
				
				GEvent.addListener(newPoly,"mouseover", function() {inArea(this.areaCode)});    
				GEvent.addListener(newPoly,"mouseout", function() {outArea(this.areaCode)});    

				map.addOverlay(newPoly);
			}
		
		}
	}
}

function setCurArea(areaCode)
{
	var curAreaDisplay = document.getElementById('curAreaName')
	if (curAreaDisplay){
		curAreaDisplay.innerHTML = "&nbsp;"
		if (areaCode) {
			var areaData = areaInfo[areaCode]
			if (areaData) {
				curAreaDisplay.innerHTML = areaData["name"] ;		
			}
		}
		else{
			 ;
		}
	}
	
}

function setupAreaData() {
	setupAreaBorders();
	setupAreaMarkers();
}


function toggleMarkers(layerType)
{   
	var layerMarkers = businessLayer[layerType].markers;
	var showMarkers  = document.getElementById('check'+layerType).checked;
	
	if (layerMarkers) {
		map.getInfoWindow().hide() 
		for (var i=0; i< layerMarkers.length; i++) 
		{
			if (showMarkers) {
				//map.addOverlay(layerMarkers[i])
				//layerMarkers[i].show();
				mgr.addMarker(layerMarkers[i],layerMarkers[i].fromZoom)
			}
			else{
				//map.removeOverlay(layerMarkers[i])
				//layerMarkers[i].hide();
				mgr.removeMarker(layerMarkers[i])
			}
		}	
	}
}     




function createMarker(posn, businessCode,content, icon) 
{
	var LinkAlign,BusinessLink,zoomText,infoText
	if (mapLang == 'Eng') {
		LinkAlign = "right"
		BusinessLink = ErootPath + "BDisplay.asp?BusinessCode="+ businessCode
		zoomText = "zoom"
		infoText = "info"
	}
	else {
		LinkAlign = "left"	
		BusinessLink = rootPath + "BDisplay.asp?BusinessCode="+ businessCode
		zoomText = "זום"
		infoText = "מידע נוסף"
	}
	//var businessCode = "2603"
	var tmpContent = "<table height='100%' width='100%' ><tr><td valign='top' class='mapContent'>" + content
	tmpContent = tmpContent + "</td></tr><tr><td class='mapBotLink' valign='bottom' align='" + LinkAlign + "' >"
	tmpContent = tmpContent + "<a href='javascript:zoomMarker(\""+ businessCode +"\")'><img border='0' height='15' src='/Images/zoom-map.png'>"+zoomText+"</a>"
	tmpContent = tmpContent + " <a target='_blank' href='" +  BusinessLink + "'><img border='0' height='15' src='/Images/map-info.png'>"+ infoText +"</a>"
	tmpContent = tmpContent + "</td></tr></table>"
	
	var infoContent = contentWrapper(tmpContent);
	var marker = new GMarker(posn, {icon:icon});        

	if ( (ltrMap && (mapLang != 'Eng')) || ((!ltrMap) && (mapLang == 'Eng'))) {
		//alert('heheh');
		GEvent.addListener(marker,"mouseover", function() {marker.openInfoWindowHtml(infoContent, {buttons:{close:{height:10,width:235}}}  ) });    
	}
	else{
		GEvent.addListener(marker,"mouseover", function() {marker.openInfoWindowHtml(infoContent  ) });    
	}

	return marker;
}

function createAreaMarker(areaCode,posn, title, content) 
{
	//var marker = new GMarker(posn);        
   var icon = new GIcon();
	icon.image = '/images/blank.png';
	icon.iconSize = new GSize(10, 10);
	icon.iconAnchor = new GPoint(16, 16);
	opts = {
			//"areaCode": areaCode,
			"icon": icon,
			"clickable": true,
			"draggable": false,
			"labelText": title,
			"labelClass": "mapArea",
			"labelOffset": new GSize(-16, -16)
	};
    var marker = new LabeledMarker(posn, opts);
	//marker["areaCode"] = areaCode;
	
	//marker.div.className = "invisible";
	//GEvent.addListener(marker,"click", function() {zoomArea(this.areaCode)});    
	
	return marker;
}

function getIcon(layerType) 
{
	var Icon = null;
	if (businessLayer) 
	{
        if (typeIcons[layerType]) {
	        Icon = typeIcons[layerType];
		}
		else{
			var layerData = businessLayer[layerType];
			Icon = new GIcon(baseIcon);
			if (layerData) {
				Icon.image 	= layerData.iconImage;
				Icon.shadow = layerData.iconShadow;
				
				var size = layerData.iconSize;
				Icon.iconSize 	= new GSize(size.width, size.height);
				Icon.shadowSize = new GSize(size.width, size.height);
				Icon.iconAnchor = new GPoint(size.width >> 1, size.height >> 1);
				
				typeIcons[layerType] = Icon;
			}
			else {
				alert('no layer data for : '+layerType)
			}
		}
	}
	
	return Icon;
}

function setIconImage(picObject,layerType) {
	var iconImage;
	picObject.onload="";
	if (businessLayer) 
	{
		var layerData = businessLayer[layerType] 
        if (layerData) {
			picObject.src = layerData.iconImage;
			picObject.width = layerData.iconSize.width;
			picObject.height = layerData.iconSize.height;
		}
	}
}

var stdIconWidth =  12;
var stdIconHeight =  20;

var businessLayer = {
	"zoom" : {
		iconSize 	: { width: 20, height: 30 },
		iconImage	: "/images/focusmapIcon.png" ,
		iconShadow 	: "http://www.google.com/mapfiles/shadow50.png",
		markers		: []
		
	},
	"1" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category1mapIcon.png" ,
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
		
	},
	"2" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category2mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"3" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category3mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"4" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category4mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"5" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category5mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"6" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category6mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"7" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category1mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"9" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category9mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"10" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category10mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"11" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category11mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	},

	"12" : {
		iconSize 	: { width: stdIconWidth, height: stdIconHeight },
		iconImage	: "/images/category12mapIcon.png",
		iconShadow 	: "http://labs.google.com/ridefinder/images/mm_20_shadow.png",
		markers		: []
			
	}

};


