// bibliothèque de gestion des champs devant être associé à une édition wysiwyg ou image
// 15/07/03 - Armel - Ajouté classe de gestion d'un champ pour DHTML (mise à jour du contenu d'un span)

// 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

// Variable pour mémoriser un champ "image" à mettre à jour
var selected_image_field = "";
var selected_image_frm   = "";
var image_content_path   = "";

// Fonction pour "choisir" s'il faut éditer en wysiwyg ou en code
/////////////////////////////////////////////////////////////////
var EDITED_FIELD_NAME     = "";
var PREVIEW_DIV_NAME      = "";
var WPE_MODE_SUBTITLE     = 1;    // Calé sur wysiwyg.inc
var WPE_MODE_TEXT         = 2;    // Calé sur wysiwyg.inc
function call_html_edit(db_field_name, preview_div_name, editor_mode, default_class)
{
  EDITED_FIELD_NAME = db_field_name;
  PREVIEW_DIV_NAME  = preview_div_name;
	editFile = '../s00_commun/s00p19_popup_editor.php?mode=' + editor_mode + "&default_class=" + default_class;
	edit = window.open(editFile, 'editorWindow', 'top=50,left=50,width=500,height=400');
	edit.focus();
}
function popup_editor_save(new_content)
{
  // Met à jour le champ caché
  obj = field_name2obj(document.form1, EDITED_FIELD_NAME);
  obj.value = new_content;

  // Met à jour la zone de visualisation
	document.getElementById(PREVIEW_DIV_NAME).innerHTML = new_content;

	// Reset les variables intermédiaires
	EDITED_FIELD_NAME = "";
	PREVIEW_DIV_NAME  = "";
}

// Fonction pour ajuter les liens et hrefs d'images pour le preview
///////////////////////////////////////////////////////////////////
function links_folder_up(contenu)
{
	contenu = contenu.replace(/"..\//gi, "\"../../");
	return contenu;
}

// 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);
}

function preview_cur_file(frm,elem_name,url_base_image)
{
 var img_field_obj;

 img_field_obj=field_name2obj(frm,elem_name,url_base_image);
 imgWindow=window.open(url_base_image+img_field_obj.value,"displayWindow","menubar=no,width=600,height=500,resizable=yes");
}

// 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,top=5,left=5,width=100,height=100,resizable=yes")
    imgWindow.document.write("<HEAD><TITLE>Visualisation image</TITLE>");
    imgWindow.document.write('<script language="javascript">\nfunction init(){\n');
    imgWindow.document.write('w=(document.images[0].width < 400)?400:document.images[0].width + 20;\n');
    imgWindow.document.write('window.resizeTo(w,document.images[0].height + 120);\n}\n</script>\n</HEAD>');
    imgWindow.document.write('<BODY topmargin="0" leftmargin="0" background="../images/foncontenu.gif" text="#888888">');
    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 onload=\"init()\" 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
   {
    window.open(url_image);
   }
}


// 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,url_base_image)
{
  var return_function = "setImage" // must be the name of the function you want to call when an item is chosen. This should be string containing only letters and numbers.
  selected_image_frm   = frm;
  selected_image_field = name_elem;
  image_content_path   = url_base_image;
  path = field_name2obj(frm, name_elem).value;
  path = path.substring(0, path.lastIndexOf("/"));
	wp_openDialog('../s00_commun/editor_files/dialog_frame.php?window=image.php&return_function='+return_function+'&folder='+path, 'modal',730,490)
}

function setImage(iurl, iwidth, iheight, ialign, ialt, iborder, imargin) {
	field_name2obj(selected_image_frm, selected_image_field).value = iurl.substring(image_content_path.length);
}

function select_file (frm,name_elem,url_base_image)
{
  var return_function = "setFile" // must be the name of the function you want to call when an item is chosen. This should be string containing only letters and numbers.
  selected_image_frm   = frm;
  selected_image_field = name_elem;
  image_content_path   = url_base_image;
  path = field_name2obj(frm, name_elem).value;
  path = path.substring(0, path.lastIndexOf("/"));
  wp_openDialog('../s00_commun/editor_files/dialog_frame.php?window=document.php&return_function='+return_function+'&folder='+path, 'modal', 730, 466)
}

function setFile(iHref,iTarget,iTitle) {
	field_name2obj(selected_image_frm, selected_image_field).value = iHref.substring(image_content_path.length);
}


// Cette fonction est appelée par la fenêtre de sélection
// quand celle-ci est appelée en mode non wysiwyg (asynchrone)
function set_file_in_form(file_name)
{
	EDITED_TEXT_OBJECT.value = file_name;
}

// 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;
}


// 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");
}


// Cette fonction créé l'objet utilisé par JS pour manipuler les DIV et SPAN
// met à jour le contenu des span "preview", et désactive la méthode focus
function prepare_wysiwyg_field(obj_name, div_name, form_field_obj)
{
  makePointerTo(obj_name, div_name);
  eval(obj_name + ".changeContent(links_folder_up(form_field_obj.value))");
}

///////////////////////////////////
// Classe de manipulation d'un span
///////////////////////////////////
///////////////////////////////////

// Détection du navigateur
ns7 = (navigator.appName=="Netscape" && navigator.userAgent.indexOf("Netscape/7")>0)?true:false;
ns6 = (navigator.appName=="Netscape" && navigator.userAgent.indexOf("Netscape6")>0)?true:false;
ns4 = (navigator.appName=="Netscape" && parseInt(navigator.appVersion)==4)?true:false;
ie4 = (document.all && !ns6 && !ns7)?true:false;
ff1 = (navigator.userAgent.indexOf("Firefox/")>0)?true:false;

// créer un pointeur vers un objet et lui ajoute des méthodes
function makePointerTo(pointerName, divName) {
	// En fonction du navigateur, on définit "block" qui est un alias sur le style du div
	if (ns6 || ns7) {eval(pointerName + ' = document.getElementById("' + divName + '").style')};
	if (ns4) {eval(pointerName + ' = document.layers["' + divName + '"]')};
	if (ie4) {eval(pointerName + ' = ' + divName + '.style')};
  if (ie4 || ff1) {eval(pointerName + ' = ' + divName + '.style')};

  // Ajout des propriétés
	eval(pointerName+'.divName="'+divName+'"');
	eval(pointerName+'.objName="'+pointerName+'"');
  eval(pointerName+'.t=0');
	eval(pointerName+'.r=0');
	eval(pointerName+'.b=0');
	eval(pointerName+'.l=0');

  // Ajout des méthodes
  eval(pointerName+'.moveTo=moveTo');
	eval(pointerName+'.changeContent=changeContent');
	eval(pointerName+'.getContent=getContent');
	eval(pointerName+'.show=show');
	eval(pointerName+'.hide=hide');
	eval(pointerName+'.changeClip=changeClip');
}

// Déplace un objet (div) aux coordonnées indiquées
function moveTo(x, y) {
	this.left = x;
	this.top = y;
}

// Affiche un div
function show() {
	if (ns4) {
		this.visibility = "show";
	} else {
		this.visibility = "visible";
	}
}

// Masque un div
function hide() {
	if (ns4) {
		this.visibility = "hide";
	} else {
		this.visibility = "hidden";
	}
}

// Change le clipping d'un div
function changeClip(top, right, bottom, left) {
	if (ns4) {
		this.clip.top = top;
		this.clip.right = right;
		this.clip.bottom = bottom;
		this.clip.left = left;
	} else {
		this.clip = "rect("+top+"px " + right+"px " + bottom+"px " + left+"px)";
	}
}

// Cette fonction met à jour le contenu html d'un div
function changeContent(texte) {
  // Transforme les retours à la ligne en espaces
	texte = texte.replace(/\r\n/gi, " ");
	texte = texte.replace(/\r/gi, " ");
	texte = texte.replace(/\n/gi, " ");
	texte = texte.replace(/"/gi, "\\\"");

	if (ie4 || ns6 || ns7 || ff1) {
		if (ie4 || ff1) {
			eval(this.divName+".innerHTML = \"" + texte + "\"");
		} else {	// ns6
			obj = document.getElementById(this.divName);
			obj.innerHTML = texte;
		}
	} else {
		d = document.layers[this.divName].document;
		d.open();
		d.clear();
		d.write(texte);
		d.close();
	}
}

// Fonction pour récupérer le contenu HTML d'un div
function getContent()
{
  obj = document.getElementById(this.divName);
	ret = obj.innerHTML;
	return ret;
}
/////////////////////////////////////////
// Fin - Classe de manipulation d'un span
/////////////////////////////////////////




// Gestion des appuis de touches pour connaître en permanence l'état de la touche shift
///////////////////////////////////////////////////////////////////////////////////////
var SHIFT_KEY_STATE   = false;
var CTRL_KEY_STATE    = false;
var ALT_KEY_STATE     = false;

document.onkeydown = handler_key_down;
document.onkeyup   = handler_key_up;

function handler_key_down(e) {
  if (document.all)     e = window.event;
  if (document.layers)  key = e.which;
  else                  key = e.keyCode;
  if (key == 16)        SHIFT_KEY_STATE = true;
  if (key == 17)        CTRL_KEY_STATE  = true;
  if (key == 18)        ALT_KEY_STATE   = true;
}

function handler_key_up(e) {
  if (document.all)     e = window.event;
  if (document.layers)  key = e.which;
  else                  key = e.keyCode;
  if (key == 16)        SHIFT_KEY_STATE = false;
  if (key == 17)        CTRL_KEY_STATE  = false;
  if (key == 18)        ALT_KEY_STATE   = false;
}


// Fonctions de développement
function prop_dump(obj)
{
  msg = "";
  for(var prop in obj)
  {
    if (prop!="innerText" && prop!="outerText" && prop!="innerHTML" && prop!="outerHTML") msg += prop + "=" + obj[prop] + "\t";
    //msg += prop + "=" + obj[prop] + "\t";
  }
  alert(msg);
}

// Fonction explode similaire à PHP
function explode(delimiter,item) {
	tempArray=new Array(1);
	var Count=0;
	var tempString=new String(item);
	while (tempString.indexOf(delimiter)>-1) {
		tempArray[Count]=tempString.substr(0,tempString.indexOf(delimiter));
		tempString=tempString.substr(tempString.indexOf(delimiter)+1,tempString.length-tempString.indexOf(delimiter)+1);
		Count=Count+1
	}
	tempArray[Count]=tempString;
	return tempArray;
}