/**
 * Objecto que muestra la fecha y/o hora en una capa. Si no puede coger la fecha con la llamada Ajax, coge 
 * la fecha de ordenador de client. 
 */
var Showdatetime = Class.create({
	/**
	 * Constructor del objeto
	 * 
	 * @param {String} url
	 * @param {String} date_layer
	 * @param {String} time_layer
	 * @return void
	 */
	initialize: function(url, date_layer, time_layer){
		this.url = url;
		this.date_layer = date_layer;
		this.time_layer = time_layer;
		
		if (!$(this.time_layer) && !$(this.date_layer))
			return;
		
		this.days = new Array("Domingo", "Lunes", "Martes", "Mi&eacute;rcoles","Jueves", "Viernes", "S&aacute;bado");
		this.months = new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
		this.offset = 0;
		this.roa_time = 0;
		
		this._sync();
	},
	
	/**
	 * Syncronizar con la hora real
	 */
	_sync : function() {
		var me = this;
		
		new Ajax.Request(this.url,
		{
		    method:'get',
		    onSuccess: function(transport){
				me.roa_time = parseInt(transport.responseText);
				if (!me.roa_time || isNaN(me.roa_time)) {
					//No es valido
				} else { 
					if (me.roa_time > 1000000000000) {
						me.offset = me._getOffset();
						me._actualize();
					}
				}		
		    },
		    onFailure: function(){
				//No es valido
			}
		 });
	},
	
	/**
	 * Calcular la diferencia entre la hora de pc y la hora de verdad
	 */
	_getOffset : function(){
		var localDate 	= new Date();
		var localTime 	= parseInt(localDate.getTime());
		var remoteTime	= this.roa_time;
		return (remoteTime - localTime); 
	},
	
	/**
	 * Actualizar la hora
	 */
	_actualize : function(){
		var me = this;
		
		var d	= new Date();
		var t	= parseInt(d.getTime())+this.offset;
		d.setTime(t);
		
		if ($(this.time_layer)) {
			var hour = d.getHours();
			hour = (hour < 10) ? "0" + hour : hour;
			var minute = d.getMinutes();
			minute = (minute < 10) ? "0" + minute : minute;
			var sec = d.getSeconds();
			sec = (sec < 10) ? "0" + sec : sec;
			$(this.time_layer).update(hour + ":" + minute + ":" + sec);
		}
		
		if ($(this.date_layer)) {
			var weekdays = this.days[d.getDay()];
			var day = d.getDate();
			var month = this.months[d.getMonth()];
			var year = d.getFullYear();
			$(this.date_layer).update(weekdays + ", " + day + " de " + month + " " + year);
		}
		
		setTimeout(this._actualize.bind(this), 1000);
		
	}	
})
