var Collapsable = {	
	init: function(inputBlocks,args){
		var me;
		if(args)
		 me = new Collapsable._init(inputBlocks,args)
		else
		 me = new Collapsable._init(inputBlocks,'');
		return me;
	},
	_init:function(){
		this._initialize.apply(this,arguments);
	}
};

Collapsable._init.prototype = {
		_initialize:function(inputBlocks,arguments){
		  this.blocks = new Array();
		  this.labels = new Object();
		 if(arguments.labels){
			this.labels = arguments.labels;
		  }else{
			this.labels.more = '[more]';
			this.labels.close = '[close]';
		  }
			for(var i=0;i<inputBlocks.length;i++){
				inputBlocks[i].writeAttribute('id',i);
				this.blocks.push(inputBlocks[i]);
			}
		},
		getBlockText:function(i){
			if(!isNaN(i) && i<this.blocks.length){
				var p = this.getBlock(i);				
				if (p.childElements().length > 1){
					var firstChild = p.firstDescendant();
					return firstChild.innerHTML.length > 0 ? firstChild.innerHTML : '';
				} else {
					return null;
				}
				
			}
		},
		getBlock:function(i){
			if(!isNaN(i) && i<this.blocks.length){
				return this.blocks[i];
			}
		},
		
		switchEls:function(e){
			this.el1.toggle();
			this.el2.toggle();
			if(this.el1.visible()){
				this.switcher.innerHTML=this.labels.close
			}else{
				this.switcher.innerHTML=this.labels.more
			}		
		},
		
		createMoreSpan:function(i){
			var moreSpan = new Element('span');
			moreSpan.writeAttribute('id','span'+i);
			Event.observe(moreSpan,'mouseover',function(e){Event.element(e).addClassName('moreover')});
			Event.observe(moreSpan,'mouseout',function(e){Event.element(e).removeClassName('moreover')});
			moreSpan.addClassName('morespan');
			moreSpan.insert(this.labels.more);
			return moreSpan;
		},
		
	tutto:function(){
			for(var i=0;i<this.blocks.length;i++){
				var p = $(this.blocks[i]);
				var text = this.getBlockText(i);
				if (text != null){
					var headerText = text;//.substr(0,20)+'...';
					var showDiv = new Element('div',{'class':p.className});
					showDiv.innerHTML = headerText;
					var more=this.createMoreSpan(i); 
					Event.observe(more,'click',this.switchEls.bindAsEventListener({el1:p,el2:showDiv,switcher:more,labels:this.labels}));
					p.hide();
					p.insert({after:showDiv});
					showDiv.insert({after:more});
				}
			}
		}
};

