/****************************************************************************************************
																						Framework JAVASCRIPT
																							KaComboboxField.js

															Copyright KAHILOA (http://www.kahiloa.com)


	Version 1.0 (28/09/2003) : Version initiale

****************************************************************************************************/


/* Variable applicative indiquant que la classe KaComboboxField a été chargée */
_KaComboboxField_Loaded = true;

function KaComboboxField() {

	// Déclaration des champs
	this.fValues = new Array();
	this.fTexts = new Array();
	this.fSelectedValuesDenied = new Array();
	this.fSelectedTextsDenied = new Array();
	this.fSelectedIndexDenied = new Array();
	this.fIsSelectMultiple = null;
	this.fNbMinSelectedValue = null;
	this.fNbMaxSelectedValue = null;
	
	
	/****************************************************************************************************
		this.setSelectedValuesDenied = function setSelectedValuesDenied(pSelectedValuesDenied)
		Méthode d'affectation du champ fSelectedValuesDenied
	*/
	this.setSelectedValuesDenied = function setSelectedValuesDenied(/*Array*/pSelectedValuesDenied) {
		if ((typeof(pSelectedValuesDenied) == 'object') && (pSelectedValuesDenied != null))
			this.fSelectedValuesDenied = pSelectedValuesDenied;
	}


	/****************************************************************************************************
		this.setSelectedTextsDenied = function setSelectedTextsDenied(pSelectedTextsDenied)
		Méthode d'affectation du champ fSelectedTextsDenied
	*/
	this.setSelectedTextsDenied = function setSelectedTextsDenied(/*Array*/pSelectedTextsDenied) {
		if ((typeof(pSelectedTextsDenied) == 'object') && (pSelectedTextsDenied != null))
			this.fSelectedTextsDenied = pSelectedTextsDenied;
	}


	/****************************************************************************************************
		this.setSelectedIndexDenied = function setSelectedIndexDenied(pSelectedIndexDenied)
		Méthode d'affectation du champ fSelectedIndexDenied
	*/
	this.setSelectedIndexDenied = function setSelectedIndexDenied(/*Array*/pSelectedIndexDenied) {
		if ((typeof(pSelectedIndexDenied) == 'object') && (pSelectedIndexDenied != null))
			this.fSelectedIndexDenied = pSelectedIndexDenied;
	}


	/****************************************************************************************************
		this.setSelectMultiple = function setSelectMultiple()
		Méthode d'affectation du champ fIsSelectMultiple
	*/
	this.setSelectMultiple = function setSelectMultiple() {
		if ((typeof(this.fComponent) == 'object') && (this.fComponent.type != null))
			this.fIsSelectMultiple = (this.fComponent.type == 'select-multiple');
	}


	/****************************************************************************************************
		this.setNbMinSelectedValue = function setNbMinSelectedValue(pNbMinSelectedValue)
		Méthode d'affectation du champ fNbMinSelectedValue
	*/
	this.setNbMinSelectedValue = function setNbMinSelectedValue(/*Number*/pNbMinSelectedValue) {
		if ((typeof(pNbMinSelectedValue) == 'number') && (pNbMinSelectedValue != null) && (!isNaN(pNbMinSelectedValue))) {
			if (this.fIsSelectMultiple)
				this.fNbMinSelectedValue = parseInt(pNbMinSelectedValue);
			else 
				alert('** KaComboboxField : L\'utilisation de la fonction setNbMinSelectedValue pour une liste déroulante à sélection unique est incohérent !');
		}
	}


	/****************************************************************************************************
		this.setNbMaxSelectedValue = function setNbMaxSelectedValue(pNbMaxSelectedValue)
		Méthode d'affectation du champ fNbMaxSelectedValue
	*/
	this.setNbMaxSelectedValue = function setNbMaxSelectedValue(/*Number*/pNbMaxSelectedValue) {
		if ((typeof(pNbMaxSelectedValue) == 'number') && (pNbMaxSelectedValue != null) && (!isNaN(pNbMaxSelectedValue))) {
			if (this.fIsSelectMultiple)
				this.fNbMaxSelectedValue = parseInt(pNbMaxSelectedValue);
			else 
				alert('** KaComboboxField : L\'utilisation de la fonction setNbMaxSelectedValue pour une liste déroulante à sélection unique est incohérent !');
		}
	}


	// Initialisation de l'objet KaComboboxField
	this.init(arguments);
}

if (_KaField_Loaded) {
	/* Héritage de l'objet KaField */
	KaComboboxField.prototype = new KaField();
	//KaComboboxField.prototype.constructor = KaComboboxField;
	KaComboboxField.superclass = KaField.prototype;
}
else
	alert('** KaComboboxField : La classe KaField n\'est pas chargée !');


/*
	Constructeur de la classe KaComboboxField
*/
KaComboboxField.prototype.init = function(/*Array*/pArguments) {
	// Appel à la méthode de la super classe
	//KaComboboxField.superclass.init.call(this, pArguments);
	KaComboboxField_init(this, pArguments);
}


/*
	Méthode de DEBUG
*/
KaComboboxField.prototype.debug = function() {
	// Appel à la méthode de la super classe
	//KaComboboxField.superclass.debug.call(this);
	KaComboboxField_debug(this);
}


/*
	Méthode de vérification du champ
*/
KaComboboxField.prototype.check = function() {
	var vCheckOK = KaComboboxField_check(this);

	return vCheckOK;
}



/****************************************************************************************************
	Méthode qui retourne la valeur "value" de l'item sélectionné du composant.
	En sortie :
		La valeur "value" de l'item sélectionné du composant.

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					23/09/2003 			OLD							IE5+ et Netscape6+				Code original
*/
KaComboboxField.prototype.getSelectedItemsValue = function() {
	var vSelectedItemsValue = new Array();
	for (var i = 0; i < this.fComponent.options.length; i++)
		if (this.fComponent.options[i].selected)
			vSelectedItemsValue[vSelectedItemsValue.length] = this.fComponent.options[i].value;
	return vSelectedItemsValue;
/*
	if ((this.fComponent.options.length > 0) && (this.fComponent.options.selectedIndex > -1))
		return this.fComponent.options[this.fComponent.options.selectedIndex].value;
	else
		return -1;
*/
}


/****************************************************************************************************
	Méthode qui retourne la valeur "text" de l'item sélectionné du composant.
	En sortie :
		La valeur "text" de l'item sélectionné du composant.

	Version				Date								Auteur					Navigateurs										Description des modifications
	---------		 ----------------		-----------			--------------------------		--------------------------------------------------
		1.0 					23/09/2003 			OLD							IE5+ et Netscape6+				Code original
*/
KaComboboxField.prototype.getSelectedItemsText = function() {
	var vSelectedItemsText = new Array();
	for (var i = 0; i < this.fComponent.options.length; i++)
		if (this.fComponent.options[i].selected)
			vSelectedItemsText[vSelectedItemsText.length] = this.fComponent.options[i].text;
	return vSelectedItemsText;
/*
	if ((this.fComponent.options.length > 0) && (this.fComponent.options.selectedIndex > -1))
		return this.fComponent.options[this.fComponent.options.selectedIndex].text;
	else
		return -1;
*/
}



/****************************************************************************************************
	function KaComboboxField_init(pKaComboboxField, pArguments)
	Fonction d'inititialisation de l'object pKaComboboxField avec les paramètres pArguments
	-> utilisée par la méthode KaComboboxField.prototype.init()
	En entrée :
		pKaComboboxField = L'objet de type KaComboboxField à initialiser
		pArguments = Les paramètres pour initialisation
*/
function KaComboboxField_init(/*KaComboboxField*/pKaComboboxField, /*Array*/pArguments) {
	// Appel à la fonction de la super classe
	KaField_init(pKaComboboxField, pArguments);

	pKaComboboxField.setSelectMultiple();
}


/****************************************************************************************************
	function KaComboboxField_debug(pKaComboboxField)
	Fonction de debug qui affiche les champs et leurs valeurs de l'object pKaComboboxField 
	-> utilisée par la méthode KaComboboxField.prototype.debug()
	En entrée :
		pKaComboboxField = L'objet de type KaComboboxField à initialiser
*/
function KaComboboxField_debug(/*KaComboboxField*/pKaComboboxField) {
	// Appel à la fonction de la super classe
	KaField_debug(pKaComboboxField);
	
	var vMessage = '';
	vMessage += 'Values=' + pKaComboboxField.fValues + LF;
	vMessage += 'Texts=' + pKaComboboxField.fTexts + LF;
	vMessage += 'SelectedValuesDenied=' + pKaComboboxField.fSelectedValuesDenied + LF;
	vMessage += 'SelectedTextsDenied=' + pKaComboboxField.fSelectedTextsDenied + LF;
	vMessage += 'SelectedIndexDenied=' + pKaComboboxField.fSelectedIndexDenied + LF;
	vMessage += 'IsSelectMultiple=' + pKaComboboxField.fIsSelectMultiple + LF;
	vMessage += 'NbMinSelectedValue=' + pKaComboboxField.fNbMinSelectedValue + LF;
	vMessage += 'NbMaxSelectedValue=' + pKaComboboxField.fNbMaxSelectedValue + LF;
	alert(vMessage);
}


/****************************************************************************************************
	function KaComboboxField_check(pKaComboboxField)
	Fonction de vérification de la valeur fValues de l'object pKaComboboxField 
	-> utilisée par la méthode KaComboboxField.prototype.check()
	En entrée :
		pKaComboboxField = L'objet de type KaComboboxField à vérifier
*/
function KaComboboxField_check(/*KaComboboxField*/pKaComboboxField) {
	var vCheckOK = true;

	// Affectation des valeurs
	pKaComboboxField.fValues = pKaComboboxField.getSelectedItemsValue();
	pKaComboboxField.fTexts = pKaComboboxField.getSelectedItemsText();

	if ((vCheckOK) && (pKaComboboxField.fNbMinSelectedValue != null) && (pKaComboboxField.fNbMinSelectedValue > 0)) {
		// Vérification que le nombre d'items sélectionnés n'est pas inférieur au nombre minimum d'items à sélectionner
		vCheckOK = (pKaComboboxField.fValues.length >= pKaComboboxField.fNbMinSelectedValue);
		if (!vCheckOK) {
			if (pKaComboboxField.fNbMinSelectedValue > 1)
				pKaComboboxField.alertMessage('checkSelectedValueDenied_1', LOCALE);
			else
				pKaComboboxField.alertMessage('checkSelectedValueDenied_0', LOCALE);
		}
	}
	
	if ((vCheckOK) && (pKaComboboxField.fNbMaxSelectedValue != null) && (pKaComboboxField.fNbMaxSelectedValue > 0)) {
		// Vérification que le nombre d'items sélectionnés n'est pas supérieur au nombre maximum d'items à sélectionner
		vCheckOK = (pKaComboboxField.fValues.length <= pKaComboboxField.fNbMaxSelectedValue);
		if (!vCheckOK) {
			if (pKaComboboxField.fNbMaxSelectedValue > 1)
				pKaComboboxField.alertMessage('checkSelectedValueDenied_3', LOCALE);
			else
				pKaComboboxField.alertMessage('checkSelectedValueDenied_2', LOCALE);
		}
	}

	if ((vCheckOK) && (pKaComboboxField.fSelectedValuesDenied != null) && (pKaComboboxField.fSelectedValuesDenied.length > 0)) {
		// Valeurs "value" interdites à sélectionner
		var vIdValuesDenied = 0;
		while ((vCheckOK) && (vIdValuesDenied < pKaComboboxField.fSelectedValuesDenied.length)) {
			// boucle sur les valeurs interdites
			var vIdValues = 0;
			while ((vCheckOK) && (vIdValues < pKaComboboxField.fValues.length)) {
				// boucle sur les valeurs sélectionnées de la liste déroulante
				vCheckOK = !(pKaComboboxField.fValues[vIdValues] == pKaComboboxField.fSelectedValuesDenied[vIdValuesDenied]);
				vIdValues++;
			}
	
			vIdValuesDenied++;
		}

		if (!vCheckOK) {
			if (pKaComboboxField.fValues.length > 1)
				pKaComboboxField.alertMessage('checkSelectedValueDenied_5', LOCALE);
			else
				pKaComboboxField.alertMessage('checkSelectedValueDenied_4', LOCALE);
		}
	}

	if ((vCheckOK) && (pKaComboboxField.fSelectedTextsDenied != null) && (pKaComboboxField.fSelectedTextsDenied.length > 0)) {
		// Valeurs "text" interdites à sélectionner
		var vIdTextsDenied = 0;
		while ((vCheckOK) && (vIdTextsDenied < pKaComboboxField.fSelectedTextsDenied.length)) {
			// boucle sur les valeurs interdites
			var vIdTexts = 0;
			while ((vCheckOK) && (vIdTexts < pKaComboboxField.fTexts.length)) {
				// boucle sur les valeurs sélectionnées de la liste déroulante
				vCheckOK = !(pKaComboboxField.fTexts[vIdTexts] == pKaComboboxField.fSelectedTextsDenied[vIdTextsDenied]);
				vIdTexts++;
			}
	
			vIdTextsDenied++;
		}

		if (!vCheckOK) {
			if (pKaComboboxField.fValues.length > 1)
				pKaComboboxField.alertMessage('checkSelectedValueDenied_5', LOCALE);
			else
				pKaComboboxField.alertMessage('checkSelectedValueDenied_4', LOCALE);
		}
	}

	if ((vCheckOK) && (pKaComboboxField.fSelectedIndexDenied != null) && (pKaComboboxField.fSelectedIndexDenied.length > 0)) {
		// Positions des items à sélectionner interdites 
		var vIdIndexDenied = 0;
		while ((vCheckOK) && (vIdIndexDenied < pKaComboboxField.fSelectedIndexDenied.length)) {
			// boucle sur les positions interdites des items 
			var vIdItems = parseInt(pKaComboboxField.fSelectedIndexDenied[vIdIndexDenied]);
			vCheckOK = !(pKaComboboxField.fComponent.options[vIdItems].selected);
			vIdIndexDenied++;
		}

		if (!vCheckOK) {
			if (pKaComboboxField.fValues.length > 1)
				pKaComboboxField.alertMessage('checkSelectedValueDenied_5', LOCALE);
			else
				pKaComboboxField.alertMessage('checkSelectedValueDenied_4', LOCALE);
		}
	}

	if (!vCheckOK)
		pKaComboboxField.fComponent.focus();

	return vCheckOK;
}