var FormDates = new Class({

	Implements: [Options, Events, Chain],

	options: {
		contenedor: $empty,
		lang: $empty,
		format: 'default',
		formats:{
			'prueba': '%Y',
			'text_short': '%a, %b de %Y',
			'text_long':  '%A, %e de %B de %Y',
			'normal_date': '%d/%m/%Y',
			'full_time': '%d/%m/%Y a las %H:%M:%S',
			'text_hour': '%e %B %Y, %H:%M Horas',
			'default': '%Y %d %m %H:%M:%S'

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

	get_format: function(format){
		if(value = this.options.formats[format]) return value;
		else return '%Y/%d/%m %H:%M:%S';
	},

	format_date: function(date,classX,formato,lang){
				Locale.use(lang);
				var date = new Date().parse(date);
				var reclass = classX.getProperty("class");
				var eclass = reclass.toString();				
				switch(formato){
					case "full_date"   : 
						var string = new Date.parse(date);
						var time = string.toString();
						break;
					case "diff_words"  :
						var time_to_diff = new Date(date);
						var DateInstance = new Date();
						var time = time_to_diff.timeDiffInWords();
						break;
					case  "custom"     :
						var res = eclass.match(/\['([^\[]+)'\]$/)[1];
						var res = res.split(",");
						var index_res = (res.length-1);
						var time = new Date(date).format(res[index_res]);
						break;

					default  : var time = new Date(date).format(this.get_format(formato)); break;
				}
				var res = eclass.match(/\['([^\[]+)'\]$/)[1];
				var res = res.split(",");
				this.replace_date(time,classX,res[0]);

	},

	replace_date : function(date,classX,htmlclass){
				classX.set('text',date);
				classX.set('class',htmlclass);		
	},

	to_date: function(){	
			var obj = this;
		
			
		

			var contenedor = obj.options.contenedor;
			var lang = obj.options.lang;
			contenedor.getElements("*[class*=fecha]").each(function(classX){
				var eclass = classX.getProperty("class");
				// this classX is especial? 
				switch (true){
					case eclass.contains("full_date") : return obj.format_date(classX.get("html"),classX,"full_date",lang); break;
					case eclass.contains("diff_words") : return obj.format_date(classX.get("html"),classX,"diff_words",lang); break;
					case eclass.contains("custom") : return obj.format_date(classX.get("html"),classX,"custom",lang); break;
				}
				// this classX is defined?
				var defined = false;
				Object.each(obj.options.formats,function(item,index){
					if (eclass.contains(index)){defined = true; obj.format_date(classX.get("html"),classX,index,lang); return false; }
				});
				
				if (!defined) obj.format_date(classX.get("html"),classX,"null",lang);
			});		

						
	}
	


});

