var validator ;

var nbrDePret = $("#nbpret").val();

var nbrDePretAff = $("#nbpret").val();

var quotite = new Object();

var pret2vide = "n";


function initCSFCORE_ADE03()
{
  
  initValidator();
  //if(nbrDePret<2)appendPret(); // init form avec 2 bloc Prêt
  //else 
  manageRemover(nbrDePret); // ajout bouton supprimer sur bloc pret
  initListeners();
  
}

function initListeners(){
  // listener nbrEmprunteur
  addListenerForCP();
  initAddPret();
  initremboursement();
  initFloatListeners();
  initNbrEmprunteur();
  initNbEmprunteurChargementPage();
  initQuotiteListeners();
}

function resetListeners(){
  // listener nbrEmprunteur
  addListenerForCP();
  initremboursement();
  initFloatListeners();
  initNbrEmprunteur();
  resetListenerInfoBulle();
}

function initNbrEmprunteur(){
  $("#nbemprunteur").change(function(){
    //alert("initNbrEmprunteur() = "+$(this).attr("name"));
    var nbE = $(this).find("option:selected").attr("value");
    if(nbE>1){
      //restore quotite
      $("select[id^=quotitee1_]").each(function(){
        $(this).html(quotite[2].quotiteVal);
      
      });
    }else{
     //set quotite to 100%
     $("select[id^=quotitee1_]").each(function(){
        $(this).html(quotite[1].quotiteVal);
      });
    }
    
    
    $("select[id^='quotitee1_']").each(function(){
      //$(this).html(quotite[2][$(this).attr('id')].quotiteVal);
      var idPret = $(this).attr('id');
      //alert(select.attr("id")+"select.html"+select.html());
      $(this).find("option").each(function(){
        //alert("this.val="+$(this).val()+"\n quotite.index="+quotite[2][idPret].index);
        if(quotite[2][idPret].index == $(this).val()){
         $(this).attr("selected",true);
        }
      });
    });
    
    
    
    $("label[for^='quotitee1']").text(labelsEmprunteur1["quotitee1"+nbE].text);
    $("label[for^='garantiese1']").text(labelsEmprunteur1["garantiese1"+nbE].text);
    
    
    
    
  });
}

function initQuotiteListeners(){
  $("select[id^=quotitee1_]").change(function(){
      // a chaque modification, on met à jour la référence du pret
      saveQuotite($(this).attr('id'),$(this).html(),$(this).find("option:selected").val());
  });
}

function saveQuotite(idPret,value,selectedOptionVal){
  var nbE = $("#nbemprunteur").find("option:selected").attr("value");
  //alert("nbE= "+nbE+" ----\n idPret:"+idPret+"\n value:"+value+"\n index:"+selectedOptionVal);
  if(nbE>1){
   //alert("set value="+value+"\nindex="+selectedOptionVal);
   //quotite[2][idPret] = {quotiteVal:value};
   quotite[2][idPret] = {index:selectedOptionVal};
  }
}

function initFloatListeners(){
  $("*[id^='taux']").bind("change",function(){
    $(this).val($(this).val().replace(/([.])/, ","));
  });
}

function initAddPret(){
  $("#addPret").bind("click",function(){
    appendPret();
  });
  manageRemover(nbrDePretAff);
  $("#infoAddPret").dialog({
      autoOpen: false,
      modal: true,
      bgiframe: true
    });
}

function initValidationRules(){
  jQuery.validator.addMethod("number",function(value, element) { 
    if(value==""){return true;}
    var formatVal = value.replace(/([,])/, ".");
    var parseVal = parseFloat(formatVal);
    if(parseVal != formatVal) {return false;} 
    if(parseFloat(formatVal) != 'NaN')$(element).val(formatVal);
    else return false;
    return true;
  },errorMessages['taux'].value);


}

function addListenerForCP(){
  // Code postaux / ville
    $("input[id^='codePostal']").each(function(){
       var currentCPField = $(this);
        var cityId= "#ville_"+currentCPField.attr("id").substring(currentCPField.attr("id").indexOf("_")+1);
        if (currentCPField.attr("value").length > 0
            && !currentCPField.is(":disabled"))
        {
          loadCityByPC("#"+currentCPField.attr("id"), cityId);
        }
        currentCPField.bind("blur", function(){
          var idCp = "#"+currentCPField.attr("id");
          var idCity = cityId;
          if($(this).attr("value").length > 0
            && !currentCPField.is(":disabled"))loadCityByPC(idCp, idCity);
        });
    });
}

function initremboursement(){
  $("select[id^='remboursement']").each(function(){
    var currentSelect = $(this);
    currentSelect.change(function(){
      toggleremboursement($(this));
    });
    toggleremboursement(currentSelect);
   });
}


function initValidator(){
    initValidationRules();
    validator = $("#editForm").validate({
      onfocusout: false,
      validClass:"valid",
      errorClass: "error",
      //errorContainer: ".mbox",
      errorLabelContainer: ".mbox .mboxMsg.js",
      wrapper: "p",
      showErrors: function(errorMap, errorList) {
           this.defaultShowErrors();
      },
      invalidHandler:function(form, validator){
        var errors = validator.numberOfInvalids();
        $(".mbox .mboxMsg.jcms p").remove();
        var box = $(".mbox");
        if(errors > 0) {
          box.show();
        }else{
          box.hide();
        }
      },
      debug:true,
      onkeyup: false,
      highlight: function(element, errorClass) {
        $(element.form).find("label[for*=" + element.id + "]").each(
              function(){
                  $(this).addClass(errorClass);
              });
      },
      unhighlight: function(element, errorClass) {
         $(element.form).find("label[for*=" + element.id + "]").removeClass(errorClass);
        //alert(validator.numberOfInvalids());
        if(validator.numberOfInvalids()==0){
          var box = $(".mbox");
          box.hide();
        }
      },
      submitHandler: function(form) { 
        parseFloat(); // remplacement des "." par "," pour les champ en number (float en java)
        form.submit();
       },
      rules: {
        typedepret_1: "required",
        remboursement_1: "required",
        valueremboursement_1: {required:function(){return ($("#remboursement_1 option:selected").html() == 'Autre')}},
        capitalemprunte_1: {required:true,digits:true},
        taux_1: {required:true,number:true},
        mensualites_1: {required:true,digits:true},
        dureetotale_1: {required:true,digits:true},
        quotitee1_1: "required",
        quotitee2_1: {required: function(){return (getNbreEmprunter()>1)}},
        garantiese1_1: "required",
        garantiese2_1: {required: function(){return (getNbreEmprunter()>1)}},
        
        organisme_1:   "required",
        numero_1:  {required:false,digits:true},
        typeDeVoie_1:   "required",
        rue_1:   "required",
        ville_1:   "required",
        codePostal_1:  {required:true,digits:true},
        
        
        
         typedepret_2: {required:function(){return test2Vide()}},
        remboursement_2: {required:function(){return test2Vide()}},
        valueremboursement_2: {required:function(){return test2Vide()}},
        capitalemprunte_2: {required:function(){return test2Vide()},digits:true},
        taux_2: {required:function(){return test2Vide()},number:true},
        mensualites_2: {required:function(){return test2Vide()},digits:true},
        dureetotale_2: {required:function(){return test2Vide()},digits:function(){return test2Vide()}},
        quotitee1_2: {required:function(){return test2Vide()}},
        quotitee2_2: {required: false},
        garantiese1_2: {required:function(){return test2Vide()}},
        garantiese2_2: {required: false},
        organisme_2:   {required:function(){return test2Vide()}},
        numero_2:  {required:false,digits:function(){return test2Vide()}},
        typeDeVoie_2:   {required:function(){return test2Vide()}},
        rue_2:   {required:function(){return test2Vide()}},
        ville_2:   {required:function(){return test2Vide()}},
        codePostal_2:  {required:function(){return test2Vide()},digits:function(){return test2Vide()}},
        
        
         typedepret_3: {required:function(){return test3Vide()}},
        remboursement_3: {required:function(){return test3Vide()}},
        valueremboursement_3: {required:function(){return test3Vide()}},
        capitalemprunte_3: {required:function(){return test3Vide()},number:true},
        taux_3: {required:function(){return test3Vide()},number:true},
        mensualites_3: {required:function(){return test3Vide()},number:true},
        dureetotale_3: {required:function(){return test3Vide()},digits:function(){return test3Vide()}},
        quotitee1_3: {required:function(){return test3Vide()}},
        quotitee2_3: {required: false},
        garantiese1_3: {required:function(){return test3Vide()}},
        garantiese2_3: {required: false},
        organisme_3:   {required:function(){return test3Vide()}},
        numero_3:  {required:false,digits:function(){return test3Vide()}},
        typeDeVoie_3:   {required:function(){return test3Vide()}},
        rue_3:   {required:function(){return test3Vide()}},
        ville_3:   {required:function(){return test3Vide()}},
        codePostal_3:  {required:function(){return test3Vide()},digits:function(){return test3Vide()}}
        
        
      },
      messages: {
        typedepret_1: errorMessages['typedepret'].value+" (Pour le prêt 1)",
        remboursement_1: errorMessages['remboursement'].value+" (Pour le prêt 1)",
        valueremboursement_1: errorMessages['remboursement'].value+" (Pour le prêt 1)",
        capitalemprunte_1: {required: errorMessages['capitalemprunte'].vide+" (Pour le prêt 1)",digits: errorMessages['capitalemprunte'].value +" (Pour le prêt 1)"},
        taux_1: {required: errorMessages['taux'].vide+" (Pour le prêt 1)",number: errorMessages['taux'].value+" (Pour le prêt 1)"},
        mensualites_1: {required: errorMessages['mensualites'].vide+" (Pour le prêt 1)",digits: errorMessages['mensualites'].value+" (Pour le prêt 1)"},
        dureetotale_1: {required: errorMessages['dureetotale'].vide+" (Pour le prêt 1)",digits: errorMessages['dureetotale'].value+" (Pour le prêt 1)"},
        quotitee1_1:  errorMessages['quotitee1'].value+" (Pour le prêt 1)",
        quotitee2_1:  errorMessages['quotitee2'].value+" (Pour le prêt 1)",
        garantiese1_1:  errorMessages['garantiese1'].value+" (Pour le prêt 1)",
        garantiese2_1:  errorMessages['garantiese2'].value+" (Pour le prêt 1)",
        
        organisme_1:  errorMessages['organisme'].value+" (Pour le prêt 1)",
        numero_1:  {required: errorMessages['numero'].vide+" (Pour le prêt 1)",digits: errorMessages['numero'].value+" (Pour le prêt 1)"},
        typeDeVoie_1:  errorMessages['typeDeVoie'].value+" (Pour le prêt 1)",
        rue_1:  errorMessages['rue'].value+" (Pour le prêt 1)",
        ville_1:  errorMessages['ville'].value+" (Pour le prêt 1)",
        codePostal_1:  {required: errorMessages['codePostal'].vide+" (Pour le prêt 1)",digits: errorMessages['codePostal'].value+" (Pour le prêt 1)"},
        
        
        
        typedepret_2: errorMessages['typedepret'].value+" (Pour le prêt 2)",
        remboursement_2: errorMessages['remboursement'].value+" (Pour le prêt 2)",
        valueremboursement_2: errorMessages['remboursement'].value+" (Pour le prêt 2)",
        capitalemprunte_2: {required: errorMessages['capitalemprunte'].vide+" (Pour le prêt 2)",digits: errorMessages['capitalemprunte'].value+" (Pour le prêt 2)"},
        taux_2: {required: errorMessages['taux'].vide+" (Pour le prêt 2)",number: errorMessages['taux'].value+" (Pour le prêt 2)"},
        mensualites_2: {required: errorMessages['mensualites'].vide+" (Pour le prêt 2)",digits: errorMessages['mensualites'].value+" (Pour le prêt 2)"},
        dureetotale_2: {required: errorMessages['dureetotale'].vide+" (Pour le prêt 2)",digits: errorMessages['dureetotale'].value+" (Pour le prêt 2)"},
        quotitee1_2:  errorMessages['quotitee1'].value+" (Pour le prêt 2)",
        quotitee2_2:  errorMessages['quotitee2'].value+" (Pour le prêt 2)",
        garantiese1_2:  errorMessages['garantiese1'].value+" (Pour le prêt 2)",
        garantiese2_2:  errorMessages['garantiese2'].value+" (Pour le prêt 2)",
        
        organisme_2:  errorMessages['organisme'].value+" (Pour le prêt 2)",
        numero_2:  {required: errorMessages['numero'].vide+" (Pour le prêt 2)",digits: errorMessages['numero'].value+" (Pour le prêt 2)"},
        typeDeVoie_2:  errorMessages['typeDeVoie'].value+" (Pour le prêt 2)",
        rue_2:  errorMessages['rue'].value+" (Pour le prêt 2)",
        ville_2:  errorMessages['ville'].value+" (Pour le prêt 2)",
        codePostal_2:  {required: errorMessages['codePostal'].vide+" (Pour le prêt 2)",digits: errorMessages['codePostal'].value+" (Pour le prêt 2)"},
        
        
        typedepret_3: errorMessages['typedepret'].value+" (Pour le prêt 3)",
        remboursement_3: errorMessages['remboursement'].value+" (Pour le prêt 3)",
        valueremboursement_3: errorMessages['remboursement'].value+" (Pour le prêt 3)",
        capitalemprunte_3: {required: errorMessages['capitalemprunte'].vide+" (Pour le prêt 3)",digits: errorMessages['capitalemprunte'].value+" (Pour le prêt 3)"},
        taux_3: {required: errorMessages['taux'].vide+" (Pour le prêt 3)",number: errorMessages['taux'].value+" (Pour le prêt 3)"},
        mensualites_3: {required: errorMessages['mensualites'].vide+" (Pour le prêt 3)",digits: errorMessages['mensualites'].value+" (Pour le prêt 3)"},
        dureetotale_3: {required: errorMessages['dureetotale'].vide+" (Pour le prêt 3)",digits: errorMessages['dureetotale'].value+" (Pour le prêt 3)"},
        quotitee1_3:  errorMessages['quotitee1'].value+" (Pour le prêt 3)",
        quotitee2_3:  errorMessages['quotitee2'].value+" (Pour le prêt 3)",
        garantiese1_3:  errorMessages['garantiese1'].value+" (Pour le prêt 3)",
        garantiese2_3:  errorMessages['garantiese2'].value+" (Pour le prêt 3)",
        
        organisme_3:  errorMessages['organisme'].value+" (Pour le prêt 3)",
        numero_3:  {required: errorMessages['numero'].vide+" (Pour le prêt 3)",digits: errorMessages['numero'].value+" (Pour le prêt 3)"},
        typeDeVoie_3:  errorMessages['typeDeVoie'].value+" (Pour le prêt 3)",
        rue_3:  errorMessages['rue'].value+" (Pour le prêt 3)",
        ville_3:  errorMessages['ville'].value+" (Pour le prêt 3)",
        codePostal_3:  {required: errorMessages['codePostal'].vide+" (Pour le prêt 3)",digits: errorMessages['codePostal'].value+" (Pour le prêt 3)"}
        
        
      }
    });
}

function test2Vide(){
if(nbrDePret>=2){
  var flag=0;
  if($('#typedepret_2').val()!=""){
    flag=1;
  }
  if($('#remboursement_2').val()!=""){
    flag=1;
  }
  if($('#capitalemprunte_2').val()!=""){
    flag=1;
  }
  if($('#taux_2').val()!=""){
    flag=1;
  }
  if($('#mensualites_2').val()!=""){
    flag=1;
  }
  if($('#dureetotale_2').val()!=""){
    flag=1;
  }
  if($('#organisme_2').val()!=""){
    flag=1;
  }
  if($('#numero_2').val()!=""){
    flag=1;
  }
  if($('#typeDeVoie_2').val()!=""){
    flag=1;
  }
  if($('#rue_2').val()!=""){
    flag=1;
  }
  if($('#ville_2').val()!=""){
    flag=1;
  }
  if($('#codePostal_2').val()!=""){
    flag=1;
  }
  if($('#indice_2').val()!=""){
    flag=1;
  }
  if($('#complementDadresse_2').val()!=""){
    flag=1;
  }
  //nbrDePretAff = 2;
  if(flag==1){
    $("#nbpret").val('2');
    pret2vide = 'n';
    return true;
  }
  else{
    $("#nbpret").val('1');
    pret2vide = 'o';
    return false;
  }
}
}


function test3Vide(){
if(nbrDePret>=2){
  var flag=0;
  if($('#typedepret_3').val()!=""){
    flag=1;
  }
  if($('#remboursement_3').val()!=""){
    flag=1;
  }
  if($('#capitalemprunte_3').val()!=""){
    flag=1;
  }
  if($('#taux_3').val()!=""){
    flag=1;
  }
  if($('#mensualites_3').val()!=""){
    flag=1;
  }
  if($('#dureetotale_3').val()!=""){
    flag=1;
  }
  if($('#organisme_3').val()!=""){
    flag=1;
  }
  if($('#numero_3').val()!=""){
    flag=1;
  }
  if($('#typeDeVoie_3').val()!=""){
    flag=1;
  }
  if($('#rue_3').val()!=""){
    flag=1;
  }
  if($('#ville_3').val()!=""){
    flag=1;
  }
  if($('#codePostal_3').val()!=""){
    flag=1;
  }
  if($('#indice_3').val()!=""){
    flag=1;
  }
  if($('#complementDadresse_3').val()!=""){
    flag=1;
  }
  
  //nbrDePretAff = 3;
  
  if(flag==1){
    $("#nbpret").val('3');
    return true;
  }
  else{
    if(pret2vide == 'o'){
      $("#nbpret").val('1');
    }
    else{
      $("#nbpret").val('2');
    }
    
    return false;
  }
}
}


function toggleremboursement(element){
  if(element.find("option:selected").html() == 'Autre'){
    $("#value"+element.attr("id")).show();
  }else{
    $("#value"+element.attr("id")).hide();
  }
}


function appendPret(){
  //alert("nbPretReel : "+nbrDePret);
  //alert("nbpretAff : "+nbrDePretAff);
  if(nbrDePretAff<3){
    var clone = $("#contentdisplay div[id^='DivForm']:first").clone(true);
    var replaceInputNameSelector = "*[name$='_1']";
    
    nbrDePretAff++;
    //alert(nbrDePretAff);
    nbrDePret = nbrDePretAff;
    clone.find(replaceInputNameSelector).each(function(){
      var current = $(this);
      var currentName = current.attr("name");
      current.attr("name",currentName.substring(0,currentName.length-1)+nbrDePretAff);
      current.attr("id",currentName.substring(0,currentName.length-1)+nbrDePretAff);
      var currentLabel= clone.find("label[for$='"+currentName+"']");
      currentLabel.attr("for",current.attr("name"));
    });
    clone.attr("id","DivForm"+nbrDePretAff);
    clone.find("input[name*='_']").val("");
    clone.find("select").find("option:first").attr("selected",true);
    clone.find("select[id^='ville']").find("option").remove();
    clone.find("select[id^='ville']").attr("disabled","disabled").append("<option selected='selected' value=''>Choisir un code postal</option>");
    clone.find("*[class*='error']").removeClass("error");
    clone.find("div.formTitle").each(function(){
      var text = $(this);
      text.html(text.html().substring(0,text.html().length-1)+nbrDePretAff);
    });
    new YAHOO.Hack.FixIESelectWidth(clone.find("*[name^='garantiese1_']:first").attr("id"));
    $("#contentdisplay div[id^='DivForm']:last").after(clone);
    
    //resetListeners();
    manageRemover(nbrDePretAff);
    if(nbrDePretAff == 3){
      $("#infoAddPret").dialog({
      autoOpen: false,
      modal: true,
      bgiframe: true
    });
      $("#infoAddPret").dialog("enable");      
    }
  }else if(nbrDePretAff == 3){
    $("#infoAddPret").dialog("open");
  }
}


function manageRemover(nbpret){
  // move or add remove link
  if($("#isCoEmp").val()=="false"){
    var remover = $("#closer");
    if(nbpret>1){
      $(".supprimBloc").remove();
      $("#contentdisplay div[id^='DivForm']:last div.formTitle").before("<div  class='supprimBloc' id='closer'><img src='plugins/CSFCore/images/imagesADE/icone_supprimerBloc.gif'  title='Supprimer le prêt' alt='Supprimer le prêt'></div>");
      $("#closer").click(function(){
        $("*").remove("#DivForm"+nbpret);
        nbpret--;
        nbrDePretAff--;
        manageRemover(nbpret);
        
      });
      $("#infoAddPret").dialog("disable");
      resetListeners();  
    }
    else{
      $("#nbpret").val('1');
    }
  }
}


function initEmprunteur(){
  var bloc = $("#emprunteur2");
  $("#nbemprunteur").change(function(){
    manageNbrEmprunteur();
  });
  manageNbrEmprunteur();
}

function manageNbrEmprunteur(){
  // masque ou affiche le bloc emprunteur2
  var nbrEmprunteur = getNbreEmprunter();
  if(nbrEmprunteur<2){
    $("*[name*='e2_']").hide();
    $("*[for*='e2_']").hide();
  }else{
    $("*[name*='e2_']").show();
    $("*[for*='e2_']").show();
  }
  resetForm();
}

function getNbreEmprunter(){
  var nbrESelected = $("#nbemprunteur option:selected").val();
  return nbrESelected;
}

function resetForm(){
  if(validator.numberOfInvalids() == 0){
    validator.resetForm();
    $("label").removeClass("error");
  }else{
    $("label").removeClass("error");
    validator.form();
  }
}




function loadCityByPC(input, output)
{
  var pcIn = $(input).attr("value");
  var ville = null;
  if( $(output).valid()){
    ville = $(output).attr("value");
  }
  
  
  if(pcIn.length > 0 && $(input).valid())
  {
    $.post("plugins/CSFCore/types/InscriptionCSF/ajaxLoadCityByPostCode.jsp", {pc:pcIn}, function(data){
      if(data.length > 0)
      {
        $(output).html(data);
        $(output).removeAttr("disabled");
        $(output).valid();
        if(ville!=null){
          $(output).val(ville);
        }
      }
      else
      {
        $(output).attr("disabled", "disabled"); 
      }
      
    });
  }
}

//Fonction appellé lors du chargement de la page (code Identique a la fonction 
//initNbrEmprunteur avec juste la var nbE qui a été modifié car on la recherche la
function initNbEmprunteurChargementPage(){
    quotite[2] =  {quotiteVal:$("select[id^=quotitee1_]:first").html()};
    var k=0;
    $("select[id^=quotitee1_]").each(function(){
        quotite[2][$(this).attr('id')] = {quotiteVal:$(this).html()};
        //alert(quotite[2][k].quotiteVal);
        k++;
        
      });
    
    //alert("quotite[2]="+quotite[2].quotiteVal);
    var quotTemp = $("select[id^=quotitee1_]:first");
    //alert(quotTemp.attr("name"));
    quotTemp.find("option").each(function(){
         //alert($(this).val());
         if($(this).val()!='100')$(this).remove();
    });
    quotite[1] =  {quotiteVal:quotTemp.html()};
    //alert("quotite[1]="+quotite[1].quotiteVal);
    quotTemp.html(quotite[2].quotiteVal);
    
    var nbE = $("#nbemprunteur").find("option:selected").attr("value");
    if(nbE>1){
      //restore quotite
      k=0;
      $("select[id^=quotitee1_]").each(function(){
        $(this).html(quotite[2][$(this).attr('id')].quotiteVal);
        //alert(quotite[2][k].quotiteVal);
        k++;
      });
    }else{
     //set quotite to 100%
     $("select[id^=quotitee1_]").each(function(){
        $(this).html(quotite[1].quotiteVal);
      });
    }
    $("label[for^='quotitee1']").text(labelsEmprunteur1["quotitee1"+nbE].text);
    $("label[for^='garantiese1']").text(labelsEmprunteur1["garantiese1"+nbE].text);
}