// JavaScript Document

function action(params,id,url) // Idem à une fonction AJAX mais permet de choisir le fichier de traitement
{
	var myAjax = new Ajax.Request(url,{method:'get',parameters: params});
}

function afficher(id,etat) // Affichage et masquage de divisions par leur ID
{
	var NS4 = (document.layers)?1:0;
    var IE4 = (document.all)?1:0;
    var W3C = (document.getElementById)?1:0;
    if (W3C)
    {var debut = document.getElementById(id);}
    else if (NS4)
    {var debut = document.layers[id];}
    else
    {var debut = document.all[id];}

    if(etat == '0')
    {debut.style.display = 'none';}
    else
    {debut.style.display = 'block';}
}

function ajout(text1,text2,id) // Ajoute une balise ou du texte entre deux éléments sélectionnés dans un champ
{
	var ta = document.getElementById(id);
	if (document.selection) 
	{
		var str = document.selection.createRange().text;
		ta.focus();
		var sel = document.selection.createRange();
		if (text2!="" )
		{
			if (str=="" ) 
			{
				var instances = countInstances(text1,text2);
				if (instances%2 != 0) sel.text = sel.text + text2;
				else sel.text = sel.text + text1;
			}
			else sel.text = text1 + sel.text + text2;
		}
		else sel.text = sel.text + text1;
	}
	else if (ta.selectionStart || ta.selectionStart == 0)
	{
		if (ta.selectionEnd > ta.value.length) ta.selectionEnd = ta.value.length;
		var firstPos = ta.selectionStart;
		var secondPos = ta.selectionEnd+text1.length;
		var contenuScrollTop = ta.scrollTop;
		ta.value=ta.value.slice(0,firstPos)+text1+ta.value.slice(firstPos);
		ta.value=ta.value.slice(0,secondPos)+text2+ta.value.slice(secondPos);
		ta.selectionStart = firstPos+text1.length;
		ta.selectionEnd = secondPos;
		ta.focus();
		ta.scrollTop = contenuScrollTop;
	}
	else
	{ // Opera
		var sel = ta.id;
		var instances = countInstances(text1,text2);
		if (instances%2 != 0 && text2 != "" ) sel.value = sel.value + text2;
		else sel.value = sel.value + text1;
	}
}

function ajoutSimple(chaineAj,champ) // Ajoute une chaine de caractère dans un champ
{
	var myForm = document.getElementById(champ);
	//IE support
	if (document.selection) {
		myForm.focus();
		sel = document.selection.createRange();
		sel.text = chaineAj;
		document.WriteForm.focus();
	}
	//MOZILLA/NETSCAPE support
	else if (document.getElementById(champ).selectionStart || document.getElementById(champ).selectionStart == "0") {
		var startPos = document.getElementById(champ).selectionStart;
		var endPos = document.getElementById(champ).selectionEnd;
		var chaine = document.getElementById(champ).value;
		myForm.value = chaine.substring(0, startPos) + chaineAj + chaine.substring(endPos, chaine.length);
	} else {
		myForm.value += chaineAj;
	}
}

function change(nom,chemin) // Modifie le chemin d'une image (utile pour les galeries)
{
	$(nom).src = chemin;
}

function charCounterUpdate() // Vérifie le nombre de caractères d'un champ et le met à jour
{
	var n = this.value.length;
	if (n > this.charCounterMax)
	{ 
		alert(this.charCounterMax + " caracteres maximum !");
		return false;
	}
	if (this.charCounterDisplay)
	{
		var o = $(this.charCounterDisplay);
		if (o.tagName.toLowerCase()=="input") o.value = n;
		else o.innerHTML = n;
	}
}

function clic(id,params) // Fonction Ajax
{
	var url = 'ajax.php';
	var myAjax = new Ajax.Updater(id,url,{method:'get',parameters: params});
}

function createEditor() // Essentiel au WYSIWYG
{
	if (editor)return;
	var html = document.getElementById('editorcontents').innerHTML;
	// Create a new editor inside the <div id="editor">
	editor = CKEDITOR.appendTo( 'editor' );
	editor.setData( html );

	// This sample may break here if the ckeditor_basic.js is used. In such case, the following code should be used instead:
	/*
	if ( editor.setData )
		editor.setData( html );
	else
		CKEDITOR.on( 'loaded', function()
			{
				editor.setData( html );
			});
	*/
}

function creer(id,type)
{
  debut = $(id);
  switch(type)
  {
    case 'canton':
    // Génération du champ
    element = document.createElement('input'); // Je créée d'abord la balise <input>
    element.setAttribute('type','text'); // J'ajoute le paramètre type="text"
    element.setAttribute('class','champ'); // J'ajoute le paramètre name="mail" suivi du nombre "a" passé en variable globale
    element.setAttribute('name','nom[]'); // J'ajoute le paramètre name="mail" suivi du nombre "a" passé en variable globale
    
    // Génération des balises <P> et du texte
    Delt_p = document.createElement('p'); // Je créée l'élément <P> et je le stocke dans une variable Delt_p
    Delt_text = document.createTextNode('Nom: '); // J'utilise cette fonction pour ajouter du texte après ma balise
    Delt_p.appendChild(Delt_text) // J'ajoute ce que je viens de créer à ma variable Delt_P
    Delt_p.appendChild(element); // J'ajoute le contenu de element en imbrication dans ma balise <p> que je viens de créer
    
    // Génération de la balise </p>
    debut.appendChild(Delt_p); // J'affiche ma balise complète
    break;
  }
}

function developper(id)
{
	if($(id).style.display == 'block'){}
	else{
		clic('details','query=void');
		afficher('localisation','0');
		afficher('type','0');
		afficher('tranche','0');
		afficher(id,'1')
		new Effect.Appear('recherche');
		Effect.ScrollTo(id);
	}
}

function memo(id,message) // Affiche un mémo dans une DIV lors du survol d'un élément
{
	var NS4 = (document.layers)?1:0;
    var IE4 = (document.all)?1:0;
    var W3C = (document.getElementById)?1:0;
    if (W3C)
    {var debut = document.getElementById(id);}
    else if (NS4)
    {var debut = document.layers[id];}
    else
    {var debut = document.all[id];}

    if(message == '')
    {debut.style.display = 'none';}
    else
    {
    if (W3C)
    {debut.innerHTML = message;
	}
    if (IE4)
    {debut.innerHTML = message;
	}
    if (NS4)
    {
		debut.document.open();
		debut.document.write(message);
		debut.document.close();}
		debut.style.display='block';
    }
}

function sure(table,id,message) // Demande une confirmation avant de supprimer une entrée dans une table
{
	var resultat = confirm(message);
	switch(resultat)
	{
		case true:
		window.location.href='valider.php?action=effacer&class='+table+'&id='+id;
		break;
		
		case false:
		window.location.reload();
		break;
		
		default:
		alert('Erreur inconnue!');
		break;
	}
}

function tab(id)
{
	switch(id)
	{
		case 'general':
			afficher('general',1);
			afficher('images',0);
			afficher('couleurs',0);
			afficher('description',0);
		break;
		case 'images':
			afficher('general',0);
			afficher('images',1);
			afficher('couleurs',0);
			afficher('description',0);
		break;
		case 'couleurs':
			afficher('general',0);
			afficher('images',0);
			afficher('couleurs',1);
			afficher('description',0);
		break;
		case 'description':
			afficher('general',0);
			afficher('images',0);
			afficher('couleurs',0);
			afficher('description',1);
		break;
	}
	
}

function testchamp(id,contenu) // Vérifie le contenu d'un champ
{
	if($(id).value == contenu || $(id).value== '')
	{
		new Effect.Morph(id,{style: 'background: #ff0000; color: #ffffff; border: 1px solid orange;'})
		return false;
	}
	else {
		new Effect.Morph(id,{style: 'background: #008d22; color: #ffffff; border: 1px solid yellow;'})
		return true;
	}
}

function trier(div) // Trie les éléments lors d'un déplacement dynamique
{
	Sortable.create(div);
	var liste = Sortable.serialize(div);
	return liste;
}
function updateImage(id,chemin)
{
	$(id).src=chemin;
}
function Mediatheque(champ)
{
	window.open('../media/index.php?c='+champ,'mediatheque',config='width=960,height=600,toolbar=no,menubar=no,scrollbars=no,resizable=yes,location=no,directories=no,status=no');
}

function setCharCounter(a,b,n) // Limite la saisie du nombre de caractères dans un champ de formulaire
{
	$(a).charCounterMax = n;
	$(a).charCounterDisplay = b;
	$(a).onkeyup = charCounterUpdate;
}

function razform() // Réinitialise les valeurs par défaut du formulaire de contact
{
	var st = 'border: 1px solid #9cc6ff; background: #ffffff; color: #666666;'
	new Effect.Morph('nom',{style: st});
	new Effect.Morph('prenom',{style: st});
	new Effect.Morph('societe',{style: st});
	new Effect.Morph('mail',{style: st});
	new Effect.Morph('tel',{style: st});
	new Effect.Morph('fax',{style: st});
	new Effect.Morph('adresse',{style: st});
	new Effect.Morph('cp',{style: st});
	new Effect.Morph('ville',{style: st});
	new Effect.Morph('pays',{style: st});
}

function valform(id) 
{
	var champs = Form.getElements(id);
	var test = true;
	facultatif = new RegExp("[*]$");
	for(n in champs)
	{
		switch(champs[n].type)
		{
			case 'text':
				if(champs[n].title.search(facultatif) == -1)
				{
					// * ne se trouve pas, c'est obligatoire, je teste
					if(champs[n].title==champs[n].value || champs[n].value=='')
					{
						var champid=champs[n].id;
						new Effect.Morph(champid,{style: 'background: #ff0000; color:#ffffff;'});
						test=false;
					}else{
						// Le champ est bien rempli, je continue
						var champid=champs[n].id;
						new Effect.Morph(champid,{style: 'background: #ffffff; color:#000000;'});
					}
				} else {
					// * se trouve c'est donc facultatif, je ne fais rien
				}
			break;
			
			case 'textarea': 
				if(champs[n].title.search(facultatif) == -1)
				{
					// * ne se trouve pas, c'est obligatoire, je teste
					if(champs[n].title==champs[n].value || champs[n].value=='')
					{
						var champid=champs[n].id;
						new Effect.Morph(champid,{style: 'background: #ff0000; color:#ffffff;'});
						test=false;
					}else{
						// Le champ est bien rempli, je continue
						var champid=champs[n].id;
						new Effect.Morph(champid,{style: 'background: #ffffff; color:#000000;'});
					}
				} else {
					// * se trouve c'est donc facultatif, je ne fais rien
				}
			break;
			
			case 'select-one': 
			if(champs[n].title.search(facultatif) == -1)
			{
				// * ne se trouve pas, c'est obligatoire, je teste
				if(champs[n].value=='')
				{
					var champid=champs[n].id;
					new Effect.Morph(champid,{style: 'background: #ff0000; color:#ffffff;'});
					test=false;
				}else{
					// Le champ est bien rempli, je continue
					var champid=champs[n].id;
					new Effect.Morph(champid,{style: 'background: #ffffff; color:#000000;'});
				}
			} else {
				// * se trouve c'est donc facultatif, je ne fais rien
			}
			break;
		}
	}
	return test;
}

function validform() // Récupère les données d'un formulaire et vérifie s'il est correctement rempli avant de le valider
{
	var test=true;
	if(!testchamp('nom','NOM*')){ test=false;}
	if(!testchamp('prenom','PRENOM*')){ test=false;}
/*	if(!testchamp('societe','SOCIETE')){ test=false;} */
	if(!testchamp('mail','ADRESSE E-MAIL*')){ test=false;}
	if(!testchamp('tel','TELEPHONE*')){ test=false;}
/*	if(!testchamp('fax','FAX')){ test=false;} */
	if(!testchamp('adresse','ADRESSE*')){ test=false;}
	if(!testchamp('cp','CODE POSTAL*')){ test=false;}
	if(!testchamp('ville','COMMUNE*')){ test=false;}
	if(!testchamp('pays','PAYS*')){ test=false;}
	return test;
	//if(test==true){return true;} else {return false;}
}

function zappe(id) // Affichage et masquage de divisions par leur ID
{
    var NS4 = (document.layers)?1:0;
    var IE4 = (document.all)?1:0;
    var W3C = (document.getElementById)?1:0;
    if (W3C)
    {var debut = document.getElementById(id);}
    else if (NS4)
    {var debut = document.layers[id];}
    else
    {var debut = document.all[id];}

    if(debut.style.display == 'block')
    {debut.style.display = 'none';}
    else
    {debut.style.display = 'block';}
}

/**
 * Ajout de champs à l'aide du DOM de JS
 * La documentation complète de cette fonction est dispo ici :
 * http://www.quirksmode.org/dom/domform.html
 *
 * La variable suivante doit être initialisée avant l'appel de cette fonction :
 * var counter = 0;
 *
 * Après l'appel de la fonction, appeller ceci pour créer au moins 1 champ :
 * window.onload = dupliquerChamps;
 */

function dupliquerChamps() {
	counter++;
	var newFields = document.getElementById('champ_date').cloneNode(true);
	newFields.id = '';
	newFields.style.display = 'block';
	var newField = newFields.childNodes;
	for (var i=0;i<newField.length;i++) {
		var theName = newField[i].name
		if (theName)
			newField[i].name = theName + counter;
	}
	var insertHere = document.getElementById('ecrire_date_ici');
	insertHere.parentNode.insertBefore(newFields,insertHere);
}
