jQuery.fn.adherent=function(opt){

  var maxWidth=-1;
  var events ='keyup keydown blur change';
  
  if(opt!=null){
    if(opt.maxWidth!=null)minWidth=opt.maxWidth;
    if(opt.events!=null)minWidth=opt.minWidth;
  }
  
  autoResize = function(e) {
      input=e.data.input;
      var minWidth=80;
      if(input.css('min-width')!='0px')minWidth=input.css('min-width').replace(/px/, '');
      if (input.val()=="") {input.width(minWidth);return }
      var testWidth =$('<div></div>').html(input.val());
      testWidth.css({
        position: 'absolute',
        top: 0,
        right: 0,
        width: 'auto',
        whiteSpace: 'nowrap',
        fontSize: input.css('fontSize'),
        fontFamily: input.css('fontFamily'),
        fontWeight: input.css('fontWeight'),
        letterSpacing: input.css('letterSpacing')
      });
    
      $('body').append(testWidth);
      input.width(Math.max(testWidth.width()+20,minWidth));
      if(maxWidth!=-1)input.width(input.width(), maxWidth);
      $(testWidth).remove();
  }
  
  
  autoResizeTextArea = function(e) {
      if(maxWidth==-1)maxWidth=60;
      textarea=e.data.textarea;
      var nchar=textarea.val().length;
      var cols=textarea.attr('cols');
      var rows=textarea.attr('rows');
      
      if(nchar>maxWidth){
        cols= maxWidth;
        rows= Math.ceil(nchar/cols)+1;
      }else{
        cols=nchar;
        rows=2;
      }
      textarea.attr('cols', cols);
      textarea.attr('rows', rows);
      
      
  }
  
  
  this.each(function(){
    if($(this).attr('tagName')=='INPUT'){
    	$(this).unbind(events);
        $(this).bind(events, {input:$(this)}, autoResize);
        autoResize({data: { input:$(this) } });
    }
    if($(this).attr('tagName')=='TEXTAREA'){
    	 $(this).unbind(events);
    	 $(this).filter('textarea').bind(events, {textarea:$(this)}, autoResizeTextArea);
    	 autoResizeTextArea({data: { textarea:$(this) } });
    }
  });
}


jQuery.fn.toExpand=function(opt){
  
	if(opt == null)opt ={};
  
	if(opt.func == 'expand'){
	  
		log('expand');
        var input=$(this);
        
        var writable;
        
        if( input.attr('tagName')=="INPUT" || input.attr('tagName')=="TEXTAREA" || input.attr('tagName')=="TEXTAREA" ){
        	value = input.val();
        	writable = true;
        }else{
        	value = input.html();
        	writable = false;
        }
        
        textExpander = $('<textarea>').val(value).css({
        	position: 'absolute', 
          	display: 'none',
        	zIndex: 5000  
        });
        
        if(input.hasClass('mod_r') ){
        	textExpander.attr('readonly','readonly');
        }
        input.before(textExpander);
        textExpander.adherent();
        textExpander.fadeIn();
        textExpander.focus();
        
        textExpander.change(function(){
        	input.val(textExpander.val());
        });
        
        textExpander.blur( function(){
            textExpander.fadeOut("fast",function(){ 
            	textExpander.remove(); 
            } );
        });
       
        
    
	}
  
	this.each(function(){
		if($(this).data('init')==1)return;
		$(this).data('init',1);
		log($(this).attr('name'));
		$(this).wrap('<div align="left" style="width:'+($(this).width()+8)+'px"></div>');

	    $(this).click(function(){
			$(this).toExpand({func :'expand'});
	    });
	    
	});

}


jQuery.fn.rightSize=function(opt){

  var rows=1;
  var maxWidth;
  var minSize=10;
  var globalSize=1000;
  var equals=false;
  if(opt!=null){
    if(opt.rows!=null)rows=opt.rows;
    if(opt.maxWidth!=null)maxWidth=opt.maxWidth;
    if(opt.minSize!=null)minSize=opt.minSize;
    if(opt.equals!=null)equals=opt.equals;
  }
  
    
  
  
  setRightSize=function(jquery){
  
    var content='';
    if(jquery.attr('tagName')=='INPUT' || jquery.attr('tagName')=='TEXTAREA')contet=jquery.val();
    else contet=jquery.html();
    
    var testWidth =$('<div></div>').html(contet);
      testWidth.css({
        position: 'absolute',
        top: 0,
        right: 0,
        width: 'auto',
        whiteSpace: 'nowrap',
        fontSize: jquery.css('fontSize'),
        fontFamily: jquery.css('fontFamily'),
        fontWeight: jquery.css('fontWeight'),
        letterSpacing: jquery.css('letterSpacing')
      });
     jquery.append(testWidth);
  
  
  
    if(maxWidth==null)maxWidth=jquery.width();
    if(rows==null)rows=1;

    var fontsize=jquery.css('fontSize').replace(/px/,'');
    
   
    
    
    while(testWidth.width() > maxWidth  && fontsize>=minSize){
        fontsize-=0.5;
        testWidth.css('fontSize',fontsize+'px');
    }
    jquery.css('fontSize',fontsize+'px');
    globalSize=Math.min(globalSize,fontsize);
    $(testWidth).remove();
  }
  
  this.each(function(){
     setRightSize($(this));
  }); 
  if(equals)$(this).css('fontSize',globalSize+'px');
  
}
