// $Id: ToggleFormsVis.js 15793 2008-08-21 15:36:49Z igor $
/*
USAGE:
----------------
<script language="JavaScript" src="/js/ToggleFormsVis.js"></script>
<script language="JavaScript">
	var ToggleFormsVisObj = new ToggleFormsVis( ['exp_list', 'mim'] );
	
	// Опционально можно задать функцию, которая будет вызываться при сворачивании/разворачивании фолдера
	// folder_name	- например 'exp_list'
	// visibility	- если true, значит фолдер открыли, если false - закрыли.
	ToggleFormsVisObj.after_toggle_user_defined_func( folder_name, visibility ) {
		...
	}
</script>

<a name="exp_list"></a>
<div class="folding_forms">
	<div class="folding_headers" id="folding_headers_exp_list" onClick="ToggleFormsVisObj.toggle_display('exp_list')">
		<h4>Export list of genes</h4>
	</div>
	<div style="display: none;" id="form_exp_list">
		...
	</div>
</div>

<a name="mim"></a>
<div class="folding_mim">
	<div class="folding_headers" id="folding_headers_mim" onClick="ToggleFormsVisObj.toggle_display('mim')">
		<h4>OMIM</h4>
	</div>
	<div style="display: none;" id="form_mim">
		...
	</div>
</div>
----------------
ToggleFormsVisObj.collapse_expand(1)	// Открыть все фолдеры
ToggleFormsVisObj.collapse_expand()		// Закрыть все фолдеры
ToggleFormsVisObj.disable( 'exp_list' )	// Блокирует фолдер (делает бледным и не дает разворачиваться)
ToggleFormsVisObj.enable( 'exp_list' )	// Активирует фолдер (обратное предыдущему)
*/

function ToggleFormsVis( FormNames ) {
	this.init( FormNames );
}

ToggleFormsVis.prototype = new function () {
	
	this.images = {
		'arrow_left'	: 	{ src : 'images/plus.gif' },
		'arrow_down'	: 	{ src : 'images/minus.gif' }
	};
	
	//---
	this.init = function( FormNames ) {
		this.Forms 		= {};
		this.FormNames	= FormNames || [];
	}
	
	//---
	this.preload_images = function () {
		for ( var image in this.images ) {
			var Img = new Image();
			Img.src = this.images[image]['src'];
			
			this.images[image]['img'] = Img;
		}
	}
	
	//--- Сворачивает или разворачивает все формы
	this.collapse_expand = function ( is_expand ) {
		is_expand = ( is_expand == null ) ? 0 : 1;
		for( var i=0; i<this.FormNames.length; i++) {
			this.toggle_display( this.FormNames[i], is_expand);
		}
	}
	
	this.init_folder = function( folder_name ) {
		if ( this.Forms[folder_name] == null  ) {
			this.Forms[folder_name] = {
				visibility	:	false,
				disabled	:	false,
				form		:	document.getElementById('form_'				+ folder_name ),
				img 		:	document.getElementById('arrow_'			+ folder_name ),
				header		:	document.getElementById('folding_headers_'	+ folder_name )
			}
		}
		
		return this.Forms[folder_name];
	}
	
	//---
	this.toggle_display = function ( folder_name, show_hide ) {
		var folderObj = this.init_folder( folder_name );
		
		//---
		if ( folderObj['form'] != null && !folderObj['disabled'] ) {
		
			//---
			if (
				show_hide == 0 || 
				( show_hide ==  null && folderObj['visibility'] ) 
			) {
				folderObj['visibility']			= false;
				folderObj['form'].style.display 	= 'none';
				
				if ( folderObj['header'] != null ) {
					folderObj['header'].className 	= 'folding_headers';
				}
				
				if ( folderObj['img'] != null ) {
					folderObj['img'].src = this.images['arrow_left']['img'].src;
				}
			}
			else if (
				show_hide == 1 || 
				( show_hide ==  null && !folderObj['visibility'] ) 
			) {
				folderObj['visibility']			= true;
				folderObj['form'].style.display 	= '';
				
				if ( folderObj['header'] != null ) {
					folderObj['header'].className 	= 'folding_headers folding_headers_open';
				}
				
				if ( folderObj['img'] != null ) {
					folderObj['img'].src = this.images['arrow_down']['img'].src;
				}
			}
		}
		
		//---
		this.after_toggle_user_defined_func( folder_name, folderObj['visibility'] );
	}
	
	this.enable = function( folder_name ) {
		var folderObj = this.init_folder( folder_name );
		
		folderObj['disabled'] = false;
		
		folderObj['header'].className = folderObj['header'].className.replace( / *folding_headers_disabled/g, '' );
	}
	
	this.disable = function( folder_name ) {
		var folderObj = this.init_folder( folder_name );
		
		folderObj['disabled'] = true;
		
		folderObj['header'].className += ' folding_headers_disabled';
	}
	
	//---
	this.after_toggle_user_defined_func = function( folder_name, visibility ) {};
	
	this.preload_images();
}

function go_to_form( form_name ) {
		
		//---
		if ( ToggleFormsVisObj != null ) {
			
			//--- Collapse All
			ToggleFormsVisObj.collapse_expand();
			
			//--- Expand only from
			ToggleFormsVisObj.toggle_display( form_name );
		}
	}
