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 normal_date = new Date().format(date);
				var parsed_date = new Date().parse(date);
				var reclass = classX.getProperty("class");
				var eclass = reclass.toString();				
				switch(formato){
					case "full_date"   : 
						var string = new Date.parse(parsed_date);
						var time = string.toString();
						break;
					case "diff_words"  :
						var time_to_diff = new Date(parsed_date);
						var DateInstance = new Date();
						var time = time_to_diff.timeDiffInWords();
						break;
					case "fcritica"    :
						var news_date = new Date.parse(normal_date);
						var ThisDate=news_date.getDate();
						if (ThisDate<10) ThisDate="0"+ThisDate; 
						var current_date = news_date.get('Year')+'-'+(news_date.get('Month')+1)+'-'+ThisDate;
						var time = "Valencia,"+news_date.format('%e de %B de %Y | Actualizado a las %H:%M h.');
						break;
					case "dccv_hoy"    :
						var y = new Date();	var m = new Date().decrement();	var YesterdayDate = m.getDate();
						if (YesterdayDate<10) YesterdayDate="0"+YesterdayDate; 	var ThisDate=y.getDate();
						if (ThisDate<10) ThisDate="0"+ThisDate; var current_date = y.get('Year')+'-'+(y.get('Month')+1)+'-'+ThisDate;
						var yesterday = m.get('Year')+'-'+(m.get('Month')+1)+'-'+YesterdayDate;
						var news_date = new Date.parse(normal_date);
						var newsDate = news_date.get('Date');
						if (newsDate<10) newsDate="0"+newsDate; 
						var new_news_date = news_date.get('Year')+'-'+(news_date.get('Month')+1)+'-'+newsDate;
						if(current_date==new_news_date){var time = "Hoy";}else if(new_news_date==yesterday){var time = "Ayer";}else{var time = "Hemeroteca";}
						break;
					case  "custom"     :
						var res = eclass.match(/\['([^\[]+)'\]$/)[1];
						var res = res.split(",");
						var index_res = (res.length-1);
						var time = new Date(parsed_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;
					case eclass.contains("dccv_hoy") : return obj.format_date(classX.get("html"),classX,"dccv_hoy",lang); break;
					case eclass.contains("fcritica") : return obj.format_date(classX.get("html"),classX,"fcritica",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);
			});		

						
	}
	


});

