
var options = {};

/* Google maps */
var gs_map;
/* My GPoly */
var gs_poly = null;
/* Area repport */
var gs_area_cell;
var gs_rx_cell;
var gs_ry_cell;
var gs_nx_cell;
var gs_ny_cell;

var gs_area_table;

var gs_geoss_servlet_url = "/GEOSSCONCEPT/servlet";

var resconv = { 'small': 512, 'medium' : 1024, 
		    'large' : 2048, 'choose': 512};

var gs_in_progress = false;

jQuery(document).ready(function() {
	jQuery('#container-tabs').tabs({ disabled: [5] });
	gs_initialize ();
    });

function gs_select_type_large()
{
    document.getElementById(3).style.display = "block";
    document.getElementById(1).style.display = "none";
    document.getElementById(2).style.display = "none";
}
	
function gs_select_type_small()
{
    document.getElementById(2).style.display = "block";
    document.getElementById(1).style.display = "none";
    document.getElementById(3).style.display = "none";
}

function gs_select_type_medium()
{
    document.getElementById(1).style.display = "block";
    document.getElementById(2).style.display = "none";
    document.getElementById(3).style.display = "none";
}

function gs_select_type_vide()
{
    document.getElementById(3).style.display = "none";
    document.getElementById(2).style.display = "none";
    document.getElementById(1).style.display = "none";   
}

function gs_affiche(value)
{
    if (value=='choose')
	{
	    gs_select_type_vide();
	}
    else if(value=='small')
	{
	    gs_select_type_small();
	}
    else if(value=='medium')
	{
	    gs_select_type_medium();
	}
    else if(value=='large')
	{
	    gs_select_type_large();
	}  
}

/* Ajout Lionel pour la fonction du boutton remove shape*/
function gs_removeShape() {
    gs_poly = null;
    gs_map.clearOverlays();
    /*GEvent.removeListener("featureTable_");*/
    document.getElementById("featuretable").style.visibility = "hidden";
}

function gs_select(buttonId) {
    document.getElementById("hand_b").className="unselected";
    document.getElementById("shape_b").className="unselected";
    document.getElementById("remove_b").className="unselected";
    /*  document.getElementById("line_b").className="unselected";
	document.getElementById("placemark_b").className="unselected";*/
    document.getElementById(buttonId).className="selected";
}

function gs_stopEditing() {
    gs_select("hand_b");
}

function gs_getColor(named) {
    return "red";
}

/* met a jour la surface quand une line du polygone change */
function gs_poly_onupdateline() {
    var area = gs_poly.getArea();
    this.innerHTML = "Area Of Interest " + (Math.round(area / 10000) / 100) + "km<sup>2</sup>";
    var r = gs_result_info();
/*    gs_rx_cell.innerHTML = Math.round(r.Rx); */
/*    gs_ry_cell.innerHTML = Math.round(r.Ry); */
/*    gs_nx_cell.innerHTML = Math.floor(r.nx); */
/*    gs_ny_cell.innerHTML = Math.floor(r.ny); */
}

function gs_startShape() {
    /* Seulement un seul polygone est permit */
    gs_removeShape();
    gs_select("shape_b");
    gs_poly = new GPolygon([], "red", 2, 0.7, "red", 0.2);
    gs_startDrawing("Area Of Interest", "red");
}

function gs_result_info () {
    var info = { };
    var bbox = gs_poly.getBounds();
    var size = new GLatLng(bbox.getNorthEast().lat() -
			   bbox.getSouthWest().lat(),
			   bbox.getNorthEast().lng() -
			   bbox.getSouthWest().lng());

    var center = bbox.getCenter();

    var delta;

    /* trouve le coté le plus long */
    if (size.lat() > size.lng()) {
	delta = size.lat() / (resconv[document.fm.resolution.value]);
    } else {
	delta = size.lng() / (resconv[document.fm.resolution.value]);
    }
    
    var pi = 3.1415927;
    var Rt = 6378000.0;
    var Ry = (Rt * delta * pi * Math.cos((center.lat() * pi) / 180.0)) / 180.0;
    var Rx = (Rt * delta * pi) / 180.0;
    var ny = size.lat() / delta;
    var nx = size.lng() / delta;
    
    return {Rx : Rx, Ry : Ry, nx : nx, ny : ny};
}


/* Affiche les les informations de la surface */
function gs_update_show_area_cell(name, color) {
    gs_area_table.deleteRow(0);
    var row = gs_area_table.insertRow(0);
    var colorCell = document.createElement("td");
    row.appendChild(colorCell);
    colorCell.style.backgroundColor = color;
    colorCell.style.width = "1em";
    var nameCell = document.createElement("td");
    row.appendChild(nameCell);
    nameCell.innerHTML = name;
    var descriptionCell = document.createElement("td");
    row.appendChild(descriptionCell);
    document.getElementById("featuretable").style.visibility = "visible";
    var r = gs_result_info();
    return {desc: descriptionCell, color: colorCell};
}

function gs_poly_onclick(latlng, index) {
    if (typeof index == "number") {
	gs_poly.deleteVertex(index);
    } else {
	gs_area_cell.color.style.backgroundColor = "red";
	gs_poly.setStrokeStyle({color: "red", weight: 4});
    }
}

function gs_poly_endline () {
    gs_select("hand_b");
    gs_area_cell = gs_update_show_area_cell(name, "red");
    GEvent.bind(gs_poly, "lineupdated", gs_area_cell.desc,
		gs_poly_onupdateline);
    GEvent.addListener(gs_poly, "click", gs_poly_onclick);
}

function gs_startDrawing(name) {
    gs_map.addOverlay(gs_poly);
    gs_poly.enableDrawing(options);
    gs_poly.enableEditing({onEvent: "mouseover"});
    gs_poly.disableEditing({onEvent: "mouseout"});
    GEvent.addListener(gs_poly, "endline", gs_poly_endline);
}

function gs_initialize() {
    if (GBrowserIsCompatible()) {
	gs_map = new GMap2(document.getElementById("map"));
	gs_map.setMapType(G_HYBRID_MAP);
	gs_map.setCenter(new GLatLng(44.56, 3.55), 5);
	gs_map.addControl(new GSmallMapControl());
	gs_map.addControl(new GMapTypeControl());
	gs_map.enableScrollWheelZoom();
	gs_map.clearOverlays();
	gs_area_table = document.getElementById("featuretable");
	gs_area_cell = gs_area_table.insertRow(0);
	gs_rx_cell = document.getElementById("gsRxCell");
	gs_ry_cell = document.getElementById("gsRyCell");
	gs_nx_cell = document.getElementById("gsNxCell");
	gs_ny_cell = document.getElementById("gsNyCell");
	gs_select("hand_b");
    }
}

function MM_popupMsg(msg) { //v1.0
    alert(msg);
}

function gs_waitMessageOnResultTab () {
    document.getElementById("content-result").innerHTML = "";
    document.getElementById("content-result").innerHTML =
        "<div>"
	+"<i> ... Geoss Web Service: Computation in Progress ... </i>"
	"</div";
}

function gs_outputResult (data) {
    document.getElementById("content-result").innerHTML = data;
    gs_in_progress = false;
}


function gs_call_webservice () {
    if (gs_in_progress == false) {
	jQuery(document.getElementById("container-tabs")).enableTab(5);
	jQuery(document.getElementById("container-tabs")).triggerTab(5);
	
	
	if (document.fm.resolution.value == 'choose') {
	    alert("You must select a resolution");
	    return;
	}
	
	if (gs_poly == null) {
	    alert("You must select a region");
	    return;
	}
	
	var request = { };
	gs_waitMessageOnResultTab ();
	
	var selected = new Array();
	var j = 0;
	for (var i in document.fm.layers.options) {
	    if (document.fm.layers.options[i].selected == true) {
		selected[j++] = document.fm.layers.options[i].value;
	    }
	}
	var bbox = gs_poly.getBounds();
	request.layers = selected.toString();
	request.resolution = resconv[document.fm.resolution.value];
	request.bbox =
	    bbox.getSouthWest().lng().toString()
	    + "," + bbox.getSouthWest().lat().toString()
	    + "," + bbox.getNorthEast().lng().toString()
	    + "," + bbox.getNorthEast().lat().toString();
	
	gs_in_progress = true;
	jQuery.get(gs_geoss_servlet_url, request, gs_outputResult);
    } else {
	alert ("A request is in progress");
    }
}
