/**
 * Added Google Maps
 * @name googlemaps-anywhere.js
 * @author wokamoto - http://dogmap.jp
 * @version 1.1.0
 * @date March 24, 2009
 * @copyright (c) 2008 - 2009 wokamoto (dogmap.jp)
 * @license  Released under the GPL license (http://www.gnu.org/copyleft/gpl.html)
 * @requires jQuery v1.2.3 or later
 */

if (typeof google.maps === 'undefined')
  google.load('maps', '2', {'language' : (typeof googlemapsAnywhereL10n !== 'undefined' ? googlemapsAnywhereL10n.language : 'ja')});

google.setOnLoadCallback(function(){
	var map_opt = jQuery.extend({
		markerTitle:'Move to the Google map.'
		,cssPath:'div.googlemap'
		,language:'ja'
		,errMsgNoData:"Error: No panorama data was found."
		,errMsgNoFlash:"Error: Flash doesn't appear to be supported by your browser."
		,errMsgUnknown:"Error: Unknown Error."
		,mapsURL:'http://maps.google.com/maps'
		}, googlemapsAnywhereL10n);

	var marker_opt = {title:map_opt.markerTitle};

	jQuery(map_opt.cssPath).each( function(){
		var map, marker, point, map_svClient = false;
		var map_link = jQuery(this).children('a:first');
		var map_url = map_link.attr('href');
		var map_type = G_NORMAL_MAP;
		var latlng, yaw, pitch, zoom;
		var street_view_flag = false;

		switch (map_url.replace(/^.*(\?|\&|\&amp;)maptype=([^\&]+)[\&]?.*$/i,'$2').toUpperCase()) {
			case 'NORMAL':
			case 'G_NORMAL_MAP':
			map_type = G_NORMAL_MAP;
			break;
			case 'SATELLITE':
			case 'G_SATELLITE_MAP':
			map_type = G_SATELLITE_MAP;
			break;
			case 'HYBRID':
			case 'G_HYBRID_MAP':
			map_type = G_HYBRID_MAP;
			break;
			case 'PHYSICAL':
			case 'G_PHYSICAL_MAP':
			map_type = G_PHYSICAL_MAP;
			break;
			case 'STREETVIEW':
			street_view_flag = true;
			break;
		};

	if(!street_view_flag) {
		latlng = map_url.replace(/^.*(\?|\&|\&amp;)ll=([^\&]+)[\&]?.*$/i,'$2').split(",");
		zoom = Number(map_url.replace(/^.*(\?|\&|\&amp;)z=([\d]+)[\&]?.*$/i,'$2'));
		zoom = ((zoom == NaN ? 0 : zoom) > 0 ? zoom : 14);
	} else {
		latlng = map_url.replace(/^.*(\?|\&|\&amp;)cbll=([^\&]+)[\&]?.*$/i,'$2').split(",");
		var cbp = map_url.replace(/^.*(\?|\&|\&amp;)cbp=([^\&]+)[\&]?.*$/i,'$2').split(",");
		yaw   = (cbp.length >= 2 ? Number(cbp[1]) : 0);
		zoom  = (cbp.length >= 4 ? Number(cbp[3]) : 5);
		pitch = (cbp.length >= 5 ? Number(cbp[4]) : 0);
	}

	if(latlng.length >= 2) {
		point = new google.maps.LatLng(Number(latlng[0]), Number(latlng[1]));
		if(point) {
			map_url = map_opt.mapsURL
				+ '?f=q'
				+ '&hl=' + map_opt.language
				+ '&geocode='
				+ '&q=' + point.toUrlValue()
				+ '&ie=UTF8'
				+ '&ll=' + point.toUrlValue()
				+ '&t=h'
				+ '&z=' + zoom;
			map_link.attr('href', map_url);

		if(!street_view_flag){
			map = new google.maps.Map2(this);
			map.addControl(new google.maps.SmallZoomControl());
			map.setCenter(point, zoom, map_type);
			var mainMarker = new GIcon();
			mainMarker.image = "http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/melittles.png";
			mainMarker.iconSize = new GSize(62, 44);
			mainMarker.iconAnchor = new GPoint(31, 44);
			mainMarker.infoWindowAnchor = new GPoint(23, 1);

			markermain = new google.maps.Marker(map.getCenter(), mainMarker);
			map.addOverlay(markermain);
			google.maps.Event.addListener(markermain, 'click', function(){window.open(map_url);});



		var gmarkers = [];
		var gicons = [];
		
		gicons["pet01"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet01.png");
		gicons["pet02"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet02.png");
		gicons["pet03"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet03.png");
		gicons["pet04"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet04.png");
		gicons["pet05"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet05.png");
		gicons["pet06"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet06.png");
		gicons["pet07"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet07.png");
		gicons["pet08"] = new GIcon(G_DEFAULT_ICON,"http://www.me-and-littles.com/real-estate/wp-content/plugins/googlemaps-anywhere/images/pet08.png");

		function createMarker(points,name,html,category) {
			var marker = new google.maps.Marker(points,gicons[category]);
			marker.mycategory = category;
			marker.myname = name;
			google.maps.Event.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(html);
			});
			gmarkers.push(marker);
			return marker;
		}
		function show(category) {
			for(var i=0; i<gmarkers.length; i++) {
				if(gmarkers[i].mycategory == category) {
					gmarkers[i].show();
				}
			}
//			document.getElementById(category+"box").checked = true;
		}
		function hide(category) {
			for(var i=0; i<gmarkers.length; i++) {
				if(gmarkers[i].mycategory == category) {
					gmarkers[i].hide();
				}
			}
//			document.getElementById(category+"box").checked = false;
			map.closeInfoWindow();
		}
		boxclick = function(box,category){
			if(box.checked){
				show(category);
			} else {
				hide(category);
			}
		}
		myclick = function(i){
			google.maps.Event.trigger(gmarkers[i],"click");
		}
		Adentro = function(i){
			map.setCenter(gmarkers[i].point, 18, G_NORMAL_MAP);
		}
		Fuera = function(){
			map.setCenter(new google.maps.LatLng(37.0, 140), 4, G_NORMAL_MAP); 
		}

		GDownloadUrl("http://www.me-and-littles.com/gmap/gmap.xml", function(doc){
			var xmlDoc = GXml.parse(doc);
			var markers = xmlDoc.documentElement.getElementsByTagName("marker");

			for (var i = 0; i < markers.length; i++) {
				var lat = parseFloat(markers[i].getAttribute("lat"));
				var lng = parseFloat(markers[i].getAttribute("lng"));
				var points = new google.maps.LatLng(lat,lng);
				var stadium = markers[i].getAttribute("comment");
				var name = markers[i].getAttribute("name");
				var html = "<strong>"+name+"</strong><br>"+stadium+"<br><a href='javascript:Adentro("+i+");'><img src='http://www.google.com/intl/en_ALL/mapfiles/zoom-plus-mini.png' width='18' height='18' alt='plus' title='zoom-in'/><\/a>&nbsp;<a href='javascript:Fuera();'><img src='http://www.google.com/intl/en_ALL/mapfiles/zoom-minus-mini.png' width='18' height='18' alt='minus' title='zoom-out'/><\/a>";
				var category = markers[i].getAttribute("category");
				var marker = createMarker(points,name,html,category);
				map.addOverlay(marker);
			}
			hide("pet01");
			hide("pet02");
			hide("pet03");
			hide("pet04");
			hide("pet05");
			hide("pet06");
			hide("pet07");
			hide("pet08");
		});


        } else {
          if (map_svClient == false) map_svClient = new google.maps.StreetviewClient();

          map = new google.maps.StreetviewPanorama(this);
          google.maps.Event.addListener(map, "error", function(errorCode) {
           switch (errorCode) {
            case NO_NEARBY_PANO:    alert(map_opt.errMsgNoData);  break;
            case FLASH_UNAVAILABLE: alert(map_opt.errMsgNoFlash); break;
            default:                alert(map_opt.errMsgUnknown); break;
           }
           return;
          });

          map_svClient.getNearestPanorama(point, function(map_sv_data){
           map.setLocationAndPOV(map_sv_data.location.latlng, {yaw:yaw, pitch:pitch, zoom:zoom});
          });
        }
      }
    }
  });
});

