dojo.provide("actijscore.parser");

dojo.declare("actijscore.parser", null, {
	// Liste des définitions permettant de l'initialisation des fonctionnalités JS
	arrDefinitions: [],

	constructor: function() {
		this.arrDefinitions = [];
	},

	/**
	 * Ajoute une définition à la liste des définitions
	 * @param strQuery String Le sélecteur CSS pour récupérer les éléments du DOM sur lesquels ajouter la fonctionnalité
	 * @param funcFunction Function Constructeur de la classe JS de la fonctionnalité
	 * @param objParams Object Un objet contenant les paramètres additionnels à passer à la fonctionnalité
	 */
	addDefinition: function(strQuery, funcFunction, objParams) {
		this.arrDefinitions.push({"strQuery": strQuery, "funcFunction": funcFunction, "objParams": objParams});
	},

	/**
	 * Parse l'arborescence DOM d'un noeud et initialise les fonctionnalités JS
	 * @param domRoot DOM Noeud racine de l'arborescence à parser
	 */
	parse: function(domRoot) {
		dojo.forEach(this.arrDefinitions, function(objDefinition) {
			var objDefinition = objDefinition;
			dojo.query(objDefinition.strQuery, domRoot).forEach(function(domElem) {
				new objDefinition.funcFunction(objDefinition.objParams, domElem);
			});
		});
	}
});

actiJSCoreParser = new actijscore.parser();

// Au chargement, on parse tout le DOM
dojo.addOnLoad(function() {actiJSCoreParser.parse(dojo.body());});
