function populateContinents(data) {
    if(!data) {
    } else {
        removeChildNodes(document.getElementById('continent'));
        
        for(i in data.records) {
            var continent = data.records[i];
            var option = document.createElement('option');
            option.setAttribute('value',continent.uuid);
            var txt = document.createTextNode(continent.representation_L10n);
            option.appendChild(txt);
            document.getElementById('continent').appendChild(option);
        }
    }
}

function populateRegions(data) {
	if(!data) {
    } else {
        removeChildNodes(document.getElementById('region'));
        
        for(i in data.records) {
            var region = data.records[i];
            var option = document.createElement('option');
            option.setAttribute('value',region.uuid);
            var txt = document.createTextNode(region.representation_L10n);
            option.appendChild(txt);
            document.getElementById('region').appendChild(option);
        }
    }
}

function populateCountries(data) {
	removeChildNodes(document.getElementById('country'));
    
    for(i in data.records) {

        var country = data.records[i];
        var option = document.createElement('option');
        option.setAttribute('value',country.uuid);
        var txt = document.createTextNode(country.representation_L10n);
        option.appendChild(txt);
        document.getElementById('country').appendChild(option);
    }

}

function removeChildNodes(control) {
    while (control.childNodes[0]) {
    	control.removeChild(control.childNodes[0]);
    }
}

function continentOnChange(event) {
 
  var regionParams = "includes=includes&atLevel=cd7771b2-7427-4a01-9057-7d7a897dddaf&includesLevel=38efa5fd-d7f0-451c-9de9-e6cce41e2225";
  var countryParams = "includes=includes&atLevel=cd7771b2-7427-4a01-9057-7d7a897dddaf&includesLevel=25b563b6-6a6c-401b-b090-c9498886c50b";
  var continent = document.getElementById('continent');
  for(var i = 0; i < continent.options.length; i++){
    if(continent.options[i].selected){
      regionParams = regionParams + '&namedArea=' + continent.options[i].value;
      countryParams = countryParams + '&namedArea=' + continent.options[i].value;
    }
  }

$.ajax({
  url: "/term",
  data: regionParams,
  beforeSend: function(request) {
    request.setRequestHeader("Accept", "text/json");
  },
  success: function(data) {
    if(data.exception) {
      alert(data.exception.localizedMessage);
    } else {
      populateRegions(data);
    } 
  },
  dataType: 'json'
});
	
$.ajax({
  url: "/term",
  data: countryParams,
  beforeSend: function(request) {
    request.setRequestHeader("Accept", "text/json");
  },
  success: function(data) {
    if(data.exception) {
      alert(data.exception.localizedMessage);
    } else {
      populateCountries(data);
    } 
  },
  dataType: 'json'
});

}

function regionOnChange(event) {
  var continentParams = "partOf=partOf&atLevel=38efa5fd-d7f0-451c-9de9-e6cce41e2225&partOfLevel=cd7771b2-7427-4a01-9057-7d7a897dddaf";
  var countryParams = "includes=includes&atLevel=38efa5fd-d7f0-451c-9de9-e6cce41e2225&includesLevel=25b563b6-6a6c-401b-b090-c9498886c50b";
  var region = document.getElementById('region');
  for(var i = 0; i < region.options.length; i++){
    if(region.options[i].selected){
      continentParams = continentParams + '&namedArea=' + region.options[i].value;
      countryParams = countryParams + '&namedArea=' + region.options[i].value;
    }
  }

$.ajax({
  url: "/term",
  data: continentParams,
  beforeSend: function(request) {
    request.setRequestHeader("Accept", "text/json");
  },
  success: function(data) {
    if(data.exception) {
      alert(data.exception.localizedMessage);
    } else {
      populateContinents(data);
    } 
  },
  dataType: 'json'
});
	
$.ajax({
  url: "/term",
  data: countryParams,
  beforeSend: function(request) {
    request.setRequestHeader("Accept", "text/json");
  },
  success: function(data) {
    if(data.exception) {
      alert(data.exception.localizedMessage);
    } else {
      populateCountries(data);
    } 
  },
  dataType: 'json'
});

}

function countryOnChange(continent) {
  var continentParams = "partOf=partOf&atLevel=25b563b6-6a6c-401b-b090-c9498886c50b&partOfLevel=cd7771b2-7427-4a01-9057-7d7a897dddaf";
  var regionParams = "partOf=partOf&atLevel=25b563b6-6a6c-401b-b090-c9498886c50b&partOfLevel=38efa5fd-d7f0-451c-9de9-e6cce41e2225";
  var country = document.getElementById('country');
  for(var i = 0; i < country.options.length; i++){
    if(country.options[i].selected){
      continentParams = continentParams + '&namedArea=' + country.options[i].value;
      regionParams = regionParams + '&namedArea=' + country.options[i].value;
    }
  }

$.ajax({
  url: "/term",
  data: continentParams,
  beforeSend: function(request) {
    request.setRequestHeader("Accept", "text/json");
  },
  success: function(data) {
    if(data.exception) {
      alert(data.exception.localizedMessage);
    } else {
      populateContinents(data);
    } 
  },
  dataType: 'json'
});
	
$.ajax({
  url: "/term",
  data: regionParams,
  beforeSend: function(request) {
    request.setRequestHeader("Accept", "text/json");
  },
  success: function(data) {
    if(data.exception) {
      alert(data.exception.localizedMessage);
    } else {
      populateRegions(data);
    } 
  },
  dataType: 'json'
});
}

function setUpThumb(node,c) {
  var img = $(node).find('img')[0];
  var container = c;
  var mainImageNode = $(container).children('div[class=image-container]')[0];
  var a = $(node).children('a')[0];
  a.onclick = function(event) {
    var nodes = $(container).find('ul[class=gallery] li a');
    for (var i=0; i< nodes.length; i++) {
      if(nodes[i] != event.target && nodes[i] != event.target.parentNode) {
        $(nodes[i]).removeClass('selected');
      } else {
        $(nodes[i]).addClass('selected');
      }
    }
    mainImageNode.innerHTML = "<a href='" + '/media/' + img.id + "'><img src='" + $(img).attr('longdesc') + "'></img></a>"
                    + "<div class='page-block'><a href='" + '/media/' + img.id + "'>" + img.title + "</a></div>";
    return false;
  };
}

var map, selectControl, selectedFeature;

function onPopupClose(evt) {
          selectControl.unselect(selectedFeature);
      }
      
      function onFeatureSelect(feature) {
        selectedFeature = feature;
        popup = new OpenLayers.Popup.FramedCloud("GBIF Popup",
                             feature.geometry.getBounds().getCenterLonLat(),
                             new OpenLayers.Size(200,200),
                             "<div class='map-popup' style='font-size: 0.8em; font-family:sans-serif; color: black'><h2>" + feature.attributes.institutionCode + feature.attributes.catalogNumber + ": " + feature.attributes.identifiedTo + "</h2>"+
                             " " + feature.attributes.collector + ", " + feature.attributes.collectionCode  +
                             ". " + feature.attributes.locality  +
                             " <a href=\'" + feature.attributes.link + "\'>more</a></div>",
                             null, true, onPopupClose);
        feature.popup = popup;
        map.addPopup(popup);
     }
     
     function onFeatureUnselect(feature) {
       map.removePopup(feature.popup);
       feature.popup.destroy();
       feature.popup = null;
     }

      
function foo(data){
  if(!data) {
  } else {
    var alternativeImage = document.getElementById('distribution-alternative');
    $(alternativeImage).addClass('hidden');
    var base_layer = new OpenLayers.Layer.WMS("OpenLayers WMS","http://labs.metacarta.com/wms/vmap0",{layers: 'basic'}, {maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),isBaseLayer: true,displayInLayerSwitcher: false });
    map = new OpenLayers.Map('distribution',{maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90), maxResolution: 0.72, restrictedExtent: new OpenLayers.Bounds(-180, -90, 180, 90), projection: new OpenLayers.Projection("EPSG:4326")});
    map.addLayers([base_layer]);

    for(i in data.layers) {
        var layerName = "topp:tdwg_level_" + data.layers[i].tdwg.substr(4,1);
                
        var layer = new OpenLayers.Layer.WMS.Untiled("layer " + (i + 1), "http://edit.csic.es/geoserver/wms", {layers: layerName, transparent:"true", format:"image/png"}, {maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90), isBaseLayer: false, displayInLayerSwitcher: false});
        layer.params.SLD = 'http://edit.csic.es/v1/sld/'+ data.layers[i].sld;       
        map.addLayers([layer]);
     }

     

     var bbox = data.bbox.split(",");
     map.zoomToExtent(new OpenLayers.Bounds(parseInt(bbox[0]),parseInt(bbox[1]),parseInt(bbox[2]),parseInt(bbox[3])));
     
  }
}

function addGbifSpecimensToMap(response) {
  if(response.success()) {
    if(response.features && response.features.length > 0) {
      var gbif_specimens = new OpenLayers.Layer.Vector('Specimens from GBIF');
      gbif_specimens.addFeatures(response.features);
                   
      map.addLayers([gbif_specimens]); 
      selectControl = new OpenLayers.Control.SelectFeature(gbif_specimens, {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
      map.addControl(selectControl);
      selectControl.activate();
      map.addControl(new OpenLayers.Control.LayerSwitcher());
    }
  } else {
    //alert("failure");
  }
}
