/*
	Textarea Resizer 0.2
	Allows the user to expand and shrink the height of HTML textareas
	by Chris Barr of Eject Media - http://ejectmedia.net
	Updated and extended to 1.2 by Lennart Pilon - http://ljpilon.nl

	Based on Mootools 1.2 - http://mootools.net

*/

var textareaSizer = {};

textareaSizer = new Class({

	Implements: Options,	
	options: {
		tbResizeAmount:	50,					//amount each button press will resize by
		tbResizeDuration:400,				//how long each resize takes
		tbResizeTransition: Fx.Transitions.Expo.easeOut, //the transition :P
		tbMinSize: 20, 				//always leave a min size or it looks strange
		tbMaxSize: 0,					//set to 0 for no maximum
		tbDescription: '<span class="smaller">Resize textarea: </span>',	//text to display next to the buttons
		tbSkipClass: 'nogrow',			//a class defined on textareas that you do NOT want to resize
		imgGrow: 'arrow_down.png',	// I like silk icons
		imgShrink: 'arrow_up.png',		// check http://famfamfam.com
		autoSize: true				// if you want to expand a textarea which already has content
	},
	initialize: function(options){
		
		options = $merge(this.options, options);
		this.setOptions(options);
		this.makeButtons(options);
	},
	makeButtons: function(options) {
		options = $merge(this.options, options);
		
		//make new arrays of elements
		tbEffects	= [];
		tbGrowers	= [];
		tbShrinkers = [];
		
		//select each textarea without the class to skip
		$$('textarea').each(function(textbox,i){
			if (!textbox.hasClass(options.tbSkipClass)){

				//create the elements
				wrapper = new Element('div').addClass('tbSizeChanger').setStyle('width',textbox.getStyle('width')).injectAfter(textbox);
				tbGrowers[i] = new Element('img').setStyles({'float':'right','display':'block'}).setProperty('src',options.imgGrow).addClass('tbLarger').injectInside(wrapper); 
				tbShrinkers[i] = new Element('img').setStyles({'float':'right','display':'block'}).setProperty('src',options.imgShrink).addClass('tbSmaller').injectInside(wrapper);
				new Element('div').addClass('tbSizeText').set('html', options.tbDescription).setStyle('float','right').injectInside(wrapper);
				new Element('div').setStyle('clear','both').injectInside(wrapper);
				//create new effect
				tbEffects[i] = new Fx.Morph(textbox, {duration: options.tbResizeDuration ,transition: options.tbResizeTransition});
				//add click events
				tbGrowers[i].addEvent('click', function(ev){
					new Event(ev).stop();
					toSize = textbox.getStyle('height').toInt()+options.tbResizeAmount;
					if(toSize >= options.tbMaxSize && options.tbMaxSize !=0){
						tbEffects[i].start({'height': options.tbMaxSize});
					}else{
						tbEffects[i].start({'height': toSize});
					}
				});
				tbShrinkers[i].addEvent('click', function(ev){
					new Event(ev).stop();
					toSize = textbox.getStyle('height').toInt()-options.tbResizeAmount;
					if(toSize <= options.tbMinSize){
						tbEffects[i].start({'height': options.tbMinSize});
					}else{
						tbEffects[i].start({'height': toSize});
					}
				});
				if (options.autoSize) {
					if ( textbox.getScrollSize()['y'] > options.tbMinSize) {
						new Fx.Morph(textbox, {duration: options.tbResizeDuration ,transition: options.tbResizeTransition}).start({'height': textbox.getScrollSize()['y'] + options.tbMinSize});
					}
				}
			}					 					 
		});
	}
});
window.addEvent('domready', function() {
	new textareaSizer();
});