/**
 * This is the binding file to add the jquery-ui.panel custom widget to the struts2.jquery.ui framework
 */

Struts2jQuery.widget("panel", function($elem, options){
	
	var panelOptions = {};
	
	if(options) { 

		panelOptions.collapsible = options.collapsible == "true";
		panelOptions.resizable = options.resizable == "true";
		panelOptions.reloadable = options.reloadable == "true";
		panelOptions.src = options.src;
		
		if(options.title) {	panelOptions.title = options.title || null;} 
		
		if(options.options) {
	        var userOptionsStr = options.options;
	        var userOptions = window[userOptionsStr];
	        if (!userOptions) {
	        	userOptions = eval ("( " + userOptionsStr + " )" );
	        }
	        $.extend(panelOptions, userOptions);
		}
	}
	
	//execute the widget function
	$elem.panel(panelOptions);
	
	//using built-in container load handler
	var loadHandlerName = '_struts2_jquery_container_load';
	
	var $content = (".apposit-ui-panel-content", $elem);
	this.base($content, options);
	this.container($content, options, loadHandlerName);
	
	//subscribe panel to container loader and publish for initial load
	if(options.src) {

		//hijack panel reload button
		if(options.reloadable) {
			var $reloader = (".apposit-ui-panel-reload", $elem);
			$reloader.unbind('click');
			var reloadTopic = "_apposit_ui_panel_reloadTopic_" + options.id;
			$reloader.publishOnEvent('click', reloadTopic);
			options.reloadtopics = reloadTopic;
		}
		
		//load the contents the first time
    	var panelTopic = '_struts2_jquery_topic_load_' + options.id;
    	$content.subscribe(panelTopic, loadHandlerName);
    	$content.publish(panelTopic,options);		
	}	
});