//-----------------------------------------------
//--- Options in the menu for the panels --------
//-----------------------------------------------
/** Set as visible/hidden the panel container of the panel caller. */
function panelOptionShowHide(event) {
	var panel = getElementById("panelOptions");
	var lastPanel = panel.getAttribute("panel");
	var container = getElementById(lastPanel + "Container");
	
	var isHidden = container.style.display == "none" || ((! container.style.display == "") && ! container.style.display == "block");
	
	try {
		if (isHidden) {
			Effect.BlindDown(container, { duration: 0.5 });
		} else {
			Effect.BlindUp(container, { duration: 0.5 });
		}
	} catch (e) {
		container.style.display = isHidden?"block":"none";
	}
	
	hiddeElement("panelOptions",event);
	
	var urlToCall = PANEL_UPDATE_STATE.replace("[STATE]",(isHidden?"false":"true"));
	AjAX_POOL.processNext(new AjaxCaller('GET',urlToCall + lastPanel,null,processModalXml,true,false));
	return false;
}

/** Set as maximized the panel caller. */
function panelOptionMaximize(event) {
	var panel = getElementById("panelOptions");
	var lastPanel = panel.getAttribute("panel");

	hiddeElement("panelOptions",event);
	
	AJAX_PANEL.showLoading();
	doLink(PANEL_MAXIMIZE + lastPanel);
}

/** Panel position changed and the server must be notified of the new positions. */
function updatePanelPosition(panel,container,position,event) {
	var urlToCall = PANEL_UPDATE_POSITION.replace("[CONTAINER]",container);
	urlToCall = urlToCall.replace("[POSITION]",position);

	AjAX_POOL.processNext(new AjaxCaller('GET',urlToCall + panel,null,processModalXml,true,false));
}

/** The user selected to remove the panel from the current view. Ask for confirmation and notified the server */
function panelOptionClose(event) {
	hiddeElement("panelOptions",event);

	if (confirm(LBL_PANEL_CONF_CLOSE)) {
		var panel = getElementById("panelOptions");
		var lastPanel = panel.getAttribute("panel");
		var container = getElementById(lastPanel + "ContainerDrag");

		try { Effect.Puff(container); } catch (e) { container.parentNode.removeChild(container); } 
		
		AjAX_POOL.processNext(new AjaxCaller('GET',PANEL_REMOVE_URL + lastPanel,null,null,true,false));
	}
	
	return false;
}

/** The user selected to refresh the panel content */
function panelOptionRefresh(event) {
	var panel = getElementById("panelOptions");
	var lastPanel = panel.getAttribute("panel");
	doAjaxRefreshPanel(lastPanel);
	hiddeElement("panelOptions",event);
	
	return false;
}

/** The user selected to configure the panel, send the notification to server for configuration */
function panelOptionConfiguration(event) {
	var panel = getElementById("panelOptions");
	var lastPanel = panel.getAttribute("panel");
	doAjaxConfigurationPanel(lastPanel,true);
	hiddeElement("panelOptions",event);
	
	return false;
}

/** The user request the help of the panel, send the notification to server for show it */
function panelOptionHelp(event) {
	var panel = getElementById("panelOptions");
	var lastPanel = panel.getAttribute("panel");
	doAjaxHelpPanel(lastPanel,true);
	hiddeElement("panelOptions",event);
	
	return false;
}

//-----------------------------------------------
//--- Panel options events ----------------------
//-----------------------------------------------

function optionsPanelClose(milisecControl) {
	var panel = getElementById("panelOptions");
	var panelControl = panel.getAttribute("autoClose");

	milisecControl += "";
	
	if (panelControl == milisecControl) try { Effect.Hide(panel.id, { duration: 0.5 }); } catch (e) { hiddeElement(panel.id,null); };
	return false;
}

/* if the parameters of the methods are modified, check PanelEngine.generateHtmlSection */
function optionsPanelShow(panelName,enableRefresh,enableMaximize,enableMinMax,enableConfiguration,enableHelp,enableClose,src,event) {
	var milisec = (new Date()).getTime();
	
	var panel = getElementById("panelOptions");
	var lastPanel = panel.getAttribute("panel");
	var mustHide = isElementVisible("panelOptions") && lastPanel == panelName;
	var mustShow = (! isElementVisible("panelOptions")) || lastPanel != panelName;
	
	panel.setAttribute("panel",panelName);
	panel.setAttribute("autoClose",milisec);
	
	setTimeout("optionsPanelClose(" + milisec + ")",3000);
	
	if (mustHide) try { Effect.Hide(panel, { duration: 0.5 }); } catch (e) { hiddeElement(panel,event); }

	if (mustShow) {
		if (enableRefresh)			showElement("panelOptionsRefresh");			else hiddeElement("panelOptionsRefresh",event);
		if (enableMaximize)			showElement("panelOptionsMaximized");		else hiddeElement("panelOptionsMaximized",event);
		if (enableMinMax)			showElement("panelOptionsShowHide");		else hiddeElement("panelOptionsShowHide",event);
		if (enableConfiguration)	showElement("panelOptionsConfiguration");	else hiddeElement("panelOptionsConfiguration",event);
		if (enableHelp)				showElement("panelOptionsHelp");			else hiddeElement("panelOptionsHelp",event);
		if (enableClose)			showElement("panelOptionsClose");			else hiddeElement("panelOptionsClose",event);
		
		showElementRelative(panel.id,'s','r', false, src, event);
		Effect.Appear(panel.id, { duration: 0.5 });
	}
	return false;
}

//-----------------------------------------------
//--- Ajax callers ------------------------------
//-----------------------------------------------
function callAjaxRedrawPanel() {
	var ajaxCallXml = getLastFunctionAjaxCall();
	var panel = ajaxCallXml.getAttribute("panel");
	var html = ajaxCallXml.getElementsByTagName("html").item(0).firstChild.nodeValue;
	document.getElementById(panel + "Container").innerHTML = html;
}

function callAjaxRewritePanel() {
	var ajaxCallXml = getLastFunctionAjaxCall();
	var panel = ajaxCallXml.getAttribute("panel");
	var doRefresh = ajaxCallXml.getAttribute("callRefresh");
	var html = ajaxCallXml.getElementsByTagName("html").item(0).firstChild.nodeValue;
	document.getElementById(panel + "ContainerDrag").innerHTML = html;
	AJAX_PANEL.closeAll();
	if (toBoolean(doRefresh)) doAjaxRefreshPanel(panel);
}

function callAjaxRefreshPanel() {
	var ajaxCallXml = getLastFunctionAjaxCall();
	var panel = ajaxCallXml.getAttribute("panel");
	AJAX_PANEL.closeAll();
	doAjaxRefreshPanel(panel);
}

function doMultipleAjaxRefreshPanel(panels) {
	for (var i = 0; i < panels.length; i++) {
		doAjaxRefreshPanel(panels[i]);
	}
}

function doAjaxRefreshPanel(panel,showWait) {
	if (showWait == null) showWait = false;
	var addHiddenMessage = false;
	if (showWait) AJAX_PANEL.showLoading(); else addHiddenMessage = panelLoadingMessageShow(panel);
	AjAX_POOL.processNext(new AjaxCaller('GET',PANEL_REFRESH_URL + panel,null,processModalXml,true,showWait,(addHiddenMessage ? panelLoadingMessageHidde : null)));
}

function doAjaxConfigurationPanel(panel,showWait) {
	if (showWait == null) showWait = false;
	if (showWait) AJAX_PANEL.showLoading();
	AjAX_POOL.processNext(new AjaxCaller('GET',PANEL_CONFIGURATION_URL + panel,null,processGenericModalXml,true,showWait));
}

function doAjaxHelpPanel(panel,showWait) {
	if (showWait == null) showWait = false;
	if (showWait) AJAX_PANEL.showLoading();
	AjAX_POOL.processNext(new AjaxCaller('GET',PANEL_HELP_URL + panel,null,processGenericModalXml,true,showWait));
}

var PANEL_LOADING = new Array();

function panelLoadingMessageHidde() {
	removeElement(PANEL_LOADING.pop());
}

function panelLoadingMessageShow(panel) {
	var container = getElementById(panel + "Container");
	if (container == null) return false;
	
	var newDiv = document.createElement("div");
	newDiv.style.width = container.offsetWidth + "px";
	newDiv.style.height = container.offsetHeight + "px";
	newDiv.className = "loading";
	newDiv.style.backgroundImage = "url(" + IMG_AJAX_WAIT + ")";
	
	PANEL_LOADING.push(newDiv);
	getElementById(panel + "ContainerDrag").insertBefore(newDiv,container);
	
	return true;
}
