function visage_maxlength( obj ) {
	
	if( obj.value.length > obj.maxLength ) {
		obj.value = obj.value.substring( 0, obj.maxLength );
		}
		
	setHTML(
		 obj.statusBar
		,'<strong>' + (d = (obj.maxLength - obj.value.length)) + '</strong>'
			+ ' Character' + (d==1?'':'s') + ' Remaining'
		);

	}
	
function show_definition( def ) {
	def.style.top	=
		(getObjY( this ) + getObjHeight( this ))
			+ 'px';

	def.style.left	=
		(getObjX( this ) + 24 + (isIE() ? 18 : 0))
			+ 'px';
		
	def.style.width =
		(getObjWidth( this ) - 20)
			+ 'px'

	def.style.display = 'block';
	this.style.color = '#3366FF';
	}

function hide_definition( def ) {
	def.style.display = 'none';
	this.style.color = '';
	}

function visage_attach_attributes( ) {

	var txtArr = document.getElementsByTagName( 'textarea' );
	var iptArr = document.getElementsByTagName( 'input' );
	var divArr = document.getElementsByTagName( 'div' );
	
	var ctlArr = [];

	for( var ii = 0; ii < txtArr.length; ii++ ) {
		ctlArr.push( txtArr[ii] );
		}

	for( var ii = 0; ii < iptArr.length; ii++ ) {
		ctlArr.push( iptArr[ii] );
		}
		
	for( var ii = 0; ii < divArr.length; ii++ ) {
		ctlArr.push( divArr[ii] );
		}
		
	if( ctlArr ) {
		for( var ii = 0; ii < ctlArr.length; ii++ ) {
			var attr = ctlArr[ii].className.split( ' ' );
			var ctl	 = ctlArr[ii];
			for( var jj in attr ) {
				if( attr[jj].length > 1 ) {
					var p = attr[jj].split( ':' );
					if( p.length > 1 ) {
						switch( p[0] ) {
						
							case 'forLabel':
								p = p.slice( 1 );
								var lbl = getObj( p.join( ':' ) );
								if( lbl ) {
//									ctl.parentNode.removeChild( ctl );
									document.body.appendChild( ctl );
									ctl.className = 'viHoverDefinition';

									lbl.onfocus
										= lbl.onmouseover
										= ctl.onfocus
										= ctl.onmouseover
										= bind(
											 lbl
											,show_definition
											,ctl
											);

									lbl.onblur
										= ctl.onblur
										= ctl.onmouseout
										= ctl.onclick
										= lbl.onmouseout
										= lbl.onclick
										= bind(
											 lbl
											,hide_definition
											,ctl
											);
									}
								break;
									

							case 'autosize':
								var yes	= (p[1] == 'yes');
								if( yes ) {
									if( !ctlArr[ii].style.height ) {
										var vlen = ctlArr[ii].value.length;
										ctlArr[ii].style.height =
											 parseInt( 6 + vlen / 66 )
											+'em';
										}
									}
								break;
								
							case 'maxlength':
								var maxlen = parseInt( p[1] );
								
								ctlArr[ii].statusBar =
									appendSibling(
										 ctlArr[ii]
										,document.createElement( 'div' )
										);

								ctlArr[ii].statusBar.className =
									'viStatusBar';
										
								ctlArr[ii].maxLength	= parseInt( p[1] );
								
								ctlArr[ii].onkeyup		=
								ctlArr[ii].onchange		=
									bind(
										 null
										,visage_maxlength
										,ctlArr[ii]
										);
									
								if( ctlArr[ii].tagName == 'textarea' ) {
									ctlArr[ii].style.height	=
										parseInt(
											 6 + ctlArr[ii].maxLength / 66
											) + 'em';
									}
										
										
								ctlArr[ii].onchange();
								
								break;
							}
						}
					}
				}
			}
		}
	}

document.onload = chainHandlers( visage_attach_attributes, document.onload );
