//<![CDATA[
    
// Google maps browser support
// http://local.google.com/support/bin/answer.py?answer=16532&topic=1499

// (c) Mikael Högqvist, ZIB 2006-2007

var timer = null;
var host = window.location.hostname + ':' + window.location.port;

var site_timer = null;
var site_markers = new Array();
var map = null;
var cloudMap=map;
var map_service = null;
var queryModel = new Model();	

function TelInfo(jsonJobs) {
    //	    var jsonJobs = map_service.jobs(hostname);

    var jobObj = eval('(' + jsonJobs + ')');
	    
    results = jobObj.results.bindings;

    div = document.createElement('div');
    div.setAttribute('id', 'maptab');

    table = document.createElement('table');
    div.appendChild(table);
    caption = document.createElement('caption');
    caption.appendChild(document.createTextNode('Details'));
    table.appendChild(caption);

    if(results.length == 0) {
        p = document.createElement('p');
        p.appendChild(document.createTextNode('No details found.'));
        div.appendChild(p);
        return div;
    }
        
    tr = document.createElement('tr');
    table.appendChild(tr);
        
    for(var i=0; i<jobObj.head.vars.length; i++) {
        th = document.createElement("th");
        tr.appendChild(th);
        th.appendChild(document.createTextNode(jobObj.head.vars[i]));            
    }
        
    for(var i=0; i<results.length; i++) {
        var tr_class = "even";
            
        if(i % 2 == 1)
            tr_class = "odd";
                  
        if(results[i].FilterType.value != undefined) {
            tr = document.createElement('tr');
            tr.setAttribute('class', tr_class);
            table.appendChild(tr);

            //            td = document.createElement('td');
            //var cam="default";
            //if(results[i].Camera != undefined) cam = results[i].Camera.value;
            //td.appendChild(document.createTextNode(cam));
            //tr.appendChild(td);
            
            td = document.createElement('td');
            td.appendChild(document.createTextNode(results[i].FilterType.value));
            tr.appendChild(td);              
        }

    }
        
    return div;
}

function showInfo(hostname, lat, lng) {
    var siteNode = document.getElementById('siteinfo');      
	  
    for(var i=0; i<siteNode.childNodes.length; i++) {
        siteNode.childNodes[i].innerHTML = ' ';
    }
	          	
    showHostInfo(hostname, lat, lng);
    showTelInfo(hostname);
}

function showTelInfo(hostname) {
    var siteNode = document.getElementById('jobinfo');

    jobInfoCb = function(json) {
        siteNode.appendChild(TelInfo(json));
    }

    queryModel.filters(hostname, jobInfoCb);	  
}



function updateTelescopes(jsonSites) {
    var errorNode = document.getElementById('errormsg');
    var siteNode = document.getElementById('siteinfo');
    var sites = null;

    // json output cannot deal properly with optional variables...
    //      var data = '({ "head" : { "vars" : [ "site" ] }, "results" : { "ordered" : false, "distinct" : false, "bindings" : [{ "site" : {"type": "uri", "value" : "http://siemens.babylon.cs.uni-potsdam.de"}},{ "site" : {"type": "uri", "value" : "http://photon.aip.de"}}] } })';

    //      siteObj = eval(data);      
    //      jsonSites = map_service.sites();

    if(!jsonSites)
        return
            siteObj = eval('(' + jsonSites + ')');

    //alert(jsonSites);
    //alert(siteObj.results.bindings.length);
	  
    //	  siteNode.firstChild.nodeValue = jsonSites;
    //map.removeOverlays();
    // this is not good, should only remove sites which was not part of the query results
    // and add unknown sites.
    if(site_markers.length > 0) {
        site_markers.splice(0, site_markers.length);
    }
	  
    results = siteObj.results.bindings;
    var coords = new Array();
    var hosts = new Array();
    var sites = {};
    var hostnames = new Array();

    // format on json return: [[sitename, lat, long], ...]
    for(var i=0;i<results.length;i++) {
        if(results[i].site != 'undefined' || results[i].site.value != "None") {
            //alert(results[i].latitude.value);
            // alert(siteObj[i][2]);

            var center = map.getCenter();
            var radius = 5.5;
            var angle = i*5.0;
            var lat = center.lat() + radius*Math.cos(angle);
            var lng = center.lng() + radius*Math.sin(angle);
            var lat_lng_str = "";
            var tmp_host = null;
          
            if(results[i].latitude != undefined 
               && results[i].longitude != undefined) {
                var small_radius = 0.05;
                var lat_tmp = lat = parseFloat(results[i].latitude.value);
                var lng_tmp = lng = parseFloat(results[i].longitude.value);
                //alert(lat.toString() + ":" + lng.toString() + " - "
                //+ lat_lng_str);
                //            coords.push(lat_lng_str);
            }
          
            tmp_host = new Host(results[i].site.value, lat, lng);
             if(tmp_host.toString() in sites) {
                 if(hostnames.indexOf(tmp_host.hostname) == -1) { //fkbreitl
                     sites[tmp_host.toString()].push(tmp_host);
                     hostnames.push(tmp_host.hostname); 
                     //alert(tmp_host);
                 } //fkbreitl
             } else {
                     sites[tmp_host.toString()] = new Array();
                     sites[tmp_host.toString()].push(tmp_host);
                     //                alert(tmp_host.hostname);
            }
            //store this host at the appropriate site
        } else {
            // dont do anything...
            //	  	  var center = the_map.getCenter();
            //	  	  var marker = new GMarker(new GLatLng(center.lat()-(i*0.50)+1.25, center.lng()+5.00));
            continue;
        }
    }

    // Create "telescope" marker icon
    var icon = new GIcon();
    icon.image = "../icons/telescope_icon.png";
    icon.iconAnchor = new GPoint(0, 55);
    icon.infoWindowAnchor = new GPoint(15, 25);
    // A site contains of a list of hosts with the same location
    // A host has a list of queues (Fork, PBS, LoadLeveler, ...) 

    for(var site in sites) {
        var location = site.split(":");
        var lat = location[0];
        var lng = location[1];
        var marker = new GMarker(new GLatLng(lat, lng), icon);
        //alert(sites[site][0].getName() + ": " + sites[site][0].toString());
        var pos = site_markers.push(new SiteMarker(marker, sites[site], lat, lng));
        //alert(site);
        if(pos > 0) {
            //alert(site_markers[pos-1].site.site);
            var siteMarkerObj = site_markers[pos-1];
            GEvent.addListener(siteMarkerObj.marker, "click", siteMarkerObj.callback);
            map.addOverlay(siteMarkerObj.marker);
        }
    }
}

function loadTMap() {
    map = new GMap2(document.getElementById("map"));
    //map = new GMap2(document.getElementById("map"), {mapTypes: [G_NORMAL_MAP, G_PHYSICAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP]});

    //adding dayligh, see http://www.daylightmap.com/get_your_own.php
    var daylight = new daylightMap.daylightLayer();
    daylight.addToMap(map);
    //daylight added

    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GOverviewMapControl());

    map.setCenter(new GLatLng(25.40, 320.07), 2); //Show world
    //map.setCenter(new GLatLng(45.40, 0.07), 4); //Show Stella and Robotel
    //map.setCenter(new GLatLng(52.405, 13.102), 20); //Zoom to Robotel

   //adding clouds, see http://www.daylightmap.com/get_your_own.php
   G_HYBRID_MAP.getMinimumResolution = G_SATELLITE_MAP.getMinimumResolution =
       G_NORMAL_MAP.getMinimumResolution = function() {return 1};
   G_HYBRID_MAP.getMaximumResolution = G_SATELLITE_MAP.getMaximumResolution =
       G_NORMAL_MAP.getMaximumResolution = function() {return 12};
   var clouds = new daylightMap.CloudLayer();
   cloudMap=map;         //global variable for cloud_api.js
   clouds.addToMap(map);
   //clouds added

   map.setMapType(G_HYBRID_MAP);

   queryModel.telescopes(updateTelescopes);

    //updateSites(map);  	  
    //site_timer = setInterval(updateSites, 600000);
    // create a marker for each site and place it at the position
    // if no position is found then the marker should be placed at
    // a standard position outside germany's border.
    //      var marker = new GMarker(map.getCenter());
    //      GEvent.addListener(marker, "click", clickMarker);
      
    //      map.addOverlay(marker);
    //        marker.openInfoWindowTabsHtml(infoTabs);
		
}
function loadT() {
    if (GBrowserIsCompatible()) {
      	loadTMap();
    }
}
		
//]]
