function Annonce(formName) {
  this._form = document.forms[formName];

  this._numCharParLigne;
  this._prixLigne;
  this._prixDomiciliation;
  this._prixType = new Array();

  this._duree = 1;

  this._nLignes = 0;
  this._prixHorsOptions = 0.;
  this._prixOptions = 0.;
  this._prixTotal = 0.;

  this.setNumCharParLigne = function(num) { this._numCharParLigne = num; }
  this.setPrixLigne = function(prix) { this._prixLigne = prix; }
  this.setPrixDomiciliation = function(prix) { this._prixDomiciliation = prix; }
  this.setPrixType = function(type, prix) { this._prixType[type] = prix; }

/**
* Appelé au chargement de la page
* 
*/
  this.init = function() {
    document.getElementById('prix_ligne').innerHTML = this._prixLigne;
    document.getElementById('prixDomiciliation').innerHTML = this._prixDomiciliation;
    for (var i=1;i<this._prixType.length;i++) {
      document.getElementById('prixType'+i).innerHTML = this._prixType[i];
    }

    if (this._form.elements['acceptation'].checked) this._form.elements['submit'].disabled = false;
    else this._form.elements['submit'].disabled = true;

    this._nLignes = Math.ceil( this._form.elements['textAnnonce'].value.length / this._numCharParLigne);
    this._duree = parseInt( this._form.elements['mois'].value, 10);
    this.updatePrix();
  }

/**
* Le texte de l'annonce a été modifié :
* Compter le nombre de lignes
* Actualiser les prix
*/
  this.textChanged = function(textarea) {
    //this._nLignes = Math.ceil(textarea.value.length / this._numCharParLigne);
    //this.updatePrix();

    if (textarea.value.length>120) {
      textarea.value = textarea.value.substr(0, 120);
    }
  }

  this.domiciliationClicked = function(elt) {
    this.updatePrix();
  }
  this.typeChanged = function(elt) {
    this.updatePrix();
  }
  this.acceptationClicked = function(elt) {
    if (elt.checked) this._form.elements['submit'].disabled = false;
    else this._form.elements['submit'].disabled = true;
  }
  this.categorieChanged = function(elt) {
    if (elt[elt.selectedIndex].text=='Rencontres') {
      this._form.elements['domiciliation'].checked = true;
      this._form.elements['domiciliation'].disabled = true;

    } else {
      this._form.elements['domiciliation'].checked = false;
      this._form.elements['domiciliation'].disabled = false;
    }

    this.updatePrix();
  }

  this.dureeChanged = function(elt) {
    if (elt.value=='') this._duree = 1;
    else if (!isInt(elt.value) || parseInt(elt.value, 10)==0) {
      elt.value = 1;    
      this._duree = 1;
   } else this._duree = parseInt(elt.value, 10);

    this.updatePrix();
  }

/**
* Recalcule les prix et les affiche
*/
  this.updatePrix = function() {return;
    document.getElementById('nlignes').innerHTML = this._nLignes;

    this._prixHorsOptions = Math.round(this._prixLigne * this._nLignes * 100) / 100.;
    document.getElementById('montant_hors_options').innerHTML = this._prixHorsOptions;

    this._prixOptions = 0.;
    if (this._form.elements['domiciliation'].checked) this._prixOptions += this._prixDomiciliation;

    for (var i=0;i<this._form.elements['type'].length;i++) {
      if (this._form.elements['type'][i].checked) {this._prixOptions += this._prixType[i]; break;}
    }

    this._prixTotal = (this._prixHorsOptions + this._prixOptions) * this._duree;

    document.getElementById('montant_total').innerHTML = this._prixTotal;
  }

  this.submit = function() {
    var res = true;
    var errors = new Array();

    if ( trim(this._form.elements['prenom'].value)=='' ) {
      res = false;
      errors.push('Vous devez renseigner votre pr\351nom');
    }

    if ( trim(this._form.elements['nom'].value)=='' ) {
      res = false;
      errors.push('Vous devez renseigner votre nom');
    }

    var email = trim(this._form.elements['email'].value);
    if (email=='') {
      res = false;
      errors.push('Vous devez renseigner votre email');
    } else if (!checkEmail(email)) {
      res = false;
      errors.push('Votre email n\'est pas valide');
    }

    if ( trim(this._form.elements['rue'].value)=='' ) {
      res = false;
      errors.push('Vous devez renseigner votre rue');
    }

    if ( trim(this._form.elements['cp'].value)=='' ) {
      res = false;
      errors.push('Vous devez renseigner votre code postal');
    }

    if ( trim(this._form.elements['ville'].value)=='' ) {
      res = false;
      errors.push('Vous devez renseigner votre ville');
    }

    if ( trim(this._form.elements['tel'].value)=='' ) {
      res = false;
      errors.push('Vous devez renseigner votre t\351l\351phone');
    }

    if (this._form.elements['categorie'].value==-1) {
      res = false;
      errors.push('Vous devez renseigner une cat\351gorie');
    }

    if (this._form.elements['mois'].value=='') {
      res = false;
      errors.push('Vous devez renseigner une dur\351e');
    }

    if (!res) {
      var messg = '';
      for (var i=0;i<errors.length;i++) messg += '* ' + errors[i] + "\n";
      alert(messg);
      return false;
    }

    return true;
  }

}

function trim(string) {
  return string.replace(/(^\s*)|(\s*$)/g,'');
} 

function isInt(value) {
  var verif = /^[0-9]+$/;
  if (verif.exec(value)==null) return false;
  return true;
}

function checkEmail(email) {
  var proto  = "(mailto:)?";
  var usr    = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
  var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
  var regex  = "^" + proto + "?" + usr + "\@" + domain + "$";

  var rgx    = new RegExp(regex);
  return rgx.exec(email) ? true : false;
}
