// variables globales
var myForm;
var commande_id;

window.onload = function init() {
	if (document.forms['form_deuxaf_commandes']) {
		init_form_commandes();

		update_reference_from_qualite();

		if (myForm['toile_reference_for_javascript'] != null) {
			var toile_reference_value = myForm['toile_reference_for_javascript'].value;
			myForm['commande_'+ commande_id +'_toile_reference'].value = toile_reference_value;
		}

		if (myForm['lambrequin_reference_for_javascript'] != null) {
			update_reference_from_qualite('lambrequin');
			var lambrequin_reference_value = myForm['lambrequin_reference_for_javascript'].value;
			myForm['commande_'+ commande_id +'_lambrequin_reference'].value = lambrequin_reference_value;
		}
	}
}

/*
** Implémente tout le JavaScript utilisé sur le formulaire de commande (s'il existe).
*/
function init_form_commandes() {
	// cible le formulaire de commande
	myForm = document.forms['form_deuxaf_commandes'];

	// récupère l'id de la commande en cours
	commande_id = myForm['commande_id_for_javascript'].value;

	// "surveille" les champs qui mettent à jour automatiquement un autre champ

	// toile_qualite
	var toile_qualite = myForm['commande_'+ commande_id +'_toile_qualite'];
	if (toile_qualite != null) {
		toile_qualite.onchange = function update_qualite() {
			update_reference_from_qualite(); // Si toile_qualite change, il faut mettre à jour toile_reference.
			update_values();
		}
	}
	// toile_reference
	var toile_reference = myForm['commande_'+ commande_id +'_toile_reference'];
	if (toile_reference != null) {
		toile_reference.onchange = update_values;
	}

	// toile_qualite_autre
	// si une qualité "autre" est saisie, il faut remettre à zéro les valeurs de toile_qualite et toile_reference
	var toile_qualite_autre = myForm['commande_'+ commande_id +'_toile_qualite_autre'];
	if (toile_qualite_autre != null) {
		toile_qualite_autre.onblur = function update_autre_qualite() {
			update_reference_from_autre_qualite();
			update_values();
		}
	}

	var lambrequin_qualite = myForm['commande_'+ commande_id +'_lambrequin_qualite'];
	if (lambrequin_qualite != null) {
		lambrequin_qualite.onchange = function update_qualite_lambrequin() {
			update_reference_from_qualite('lambrequin'); // Si toile_qualite change, il faut mettre à jour toile_reference.
			update_values();
		}
	}
	var lambrequin_reference = myForm['commande_'+ commande_id +'_lambrequin_reference'];
	if (lambrequin_reference != null) {
		lambrequin_reference.onchange = update_values;
	}
	var lambrequin_qualite_autre = myForm['commande_'+ commande_id +'_lambrequin_qualite_autre'];
	if (lambrequin_qualite_autre != null) {
		lambrequin_qualite_autre.onblur = function update_autre_qualite() {
			update_reference_from_autre_qualite();
			update_values();
		}
	}


	// toile_quantite
	var toile_quantite = myForm['commande_'+ commande_id +'_toile_quantite'];
	if (toile_quantite != null) {
		toile_quantite.onblur = update_values;
	}
	// toile_couture_centrale
	var toile_couture_centrale = myForm['commande_'+ commande_id +'_toile_couture_centrale'];
	if (toile_couture_centrale != null) {
		toile_couture_centrale.onchange = update_values;
	}

	// "surveille" les champs utilisés dans le calcul de coupe_hauteur
	update_values_fields = new Array();
	update_values_fields[update_values_fields.length] = 'toile_hauteur';
	update_values_fields[update_values_fields.length] = 'toile_largeur';
	update_values_fields[update_values_fields.length] = 'toile_finition_haute';
	update_values_fields[update_values_fields.length] = 'toile_finition_basse';
	update_values_fields[update_values_fields.length] = 'toile_attenant';
	update_values_fields[update_values_fields.length] = 'lambrequin_quantite';
	update_values_fields[update_values_fields.length] = 'lambrequin_hauteur';
	update_values_fields[update_values_fields.length] = 'lambrequin_finition_haute';
	update_values_fields[update_values_fields.length] = 'lambrequin_galon_couleur';
	update_values_fields[update_values_fields.length] = 'lambrequin_plomb';
	for (i = 0; i < update_values_fields.length; i++) {
		current_input = myForm['commande_'+ commande_id +'_'+update_values_fields[i]];
		if (current_input != null) {
			current_input.onblur = update_values;
		}
	}

	// NB. Champ particulier car c'est un bouton radio. Pour simplifier le travail, on a attaché
	// un ID à chaque bouton afin de pouvoir le cibler directement dans le DOM.
	for (i = 1; i <= 6; i++) {
		if (getObj('lambrequin_galon_forme_'+i) != null) {
			getObj('lambrequin_galon_forme_'+i).onclick = update_values;
		}
	}

	// lambrequin_plomb
	var lambrequin_plomb = myForm['commande_'+ commande_id +'_lambrequin_plomb'];
	if (lambrequin_plomb != null) {
		lambrequin_plomb.onchange = update_values;
	}

	var store_type = myForm['commande_' + commande_id + '_store_type'];
	if (store_type != null) {
		store_type.onchange = update_values;
		store_type.onkeyup = update_values;
	}

    var store_largeur = myForm['commande_' + commande_id + '_store_largeur'];
	if (store_largeur != null) {
		store_largeur.onblur = update_values;
	}

    var store_quantite  = myForm['commande_' + commande_id + '_store_quantite'];
	if (store_quantite != null) {
		store_quantite.onblur = update_values;
    }

  // si aucune valeur n'est sélectionnée pour le champ "toile_attenant", il ne doit pas apparaître
  update_toile_attenant();

}

/* Met à jour les champs qui doivent l'être automatiquement
NB. Cette fonction met systématiquement à jours TOUS les champs qui doivent
l'être ; on pourrait distinguer quel champ a déclenché la mise à jour pour
ne modifier que le champ correspondant, mais ça n'est pas vraiment utile. */
function update_values() {

  // Dans les lignes ci-dessous, chaque update met 2 champs à jour :
  //   - le champ dont le nom se termine par "_display", qui est disabled
  //     et sert uniquement à afficher la valeur à l'utilisateur
  //   - le champ caché qui sert à passer la valeur dans le $_POST

  // update lambrequin_qualite avec la valeur de toile_qualite
    var toile_qualite = myForm['commande_'+ commande_id +'_toile_qualite'];
	if (getObj('lambrequin_reference_for_javascript') == null && toile_qualite != null) {
		var value = toile_qualite.value;
		var text = toile_qualite.options[value].text;
		if (getObj('commande_'+ commande_id +'_lambrequin_qualite_display') != null) {
			getObj('commande_'+ commande_id +'_lambrequin_qualite_display').innerHTML = text;
		}
		myForm['commande_'+ commande_id +'_lambrequin_qualite'].value = value;
		myForm['commande_'+ commande_id +'_lambrequin_reference'].value = 0;
	}
    
	var toile_qualite_autre = myForm['commande_'+ commande_id +'_toile_qualite_autre'];
	if (toile_qualite_autre != null) {
		var value = myForm['commande_'+ commande_id +'_toile_qualite_autre'].value;
		if (getObj('commande_'+ commande_id +'_lambrequin_qualite_autre_display') != null) {
			getObj('commande_'+ commande_id +'_lambrequin_qualite_autre_display').innerHTML = value;
		}
	}

	var value = null;
	if (myForm['commande_'+ commande_id +'_lambrequin_quantite'] != null) {
		value = myForm['commande_'+ commande_id +'_lambrequin_quantite'].value;
	}
	if (value == null || value > 0) {
		if (myForm['commande_'+ commande_id +'_lambrequin_hauteur'] != null) {
			myForm['commande_'+ commande_id +'_lambrequin_hauteur'].disabled = false;
		}
		if (myForm['commande_'+ commande_id +'_lambrequin_finition_haute'] != null) {
			myForm['commande_'+ commande_id +'_lambrequin_finition_haute'].disabled = false;
		}
		if (myForm['commande_'+ commande_id +'_lambrequin_galon_couleur'] != null) {
			myForm['commande_'+ commande_id +'_lambrequin_galon_couleur'].disabled = false;
		}
		if (myForm['lambrequin_galon_forme_1'] != null) {
			myForm['lambrequin_galon_forme_1'].disabled = false;
			myForm['lambrequin_galon_forme_2'].disabled = false;
			myForm['lambrequin_galon_forme_3'].disabled = false;
			myForm['lambrequin_galon_forme_4'].disabled = false;
			myForm['lambrequin_galon_forme_5'].disabled = false;
			myForm['lambrequin_galon_forme_6'].disabled = false;
		}
		if (myForm['commande_'+ commande_id +'_lambrequin_plomb'] != null) {
			myForm['commande_'+ commande_id +'_lambrequin_plomb'].disabled = false;
		}
		if (myForm['commande_'+ commande_id +'_lambrequin_finition_haute'] != null) {
			myForm['commande_'+ commande_id +'_lambrequin_finition_haute'].disabled = false;
		}
	} else {
		myForm['commande_'+ commande_id +'_lambrequin_hauteur'].disabled = true;
		myForm['commande_'+ commande_id +'_lambrequin_finition_haute'].disabled = true;
		myForm['commande_'+ commande_id +'_lambrequin_galon_couleur'].disabled = true;
		myForm['lambrequin_galon_forme_1'].disabled = true;
		myForm['lambrequin_galon_forme_2'].disabled = true;
		myForm['lambrequin_galon_forme_3'].disabled = true;
		myForm['lambrequin_galon_forme_4'].disabled = true;
		myForm['lambrequin_galon_forme_5'].disabled = true;
		myForm['lambrequin_galon_forme_6'].disabled = true;
		myForm['commande_'+ commande_id +'_lambrequin_plomb'].disabled = true;
		myForm['commande_'+ commande_id +'_lambrequin_finition_haute'].disabled = true;
	}

	// update lambrequin_reference avec la valeur de toile_reference
	var toile_qualite = myForm['commande_'+ commande_id +'_toile_qualite'];
	if (getObj('lambrequin_reference_for_javascript') == null && toile_qualite != null) {
		var value_qualite = toile_qualite.value;
		var value = myForm['commande_'+ commande_id +'_toile_reference'].value;
		var text = array_commande_toile_reference[value_qualite][value];

		getObj('commande_'+ commande_id +'_lambrequin_reference_display').innerHTML = text;
		myForm['commande_'+ commande_id +'_lambrequin_reference'].value = value;
	}

	// update lambrequin_largeur avec la valeur de toile_largeur
	var toile_largeur = myForm['commande_'+ commande_id +'_toile_largeur'];
	if (toile_largeur != null) {
		var value = toile_largeur.value;
		var lamb_largeur_display = getObj('commande_'+ commande_id +'_lambrequin_largeur_display');
		if (lamb_largeur_display != null) {
			lamb_largeur_display.innerHTML = value;
		}
		var lamb_largeur = myForm['commande_'+ commande_id +'_lambrequin_largeur'];
		if (lamb_largeur != null) {
			lamb_largeur.value = value;
		}
	}


	// update coupe_les en fonction de la valeur de toile_largeur et toile_couture_centrale.
	les_display = getObj('commande_'+ commande_id +'_coupe_les_display');
	if (les_display != null) {
		if (value <= 11713) {
			les = 10;
		}
		if (!myForm['commande_'+ commande_id +'_toile_couture_centrale'].checked) {
			if (value <= 10538) {
				les = 9;
			}
		} else {
			if (value <= 10515) {
				les = 9;
			}
		}
		if (value <= 9363) {
			les = 8;
		}
		if (!myForm['commande_'+ commande_id +'_toile_couture_centrale'].checked) {
			if (value <= 8188) {
				les = 7;
			}
		} else {
			if (value <= 8165) {
				les = 7;
			}
		}
		if (value <= 7013) {
			les = 6;
		}
		if (!myForm['commande_'+ commande_id +'_toile_couture_centrale'].checked) {
			if (value <= 5838) les = 5;
		} else {
			if (value <= 5815) les = 5;
		}
		if (value <= 4663) {
			les = 4;
		}
		if (value <= 3488) {
			les = 3;
		}
		if (value <= 2290) {
			les = 2;
		}
		if (value <= 1138) {
			les = 1;
		}
		var toile_quantite = myForm['commande_'+ commande_id +'_toile_quantite'].value;
		les = les * toile_quantite;
		les_display.innerHTML = les;
		myForm['commande_'+ commande_id +'_coupe_les'].value = les;
	}

	// Si toile_finition_basse commence par "F" (i.e. value compris entre 7 et 10 inclus),
	// fais apparaître le champ 'toile_attenant'. Sinon, fais-le disparaître.
	if (myForm['commande_'+ commande_id +'_toile_finition_basse'] != null) {
		var toile_finition_basse = myForm['commande_'+ commande_id +'_toile_finition_basse'].value;
	}
	
	// id HTML du <tr> contenant le champ à faire apparaître/disparaître
	var tr_toile_attenant = getObj('tr_toile_attenant');
	if (tr_toile_attenant != null) {
		if (toile_finition_basse >= 10 && toile_finition_basse <= 14) {
			tr_toile_attenant.style.display = '';
			tr_toile_attenant.style.visibility = 'visible';
		} else {
			myForm['commande_'+ commande_id +'_toile_attenant'].selectedIndex = 0;
			tr_toile_attenant.style.display = 'none';
			tr_toile_attenant.style.visibility = 'hidden';
		}
	}

	// Si toile_finition_basse commence par "F" (i.e. value compris entre 7 et 10 inclus),
	// et que le champ 'toile_attenant' vaut "pince intérieure" ou "pince extérieure" (i.e. value 2 ou 3),
	// le champ 'lambrequin_finition_haute' disparaît.
	if (myForm['commande_'+ commande_id +'_toile_attenant'] != null) {
		var toile_attenant = myForm['commande_'+ commande_id +'_toile_attenant'].value;
		var tr_lambrequin_finition_haute = document.getElementById('tr_lambrequin_finition_haute');   // id HTML du <tr> contenant le champ à faire apparaître/disparaître

		if (toile_finition_basse >= 7 && toile_finition_basse <= 10 && (toile_attenant == 2 || toile_attenant == 3)) {
			myForm['commande_'+ commande_id +'_lambrequin_finition_haute'].selectedIndex = 0;
			tr_lambrequin_finition_haute.style.display = 'none';
			tr_lambrequin_finition_haute.style.visibility = 'hidden';
		} else {
			tr_lambrequin_finition_haute.style.display = '';
			tr_lambrequin_finition_haute.style.visibility = 'visible';
		}
	}

	// Le champ 'lambrequin_plomb' apparaît uniquement si le champ 'lambrequin_galon_forme' vaut 1 (forme droite).
	var tmpfield;
	lambrequin_galon_forme = 0;
	for (i = 1; i <= 6; i++) {
		tmpfield = document.getElementById('lambrequin_galon_forme_' + i);
		if (tmpfield != null && tmpfield.checked) {
			lambrequin_galon_forme = i;
		}
	}
	var tr_lambrequin_plomb = document.getElementById('tr_lambrequin_plomb');   // id HTML du <tr> contenant le champ à faire apparaître/disparaître
	if (tr_lambrequin_plomb != null) {
		if (lambrequin_galon_forme == 1) {
			tr_lambrequin_plomb.style.display = '';
			tr_lambrequin_plomb.style.visibility = 'visible';
		} else {
			myForm['commande_'+ commande_id +'_lambrequin_plomb'].selectedIndex = 0;
			tr_lambrequin_plomb.style.display = 'none';
			tr_lambrequin_plomb.style.visibility = 'hidden';
		}
	}

	//
	// calcul du champ coupe_hauteur
	//

	// récupère les valeurs dont nous avons besoin dans le formulaire
	var toile_hauteur = myForm['commande_'+ commande_id +'_toile_hauteur'];
	if (toile_hauteur != null) {
		toile_hauteur = parseInt(toile_hauteur.value);
		if (isNaN(toile_hauteur)) {
			toile_hauteur = 0;
		}
	}
	var toile_finition_haute = myForm['commande_'+ commande_id +'_toile_finition_haute'];
	if (toile_finition_haute != null) {
		toile_finition_haute = parseInt(toile_finition_haute.value);
		if (isNaN(toile_finition_haute)) {
			toile_finition_haute = 0;
		}
	}
	var toile_finition_basse = myForm['commande_'+ commande_id +'_toile_finition_basse'];
	if (toile_finition_basse != null) {
		toile_finition_basse = parseInt(toile_finition_basse.value);
		if (isNaN(toile_finition_basse)) {
			toile_finition_basse = 0;
		}
	}
	var lambrequin_hauteur = myForm['commande_'+ commande_id +'_lambrequin_hauteur'];
	if (lambrequin_hauteur != null) {
		lambrequin_hauteur = parseInt(lambrequin_hauteur.value);
		if (isNaN(lambrequin_hauteur)) {
			lambrequin_hauteur = 0;
		}
	}
	var lambrequin_finition_haute = myForm['commande_'+ commande_id +'_lambrequin_finition_haute'];
	if (lambrequin_finition_haute != null) {
		lambrequin_finition_haute = lambrequin_finition_haute = parseInt(lambrequin_finition_haute.value);
		if (isNaN(lambrequin_finition_haute)) {
			lambrequin_finition_haute = 0;
		}
	}
	var lambrequin_plomb = myForm['commande_'+ commande_id +'_lambrequin_plomb'];
	if (lambrequin_plomb != null) {
		if (lambrequin_plomb.checked) {
			lambrequin_plomb = 1;
		} else {
			lambrequin_plomb = 0;
		}
	}

	// pré-calculs
	toile_hauteur = toile_hauteur + 50;

	var finition = new Array("", "", "45", "45", "45", "45", "45", "", "", "45", "60", "70", "100", "120", "140");
	toile_finition_haute = 1 * finition[toile_finition_haute];
	toile_finition_basse = 1 * finition[toile_finition_basse];
	lambrequin_finition_haute = 1 * finition[lambrequin_finition_haute];
	lambrequin_finition_basse = 0;
	if (myForm['commande_'+ commande_id +'_lambrequin_galon_couleur'] != null
	&& myForm['commande_'+ commande_id +'_lambrequin_galon_couleur'].value == 32) {
		lambrequin_finition_basse += 40;
	}

	lambrequin_plomb = lambrequin_plomb * 25;

	// calcul final
	var toile_quantite = myForm['commande_'+ commande_id +'_toile_quantite'];
	var lambrequin_quantite = myForm['commande_'+ commande_id +'_lambrequin_quantite'];
	if (toile_quantite != null && lambrequin_quantite != null) {
		var toile_quantite = toile_quantite.value;
		var lambrequin_quantite = lambrequin_quantite.value;
		var coupe_hauteur = (toile_hauteur + toile_finition_haute + toile_finition_basse) + (lambrequin_hauteur + lambrequin_finition_haute + lambrequin_plomb + lambrequin_finition_basse);

		// fait apparaître le résultat dans le formulaire
		coupe_hauteur_display = getObj('commande_'+ commande_id +'_coupe_hauteur_display');
		if (coupe_hauteur_display != null) {
			coupe_hauteur_display.innerHTML = coupe_hauteur;  // champ texte disabled
			myForm['commande_'+ commande_id +'_coupe_hauteur'].value = coupe_hauteur;          // champ caché
		}
		//
		// calcul du champ coupe_metrage
		//
		coupe_metrage_display = getObj('commande_'+ commande_id +'_coupe_metrage_display');
		if (coupe_metrage_display != null) {
			coupe_metrage_display.innerHTML = coupe_hauteur * les; // champ texte disabled
			myForm['commande_'+ commande_id +'_coupe_metrage'].value = coupe_hauteur * les;         // champ caché
		}
	
		getObj('commande_'+ commande_id +'_weight').innerHTML = (coupe_hauteur * les * 0.4) / 1000;
		getObj('commande_'+ commande_id +'_valeurdeclaree').innerHTML = (coupe_hauteur * les * 10.5) / 1000;
	}
	select_type_commande = myForm['commande_' + commande_id + '_store_type'];
	if (select_type_commande != null) {
		for (i=0; i < select_type_commande.options.length; i++) {
			tr_option = getObj('tr_commande_' + commande_id + '_' + select_type_commande.options[i].value + '_option');
			if (tr_option != null) {
				tr_option.style.display = 'none';
				if (i == select_type_commande.selectedIndex) {
					tr_option.style.display = '';
				}
			}
		}
	}
	// pour les stores
	var store_largeur = myForm['commande_'+ commande_id +'_store_largeur'];
	var store_quantite = myForm['commande_'+ commande_id +'_store_quantite'];
	if (store_largeur != null && store_quantite != null) {
		var store_largeur = store_largeur.value;
		var store_quantite = store_quantite.value;
		getObj('commande_'+ commande_id +'_weight').innerHTML = (store_quantite * store_largeur * 11) / 1000;
		getObj('commande_'+ commande_id +'_valeurdeclaree').innerHTML = (store_quantite * store_largeur * 150) / 1000;
	}
}

/*
** Si aucune valeur n'est sélectionnée pour le champ "toile_attenant",
** il ne doit pas apparaître (lorsque le formulaire est affiché pour la 1ère fois).
*/
function update_toile_attenant() {
	// id HTML du <tr> contenant le champ à faire apparaître/disparaître
	var tr_toile_attenant = document.getElementById('tr_toile_attenant');
	if (tr_toile_attenant != null) {
		if (myForm['commande_'+ commande_id +'_toile_attenant'].selectedIndex == 0) {
			tr_toile_attenant.style.display = 'none';
			tr_toile_attenant.style.visibility = 'hidden';
		} else {
			// Ce passage est une sécurité : si le champ contient quelque chose, il sera
			// affiché pour que l'utilisateur puisse faire le nécessaire (par ex, l'effacer ou le modifier).
			// Mais comme par défaut, le champ est affiché, ce passage ne devrait pas être nécessaire.
			tr_toile_attenant.style.display = '';
			tr_toile_attenant.style.visibility = 'visible';
		}
	}
}

/*
** Met à jour le champ toile_reference lorsque le champ toile_qualite change.
*/
function update_reference_from_autre_qualite() {
    var value = myForm['commande_'+ commande_id +'_toile_qualite_autre'].value;
    if (value) {
      myForm['commande_'+ commande_id +'_toile_qualite'].selectedIndex = 0;
      myForm['commande_'+ commande_id +'_toile_reference'].selectedIndex = 0;
    }
	var value = myForm['commande_'+ commande_id +'_lambrequin_qualite_autre'].value;
    if (value) {
      myForm['commande_'+ commande_id +'_lambrequin_qualite'].selectedIndex = 0;
      myForm['commande_'+ commande_id +'_lambrequin_reference'].selectedIndex = 0;
    }
}

function update_reference_from_qualite(type) {
	if (type == null) {
		type = 'toile';
	}

	if (myForm['commande_'+ commande_id +'_'+type+'_qualite'] != null) {
		var toile_qualite_value = myForm['commande_'+ commande_id +'_'+type+'_qualite'].value;
	
		if (toile_qualite_value == '' || toile_qualite_value == 0) return;
	
		var toile_reference = myForm['commande_'+ commande_id +'_'+type+'_reference'];
		var list = array_commande_toile_reference;
	
		toile_reference.options.length = 0;
		var j = 0;
		for (i in list[toile_qualite_value]) {
			toile_reference.options[j++] = new Option(list[toile_qualite_value][i], i, false, false);
		}
	}
}
