/* 
	Google Maps Shortcode[2]
	Author: Tenderfeel
	Version: 1.0
	Author URI: http://tenderfeel.xsrv.jp/
*/

var map,infoboxs,baseIcon;
var gmarkers = [];
var htmls = [];

	
google.load("maps", "2",{"callback" : mapsLoaded,"language" : "ja"});

function mapsLoaded() {
	if (google.maps.BrowserIsCompatible()) {
	map = new google.maps.Map2(document.getElementById(gmConfig.gmDivID));
	var point = new google.maps.LatLng(gmConfig.gmLat,gmConfig.gmLng);
	
	//アイコン作成
	baseIcon = new  google.maps.Icon();
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new google.maps.Size(20, 34);
	baseIcon.shadowSize = new google.maps.Size(37, 34);
	baseIcon.iconAnchor = new google.maps.Point(9, 34);
	baseIcon.infoWindowAnchor = new google.maps.Point(9, 2);
	baseIcon.infoShadowAnchor = new google.maps.Point(18, 25);
		
	if(gmConfig.LMap_Controler){map.addControl(new google.maps.LargeMapControl3D());}
	if(gmConfig.MapType_Controler){
		switch(gmConfig.MapType_Controler){
			case 2:
				map.addControl(new google.maps.HierarchicalMapTypeControl());
			break;
			
			case 1:
				map.addControl(new google.maps.MenuMapTypeControl());
			break;
			
			default:
				map.addControl(new google.maps.MapTypeControl());
		}
	}
	if(gmConfig.Scale_Controler){map.addControl(new google.maps.ScaleControl());}
	if(gmConfig.OV_Controler){map.addControl(new google.maps.OverviewMapControl());}
	if(gmConfig.SmallZoomControl){map.addControl(new google.maps.SmallZoomControl3D());}
	if(gmConfig.NavLabelControl){map.addControl(new google.maps.NavLabelControl());}
	if(gmConfig.WheelZoom){map.enableScrollWheelZoom();}
	if(gmConfig.DClickZoom){map.enableDoubleClickZoom();}

	map.setCenter(point,gmConfig.gmScope);
	
	if(area.length != 0){
		infoboxs = [];
		for(i=0; i < area.length; i++){
			var letter = String.fromCharCode("A".charCodeAt(0) + i);
			var point = new google.maps.LatLng(parseFloat(area[i].lat),parseFloat(area[i].lng));
			var marker = new createMarker(point,area[i],letter, i);
			map.addOverlay(marker);
		}
	}else{
		
		if(gmConfig.html && gmConfig.html != "" && gmConfig.markerAdd){
			var marker = new google.maps.Marker(point);
			google.maps.Event.addListener(marker, 'click', function() {
				infoboxs = createInfoBox(gmConfig.html);
				marker.openInfoWindowHtml(infoboxs);
			});
			map.addOverlay(marker);
			
		}else if(gmConfig.html && gmConfig.html != "" && !gmConfig.markerAdd){
			infobox = createInfoBox(gmConfig.html);
			map.openInfoWindowHtml(point,infobox);
		}
		
	}
	window.onunload=function(){google.maps.Unload();}
	
	}
}


function createMarker(point,area,letter,i){
	var icon = new google.maps.Icon(baseIcon);
	var marker = new google.maps.Marker(point, icon);
	
	icon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";5
	
	if(area.html||area.maxhtml||area.tabs||area.blowup){
		
		if(area.tabs){
			var tabs = [];
			for(s=0; s < area.tabs.length; s++){
				tabs.push(new google.maps.InfoWindowTab(area.tabs[s].title,createInfoBox(area.tabs[s].html))); 
			}
			htmls[i] = {"type":"tab","content":tabs};
			
		}else if(area.maxtitle && area.maxhtml){
			htmls[i] = {"type":"maxim", "content":[area.html, area.maxtitle, area.maxhtml]};
		
		}else if(area.blowup){
			htmls[i] = {"type":"blowup","content":""};
		}else{
			infoboxs[i] = createInfoBox(area.html);
			htmls[i] = {"type":"normal","content":infoboxs[i]};
		}

		google.maps.Event.addListener(marker, 'click', function() {
		
			if(area.tabs){
				marker.openInfoWindowTabsHtml(tabs);
				
			}else if(area.maxtitle&&area.maxhtml){
				marker.openInfoWindowHtml("<div class=\"info\">"+area.html+"</div>",{maxTitle: area.maxtitle,maxContent: area.maxhtml});
			}else if(area.blowup){
				marker.showMapBlowup(point);
			}else{
				marker.openInfoWindowHtml(infoboxs[i]);
			}
	  });

	}
	
	 gmarkers.push(marker);
	 
	 return marker;
}

//panTo & openInfoWindow
function panTo(i) {
	
	var point = new google.maps.LatLng(parseFloat(area[i].lat),parseFloat(area[i].lng));

    if(htmls[i]){
		switch(htmls[i].type){
			case "maxim":
				gmarkers[i].openInfoWindowHtml("<div class=\"info\">"+htmls[i].content[0]+"</div>",{maxTitle:htmls[i].content[2],maxContent:htmls[i].content[3]});
			break;
			
			case "tab":
				gmarkers[i].openInfoWindowTabsHtml(htmls[i].content);
			break;
			
			case "blowup":
				gmarkers[i].showMapBlowup(point);
			break;
			
			default:
				gmarkers[i].openInfoWindowHtml(htmls[i].content);
		}
	}
	
	map.setCenter(point,map.getZoom());
}


function createInfoBox(html){
	
	var gmap = document.getElementById(gmConfig.gmDivID);
	var infobox = document.createElement("div");
	var result = 0;
	
	infobox.className = "info";
	infobox.innerHTML = html;
	gmap.appendChild(infobox);
	
	 for(x=0; x<infobox.childNodes.length; x++){
		 if(infobox.childNodes.item(x).nodeName.indexOf("text")!==-1) continue;
		 
		 if( infobox.childNodes.item(x).currentStyle ) {
			 
			 result += getActiveStyle(infobox.childNodes.item(x),"marginTop")+getActiveStyle(infobox.childNodes.item(x),"marginBottom") + getActiveStyle(infobox.childNodes.item(x),"paddingTop")+getActiveStyle(infobox.childNodes.item(x),"paddingBottom");
			 
		 }else if(getComputedStyle){
		 	result += getActiveStyle(infobox.childNodes.item(x),"margin-top")+getActiveStyle(infobox.childNodes.item(x),"margin-bottom") + getActiveStyle(infobox.childNodes.item(x),"padding-top")+getActiveStyle(infobox.childNodes.item(x),"padding-bottom");
		 }
	 
	}
	
	infobox.style.height = (infobox.offsetHeight+result) +"px";	
	
	gmap.removeChild(infobox);
	
	return infobox;
}

function getActiveStyle( element, property, pseudo ) {
    if( element.currentStyle ) { //IE or Opera
		var size = element.currentStyle[ property ];
		if( size.indexOf( "em" ) != -1 ){
			size = parseInt(size, 10)*12;
		}else if(size=="auto"){
			size=0;
		}
        return parseInt(size, 10);
    }
    else if( getComputedStyle ) { //Mozilla or Opera
        return parseInt(getComputedStyle( element, pseudo ).getPropertyValue( property ), 10);
    }

    return 0;
}

