/*
  Forms of the application are : 
    - registerForm, loginForm
    - refisterProForm
    - alertForm
    
    - registerAppliForm
    - register
*/
var noRadio = new Array();
noRadio["fr"] = "Vous n'avez pas répondu à la question ";
noRadio["en"] = "You have not answered the question ";

var noCheckBox = new Array();
noCheckBox["fr"] = "Vous n'avez pas validé ";
noCheckBox["en"] = "You have not checked ";

var noText = new Array();
noText["fr"] = "Vous n'avez pas saisi ";
noText["en"] = "You have not filled ";

var items_fr = new Array();
items_fr["name"]    = "votre nom";
items_fr["object"]  = "l'objet";
items_fr["date_1"]    = "la 1ière date";
items_fr["checkPass"] = "le mot de passe";    //fictive, not in a form
items_fr["message"]   = "le message";
items_fr["email"]     = "d'email";
items_fr["myEmail"]   = "votre email";
items_fr["firstname"] = "votre prénom";
items_fr["password"]  = "le mot de passe";
items_fr["password_2"]= "le 2e mot de passe";
items_fr["email_1"]     = "l'email du 1ier destinataire";
items_fr["prettyName"]  = "de titre pour le fichier";
items_fr["file"] = "de fichier. Cliquez sur le bouton Parcourir pour en ajouter un.";
items_fr["comment"] = "de commentaire";
items_fr["pseudo"] = "de pseudo";
items_fr["confirm"]     = "la confirmation";
items_fr["title"] = "de titre";
items_fr["agreement"] = "les conditions générales d'utilisation"
items_fr["company"] = "le nom de votre société"

var items_en = new Array();

var items = new Array();
items["fr"] = items_fr;
items["en"] = items_en;

var errorsLabels_fr = new Array();
errorsLabels_fr["ERROR_ON_PASSWORD"] = "Le mot de passe est incorrect !";
errorsLabels_fr["ERROR_NOT_SAME_PASSWORD"] = "Les deux mots de passe ne sont pas identiques !";
errorsLabels_fr["ERROR_SAME_NAME"] = "Il existe un répondant du même nom (ajoutez par exemple un numéro à votre nom) !";
errorsLabels_fr["ERROR_ACCOUNT_CREATION"] = "Il existe déjà un compte pour cet email !";
errorsLabels_fr["ERROR_MAIL_ACCOUNT_CREATION"] = "Votre demande de compte a bien été enregistrée mais il est survenu un problème lors de l'envoi de mail. Merci de nous contacter.";
errorsLabels_fr["ERROR_MAIL_NOT_ADDED"] = "Vous devez valider l'email que vous avez saisi avec la touche 'Entrée' ou en cliquant sur le +";
errorsLabels_fr["ERROR_NO_MAIL"] = "Vous devez saisir au moins un email de destinataire";
errorsLabels_fr["ERROR_MAIL_COMMENT"] = "Vous avez déjà commenté ce diapMe il y a peu. Attendez un peu !";
errorsLabels_fr["ERROR_PROCESS_RUNNING"] = "Les données envoyées sont en cours de traitement. Attendez un peu !";
errorsLabels_fr["UNDEFINED_ERROR"] = "Une erreur non déterminée s'est produite.";
errorsLabels_fr["ERROR_PRO_REQUEST"] = "Une erreur s'est produite lors de l'enregistrement de votre demande. Veuillez réessayer ultérieurement.";

var errorsLabels_en = new Array();
/* TO DO
*/

var errorsLabels = new Array();
errorsLabels["fr"] = errorsLabels_fr;
errorsLabels["en"] = errorsLabels_en;

var mandatory = new Array();
mandatory["alertForm_contact"] = new Array("message","email");
mandatory["alertForm_abuse"] = new Array("message","email");
mandatory["alertForm_viral"]   = new Array("message", "email_1", "email");
mandatory["loginForm"] = new Array("email", "password");
mandatory["registerAppliForm"] = new Array("email");
mandatory["registerForm"] = new Array("firstname", "password", "password_2", "agreement");
mandatory["addVideoForm"] = new Array("prettyName", "file");
mandatory["addAudioForm"] = new Array("prettyName", "file");
mandatory["addCommentU"] = new Array("pseudo", "comment");
mandatory["addCommentP"] = new Array();
mandatory["changePassword"] = new Array("password", "password_2");
mandatory["unregister"] = new Array("confirm");
mandatory["personalDataForm"] = new Array("firstname", "email");
mandatory["newDiapmeForm"] = new Array("title"); 
mandatory["invitationPublish"] = new Array("myEmail");
mandatory["newEmail"] = new Array("email");   //onClick

var EMAIL   =0;
var INTEGER =1;
var regex = new Array();
regex[EMAIL]   = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
regex[INTEGER] = /^(\d)*$/;

var format = new Array();
format["invitationPublish"] = new Array( ["myEmail",EMAIL, "Votre email n'est pas valide."] );
format["newEmail"] = new Array( ["email",EMAIL, "Cet email n'est pas valide."] );

format["alertForm_contact"] = new Array( ["email",EMAIL, "Votre email n'est pas valide."] );
format["alertForm_abuse"] = new Array( ["email",EMAIL, "Votre email n'est pas valide."] );
format["addCommentP"] = new Array( ["email",EMAIL, "Cet email n'est pas valide."] );
format["addCommentU"] = new Array( ["email",EMAIL, "Cet email n'est pas valide."] );

format["alertForm_viral"] = new Array( ["email",EMAIL, "Votre email n'est pas valide."], 
      ["email_1",EMAIL, "L'email 1 n'est pas valide."], ["email_2",EMAIL, "L'email 2 n'est pas valide."], ["email_3",EMAIL, "L'email 3 n'est pas valide."],
      ["email_4",EMAIL, "L'email 4 n'est pas valide."], ["email_5",EMAIL, "L'email 5 n'est pas valide."] );

format["loginForm"] = new Array( ["email",EMAIL, "Cet email n'est pas valide."] );
format["registerAppliForm"] = new Array( ["email",EMAIL, "Cet email n'est pas valide."] );
format["personalDataForm"] = new Array( ["email",EMAIL, "Votre email n'est pas valide."],
          ["birthYear", INTEGER, "Votre année de naissance n'est pas valide."]    );

var specificFunction = new Array();
specificFunction["registerForm"] = checkSamePassword;
specificFunction["changePassword"] = checkSamePassword;
specificFunction["invitationPublish"] = checkPublicationMail;
specificFunction["addCommentP"] = checkCommentForm;
specificFunction["uploadcontent"] = checkUploadForm;


function validateForm(formName, language, errorDiv, formCommonName)
//=================================================================
{
  /* for example we have several forms : myForm_1, myForm_2, ... myForm_3 
  with all the same rules associated with formCommonName equal to myForm
  */

  if( !formCommonName )
    formCommonName = formName;
  var theForm = document.forms[formName];
  //=== Check the mandatory fields
  var mandatoryFields = mandatory[formCommonName];
  if( mandatoryFields )
  {
    for( var i=0; i<mandatoryFields.length; i++)
    {
      var fieldName = mandatoryFields[i];
      var field = theForm[fieldName];
      if (typeof field == "object" && field.nodeName && ( field.nodeName.toLowerCase() == "input" || field.nodeName.toLowerCase() == "textarea") )
      {
        var type = field.type.toLowerCase();
        if( type == "text" || type == "textarea" || type == "password" || type == "file" || field.nodeName.toLowerCase() == "textarea" )        {
          if( trimAll(field.value) == '' && !field.disabled )
          {
            displayError( noText[language] + items[language][fieldName] , errorDiv);
            field.focus();
            return false;
          }
        }
        else if( type == "checkbox" )
        {
          if( !field.checked && !field.disabled )
          {
            displayError( noCheckBox[language] + items[language][fieldName] , errorDiv);
            field.focus();
            return false;
          }
        }
      }
      //check select...
    }    
  }
  //=== Check the format of the fields
  var formatFields = format[formCommonName];
  if( formatFields )
  {
    for( var i=0; i<formatFields.length; i++)
    {
      var theFormat = formatFields[i];
 
      var fieldName = theFormat[0];
      var field = theForm[fieldName];
      if( field.value != '' && !field.disabled )
      {
        if( field.value.search( regex[theFormat[1]] ) == -1 ) 
        {
          displayError( theFormat[2] , errorDiv);
          field.focus();
          return false;
        }
      }
    }    
  }
  var specFunction = specificFunction[formCommonName];
  if( specFunction )
  {
    var ok = specFunction(theForm, language, errorDiv);
    if( !ok )
      return false;
  }
  clearError(errorDiv);
  return true;
}

function displayError( errorText, errorZone )
//===========================================
{
  if( errorZone && errorZone != "" && errorZone != "_" )
  {
    var d = document.getElementById(errorZone);
    if (d)
    {
		  setTextContent(d, errorText);
      d.className = "indicError";
		  if ( d.parentNode )
      {
        var errorTR = d.parentNode;
        if( errorTR && errorTR.tagName == "TR" && errorTR.className == "hidden" )
          setRowHidden( errorTR, false );
      }
		  return;
    }
  }
}

function displaySuccess( successText, successZone )
//===========================================
{
  if( successZone && successZone != "" && successZone != "_" )
  {
    var d = document.getElementById(successZone);
    if (d)
    {
		  setTextContent(d, successText);
      d.className = "indicSuccess";
		  if( d.parentNode )
      {
        var succesTR = d.parentNode;
        if(  succesTR &&  succesTR.tagName == "TR" &&  succesTR.className == "hidden" )
          setRowHidden(  succesTR, false );
      }
		  return;
    }
  }
}

function displayErrorHTML( errorText, errorZone )
//===============================================
{
  if( errorZone && errorZone != "" && errorZone != "_" )
  {
    var d = document.getElementById(errorZone);
    if (d)
    {
      
		  d.innerHTML = errorText;
      d.className = "indicError";
		  if( d.parentNode )
      {
        var errorTR = d.parentNode;
        if( errorTR && errorTR.tagName == "TR" && errorTR.className == "hidden" )
          setRowHidden( errorTR, false );
      }
		  return;
    }
  }
  alert(errorText);
}

function clearError( errorZone )
//==============================
{
  if( errorZone && errorZone != "" && errorZone != "_" )
  {
    var d = document.getElementById(errorZone);
    if (d)
    {
		  clearTextContent(d);
      d.className = "hidden"		  
		  if( d.parentNode )
      {
        var errorTR = d.parentNode;
        if( errorTR && errorTR.tagName == "TR" && errorTR.className == "" )
          setRowHidden( errorTR, true );
      }
		  return;
    }
  }
}

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//  Specific functions
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

function checkSamePassword(theForm, language, errorDiv)
//=====================================================
{
  var val1 = theForm["password"].value;
  var val2 =  theForm["password_2"].value;
  if( val1 != val2 )
  {
    displayError( errorsLabels[language]["ERROR_NOT_SAME_PASSWORD"] , errorDiv);
    theForm["password"].focus();
    return false;
  }
  return true;
}

function checkPublicationMail(theForm, language, errorDiv)
//========================================================
{
  var theEmail = trimAll(theForm.email.value);
  if( theEmail != "" )
  {
    displayError( errorsLabels[language]["ERROR_MAIL_NOT_ADDED"] , "errorMessageMail");
    theForm.email.focus();
    return false;
  }
  return true;
}

function checkCommentForm(theForm, language, errorDiv) {
//=======================================================

    if (trimAll(theForm["pseudo"].value) == '' && !theForm["pseudo"].disabled) {
      displayError(ERROR_NO_PSEUDO,errorDiv)
      return false
    }
    if (trimAll(theForm["comment"].value) == '' && !theForm["comment"].disabled) {
      displayError(ERROR_NO_COMMENT,errorDiv)
      return false
    }
    if (trimAll(theForm["email"].value) == '' && !theForm["email"].disabled) {
      displayError(ERROR_NO_EMAIL,errorDiv)
      return false
    }
    
    if (theForm["email"].value.search(regex[EMAIL]) == -1 && !theForm["email"].disabled) {
      displayError(ERROR_BAD_EMAIL,errorDiv)
      return false
    }
 
  return true;

}

function checkUploadForm(theForm, language, errorDiv)
{
  var isError = false;
  var filesNum = 0;
  clearError(errorDiv)
  clearError(errorDiv+'1');
  clearError(errorDiv+'2');
  clearError(errorDiv+'3');
  clearError(errorDiv+'4');
  clearError(errorDiv+'5');
  
  for (var i = 1; i < 6; i++) {
    if (trimAll(theForm["file_"+i].value) != '') {
      filesNum++;
    }
  }
  
  if (trimAll(theForm["prettyName_1"].value) == '' && theForm["file_1"].value != '') {
      displayError(noText[language]+' '+items[language]["prettyName"],errorDiv+'1')
      isError = true;
  }
  if (trimAll(theForm["prettyName_2"].value) == '' && theForm["file_2"].value != '') {
      displayError(noText[language]+' '+items[language]["prettyName"],errorDiv+'2')
      isError = true;
  }
  if (trimAll(theForm["prettyName_3"].value) == '' && theForm["file_3"].value != '') {
      displayError(noText[language]+' '+items[language]["prettyName"],errorDiv+'3')
      isError = true;
  }
  if (trimAll(theForm["prettyName_4"].value) == '' && theForm["file_4"].value != '') {
      displayError(noText[language]+' '+items[language]["prettyName"],errorDiv+'4')
      isError = true;
  }
  if (trimAll(theForm["prettyName_5"].value) == '' && theForm["file_5"].value != '') {
      displayError(noText[language]+' '+items[language]["prettyName"],errorDiv+'5')
      isError = true;
  }
  if(filesNum == 0) {
    displayError(ERROR_NO_FILES, errorDiv);
    return false;
  }
  
  if (isError == true)
    return false;
  
  if (filesNum > 1)
    return confirm('Vous avez demandé le téléchargement de plusieurs fichiers. Cette opération peut être longue (plusieurs minutes). Voulez-vous continuer ?')
  
  return true;
}

