var SLDescription = new Class({
	initialize: function(options) {
		this.moreHrefDefault= "javascript:;";
		options = $merge({
			'moreText': "[more...]",
			'backText': "[less]",
			'moreHref': this.moreHrefDefault,
			'moreHrefDisable': false,
			'textLength': 0						
			}, options);
		this.divId=options.divId;
		this.moreText=options.moreText;
		this.moreHref=options.moreHref;
		this.moreHrefDisable=options.moreHrefDisable;
		this.backText=options.backText;
		this.textLength=options.textLength;
	},
	
	start: function(){				
		if(this.textLength>0)
			this.startTextLength();
		else
			this.startStyleHeight();
		
	},
	
	startStyleHeight: function(){				
		this.baseHeight=$(this.divId).getStyle('height').toInt();
		$(this.divId).setStyle('height', "");
        var coordinates=null;
        coordinates= $(this.divId).getCoordinates();
        if(coordinates.height<=this.baseHeight){			
                return;
    	} 
		this.longText=$(this.divId).innerHTML;
		var splitText=this.longText.split(' ');
		$(this.divId).innerHTML='';
		var limit=true;
		var i=0;
		var text="";
		this.shortText="";
		for( i=0; i<splitText.length&&limit; i++ ) {
			text+=(splitText[i]+" ");
			$(this.divId).innerHTML=(text+this.moreText);
			coordinates= $(this.divId).getCoordinates();
			if(coordinates.height>this.baseHeight){			
				limit=false;
			} 
			else {
				this.shortText=text;				 
			}
		}
		$(this.divId).innerHTML=this.shortText;
		if (i<splitText.length)
			this.addMore();
	},	
	
	startTextLength: function(){
		this.longText=$(this.divId).innerHTML;
		if(this.longText.length<=this.textLength)
			return;
		var splitText=this.longText.split(' ');
		var limit=true;
		var i=0;
		var text="";
		this.shortText="";
		for( i=0; i<splitText.length&&limit; i++ ) {
			text+=(splitText[i]+" ");
			if(text.length>this.textLength){			
				limit=false;
			} 
			else {
				this.shortText=text;				 
			}
		}
		$(this.divId).innerHTML=this.shortText;
		if (i<splitText.length)
			this.addMore();
		 
	},
	
	addMore:function(){
		if(this.moreHrefDisable == true){
			var span =new Element('span');
			span.appendText(this.moreText);		
			span.injectInside($(this.divId));
		}else{
			var a =new Element('a', {
			    href: this.moreHref
			});
			if(this.moreHref == this.moreHrefDefault){
				 a.addEvent('click', this.more.bind(this));
			}
			a.appendText(this.moreText);		
			a.injectInside($(this.divId));
		}
	},
	
	getShort: function(){
		$(this.divId).innerHTML=this.shortText;
		this.addMore();
	},
	
	addBack:function(){
		var a = new Element('a', {
			events: {click: this.getShort.bind(this)},
			href: 'javascript:;' 
		});
		a.appendText(this.backText);
		a.injectInside($(this.divId));
	},
	
	more:function(){
		$(this.divId).innerHTML=this.longText;
		this.addBack();
	}
	
});


