var Downloads = Class.create();
Downloads.prototype = {
	
	container:   null,
	contentNode: null,
	cache:       null,
	header:      null,
	
	initialize: function() {
        
        var options = Object.extend({
        	className:       'downloads_layer',
        	headerClassName: 'header',
        	headline:        'Downloads',
        	closeLabel:      'Schließen'
        }, arguments[0] || {});
		
		this.container = $(document.createElement('div'));
		this.container.setStyle({
			display:  'none',
			position: 'absolute'
		})
		this.container.addClassName(options.className);

		this.header = $(document.createElement('div'));
		this.header.addClassName(options.className);
		this.header.addClassName(options.headerClassName);
		
		// Überschrift
		var headline = $(document.createElement('div'));
		headline.setStyle({ float: 'left', textAlign: 'left' });
		headline.innerHTML = options.headline;
        this.header.appendChild(headline)
		
        // Schließbutton
		var closeDiv = $(document.createElement('div'));
		closeDiv.setStyle({ textAlign: 'right'});
		
		var closeLink = $(document.createElement('a'));
		closeLink.href      = 'javascript:void(0)';
		closeLink.onclick   = this.hide.bind(this);
		closeLink.innerHTML = options.closeLabel;
		closeDiv.appendChild(closeLink);
        this.header.appendChild(closeDiv);
		
		var clearDiv = $(document.createElement('div'));
		clearDiv.setStyle({ clear: 'both' });
		this.header.appendChild(clearDiv);
        this.container.appendChild(this.header);
        
        this.contentNode = $(document.createElement('span'));
        this.container.appendChild(this.contentNode);
        
        document.body.appendChild(this.container);
        
		this.cache     = $H();
	},
	
	//----------------------------------------------------------------------
	
	show: function(id, clicked) {
		
        updateAndShow = function(id, t) {
        	this.cache[id.toString()] = t.responseText;
        	this._show(this.cache[id.toString()]);
        }		
		
		clicked = $(clicked);
		
        if(clicked)
		this._alignTo(clicked);

        if(this.cache.keys().indexOf(id.toString()) != -1) {
            this._show(this.cache[id.toString()]);
            
		} else {
			var url   = baseUrl + 'produkt/downloads/' + id;
		    new Ajax.Request(url, { onSuccess: updateAndShow.bind(this, id) });
		}
	},
	
	//----------------------------------------------------------------------
	
	hide: function() {
		new Effect.DropOut(this.container, { duration: 0.5 });
	},
	
	//----------------------------------------------------------------------
	
	_alignTo: function(alignTo) {
		this.container.alignTo($(alignTo), { 
			hAlign: 'center', vAlign: 'middle'
	   });
	},

    //----------------------------------------------------------------------
	
	_show: function(content) {
		//this.container.innerHTML = '';
		
		//this.container.appendChild(this.header);
		//new Insertion.Bottom(this.container, content);
		this.contentNode.update(content);
		
        new Effect.Appear(this.container, { duration: .5 });
	}
};

//------------------------------------------------------------------------------

var downloads = null;
function showDownloads(eintragId, clickedCell, options) {
	
	if(!downloads)
	downloads = new Downloads(options);
	
	downloads.show(eintragId, clickedCell);
}