var HTMLElements = new Class({

	Implements: [Options, Events],

	options: {
		/*
		onSetup: function(){},
		onElementCreated: function(){},
		onElementsCreated: function(){},
		*/
		data: {},
		parentContainer: document.body,
		callbacks: {
			elementCreated: 'elementCreated',
			elementsCreated: 'elementsCreated'
		}
	},

	initialize: function(options){
		this.setOptions(options);
		this.setup();
	},

	setup: function(options){
		this.fireEvent('setup');
		this.start();
	},

	start: function(){
		this.processData(this.options.data, this.options.parentContainer);
		this.fireEvent(this.options.callbacks.elementsCreated, this.options.parentContainer);
	},

	processData: function(data, parent){
		data.each(function(element) {
			this.make(element, parent);
		}.bind(this));
  },

	make: function(data, parent){
		var newElement = new Element(data.type);
		if (data.id) newElement.set('id', data.id);
		if (data.cssClass) newElement.addClass(data.cssClass);
		if (data.text) newElement.set('text', data.text);
		if (data.rel) newElement.set('rel', data.rel);
		if (data.title) newElement.set('title', data.title);
		if (data.type == 'a' && data.href) newElement.set('href', data.href);
		if (data.configuration) newElement.store('configuration', data.configuration);
		parent.grab(newElement);

	  this.fireEvent(this.options.callbacks.elementCreated, newElement);

		if (data.elements) this.processData(data.elements, newElement);
	}

});

