
var minimal_alt=38.31482042;
var maximal_alt=20088000.56607700;
var default_zl = 8; /* Default Zoom Level, if Range tag =0 or not defined in KML */
var pov;
var ge1;

var ads_opts = {
  //mode: "experimental",
  channel: 4186181809,
  maxAdsOnMap: 40,
  minZoomLevel: 10
};

// GE Addition
var ge;


function addLoadEvent(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
                window.onload = func;
                } else {
                        window.onload = function() {
                        if (oldonload) {
                        oldonload();
                }
                        func();
                }
        }
}

function getEarthInstanceCB(object) {
  ge = object;
  var i = 0;
  var interval = setInterval(function() {
    if(i++ >3) clearInterval(interval);
    la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
    la.setTilt(76);
    ge.getView().setAbstractView(la);
  }, 1700);
}
// END GE Addition

function getMapProps (markerObject, divObject, picType, debug) {
  if(!markerObject.documentElement) return false;
	var maxlevels = new Object;
	maxlevels.randompicture=16;
	maxlevels.forumpreview=16;
	maxlevels.random3pictures=19;
	maxlevels.topicpreview=19;
	maxlevels.smallmap=2;

	var result=new Object;

	  type="Placemark";
  	  if (markerObject.documentElement.getElementsByTagName("Camera").length) type="Camera";
  	  if (markerObject.documentElement.getElementsByTagName("Placemark").length) type="Placemark";
	  var markers = markerObject.documentElement.getElementsByTagName(type);

    var xy = new Array();

    if(markers.length) {

    var bounds = new GLatLngBounds();

    for (var i = 0; i < markers.length; i++) {
      if (type=="Camera") {
        xy = new Array(markers[i].getElementsByTagName("longitude").item(0).firstChild.nodeValue, markers[i].getElementsByTagName("latitude").item(0).firstChild.nodeValue);
      }
      else {xy = markers[i].getElementsByTagName("coordinates").item(0).firstChild.nodeValue.split(",");}
      var point = new GLatLng(xy[1],xy[0]);
	  bounds.extend(point);

      }

     result.setlevelbybounds=true;
     result.bounds=bounds;

    var maxlevelforpreview = eval("maxlevels."+picType);
	var altitude=0;
	if (markerObject.getElementsByTagName("range").item(0)) {
		var altitude=markerObject.getElementsByTagName("range").item(0).firstChild.nodeValue;
		altitude=(altitude < minimal_alt) ? minimal_alt : altitude;
		altitude=(altitude > maximal_alt) ? maximal_alt : altitude;
		level=19-Math.log(altitude/minimal_alt)/Math.log(2);
		level=(level>maxlevelforpreview) ? maxlevelforpreview : level;
		level=Math.floor(level+1/2);
		result.level=level;
		result.levelfromfile=true
	}
	else {
		result.level=default_zl;
		result.levelfromfile=true;
	}
	result.levelbybbounds=(divObject.getBoundsZoomLevel(result.bounds)<=maxlevelforpreview)?divObject.getBoundsZoomLevel(result.bounds):maxlevelforpreview;
	//alert ("level1: "+ result.level + "; level2: "+divObject.getBoundsZoomLevel(result.bounds));
	if (result.level>divObject.getBoundsZoomLevel(result.bounds)) {
		result.level=divObject.getBoundsZoomLevel(result.bounds);
	}

    divObject.setCenter(result.bounds.getCenter(), (result.levelfromfile)?result.level:result.levelbybbounds);
    if (debug){
    }

    }
	return result;
}

function isDefined( variable)
{
    return (typeof(window[variable]) == "undefined")?  false: true;
}

function handleNoFlash(errorCode) {
      if (errorCode == FLASH_UNAVAILABLE) {
        alert("Error: Flash doesn't appear to be supported by your browser");
        return;
      }
    }

function showCameraView (xml, mapdiv, dontShowYawMarker){
  type="Camera";
          marker = xml.documentElement.getElementsByTagName("Camera");

          point = new GLatLng(marker[0].getElementsByTagName("latitude").item(0).firstChild.nodeValue, marker[0].getElementsByTagName("longitude").item(0).firstChild.nodeValue);
          yaw = marker[0].getElementsByTagName("tilt").item(0).firstChild.nodeValue;
          pitch = marker[0].getElementsByTagName("pitch").item(0).firstChild.nodeValue;
          zoom = marker[0].getElementsByTagName("zoom").item(0).firstChild.nodeValue;

          pov = {yaw: yaw, pitch: pitch, zoom: zoom};

          panoramaOptions = { latlng:point, pov: pov };
          myPano = new GStreetviewPanorama(mapdiv, panoramaOptions);
          if (!dontShowYawMarker) {
            currentLatLng = schematic.getCenter();
            initializeYawMarker();
          }
}

function showPlacemarkView (xml, file) {
        geoXml1 = new GGeoXml(file);

        map.enableDoubleClickZoom();
        map.addControl(new GLargeMapControl());
        //map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(0, 0), 16);
        map.setMapType(G_SATELLITE_MAP);
        map.addOverlay(geoXml1);

        //adsManager = new GAdsManager(map, "pub-2842926262793896", ads_opts);
        //adsManager.enable();

        //GE ADD
        	map.addMapType(G_SATELLITE_3D_MAP);
        	map.addControl(new GHierarchicalMapTypeControl());
          map.getEarthInstance(getEarthInstanceCB);

          var result2 = getMapProps (xml, map, "topicpreview");
        //END GE ADD
}

function showWorldMap (xml, file) {
        geoXml = new GGeoXml(file)
        map_small = new GMap2(document.getElementById("map_small"));
        map_small.enableContinuousZoom();
        map_small.enableDoubleClickZoom();
        map_small.setCenter(new GLatLng(0, 0), 2);
        map_small.setMapType(G_SATELLITE_MAP);
        map_small.addOverlay(geoXml);

        //map_small.enableScrollWheelZoom();

        GDownloadUrl(file, function(data) {
        var blueIcon = new GIcon(G_DEFAULT_ICON);
        blueIcon.image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/blank.png";
    		markerOptions = { icon:blueIcon };
          var xml = GXml.parse(data);
          if (xml.documentElement.getElementsByTagName("Camera").length) {
            type = "Camera";
            marker = xml.documentElement.getElementsByTagName("Camera");
            point = new GLatLng(marker[0].getElementsByTagName("latitude").item(0).firstChild.nodeValue, marker[0].getElementsByTagName("longitude").item(0).firstChild.nodeValue);
          } else {
            type = "Placemark";
            var markers = xml.documentElement.getElementsByTagName("Placemark");
            var bounds = new GLatLngBounds();
            for (var i = 0; i < markers.length; i++) {
              xy = markers[i].getElementsByTagName("coordinates").item(0).firstChild.nodeValue.split(",");
              var point = new GLatLng(xy[1],xy[0]);
                  bounds.extend(point);
              }

          };
          marker = xml.documentElement.getElementsByTagName(type);

          var result2 = getMapProps (xml, map_small, "smallmap", true);
          markerOnMap = new GMarker(point, markerOptions);
          GEvent.addListener(markerOnMap, "click", function() {
            /*myPano.setLocationAndPOV(point);
            schematic.setCenter(point);
            currentLatLng = point;*/
            showCameraView(xml, $('map'));
          });
          if (type != "Placemark") { map_small.addOverlay(markerOnMap);
            map_small.setZoom(map_small.getZoom()-6); }
          else {

          }


          });
}

function setMapsLayout(xml, file) {
  schematic = document.createElement('div');
  schematic.id='schematic';
  $('map').style.height = $('map').getHeight() -40 + 'px';
  $('map').style.marginTop = "3px";
  $('map_small').className = 'map_floated_left';
  $('maps_firstrow').appendChild(schematic);
  schematic = new GMap2(document.getElementById("schematic"));
  //schematic.enableContinuousZoom();
  //schematic.enableDoubleClickZoom();
    marker = xml.documentElement.getElementsByTagName("Camera");
    point = new GLatLng(marker[0].getElementsByTagName("latitude").item(0).firstChild.nodeValue, marker[0].getElementsByTagName("longitude").item(0).firstChild.nodeValue);
  schematic.setCenter(point, 14);
  svOverlay = new GStreetviewOverlay();
  schematic.addOverlay(svOverlay);
  showWorldMap (xml, file);
  loaded = true;

}


	    var fovMarker;
	    var fovIcon = new GIcon(G_DEFAULT_ICON);
	    var iconSize = 150;

  function initializeYawMarker() {
		panoClient = new GStreetviewClient();
		schematic.addControl(new GSmallMapControl());

		fovIcon.image = "http://earth-dots.ladela.com/demoicon.php?yaw=180";
		fovIcon.iconSize = new GSize(iconSize, iconSize);
		fovIcon.iconAnchor = new GPoint(iconSize/2, iconSize/2); //anchor in the middle
		fovIcon.shadow = null;
		fovMarker = new GMarker(currentLatLng, {icon: fovIcon, clickable: false})
		GEvent.addListener(myPano, "initialized", handleInitialized);
		GEvent.addListener(myPano, "yawchanged", handleYawChange);
		GEvent.addListener(myPano, "pitchchanged", placeFovMarker);
		GEvent.addListener(schematic,"click", function(overlay,latlng) {
          myPano.setLocationAndPOV(latlng);
          schematic.setCenter(latlng);
          currentLatLng = latlng;
        });

		return;
	}
	function handleInitialized(location) {
		currentLatLng = location.latlng;
		placeFovMarker(currentLatLng);
		return;
	}
	function handleYawChange(yaw){
		currentYaw = Math.round(yaw);
		placeFovMarker(currentLatLng);
		return;
	}
	function placeFovMarker(place){
	  schematic.setCenter(place);
		schematic.removeOverlay(fovMarker);
		fovIcon.image = "http://earth-dots.ladela.com/demoicon.php?yaw="+currentYaw+"&rand="+Math.random();
		fovMarker = new GMarker(place, {icon: fovIcon, clickable: false});
		schematic.addOverlay(fovMarker);
		return;
	}

