framework.widget.module = {
init:function(moduleElementId, helpEventHandler, beforeToggleHandler, afterToggleHandler)
{
	if (!framework.util.isType(moduleElementId, framework.DataType.STRING) ||
		!framework.util.isType(beforeToggleHandler, framework.DataType.STRING) ||
		!framework.util.isType(afterToggleHandler, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var moduleElement = document.getElementById(moduleElementId);
	if (framework.util.isUndefinedOrNull(moduleElement))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	moduleElement._isExpandedMode = true;
	moduleElement._beforeToggleHandler = beforeToggleHandler;
	moduleElement._afterToggleHandler = afterToggleHandler;
	moduleElement._hasHelp = (moduleElement.getAttribute("hasHelp") == "true");
	if (moduleElement._hasHelp)
	{
		if (!framework.util.isType(helpEventHandler, framework.DataType.FUNCTION))
		{
			
			return framework.Status.UNDEFINED_ARGUMENT;
		}
		var idHelp = moduleElementId + "._headerHelp";
		framework.eventmodel.addElementEvent(idHelp, framework.EventType.CLICK, helpEventHandler);
	}
	var idHeader = moduleElementId + "._header";
	if (moduleElement.getAttribute("collapsable") == "true")
	{
		framework.eventmodel.addElementEvent(idHeader, framework.EventType.CLICK, framework.widget.module._toggleEventHandler);
	}
	if (moduleElement.getAttribute("defaultMode") == "collapsed")
	{
		framework.widget.module.collapse(moduleElementId);
		moduleElement._isExpandedMode = false;
	}
	return framework.Status.SUCCESS;
},
collapse:function(moduleElementId)
{
	if (!framework.util.isType(moduleElementId, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var moduleElement = document.getElementById(moduleElementId);
	if (framework.util.isUndefinedOrNull(moduleElement))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	if (moduleElement._isExpandedMode)
	{
		framework.widget.module._setModuleMode(moduleElementId, false);
	}
	return framework.Status.SUCCESS;
},
expand:function(moduleElementId)
{
	if (!framework.util.isType(moduleElementId, framework.DataType.STRING))
	{
		
		return framework.Status.UNDEFINED_ARGUMENT;
	}
	var moduleElement = document.getElementById(moduleElementId);
	if (framework.util.isUndefinedOrNull(moduleElement))
	{
		
		return framework.Status.ELEMENT_DOES_NOT_EXIST;
	}
	if (!moduleElement._isExpandedMode)
	{
		framework.widget.module._setModuleMode(moduleElementId, true);
	}
	return framework.Status.SUCCESS;
},
isCollapsable:function(moduleElementId)
{
	if (!framework.util.isType(moduleElementId, framework.DataType.STRING))
	{
		
		return null;
	}
	var moduleElement = document.getElementById(moduleElementId);
	if (framework.util.isUndefinedOrNull(moduleElement))
	{
		
		return null;
	}
	if (moduleElement.getAttribute("collapsable") == "true")
	{
		return true;
	}
	else
	{
		return false;
	}
},
isExpanded:function(moduleElementId)
{
	if (!framework.util.isType(moduleElementId, framework.DataType.STRING))
	{
		
		return null;
	}
	var moduleElement = document.getElementById(moduleElementId);
	if (framework.util.isUndefinedOrNull(moduleElement))
	{
		
		return null;
	}
	return moduleElement._isExpandedMode;
},
isCollapsed:function(moduleElementId)
{
	if (!framework.util.isType(moduleElementId, framework.DataType.STRING))
	{
		
		return null;
	}
	var moduleElement = document.getElementById(moduleElementId);
	if (framework.util.isUndefinedOrNull(moduleElement))
	{
		
		return null;
	}
	return !moduleElement._isExpandedMode;
},
_toggleEventHandler:function(event)
{
	var targetEvent = framework.eventmodel.getEventTarget(event);
	if (targetEvent.id.indexOf("._headerHelp") > -1)
	{
		event.stopPropagation();
		return;
	}
	var moduleElementId = this.id.split("._header")[0];
	var moduleElement = document.getElementById(moduleElementId);
	var beforeToggleHandlerReturnValue = true;
	if (!framework.util.isEmpty(moduleElement._beforeToggleHandler))
	{
		var beforeToggleHandler = moduleElement._beforeToggleHandler + "('" + moduleElementId + "')";
		beforeToggleHandlerReturnValue = eval(beforeToggleHandler);
		if (framework.util.isUndefinedOrNull(beforeToggleHandlerReturnValue))
		{
			beforeToggleHandlerReturnValue = false;
		}
	}
	if (beforeToggleHandlerReturnValue)
	{
		moduleElement._isExpandedMode = !moduleElement._isExpandedMode;
		framework.widget.module._setModuleMode(moduleElementId, moduleElement._isExpandedMode);
		if (!framework.util.isEmpty(moduleElement._afterToggleHandler))
		{
			var afterToggleHandler = moduleElement._afterToggleHandler + "('" + moduleElementId + "')";
			eval(afterToggleHandler);
		}
	}
	event.stopPropagation();
},
_setModuleMode:function(moduleElementId, isExpandedMode)
{
	var moduleElement = document.getElementById(moduleElementId);
	var moduleCollapsedId = moduleElementId + "._collapsed";
	var moduleExpandedId = moduleElementId + "._expanded";
	var moduleEditId = moduleElementId + "._headerEdit";
	var moduleHideId = moduleElementId + "._headerHide";
	if (isExpandedMode)
	{
		framework.util.hideElement(moduleCollapsedId);
		framework.util.showElement(moduleExpandedId);
		framework.util.hideElement(moduleEditId);
		framework.util.showElement(moduleHideId);
		moduleElement._isExpandedMode = true;
	}
	else
	{
		framework.util.hideElement(moduleExpandedId);
		framework.util.showElement(moduleCollapsedId);
		framework.util.hideElement(moduleHideId);
		framework.util.showElement(moduleEditId);
		moduleElement._isExpandedMode = false;
	}
},
loaded:true
};
//Version 3.4
