// bibliothèque de gestion des champs des modules d'édition

// variable globale pointant sur l'objet Text ou Textearea en cours d'édition.
// utilisé pour éditer les hyperliens 
var EDITED_TEXT_OBJECT; 

// chaine de caratère utilisé pour marquer dans un champs d'édition l'emplacement 
// d'insertion des codes html d'enrichissement (bold, italic, etc...)
var STR_TAG_POS_INSERT = "\+\+"; 
var imgWindow=false; // handler de la fenetre de preview des zone texte html

// Url de la page de création des liens 
var url_create_link = "../s00_commun/s00p09_crea_link.htm";
var url_select_image = "../s00_commun/s00p10_fs_sel_image.php";

// function peremttant de retourner l'objet associé à un champs d'une form
function field_name2obj(frm,name_elem)
{
  var i,obj_field;
  for (i=0;i<frm.length;i++)
  {
    if(frm.elements[i].name == name_elem)
    {
      obj_field = frm.elements[i]; // on sauvegarde dans une variable globale l'objet de saisi de texte en cour d'édition
      break;
    }
  }
 return obj_field;
}

// fonction de creation du code d'un hyperlien dans un champs text de nom "name_elem" de la form frm
function create_link (frm,name_elem,txt_object)
{
  var i;

  EDITED_TEXT_OBJECT=field_name2obj(frm,name_elem);
  hnd=window.open(url_create_link,"creatLink","scrollbars=no,status=no,dependent,resizable=no,height=350,width=590,titlebar=1,alwaysRaised");
  return false;
}

// fonction appelé par la fenêtre de de création de line pour récupérer 
// le texte à mettre ne hyperlien(le texte compris entre les 2 ++.
function get_link_txt()
{
  var txt,ret;

  txt = EDITED_TEXT_OBJECT.value;
  // création objet ret pour passer des param par référence à une proc
  ret = {before_sel_txt:"Befor", in_sel_txt:"In", after_sel_txt:"After"};
  get_befor_in_after_tag_txt(txt,ret);
  
  return ret.in_sel_txt;
}

// fonction appelée par la fenêtre de creation de lien pour passer le code html généré
// et l'insérer dans le champs en cours d'édition
function set_link_code(html_code)
{
  var txt,ret;

  txt = EDITED_TEXT_OBJECT.value;

  // création objet ret pour passer des param par référence à une proc
  ret = {before_sel_txt:"Befor", in_sel_txt:"In", after_sel_txt:"After"};

  get_befor_in_after_tag_txt(txt,ret);

  txt=ret.before_sel_txt+html_code+ret.after_sel_txt;

  EDITED_TEXT_OBJECT.value = txt;

  return false;
}

// découpe une chaine contenant le tag de marquage de début et de fin de bloc en 3
// string befor, after et in
function get_befor_in_after_tag_txt(txt,ret)
{
  var pos_deb,pos_fin,in_and_after_sel_txt;

  pos_deb=txt.indexOf(STR_TAG_POS_INSERT);
  if(pos_deb>=0) // on a un code de début 
  {
    ret.before_sel_txt= txt.substr(0,pos_deb); // on récupère la chaine avant le code
    in_and_after_sel_txt = txt.substr(pos_deb+STR_TAG_POS_INSERT.length); // et la chaine après le 1er code
    pos_fin=in_and_after_sel_txt.indexOf(STR_TAG_POS_INSERT);
    if (pos_fin>=0) // si on a un tag de fin
    {
      ret.after_sel_txt = in_and_after_sel_txt.substr(pos_fin+STR_TAG_POS_INSERT.length); //on récupère la chaine après le 2eme code
      ret.in_sel_txt    = in_and_after_sel_txt.substr(0,pos_fin); // et la chaine après le 1er code
    }
    else
    {
      ret.after_sel_txt = in_and_after_sel_txt;
      ret.in_sel_txt = "";
    }
  }
  else
  {
    ret.before_sel_txt=txt;
    ret.in_sel_txt="";
    ret.after_sel_txt="";
  }
}


// fonction d'insertion de tag html de type "type" dans un champ de saisi texte nomé "name_elem" de la form frm
function create_tag (type,frm,name_elem)
{
  var i,elem,txt,html_code,indx,pos_deb,pos_fin,before_sel_txt,in_sel_txt,after_sel_txt,in_and_after_sel_txt;

  before_sel_txt = new String("EE");
  in_sel_txt = new String("SS");
  after_sel_txt = new String("GG");

  elem=field_name2obj(frm,name_elem);

  switch(type) 
  {
   case "bold" :	html_code_deb="<b>";     html_code_fin="</b>";break;
   case "i" :		html_code_deb="<i>";     html_code_fin="</i>";break;
   case "br" :		html_code_deb="<br>\n";  html_code_fin="";break;
   case "p" :		html_code_deb="<p>";     html_code_fin="</p>";break;
   case "puce" :	html_code_deb="<li>";    html_code_fin="";break;
  }

  txt=elem.value;

   // création objet ret pour passer des param par référence à une proc
  ret = {before_sel_txt:"Befor", in_sel_txt:"In", after_sel_txt:"After"};

  get_befor_in_after_tag_txt(txt,ret);

  txt=ret.before_sel_txt+html_code_deb+ret.in_sel_txt+html_code_fin+ret.after_sel_txt;
  elem.value = txt;

  return false;
}

// fonction permettant de visualiser l'affichage d'une zone de saisi texte contenant des codes HTML
function preview_html(frm,name_elem)
{
 var elem;
 elem=field_name2obj(frm,name_elem);

   if (imgWindow)
   {
     imgWindow.close();
   }
   
   imgWindow=window.open("","displayWindow","menubar=no,width=500,height=300,resizable=yes,scrollbar=yes")
   imgWindow.document.write("<HEAD><TITLE>Visualisation d'une zone de saisi texte</TITLE></HEAD>");
   imgWindow.document.write("<BODY bgcolor=#00009c text=white>");
   // imgWindow.document.write("<center>");
   imgWindow.document.write(""+elem.value+"<BR>");
   imgWindow.document.write("<FORM>");
   imgWindow.document.write("<input type='button' name='close' value='Fermer' onClick='opener.imgWindow=false; self.close();'>");
   imgWindow.document.write("</FORM>");
   //imgWindow.document.write("</center>");
   imgWindow.document.write("</BODY>")
}

// fonction permettant de visualiser une image à 
// partir du champs texte de saisie du nom de l'image
function preview_cur_image(frm,elem_name,url_base_image)
{
  var img_field_obj;

  img_field_obj=field_name2obj(frm,elem_name,url_base_image);
  preview_image(url_base_image+img_field_obj.value,img_field_obj.value);
}

// fonction permettant de visualiser une image a partir de l'url de cette image 
function preview_image(url_image,categ_et_nom_image)
{
   if (imgWindow)
   {
     imgWindow.close();
   }

   var pos=url_image.lastIndexOf(".");
   var ext=url_image.substring(pos+1);
    
   if(ext.toLowerCase()!="pdf")
   {
    imgWindow=window.open("","displayWindow","menubar=no,width=300,height=300,resizable=yes")
    imgWindow.document.write("<HEAD><TITLE>Visualisation image</TITLE></HEAD>");
    imgWindow.document.write('<BODY bgcolor=#00009c background="../images/fondpage.gif" text="#FFFFFF" text=white>');
    imgWindow.document.write("<center>");
    imgWindow.document.write("<B>"+categ_et_nom_image+"</B><BR>");
    imgWindow.document.write("<table celpadding=3><tr><td bgcolor=white><IMG SRC='"+url_image+"'></td></tr></table><BR>");
    imgWindow.document.write("<FORM>");
    imgWindow.document.write("<input type='button' name='close' value='Fermer' onClick='opener.imgWindow=false; self.close();'>");
    imgWindow.document.write("</FORM>");
    imgWindow.document.write("</center>");
    imgWindow.document.write("</BODY>");
   }
   else
   {
    imgWindow=window.open(url_image,"displayWindow","menubar=no,width=600,height=500,resizable=yes");
   }
}


// fonction appelant la fenêtre de sélection d'une image.
// paramètres :"name_elem" : nom du champs text devant contenir le nom de l'image 
// frm : frame contenant le champs
function select_image (frm,name_elem)
{
	// En paramètres optionnel N° 3 : le tableau des arguments "args" utilisé pour l'insertion d'image en édition wysiwyg
	// En paramètres optionnel N° 4 : "mode_html" qui indique s'il faut afficher ensuite la boîte de propriétés html
	// En paramètres optionnel N° 5 : complément de chemin jusqu'à s00 car wysiwyg et le reste ne sont pas dans le même dossier
	// Calcule les arguments optionnels
	if (select_image.arguments[2]) {args=select_image.arguments[2]} else {args=new Array()};
	if (select_image.arguments[3]) {mode_html=select_image.arguments[3]} else {mode_html=0};
	if (select_image.arguments[4]) {add_path=select_image.arguments[4]} else {add_path=""};
  var i;

	if (mode_html==0) {	// Dans ce cas, on a besoin de connaître le champs de formulaire de destination
  	EDITED_TEXT_OBJECT=field_name2obj(frm,name_elem);
  }

	// Affiche la boîte modale générique de sélection d'image
  w=window.showModalDialog(add_path+url_select_image,args,"dialogHeight: 500px; dialogWidth: 900px; dialogTop: "
     +((screen.height-300)/2-100)+"px; dialogLeft: "+((screen.width-900)/2)+"px; help:no; resizable:yes; status:no;");
     
	// Si "mode_html" est sur 0, reporte la valeur dans la zone de saisie
	if (mode_html==0 && args[4]) {
		EDITED_TEXT_OBJECT.value=args[4];
	}
}

// fonction appelée par la fenêtre de sélection d'image (s05p18) pour passer le path+image 
// de l'image sélecté et l'insérer dans le champs en cours d'édition
function set_selected_img(categ_et_nom_image)
{
  EDITED_TEXT_OBJECT.value = categ_et_nom_image;
}


/////////////////////////////////////////////////////////////////
// PROCEDURES DE VALIDATION DES VALEURS DES CHAMPS D'UN FORMULAIRE
/////////////////////////////////////////////////////////////////

// Bibliothèque de validation de champs Javascript
function valid_email(FormName,ElemName) 
{
  var EmailOk  = true
  var Temp     = field_name2obj(FormName,ElemName);
  var AtSym    = Temp.value.indexOf('@')
  var Period   = Temp.value.lastIndexOf('.')
  var Space    = Temp.value.indexOf(' ')
  var Length   = Temp.value.length - 1   // Array is from 0 to length-1

  if ((AtSym < 1) ||                     // '@' cannot be in first position
      (Period <= AtSym+1) ||             // Must be atleast one valid char btwn '@' and '.'
      (Period == Length ) ||             // Must be atleast one valid char after '.'
      (Space  != -1))                    // No empty spaces permitted
     {  
        EmailOk = false
        alert("l'adresse e-mail que vous avez entrée n'est pas valide")
        Temp.focus()
     }
  return EmailOk
}

// function permettant de valider si un champs texte est vide
// frm:objet de la form contant l'objet
// field_name: nom du champs
// libel_champ: Nom du champs pour afficher dans le message d'erreur pour l'usager
function valid_text(inForm,field_name,libel_champ) 
{
  var ret=true; 
  var obj_text=field_name2obj(inForm,field_name);
  var value=obj_text.value;

  if(value=="")
  {
   alert("le champs "+libel_champ+" n'a pas été renseigné");
   obj_text.focus();
   if (obj_text.type=="text" || obj_text.type=="textarea") obj_text.select();
   ret=false;
  }
  return ret;
}

// function permettant de convertir trois champs Jour Mois et Année en un objet Date JS
// frm:objet de la form contant l'objet
// field_name_j: nom du champs jour
// field_name_m: nom du champs mois
// field_name_a: nom du champs année
function jma2date(inForm,field_name_j,field_name_m,field_name_a)
{

  var obj_field_j=field_name2obj(inForm,field_name_j);
  var val_j=parseInt(obj_field_j.value,10);

  var obj_field_m=field_name2obj(inForm,field_name_m);
  var val_m=parseInt(obj_field_m.value,10);

  var obj_field_a=field_name2obj(inForm,field_name_a);
  var val_a=parseInt(obj_field_a.value,10);

  objdate= new Date(val_a,val_m-1,val_j);

  return objdate;
}


// function permettant de valider si une date est plausible
// frm:objet de la form contant l'objet
// field_name_j: nom du champs jour
// field_name_m: nom du champs mois
// field_name_a: nom du champs année
function valid_date(inForm,field_name_j,field_name_m,field_name_a,err_msg)
{
  var ret=true; 
  var obj_field_j=field_name2obj(inForm,field_name_j);
  var val_j=parseInt(obj_field_j.value,10);

  var obj_field_m=field_name2obj(inForm,field_name_m);
  var val_m=parseInt(obj_field_m.value,10);

  var obj_field_a=field_name2obj(inForm,field_name_a);
  var val_a=parseInt(obj_field_a.value,10);

  // validation de la date
  tmpdate= new Date(val_a,val_m-1,val_j);
  tmpdate2 = new Date();
  tmpdate2.setTime(tmpdate.getTime());

  if(val_a!=tmpdate2.getFullYear() || val_m-1!=tmpdate2.getMonth() ||  val_j!=tmpdate2.getDate())
  {
   alert(err_msg);
   obj_field_j.focus();
   obj_field_j.select();
   ret=false;
  }
  return ret;
}

// validation d'un champs par une condition passé en paramètre dans laquelle la valeur du champs 
// est symbolisé par la variable value.
// ex: valid_field(document.form[0],"toto","value>5 && value<10","toto est faux")
function valid_field(inForm,field_name,condition,err_msg)
{
  var ret=true;
  var obj_field=field_name2obj(inForm,field_name);
  var value=obj_field.value;

  if(!eval(condition))
  {
   alert(err_msg);
   obj_field.focus();
   if (obj_field.type=="text" || obj_field.type=="textarea")  obj_field.select();
   ret=false;
  }
  return ret;
}


// function peremettant de retourner l'objet associé à un champs d'une form
// frm:objet de la form contant l'objet
// field_name: nom du champs
function field_name2obj(frm,field_name)
{
  var i,obj_field;

  for (i=0;i<frm.length;i++)
  {
    if(frm.elements[i].name == field_name)
    {
      obj_field = frm.elements[i]; // on sauvegarde dans une variable globale l'objet de saisi de texte en cour d'édition
      break;
    }
  }
 if (obj_field) return obj_field;
 else alert("Erreur dans field_name2obj: champs:"+field_name+" introuvable");
}

// fonction retournant la valeur d'un champs
// frm:objet de la form contant l'objet
// field_name: nom du champs
function val_field_name(frm,field_name)
{
  obj_field=field_name2obj(frm,field_name);
  return (obj_field.value);
}

