/** nb de destinataires */
var _adresseeCount = 1;

var DEST_ITEMS = [];

function DestItems(a_itemId) {
	this.items = new Array();
	this.uniqueId = 0;
	this.itemId = a_itemId;
	this.nbItems = 0;
	
	DEST_ITEMS[a_itemId] = this;
	
	// on ajoute le premier élément
	var l_item = xbGetElementById(a_itemId);
	if (l_item) {
		this.addItem(l_item);
	}
}	

DestItems.prototype.addItem = function(a_item) {
	a_item.arrId = this.uniqueId++;
//	this.items.push(a_item);
	this.items[this.items.length] = a_item;
	this.nbItems++;
}
	
DestItems.prototype.removeItem = function(a_item) {
	for (var i = 0; i < this.items.length; i++) {
		if (this.items[i] && (this.items[i].arrId == a_item.arrId)) {
			// c'est le bon
			//this.items.splice(i, 1);
			this.items[i] = null;
			this.nbItems--;
		}
	}
}
	
DestItems.prototype.getLastItem = function() {
	var l_item;
	for (var i = this.items.length; --i >= 0; ) {
		l_item = this.items[i];
		if (l_item) {
			return l_item;
		}
	}
}
	
DestItems.prototype.getNbItems = function() {
	return this.nbItems;
}

	
DestItems.prototype.getItems = function() {
	return this.items;
}

function duplicateItem(a_itemId) {
	var l_item = DEST_ITEMS[a_itemId].getLastItem();
	if (l_item == null) {
		alert("Impossible de trouver le dernier élément ");
		return null;
	}
	//alert("duplicateItem() --> " + l_item.id);

	// on copie l'item	
	var l_itemCopy = l_item.cloneNode(true);
	// on le rajoute comme dernier élément
	DEST_ITEMS[a_itemId].addItem(l_itemCopy);
	
	l_item.parentNode.insertBefore(l_itemCopy, l_item.nextSibling);
	
	var l_minusButton = getChildByName(l_item, "but_moins", true);
	//l_minusButton.style.display = "block";
	l_minusButton.style.visibility = "visible";

	l_minusButton = getChildByName(l_itemCopy, "but_moins", true);
//	l_minusButton.style.display = "block";
	l_minusButton.style.visibility = "visible";
	
	// on "nettoie" les champs "dest_name" et "dest_mail"
	var l_dest = getChildByName(l_itemCopy, "dest_name", true);
	l_dest.value = "";
	l_dest = getChildByName(l_itemCopy, "dest_mail", true);
	l_dest.value = "";
}

function removeItem(a_itemRef) {
	var l_item = getElement(a_itemRef, "tr");
	var l_nb = DEST_ITEMS[l_item.id].getNbItems();
	var l_itemParent = l_item.parentNode;

	if (l_nb > 1) {
		//var l_item = itemRef_a.parentNode.parentNode;
		//alert("removeItem() --> " + itemRef_a.parentNode.parentNode.nodeName);
		l_itemParent.removeChild(l_item);
		
		// on le supprime du tableau
		DEST_ITEMS[l_item.id].removeItem(l_item);
	}
	if (l_nb == 2) {
		var l_minusButton = getChildByName(l_itemParent, "but_moins", true);
//		l_minusButton.style.display = "none";
		l_minusButton.style.visibility = "hidden";
	}
}

function getChildByName(a_parentNodeRef, a_childId, a_recursive) {
	var l_recurse = (a_recursive) ? a_recursive : false;
	var l_childNode = null;
	var l_children = a_parentNodeRef.childNodes;
	for (var i = 0; i < l_children.length; i++) {
		var l_child = l_children[i];
		if (l_child.name == a_childId) {
			return l_child;
		}
		if (l_recurse) {
			l_childNode = getChildByName(l_child, a_childId, l_recurse);
			if (l_childNode != null) {
				return l_childNode;
			}
		}
	}
	return null;
}

/**
 * Sélectionne le timbre désiré.
 * Met à jour l'image et le champ caché.
 * @param	a_index		index de l'image ([1, 4])
 */
/*function selectStamp(a_index) {
	var l_img = xbGetElementById("stamp");

	l_img.src = repImgs + '/stamp0' + a_index + '.jpg';
	document.card["stamp_src"].value = repImgs + '/stamp.gif';
}*/

/**
 * Renvoie true si la chaîne passée est vide ou ne contient que des 'blancs'
 * @param  s chaîne à tester
 * @return true si chaîne 'vide'
 */
function isBlank(s) {
	if ((s == null) || (s == "")) {
		return true;
	}
	var c;
	for (var i = 0; i < s.length; i++) {
		c = s.charAt(i);
		if ((c != ' ') && (c != '\n') && (c != '')) return false;
	}
	return true;
}

/**
 * Renvoie true si la chaîne passée a bien 'une tête de' mail.
 * @param a_strEmail  chaîne à tester
 * @return true si 'tête de' mail
 */
function isValidEmail(a_strEmail){
  var l_validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
  if (a_strEmail.search(l_validRegExp) == -1) {
      return false;
  } 
  return true; 
}


var FIELD_MAND = [['exp_name', 'Sender'], 
				  ['exp_mail', 'E-mail address'], 
				  ['message', 'Message']];

/**
 * Effectue les vérifications de validité des différents champs, et submit le formulaire
 * en fonction du bouton cliqué.
 * @param a_button  bouton cliqué
 */
function verify(a_button) {
	var l_form = document.card;
	var l_ok = true;
	// on teste les différents champs simples
	var l_content;
	var l_text;
	var l_name;
	var l_errorMsg;
	for (var i = 0; i < FIELD_MAND.length; i++) {
		l_name = FIELD_MAND[i][0];
		l_content = l_form[l_name].value;
		if (isBlank(l_content)) {
			l_ok = false;
			l_errorMsg = "compulsory data";
		} else if (i == 1) {
			l_ok = isValidEmail(l_content);
			if (l_ok == false) {
				l_errorMsg = "bad email address";
			}
		} else {
			l_ok = true;
		}
		if (l_ok == false) {
			// on informe l'utilisateur
			l_text = '<span style="color:red">' + FIELD_MAND[i][1] + ' : ' + l_errorMsg + '</span>';
		} else {
			// c'est bon
			l_text = FIELD_MAND[i][1] + '*'
		}
		xbSetInnerHTML(xbGetElementById(l_name + "_div"), l_text);
	}
	
	// on s'occupe des lignes destinataires
	var l_items = DEST_ITEMS['toEmail'].getItems();
	var i, l_nb = l_items.length;
	var l_item;
	var l_pbName = false;
	var l_pbMail = false;
	for (i = 0; i < l_nb; i++) {
		l_item = l_items[i];
		if (l_item == null) {
			// on passe
			continue;
		}
		// on teste le nom
		l_content = getChildByName(l_item, "dest_name", true).value;
		if (isBlank(l_content)) {
			l_pbName = true;
		}
		// on teste le mail
		l_content = getChildByName(l_item, "dest_mail", true).value;
		if (isBlank(l_content) || (isValidEmail(l_content) == false) ) {
			l_pbMail = true;
		}
	}
	// on regarde les resultats
	if (l_pbName == true) {
		// pb
		l_ok = false;
		if (l_nb > 1) {
			l_text = '<span style="color:red">Addressee(s) : incomplete data</span>';
		} else {
			l_text = '<span style="color:red">Addressee(s) : compulsory data</span>';
		}
	} else {
		l_text = 'Destinataire(s)*';
	}
	xbSetInnerHTML(xbGetElementById("dest_name_div"), l_text);

	if (l_pbMail == true) {
		// pb
		l_ok = false;
		l_text = '<span style="color:red">E-mail : no or bad data</span>';
	} else {
		l_text = 'E-mail address(es) *';
	}
	xbSetInnerHTML(xbGetElementById("dest_mail_div"), l_text);

	if (l_ok == true) {
		var l_target = 'previsu';
		openPrevisu(l_target);
		// on redirige la sortie dans celle-ci
		l_form.target = l_target;
	}
	return l_ok;
}

/**
 * Ouvre la popup de prévisualisation.
 * @param a_target   nom de la fenêtre
 */
function openPrevisu(a_target) {
	var l_props = 
					'dependent=no,' + 	//fermeture sans fermeture parent (NS, ne fonctionne pas sur IE)
					'directories=no,' +	//barre d'outils
					'location=no,' +		//zone d'adresse
					'menubar=no,' +		//barre de menu
					'focus=yes,' +
					'status=no,' + 	//barre de statuts
					'resizable=yes,' +	//redimensionnement
					'width=700,' +
					'height=530,' +
					'screenX=0,' +		//position horizontale (NS, ne fonctionne pas sur IE)
					'screenY=0,' +
					'left=0,' +			//position horizontale (IE, ne fonctionne pas sur NS)
					'top=0,' +
					'scrollbars=yes';	//ascenseurs
					
	var l_theWindow = window.open('', a_target, l_props); 
	if (l_theWindow) {
		l_theWindow.focus();
	} else {
		alert("Warning, your browser blocks pop-up");
	}
}


/**
 * Renvoie la notice associée à l'index fournie
 * @param  a_index  index de l'image sélectionnée
 * @return le texte de la notice
 */
function getNotice(a_index) {
	var l_textNotice = '&copy ';
	l_textNotice += IMAGES_ITEMS[a_index][2];
	
	return l_textNotice;
}

/**
 * Met à jour les éléments génériques en fonction de l'image sélectionnée
 * @param  a_diapo  (DiapoComponent)	diaporama
 */
function isSelectedSpecific(a_diapo) {
	// mise à jour des champs contenant le nom de l'image sélectionnée et la notice
	if (und(a_diapo.inputImage)) {
		//a_diapo.inputNotice = xbGetElementById("notice_txt");
		a_diapo.inputImage = xbGetElementById("image_src");
	}
	if (!und(a_diapo.inputImage)) {
		//a_diapo.inputNotice.value = getNotice(a_diapo.index);
		a_diapo.inputImage.value = repImgs + '/' + IMAGES_ITEMS[a_diapo.index][0];
	}
}

/**
 * Nettoie les champs du formulaire, en conservant les paramètres cachés à transmettre au serveur
 */
function clearForm() {
	var l_form = document.card;
	// on conserve les valeurs des paramètres cachés
	var l_noticeTxt = l_form.notice_txt.value;
	var l_imageSrc = l_form.image_src.value;
//	var l_stampSrc = l_form.stamp_src.value;
	
	// on nettoie le formulaire
	l_form.reset();
	
	// on renseigne les valeurs conservées
	l_form.notice_txt.value = l_noticeTxt;
	l_form.image_src.value = l_imageSrc;
//	l_form.stamp_src.value = l_stampSrc;
}

/**
 * Initialisation de la page.
 */
function init() {
	// function principale
	initPage();
	
	// initialisations spécifiques
	var destItems = new DestItems('toEmail');
	
//	selectStamp(1);
}
