// ****************
// Objet DataSource
// ****************

//Source = new DS("input_data",true,";");
//Source.addline("totototo");
//Source.setcontenu(exemple_tab);
//Source.vider;
//Source.checkcoherence(); verif si nbchamps de chaque ligne = nbchamps ligne 0 (retourne true ou false)
//alert(Source.validated); renvoie true ou false (validation OK)
//alert(Source.numlignes);
//alert(Source.separateur);
//alert(Source.autoload);
//alert(Source.getcontenu);
//alert(Source.numchamps(2)); nb champs de la ligne 3 (index 2)

// -> function de creation de l'objet DataSource
function DS(nom,autoload,separateur) {
         // propriétés
         this.nom = nom ;
         this.separateur = separateur ;
         this.autoload = autoload ;
         this.validated = false ;
         this.strincoherence = "" ;
         // méthodes
         this.getcontenu = DS_getcontenu ;
         this.setcontenu = DS_setcontenu;
         this.addline = DS_addline;
         this.getline = DS_getline;
         this.numlignes = DS_numlignes;
         this.numchamps = DS_numchamps;
         this.checkcoherence = DS_checkcoherence;
}
function DS_getcontenu() {
         return (Did(this.nom).value) ;
}
function DS_setcontenu(html_contenu) {
         Did(this.nom).value = html_contenu;
}
function DS_addline(html_line) {
         Did(this.nom).value += html_line + "\n";
}
function DS_getline(idligne) {
         var line = (this.getcontenu().split("\n"))[idligne];
         return line;
}
function DS_numlignes() {
         return ((Did(this.nom).value).split("\n").length);
}
function DS_numchamps(idligne) {
         return (((Did(this.nom).value).split("\n")[idligne]).split(Source.separateur)).length;
}
function DS_checkcoherence() {
         var coherence = true;
         this.strincoherence = "";
         for (i=0;i<this.numlignes();i++) {
           if (this.numchamps(i) != this.numchamps(0)) {
              coherence = false ;
              this.strincoherence = this.strincoherence + "[" + (i+1) + "]";
           }
         }
         return coherence;
}

// -> Instanciation objet source de donnees
Source = new DS("input_data",true,"\t");

// -> appel pour modif de la source
function Update_Source(methode,valeur) {

         // -> methode click sur radiobutton separateur
         if (methode == "separateur_change") {
           Source.separateur = valeur;
           if (Source.separateur == "\t" && Source.autoload == true) Source.setcontenu(exemple_tab);
           if (Source.separateur == ";"  && Source.autoload == true)  Source.setcontenu(exemple_bar);
         }

         // -> methode click sur activer/desactiver
         if (methode == "autoload_change")
         {
            if (valeur==true) {
               Source.autoload = true;
               Did("switch_examples").innerHTML = "Les données d'exemple se charge automatiquement par défaut, cliquer ici pour :<a class=\"lnk\" Href=\"javascript:Update_Source('autoload_change',false);\">D\ésactiver les exemples</a>";
	       if (Source.separateur == "\t") Source.setcontenu(exemple_tab);
	       if (Source.separateur == ";") Source.setcontenu(exemple_bar);
            }
            else if (valeur==false) {
               Source.autoload = false;
               Did("switch_examples").innerHTML = "Les données d'exemple se charge automatiquement par défaut, cliquer ici pour :<a class=\"lnk\" Href=\"javascript:Update_Source('autoload_change',true);\">Activer les exemples</a>";
	       Source.setcontenu("");
            }
         }
         Adressage.validated = false;
         GEOcoder.validated = false;
         Adressage.reset();
	 Did("step2_status").innerHTML = "";
	 // -> maz data dest + step4 + map
	 Did("data_dest").value = "";
	 Did("step4_process").innerHTML = "";
	 Did("classique").checked = true;
	 map.clearOverlays();
}

// **************************
// Verification du DataSource
// **************************

// -> fonction de controle
function verif_datasource() {

         // -> generique
         var nblignes = Source.numlignes();
         var nbchamps = Source.numchamps(0);
         // -> nb lignes OK ?
         var nbrowsOK = false;
         if ( (nblignes <= max_sourcerows) && (nblignes >= min_sourcerows)) nbrowsOK = true ;
         // -> nb champs OK ?
         var nbchampsOK = false;
         if (nbchamps >= min_sourcefields) nbchampsOK = true ;
         // -> coherence OK ?
         var cohereOK = Source.checkcoherence();

         // -> affichage resultats
         Did("step2_status").innerHTML = "";
         // -> affichage : OK
         if (nbrowsOK == true && cohereOK == true) {
            Did("step2_status").style.color='green';
            Did("step2_status").innerHTML = " OK : "+nblignes + " lignes / "+nbchamps + " colonnes." ;
            Source.validated = true ;
         }
         // -> affichage : Erreur
         if (cohereOK == false || nbrowsOK == false || nbchampsOK == false) {
            Did("step2_status").style.color='red';
            Did("step2_status").innerHTML = " ERREUR : "+nblignes+" lignes ("+min_sourcerows+"-"+max_sourcerows+" ok),"+nbchamps+" colonnes ("+min_sourcefields+" min),"+"coherence des champs : " ;
            if (cohereOK == false) Did("step2_status").innerHTML += "Erreur (ligne(s) " + Source.strincoherence + ")";
            if (cohereOK == true) Did("step2_status").innerHTML += "Ok";
            Source.validated = false ;
         }
         // -> init des listes des champs d'adresse
         initialise_adressage(Source.validated);
         // -> maz data dest + step4
	 Did("data_dest").value = "";
	 Did("step4_process").innerHTML = "";
	 Did("classique").checked = true;
	 map.clearOverlays();
	 GEOcoder.validated = false;
}