/* Variable applicative indiquant que la classe KaField a ?t? charg?e */
_KaField_Loaded = true;

function KaField() {

	// D?claration des champs
	this.fComponent = null;
	this.fLabel = null;


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


/*
	Fait office de constructeur
*/
KaField.prototype.init = function(/*Array*/pArguments) {
	KaField_init(this, pArguments);
}


/*
	M?thode de DEBUG
*/
KaField.prototype.debug = function() {
	KaField_debug(this);
}



/****************************************************************************************************
	KaField.prototype.setPatternObjectField = function(pPatternStr, pSubstituteStrArray)
	Cette m?thode permet de remplacer dans une chaine de caract?res pPatternStr :
		1/ Les noms des champs de l'objet par leurs valeurs.
		Pour cela, pPatternStr doit contenir les noms des champs de l'objet sous la forme "{fMonChamp}".
		2/  Plusieurs patterns par plusieurs chaines de caract?res de substitution.
		Pour cela,  pPatternStr doit contenir des expressions du type "{$i}" (o? i >= 1)
		Dans ce cas, {$1} sera remplac? par la premi?re chaine de substitution, {$2} par la 2?me chaine de substitution ...
	
	Remarque : Cette fonction est bas?e sur les expressions r?guli?res.
	En entr?e :
		pPatternStr = La chaine de caract?res mod?le que l'on souhaite modifier
		pSubstituteStrArray = Le tableau de chaines de caract?res de substitution (param?tre optionnel)
	En sortie :
		Renvoie la chaine de caract?res initiale mais aliment?e des valeurs des champs et des cha?nes des caract?res de substitution

	Exemple de code :
		// Si la valeur du champ fMonChamp de l'objet this vaut 'NOM'
		var vNewString = this.setPatternObjectField("Le champ {fMonChamp} est obligatoire");
		=> vNewString vaut 'Le champ NOM est obligatoire'
		
	Autre exemple de code :
		// Si la valeur du champ fMonChamp de l'objet this vaut 'NOM'
		var vNewString = this.setPatternObjectField("Le champ {fMonChamp} est {$1}", ['obligatoire']);
		=> vNewString vaut 'Le champ NOM est obligatoire'
*/
KaField.prototype.setPatternObjectField = function(/*String*/pPatternStr, /*Array*/pSubstituteStrArray) {
	if ((typeof(pPatternStr) == 'string') && (pPatternStr.length > 0)) {
		// Remplacement des valeurs des champs de l'objet
		for (var vObj in this) {
			var vType = typeof(eval('this.'+vObj));
			if ((vType != 'function') && (vType != 'object')) {
				// On ne s'int?resse ni aux fonctions ni aux objets de la classe
				pPatternStr = pPatternStr.replace(new RegExp('{' + vObj + '}', 'g'), eval('this.' + vObj));
			}
		}
		
		// Remplacement des param?tres par les chaines de caract?res correspondantes
		if ((arguments.length == 2) && (typeof(pSubstituteStrArray) == 'object')) {
			var vNbSubstituteStr = pSubstituteStrArray.length;
			if ((pPatternStr.length > 0) && (vNbSubstituteStr > 0)) {
				for (var vNumSubstituteStr = 0; vNumSubstituteStr < vNbSubstituteStr; vNumSubstituteStr++) {
					// Remplacement des pattern par chacun des param?tres
					pPatternStr = pPatternStr.replace('{$' + parseInt(vNumSubstituteStr + 1) + '}', pSubstituteStrArray[vNumSubstituteStr]);
					
				}
			}
		}
	}
	
	return pPatternStr;
}



/****************************************************************************************************
	function alertMessage(pCodeMessage, pCodeLangue, pSubstituteStrArray)
	Fonction g?n?rique d'affichage de messages d'erreurs localis?s
	-> utilis?e par la m?thode check()
	En entr?e :
		pCodeMessage = Le code de l'erreur ? afficher (cad le premier indice du tableau gLocaleMessage)
		pCodeLangue = Le code langue d'affichage du message d'erreur (un de ceux d?finis dans gLocale)
		pSubstituteStrArray = Un tableau de valeurs qui remplaceront les {$n} dans le message d'erreur
	En sortie : 
		Un message d'alerte appara?t ? l'?cran
*/
KaField.prototype.alertMessage = function(/*String*/pCodeMessage, /*String*/pCodeLangue, /*Array*/pSubstituteStrArray) {
	if ((pCodeMessage != null) && (pCodeLangue != null)) {
/*
		alert(pCodeLangue);
		alert(gLocale[pCodeLangue]);
		alert(typeof(gLocaleMessage[pCodeMessage]));
*/
		if ((pCodeLangue.length > 0) && (gLocale[pCodeLangue]) && (typeof(gLocaleMessage[pCodeMessage]) != 'undefined') && (gLocaleMessage[pCodeMessage][pCodeLangue])) {
			var vMessage = gLocaleMessage[pCodeMessage][pCodeLangue];
			alert(this.setPatternObjectField(vMessage, pSubstituteStrArray));
		}
		else 
			alert('** Code langue ou message d\'erreur ind?fini !');
	}
}


/****************************************************************************************************
	function warningMessage(pCodeMessage, pCodeLangue, pSubstituteStrArray)
	Fonction g?n?rique d'affichage de messages de confirmation localis?s
	-> utilis?e par la m?thode check()
	En entr?e :
		pCodeMessage = Le code de l'erreur ? afficher (cad le premier indice du tableau gLocaleMessage)
		pCodeLangue = Le code langue d'affichage du message d'erreur (un de ceux d?finis dans gLocale)
		pSubstituteStrArray = Un tableau de valeurs qui remplaceront les {$n} dans le message d'erreur
	En sortie : 
		Un message de confirmation appara?t ? l'?cran
*/
KaField.prototype.warningMessage = function(/*String*/pCodeMessage, /*String*/pCodeLangue, /*Array*/pSubstituteStrArray) {
	var vConfirm = false;
	if ((pCodeMessage != null) && (pCodeLangue != null)) {
		if ((pCodeLangue.length > 0) && (gLocale[pCodeLangue]) && (typeof(gLocaleMessage[pCodeMessage]) != 'undefined') && (gLocaleMessage[pCodeMessage][pCodeLangue])) {
			var vMessage = gLocaleMessage[pCodeMessage][pCodeLangue];
			vConfirm = confirm(this.setPatternObjectField(vMessage, pSubstituteStrArray));
		}
		else 
			alert('** Code langue ou message d\'erreur ind?fini !');
	}
	
	return vConfirm;
}




/****************************************************************************************************
	function KaField_init(pKaField, pArguments)
	Fonction d'inititialisation de l'object pKaField avec les param?tres pArguments
	-> utilis?e par la m?thode KaField.prototype.init()
	En entr?e :
		pKaField = L'objet de type KaField ? initialiser
		pArguments = Les param?tres pour initialisation
*/
function KaField_init(/*KaField*/pKaField, /*Array*/pArguments) {
	if ((typeof(pArguments) != 'undefined') && (pArguments.length == 2)) {
		vInputName = pArguments[0];
		vLabel = pArguments[1];
	}

	if (typeof(vInputName) != 'undefined')
		pKaField.fComponent = vInputName;

	if (typeof(vLabel) != 'undefined')
		pKaField.fLabel = convertHtmlToText(vLabel);
}


/****************************************************************************************************
	function KaField_debug(pKaField)
	Fonction de debug qui affiche les champs et leurs valeurs de l'object pKaField 
	-> utilis?e par la m?thode KaField.prototype.debug()
	En entr?e :
		pKaField = L'objet de type KaField ? initialiser
*/
function KaField_debug(/*KaField*/pKaField) {
	var vMessage = '';
	vMessage += 'InputComponent=' + pKaField.fComponent + LF;
	vMessage += 'Label=' + pKaField.fLabel + LF;
	alert(vMessage);
}

