/**
 * JavaScript-Datei für den XAJAX-Kalender
 */

/**
 * Kalender-Objekt
 */
function xajax_calendar()
{
	/**
	 * Fadet den Kalender ein!
	 *
	 * @param Integer id ID des Layers
	 * @param Integer size Größenangabe für Höhe und Breite
	 */
	this.scaleIn = function( id, size, with_time )
	{
		if ( size > 260 )
			return;
		
		elem = document.getElementById( 'iframe_layer_' + id );
			
		// Größe einstellen
		elem.style.width 	= size;
		
		if ( !with_time ) {
			var proz = (100 * 235 / 260) / 100;
			elem.style.height = Math.round( proz*size );
		}
		else
			elem.style.height  = size;
		
		// Workaround für den Timeout --> little tricky :-D
		myThis = this;
		this.Timer = window.setTimeout( "myThis.scaleIn('" 
				   + id + "', " 
				   + (size+5) + ", " 
				   + with_time + ")", 5 );
	}
	
	/**
	 * Fadet den Kalender aus!
	 *
	 * @param Integer id ID des Layers
	 * @param Integer size Größenangabe für Höhe und Breite
	 */
	this.scaleOut = function( id, size )
	{
		elem = document.getElementById( 'iframe_layer_' + id );
		
		if ( size <= 0 ) 
		{
			elem.style.display = 'none';
			return;
		}
			
		// Größe einstellen
		elem.style.height 	= size;
		elem.style.width 	= size;
		
		// Workaround für den Timeout --> little tricky :-D
		myThis = this;
		this.Timer = window.setTimeout( "myThis.scaleOut('" + id + "', " + (size-5) + ")", 5 );
	}
	
	/**
	 * Zeigt den Kalender an
	 *
	 * @param Integer id ID des Layers
	 */
	this.show = function( id, with_time, lang )
	{
		var elem = document.getElementById( 'iframe_layer_' + id );
		
		if ( elem.style.display == 'block' )
			return;
			
		var textfield = document.getElementById( 'input_' + id );
		
		var url = '/calendar/xajax.php?calendar_id=' 
				+ id + '&lang=' + lang + '&with_time=' 
				+ with_time + '&datetime=' + textfield.value;
		
		var iframe = top.parent.frames['iframe_' + id];
			iframe.location.href = url;
		
		if ( document.all )
		{
			elem.style.marginLeft 	= 16;
			elem.style.marginTop 	= 15;
		}
			
		elem.style.display 	= 'block';
		
		this.scaleIn( id, 0, with_time );
	}
	
	/**
	 * Schließt den Kalender
	 *
	 * @param Integer id ID des Layers
	 */
	this.close = function( id )
	{
		elem = document.getElementById( 'iframe_layer_' + id );
		
		if ( elem.style.display == 'none' )
			return;
			
		this.scaleOut( id, 260 );
	}
	
	/**
	 * Selektiert den ausgewählten Tag
	 *
	 * @param String id Kalender-ID
	 * @param String day Ausgewählter Tag
	 * @param Integer anz_days Anzahl Tage
	 */
	this.select = function( id, day, anz_days )
	{
		this.deselectAll( id, anz_days );
		
		var elem = document.getElementById( 'calendar_day_' + day + '_' + id );
		elem.className = 'selected';
		
		var formular = document.getElementById( 'calendar_form_' + id );
		formular.elements['day'].value = day;
	}
	
	/**
	 * Hebt die Selektierung für alle Tage auf
	 *
	 * @param String id Kalender-ID
	 * @param Integer anz_days Anzahl Tage
	 */
	this.deselectAll = function( id, anz_days )
	{
		for ( i = 1; i <= anz_days; ++i )
		{
			var day = ( ( i < 10 ) ? '0' + i : i );
			var elem = document.getElementById( 'calendar_day_' + day + '_' + id );
			elem.className = '';
		}
	}
	
	/**
	 * Gibt das selektierte Datum an die Textbox zurück
	 *
	 * @param String id Kalender-ID
	 * @param Object data Formular-Daten
	 */
	this.submit = function( id, data )
	{
		// Datum ins Textfeld schreiben
		xajax__replaceAsync( 
			'Calendar::getDateTimeForText', 
			'input_' + id, 
			'value', 
			data
		);
		
		// Kalender schließen
		this.close( id );
	}
}

// Instanz erstellen
var xajax_calendar = new xajax_calendar();