var LOAD_STATE = 1;
var REINIT_STATE = 2;

var CHEMIN_BDF="bdf/fr/";
var CHEMIN_MARQUEURS="http://bdis.exemole.fr/v1_4/_rsc/marqueurs/";
var selectionStructures = null;
var ficheEnCours = -1;
var titreEnCours = "";
var map, layer, markers,osmLayer, mapnikLayer, yahooLayer, ficheEnCoursMarkers,rechercheMarkers,ficheEnCoursMarker=null;
var rechercheMarkerArray = new Array();
/*OpenLayers.Popup.WIDTH = 160;
OpenLayers.Popup.HEIGHT = 400;
OpenLayers.Popup.COLOR = "white";*/
OpenLayers.Popup.COLOR = "transparent";


/* Initialisation générale ----------------------------------------------------------- */

function initialisation() {
  initDialogDiv("SUGGERER","Suggérer une initiative");
  initDialogDiv("COMMENTAIRE","Envoyer un commentaire");
  initPied();
  initScrutariDialog();
  initFicheDialog();
  initCarte();
  initBoutons();
  
  $("#ENTETE_OK").click(recherche);

  $("#RECHERCHE_CHAMP").keydown(function(event) {
    if (event.keyCode == 13) {
      recherche();
    }
  });
}
 
 /* Fonctions d'initialisation  ----------------------------------------------------------- */
 
function initBoutons() {
 initBouton("INFORMATION", 2);
 initBouton("AIDE", 3);
 $("#ENTETE_INSCRIPTION").click(function() {
    var w2 = window.open("http://bdis.exemole.fr/saisie-bdis/index.html","inscription","width=990,height=650,resizable=yes,menubar=yes,status=yes,scrollbars=yes");
    w2.focus();
  });
  
  $("#ENTETE_" + "SUGGERER").click(function() {
    affichePageSuggerer();
  });
 
}

function initDialogDiv(id, lib) {
 var dialogDiv = "<div id=\"FENETRE_PAGE_" + id + "\" title=\"" + lib + "\"></div>";
  $("body").append(dialogDiv);
}
 
function initBouton(entete_key,lieu_id) {
  var url = CHEMIN_BDF + "pages/motcle-utilisationpage-" + lieu_id + ".xml";
  $.get(url, "", function (data) {finInitBouton(data, entete_key, lieu_id);}, "xml");
}
  
function finInitBouton(data, entete_key, lieu_id) {
  var page = data.getElementsByTagName("page")[0];
  var lib = page.firstChild.nodeValue;
  var id = page.getAttribute("id");
  var jqEl = $("#ENTETE_" + entete_key);
  jqEl.attr("title",lib);
  var dialogDiv = "<div id=\"FENETRE_PAGE_" + id + "\" title=\"" + lib + "\"></div>";
  $("body").append(dialogDiv);
  jqEl.click(function() {affichePageSpeciale(id);});
}

 
 function initCarte() {
  var navigationControl = new OpenLayers.Control.Navigation({zoomWheelEnabled : false});
  var zoomControl = new OpenLayers.Control.PanZoomBar();
  var attributionControl = new OpenLayers.Control.Attribution();
  map = new OpenLayers.Map("BLOC_CARTE", {
  numZoomLevels: 19,
  maxResolution: 156543.0399,
  units: 'm',
  controls: [navigationControl,zoomControl, attributionControl],
  projection: new OpenLayers.Projection("EPSG:900913"),
  displayProjection: new OpenLayers.Projection("EPSG:4326")
  });
  
  osmLayer = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
  map.addLayer(osmLayer);
  
  mapnikLayer = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
  map.addLayer(mapnikLayer);
  
  /*yahooLayer = new OpenLayers.Layer.Yahoo( "Carte Yahoo");
  map.addLayer(yahooLayer);

  layer = new OpenLayers.Layer.WMS( "Carte OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
  map.addLayer(layer);*/
  markers = new OpenLayers.Layer.Markers( "Toutes les initiatives" );
  map.addLayer(markers);
  ficheEnCoursMarkers = new OpenLayers.Layer.Markers( "Sélection en cours" );
  map.addLayer(ficheEnCoursMarkers);
  map.setCenter(getLonLatObject(1.40, 46.62),5);
  for(var struc in structures) {
    addMarker(structures[struc], markers,"normal");
  }
  rechercheMarkers = new OpenLayers.Layer.Markers( "Résultat de la recherche" );
  map.addLayer(rechercheMarkers);
  rechercheMarkers.setVisibility(false);
  
  map.addControl(new OpenLayers.Control.LayerSwitcher());
 }
 
 function initPied() {
 var url = CHEMIN_BDF + "pages/motcle-utilisationpage-1.xml";
 var xmlHttpRequest  = $.get(url, "", finInitPied, "xml");
 }
 
 function finInitPied(data,textStatus) {
 var pageArray = data.getElementsByTagName("page");
 var htmlText = "";
 for(var i = 0; i < pageArray.length; i++) {
 if (i > 0) {
 htmlText += " &middot; ";
}
var lib = pageArray[i].firstChild.nodeValue;
var id = pageArray[i].getAttribute("id");
htmlText += "<span onclick=\"affichePageSpeciale(" + id + ")\">";
htmlText += lib;
htmlText += "</span>";

var dialogDiv = "<div id=\"FENETRE_PAGE_" + id + "\" title=\"" + lib + "\"></div>";
$("body").append(dialogDiv);

 }
 $("#PIED_LIENS").html(htmlText);
 }
 
 function getLonLatObject(lon, lat) {
  return new OpenLayers.LonLat(lon,lat).transform(map.displayProjection,  map.projection);
 }
 
 /* Fonctions liées à la carte ----------------------------------------------------------- */
 
 function addMarker(struc, layer, iconType) {
  
  var feature = new OpenLayers.Feature(layer, getLonLatObject(struc.lon,struc.lat));
  feature.data.icon = getMarkerIcon(iconType);
  feature.data.popupContentHTML = "<div class=\"" + getClassName(iconType) + "\"><div class=\"bdis_Popup_haut\"></div><div class=\"bdis_Popup_centre\"><div>" + struc.nom + "</div></div><div class=\"bdis_Popup_bas\"></div></div>";
  feature.popupClass = OpenLayers.Popup.Bdis;
  //feature.popupClass = OpenLayers.Popup.FramedCloud;
  //feature.popupClass = OpenLayers.Popup.Anchored;
  var marker = feature.createMarker();
  layer.addMarker(marker);
  marker.events.register("mouseover", feature, detailNom);
  marker.events.register("mouseout", feature, cacheNom);
  marker.events.register("mousedown", struc, afficheFicheViaCarte);
  return marker;
 // markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(struc.lon,struc.lat)));
 }
 
 function getClassName(iconType) {
  if (iconType == "selection") {
    return "rouge";
  } else if (iconType == "recherche") {
    return "bleu";
  } else {
    return "orange";
  }
 }
 
 function getMarkerIcon(iconType) {
  var name ="marqueur-" + getClassName(iconType);
  var url =  CHEMIN_MARQUEURS + name + ".png";
  var size = new OpenLayers.Size(22, 33);
  var calculateOffset = function(size) {
          return new OpenLayers.Pixel(-(size.w/2), -size.h);
        };
  return new OpenLayers.Icon(url, size, null, calculateOffset); 
 }
 
 function detailNom(evt) {
  var popup = this.popup;
  var visible = true;
  if (popup == null) {
    var popup = this.createPopup(false);
    popup.autoSize = true;
    /*popup.displayClass = "bdis_Popup1";
    popup.contentDisplayClass = "bdis_Popup2";*/
    //popup.setSize(OpenLayers.Size(160,300));
  }
  else if (popup.visible()) {
    popup.hide();
    visible = false;
    map.removePopup(popup);
  } else {
    popup.show();
  }
  if (visible) {
    map.addPopup(popup, true);
  }
  OpenLayers.Event.stop(evt);
 }
 
 function cacheNom(evt) {
  var popup = this.popup;
  if (popup != null) {
      if (popup.visible()) {
      popup.hide();
      visible = false;
      map.removePopup(popup);
    }
  }
  OpenLayers.Event.stop(evt);
 }
 
 function afficheFicheViaCarte(evt) {
  var id = this.id;
  afficheFiche("corpus_structure/fiche-structure-" + id + ".html");
  OpenLayers.Event.stop(evt);
 }
 
 
 /* Initialisation des fenêtres de dialogue --------------------------------------------------------*/
  
 function initScrutariDialog() {
  var txt = "<div id=\"FENETRE_SCRUTARI\" title=\"Recherche\"><div id=\"CONTENU_SCRUTARI\"></div></div>";
    $("body").append(txt);
    $("#FENETRE_SCRUTARI").dialog({
      bdisType: "f1",
      bdisBoutons: null,
      autoOpen: false,
      width: 250,
      height: 250,
      position: [300,50],
      beforeclose: function(event,ui) {
        var jq = $(this).parent();
        var top = jq.css("top");
        var left = jq.css("left");
        var position = new Array();
        position[1] = Number(top.substring(0, top.length-2));
        position[0] = Number(left.substring(0, left.length-2));
        $(this).dialog("option","position", position);
      }
    });
 }
 
 function initFicheDialog() {
  var txt = "<div id=\"FENETRE_FICHE\" title=\"Initiative\"><div id=\"CONTENU_FICHE\"></div></div>";
  $("body").append(txt);
  $("#FENETRE_FICHE").dialog({
      bdisType: "f1",
      bdisBoutons: [
        {id: "loupe", titre: "Centrer sur l’initiative", click: function(event){centreSurFiche()} },
        {id: "commentaire", titre: "Envoyer un commentaire sur l’initiative", click: function(event){affichePageCommentaire()}}/*,
        {id: "imprimer", titre: "Imprimer", click: function(event){imprimerFiche()}}*/
      ],
      autoOpen: false,
      width: 250,
      height: 350,
      position: [50,200],
      beforeclose: function(event,ui) {
        var jq = $(this).parent();
        var top = jq.css("top");
        var left = jq.css("left");
        var position = new Array();
        position[1] = Number(top.substring(0, top.length-2));
        position[0] = Number(left.substring(0, left.length-2));
        $(this).dialog("option","position", position);
      }
    });
 }
 

function recherche() {
var sequence = $("#RECHERCHE_CHAMP")[0].value;
sequence = $.trim(sequence);
if (sequence.length == 0) return;
selectionStructures = new Object();
var url = "resultat.php?recherche="+encodeURI(sequence);
var scrutariEl = $("#CONTENU_SCRUTARI");
scrutariEl.hide("fast");
scrutariEl.empty().append("Recherche en cours : « " + sequence + " » ...");
if(!($("#FENETRE_SCRUTARI").dialog("isOpen"))) {
  $("#FENETRE_SCRUTARI").dialog("open");
}
else {
  scrutariEl.show("fast");
}
scrutariEl.load(url, finRecherche);
}

function checkScrutariDialog() {
  if(!($("#FENETRE_SCRUTARI").dialog("isOpen"))) {
  $("#FENETRE_SCRUTARI").dialog("open");
  }
  $("#CONTENU_SCRUTARI").show();
}

function afficheFiche(href) {
  majFicheEnCours(href);
  //$("#FENETRE_FICHE").dialog('option', 'title', "...");
  $("#CONTENU_FICHE").empty().load(CHEMIN_BDF + href, finFiche);
  if(!($("#FENETRE_FICHE").dialog("isOpen"))) {
    $("#FENETRE_FICHE").dialog("open");
  }
}

function finFiche() {
/*var titre = $("#BLOC_FICHESIMPLIFIEE_TITRE").attr("title");
$("#FENETRE_FICHE").dialog('option', 'title', titre);*/
$("#CONTENU_FICHE").scrollTop(0);
$("#CONTENU_FICHE a").attr("target","_new");
titreEnCours = $("h1.TITRE").text();
$("#CONTENU_FICHE").append("<div id=\"LIEN_FICHE\" onclick=\"ficheComplete()\">[fiche complète]</div>");
}

function majFicheEnCours(href) {
  var idx1 = href.lastIndexOf("-");
  var idx2 = href.lastIndexOf(".");
  ficheEnCours = href.substring(idx1+1, idx2);
  if (ficheEnCoursMarker != null) {
    ficheEnCoursMarkers.removeMarker(ficheEnCoursMarker);
    ficheEnCoursMarker = null;
  }
  var struc = structures["s" + ficheEnCours];
  if (struc) {
    ficheEnCoursMarker =  addMarker(struc,ficheEnCoursMarkers, "selection");
  }
}

function nonDisponible() {
alert("Fonction pas encore disponible");
}

function ficheComplete() {
var href = CHEMIN_BDF + "complet_structure/fiche-structure-" + ficheEnCours + ".html";
var w2 = window.open(href,"fichecomplete","width=600,height=600,resizable=yes,menubar=yes,status=yes,scrollbars=yes");
w2.focus();
}

function centreSurFiche() {
var struc = structures["s" + ficheEnCours];
if (struc) {
map.setCenter(getLonLatObject(struc.lon, struc.lat),11);
}
}

function finRecherche() {
  for (var i = 0; i < rechercheMarkerArray.length; i++) {
    rechercheMarkers.removeMarker(rechercheMarkerArray[i]);
  }
  var count = 0;
  var tempArray = new Array();
  for(var nom in selectionStructures) {
    var struc = structures[nom];
    if (struc) {
      var marker = addMarker(struc, rechercheMarkers,"recherche");
      tempArray[count] = marker;
      count++;
    }
  }
  rechercheMarkerArray = tempArray;
  if (count > 0) {
    markers.setVisibility(false);
    rechercheMarkers.setVisibility(true);
    var extent = rechercheMarkers.getDataExtent();
    //alert(extent.toString());
    
    var zoom = rechercheMarkers.getZoomForExtent(extent);
    if (zoom > 5) zoom = zoom -1;
    if (zoom > 11) zoom = 11;
    //alert("Zoom = " + zoom);
    map.setCenter(extent.getCenterLonLat(),zoom);
    map.raiseLayer(ficheEnCoursMarkers,1);
  }
}

 /* Fonctions liées aux pages spéciales (liens du pied, aide, information)  ----------------------------------------------------------- */

function affichePageSpeciale(id) {
var url=CHEMIN_BDF + "pages/fiche-pagesite-" + id + ".html";
affichePage(id, url, 250, 350);
}

function affichePage(id, url, largeur, hauteur, callback) {
  var jqEl = $("#FENETRE_PAGE_" + id);
  if (!jqEl[0].hasChildNodes()) {
    jqEl.dialog({
    bdisType: "f1",
    bdisBoutons: null,
    width: largeur,
    height: hauteur,
    position: [100,200]/*,
    buttons: { "Ok": function() { $(this).dialog("close"); } }*/ });
    jqEl.load(url,callback);
    return LOAD_STATE;
  }
  else {
    jqEl.dialog("open");
    return REINIT_STATE;
  }
}

function affichePageCommentaire() {
  var state = affichePage("COMMENTAIRE", "page_commentaire.html",350,340,finInitCommentaire);
  if (state == REINIT_STATE) majInitiative();
  $("#FENETRE_PAGE_COMMENTAIRE").bind('dialogbeforeclose', reinitPageCommentaire);
}

function affichePageSuggerer() {
affichePage("SUGGERER", "page_suggerer.html",350,400,finInitSuggerer);
$("#FENETRE_PAGE_SUGGERER").bind('dialogbeforeclose', reinitPageSuggerer);
}

function reinitPageCommentaire() {
  $("#formcommentaire_resultat").hide();
  var jqEl = $("#formcommentaire");
  var jqList = jqEl.find(".JQ_REINIT");
  for(var i = 0; i < jqList.length; i++) {
    jqList[i].value = "";
  }
  jqEl.show();
  return true;
}

function reinitPageSuggerer() {
$("#formulaire_resultat").hide();
var jqEl = $("#formulaire");
var jqList = jqEl.find(".JQ_REINIT");
for(var i = 0; i < jqList.length; i++) {
jqList[i].value = "";
}
jqEl.show();
return true;
}

function closeDialog(id) {
$("#FENETRE_PAGE_" + id).dialog("close");
}

function finInitSuggerer() {
    $("#formulaire").validationEngine({
        success :  false,
        inlineValidation: true, 
        ajaxSubmit: true,
        ajaxSubmitFile: "page_suggerer.php",
        ajaxSubmitExtraData: "sujet=[BDIS] Suggestion",
        promptPosition: "bottomLeft", // OPENNING BOX POSITION, IMPLEMENTED: topLeft, topRight
        blocReponseId: "formulaire_resultat"
       });
}

function finInitCommentaire() {
  $("#formcommentaire").validationEngine({
      success :  false,
      inlineValidation: true, 
      ajaxSubmit: true,
      ajaxSubmitFile: "page_commentaire.php",
      ajaxSubmitExtraData: "sujet=[BDIS] Commentaire",
      promptPosition: "bottomLeft", // OPENNING BOX POSITION, IMPLEMENTED: topLeft, topRight
      blocReponseId: "formcommentaire_resultat"
      });
  majInitiative();
}

function majInitiative() {
  $("#formcommentaire_initiative_idcorpus").attr("value",ficheEnCours);
  $("#formcommentaire_initiative_titre").attr("value",titreEnCours);
  var jqEl = $("#formcommentaire_intituletitre");
  jqEl.empty();
  jqEl.append(titreEnCours);
}



/* Lancement de l'initialisation -----------------------------------------------------------*/
window.onload = initialisation;
