//variabili globali d'utilit? 
var RTB_lastDialog;
var RTB_callbackFunc_array = new Array();
var RTB_currentDialog_array = new Array();
var RTB_editor_array = new Array();
var selected_array = new Array(); //"close";
var runningEffect_array = new Array(); //false;
var childrenArray = new Array(); 
var parentArray = new Array(); 
var lastChild = new Array(); 

var RTB_focusDialog = new Array(); 

var giveFocus = true; 

//chiude una dialog chiamando o meno 
//la callback 
function RTB_hideTargetDialog(dialog, confirmed, href, portfoliOption){


	try
	{
    //se ? gi? in corso un effetto sulla dialog 
	//l'operazione ? annullata 
	if (runningEffect_array[dialog.id]) 
        return;
    
	//se la finestra ha un figlio apperto 
	//l'operazione è annullata 
	if (childrenArray[dialog.id] != null && childrenArray[dialog.id] > 0) {
		haveFocus($(lastChild[dialog.id])); 
		giveFocus = false; 
		return;
	}
	//la dialog corrente ? deselezionata 
    selected_array[dialog.id] = false;
    
	//si memorizza l'id della dialog corrente 
    idImageDialog = dialog.id;
}
catch(e)
{}

    try {
		
		//si valorizzano gli oggetti di servizio per 
		//l'effetto Shrink     
        element1 = $(idImageDialog + "Content");
        element2 = $(idImageDialog);
        //effetto Shrink 
		Effect.Shrink(idImageDialog + 'Opacity', {
        
			//hanlder sul before start 
            beforeStart: function(effect){
                //si pone a true il flag RunningEffect relativo 
				//alla dialog corrente 
				runningEffect_array[idImageDialog] = true;
                //si rende invisibile l'elemento element1 
				element1.style.display = 'none';
                //se confirmed ? true si richiama la callback 
				if (confirmed) 
                    RTB_callbackFunc_array[idImageDialog](RTB_editor);
           	},
            
            //hanlder sull'afterFinish 
            afterFinish: function(effect){
                //si pone a false il flag RunningEffect relativo 
				//alla dialog corrente
				runningEffect_array[idImageDialog] = false;
                //si rende invisibile l'elemento element2 
                element2.style.display = 'none';
				if(RTB_focusDialog.length >0)              
                haveFocus(document.getElementById(RTB_focusDialog.pop()),"false"); 
				
				//si sottrae il numero di figli aperti 
				//relativi al padre della finestra appena chiusa
			if(childrenArray[parentArray[dialog.id]] >0)
				childrenArray[parentArray[dialog.id]]--;
				
				if (dialog.id.indexOf("portfolio") != -1) {
				portfolioMode = false; 
				$('img6').src = 'img/melao_portfolio_bianco.png';
				selected = 'close'; 
				}
				
		if(href !=null)
		{
			openWin(href,"editor");
		}
            },
            direction: 'center'
        });
        
    } 
    catch (e) {
    
    	alert(e.Message); 
        
    }
    
    return false;
    
}

//chiude le dialog 
function RTB_hideAll(){
    for (dialogProp in RTB_currentDialog_array) {
        if (RTB_currentDialog_array[dialogProp].style) {
			RTB_hideTargetDialog(RTB_currentDialog_array[dialogProp], false);
			//RTB_currentDialog_array[dialogProp].style.display = 'none';
		}
    }
}


//forza la chiusura di tutte le finestre 
function RTB_forceHide(){
    for (dialogProp in RTB_currentDialog_array) {
        if (RTB_currentDialog_array[dialogProp].style 
		&& 
		RTB_currentDialog_array[dialogProp].id != "portfolioDialog"
		) 
		{
			RTB_currentDialog_array[dialogProp].style.display = 'none';
			selected_array[dialogProp] = false;
		}
	}
 
}

//esegue la callback della dialog corrente senza chiuderla 
function RTB_confirmDialog(confirmed){
    if (RTB_currentDialog != null) {
    
        if (confirmed == true) 
            RTB_callbackFunc(RTB_editor);
    }
}

function haveFocus(dialog,addFocus)
{	
	//non è possibile dare il fuoco alla finestra corrente
	//questa situazione si crea quando si sta cercando di chiudere una 
	//finestra che ha almeno una dialog figlia aperta; in questo caso
	//si lascia il focus alla finestra finestra e si impedisce la chiusura della
	//finestra madre. 
	if(!giveFocus)
	{	
	
		giveFocus = true; 
		return; 
	}
	dialog.style.zIndex = parseInt(parseInt(zIndexMax(true)) + 1);
	if(dialog == dialogInFocus) return;
	if(addFocus==null || addFocus !="false")
		RTB_focusDialog.push(dialogInFocus.id); 
	
	var divs = getElementsByClass("dialog"); 
	maxZIndex = 0; 
	
	lastDialogInFocus = dialogInFocus;  
	dialogInFocus = dialog; 
	
	for(i=0; i<divs.length; i++)
	{	if(divs[i].id !=dialog.id)
			new Effect.Opacity(divs[i].id+"Verde", {
					duration: 0,
					from: 0.6,
					to: 0.6
			});
		else if(divs[i].id == "portfolioDialog") 
		{ 
			new Effect.Opacity(dialog.id+"Verde", {
							duration: 0,
							from: 1,
							to: 1
			});
		
		}
		else if(divs[i].id == "editorDialog" && parseInt($('editorDialogOpacity').style.width) > 379 )
		{
			new Effect.Opacity(dialog.id+"Verde", {
										duration: 0,
										from: 1,
										to: 1
			});
		
		}
		else 
			new Effect.Opacity(dialog.id+"Verde", {
					duration: 0,
					from: 0.9,
					to: 0.9
			});
 
	}
	
	
	
	
}


//apre una dialog associandogli un editor ed una callback 
function RTB_showDialog(editor, dialog, callback){
	parent ="" ;

	if(editor.name =="richTextBox_ifr")
		parent = "editorDialog"; 
	else 
		parent = editor.id; 
	
	if (!selected_array[dialog.id])
	{
		childrenArray[parent] ++;
		parentArray[dialog.id] = parent;  
		lastChild[parent] = dialog.id; 
	}
	//se ? partito l'effetto per openwin
	if(runningEffect)
		return;
 
	//per alcune dialog non si chiama il forceHide 
	if( dialog.id == 'uploadDialog' 
		|| dialog.id == 'galleryDialog' 
		|| dialog.id == 'zoomDialog' 
		|| portfolioMode== true  
	)
	{}
	else
	{ 
		RTB_forceHide(); 
	}
		
    //se ? in corso un effetto sulla  dialog corrente 
	//l'operazione ? annullata  
	if (RTB_currentDialog != null && runningEffect_array[RTB_currentDialog.id]) {
		return;
	}
	// se si tent di aprire la dialog che si st? gi? aprendo si annulla l'operazione
	if (runningEffect_array[dialog.id]) {
		return;
	}
	
    var parent = document.getElementById(editor.name);
    
	//swicht tra last e current dialog 
	RTB_lastDialog = RTB_currentDialog;
	
	
	if(!RTB_currentDialog){
		var editorRealId = document.getElementById(editor.name).id;
		RTB_lastDialog = document.getElementById(editorRealId);
	}
	
	//si imposta la nuova current dialog 
    RTB_currentDialog = dialog;
    RTB_currentDialog_array[dialog.id] = dialog;
    
	//si setta la callback 
    RTB_callbackFunc = callback;
    RTB_callbackFunc_array[dialog.id] = callback;
    
    RTB_editor = parent;

    // se la dialog corrente non ? 
	//gi? stata selezionata 
	
    if (!selected_array[dialog.id]) 
        
		try {
            //si seleziona la dialog corrente 
			selected_array[dialog.id] = true;
            //si memorizza l'id 
			idImageDialog = dialog.id;
            //si centra la dialog 
            centraElemento(idImageDialog);
            //operazioni preliminari all'apertura 
			document.getElementById(idImageDialog + "Content").style.display = "none";
            document.getElementById(idImageDialog + "Opacity").style.display = "none";
            document.getElementById(idImageDialog).style.display = "block";
            element1 = $(idImageDialog + 'Content');
            element2 = $(idImageDialog);
            
			//effetto grow 
            Effect.Grow(idImageDialog + 'Opacity', {
                //handler sul before Start 
				beforeStart: function(effect){
                    //si pone a true il flag runningEffect relativo alla dialog corrente 
					runningEffect_array[idImageDialog] = true;
					//si impone uno zIndex max alla dialog 
			        dialog.style.zIndex =parseInt(parseInt(zIndexMax()) + 1); 
			        haveFocus(dialog); 
                },
                
				//hanlder sull'after Finish 
				afterFinish: function(effect){
                    element1.style.display = "block";

                    dialog.focus(); 
                    //se la dialog corrente ? la gallery si imposta la scrollbar
					if (dialog.id.indexOf("gallery") != -1) {
						var docH = parseInt( $("galleryDiv").offsetHeight);
						var scroller = $("galleryScroller");
						var scrollArea = $("galleryScrollArea");
						var container = $("galleryContainer");
						var content = $("galleryDiv");
						initScroll(docH, scroller, scrollArea, container, content);
					}
					//se la dialog corrente ? il portfolio si imposta la scrollbar
					if (dialog.id.indexOf("portfolio") != -1) {
		
						var docH = parseInt( $("portfolioDiv").offsetHeight -14);
						var scroller = $("portfolioScroller");
						var scrollArea = $("portfolioScrollArea");
						var container = $("portfolioContainer");
						var content = $("portfolioDiv");
						initScroll(docH, scroller, scrollArea, container, content);
					}
					//si pone a false il flag runningEffect relativo alla dialog corrente
                    runningEffect_array[idImageDialog] = false;
					
                },
                direction: 'center'
            });
        } 
        catch (e) {
        
            dialog.style.display = "block";
        }
    else {
      ; //  RTB_hideTargetDialog(dialog, false);
    }

}


