// collapse/expand lists
document.attachEvent( 'onclick', function( ev ){
	var target= ev.target || ev.srcElement;
	do {
		if(( target.nodeName === 'A' )||( target.nodeName === 'INPUT' )) break;
		if( /\bj-list-tumbler\b/.test( target.className ) ){
			do {
				if( /\bj-list-collapsed\b/.test( target.className ) )
					target.className= target.className.replace( /\bj-list-collapsed\b/, 'j-list-expanded' )
				else if( /\bj-list-expanded\b/.test( target.className ) )
					target.className= target.className.replace( /\bj-list-expanded\b/, 'j-list-collapsed' )
				else continue;
				break;
			} while( target= target.parentNode )
		}
	} while( target= target.parentNode )
})

// recursive expand lists
document.attachEvent( 'ondblclick', function( ev ){
	var target= ev.target || ev.srcElement;
	do {
		if(( target.nodeName === 'A' )&&( target.nodeName === 'INPUT' )) break;
		if( /\bj-list-tumbler\b/.test( target.className ) ){
			do {
				if( /\bj-list-(collapsed|expanded)\b/.test( target.className ) ){
					var process= function( node ){
						if( node.className )
							node.className= node.className
								.replace( /\bj-list-collapsed\b/, 'j-list-expanded' )
					}
					process( target );
					var nodes= target.getElementsByTagName( '*' );
					for( var i in nodes ) process( nodes[ i ] );
				} else continue;
				break;
			} while( target= target.parentNode )
		}
	} while( target= target.parentNode )
})

// recursive checkbox process
document.attachEvent( 'onclick', function( ev ){
	var target= ev.target || ev.srcElement;
	if( !/\bj-complex-flag\b/.test( target.className ) ) return;
	var flag= target;
	do {
		if( /\bj-flag-list\b/.test( target.className ) ){
			var inputs= target.getElementsByTagName( 'input' );
			for( var i= 0; i < inputs.length; ++i ){
				var f= inputs[ i ];
				if( f.type == 'checkbox' ) f.checked= flag.checked;					
			}
			break;
		}
	} while( target= target.parentNode )
})

// hover support
document.attachEvent( 'onmouseover', function( ev ){
	var target= ev.target || ev.srcElement;
	do {
		if( /\bj-lover\b/.test( target.className ) )
			target.className= target.className
				.replace( /\bj-lover\b/, 'j-hover' )
	} while( target= target.parentNode )
})
document.attachEvent( 'onmouseout', function( ev ){
	var target= ev.target || ev.srcElement;
	do {
		if( /\bj-hover\b/.test( target.className ) )
			target.className= target.className
				.replace( /\bj-hover\b/, 'j-lover' )
	} while( target= target.parentNode )
})
