YAHOO.namespace("example.container");

/*
 * Variabili di applicazione
 */
YAHOO.container = null; 

// Timeout per la chiusura automatica della finestra
var timeout = null;

//Proprietà della finestra
var properties = {
		fixedcenter: true,
		draggable: true,
		zindex: 200,
		close: true,
		modal: true,
		visible: false,
		constraintoviewport: true,
		effect: { effect:YAHOO.widget.ContainerEffect.FADE, duration: .3 }	    

}

/*
 * Primo passo: finestra per la richiesta di esecuzione
 * di un'operazione
 */
function hideInputFile(){
	if(document.getElementById('immagine_mms')){
		document.getElementById('immagine_mms').style.visibility = 'hidden';
	}
};


function sendWindow(action, mid, user)
{
	removeTimeout();
	
	if(!YAHOO.container)
		YAHOO.container = new YAHOO.widget.Panel("popup_window", properties);
	YAHOO.container.hideEvent.subscribe(hideInputFile);
    var parts = getStaticWindowParts(action, mid, user);
    
    fillWindow(parts["header"], parts["body"], parts["footer"], true);
}

/*
 * Funzione che genera i parametri per chiamare lo script
 */
function waitWindow(action, mid, user, leaveopen)
{
	removeTimeout();
	
	if(!YAHOO.container)
		YAHOO.container = new YAHOO.widget.Panel("popup_window", properties);
		
	// Finestra di attesa
	if(action == 'sendms'){
		document.getElementById('formOverlay').style.display = 'none';
		document.getElementById('waitingOverlay').style.display = 'block';
	}
	else{
		fillWindow(wait.header, wait.body, wait.footer, false);
	}
	
	executeOperation(action, mid, user, leaveopen);
}

/*
 * Terzo passo, viene generata la finestra per far sapere all'utente
 * se l'operazione sia stata eseguita correttamente o meno
 */
function sentWindow(header, body, footer, leaveopen)
{
	fillWindow(header, body, footer, true);
	
	if(!leaveopen) timeout = window.setTimeout(closeWindow, open_seconds * 1000);
}

function getHTML(url, element){

	var callback = {
		    // Successful XHR response handler
		    success : function (o) {
				
				document.getElementById(element).innerHTML = o.responseText;
				myLightbox = new Lightbox();
		    },
		    failure : function (o) {
		    	alert('error');
		    } 
		};
	document.getElementById(element).innerHTML = '<center><img src="' + loading_image_url + '/ajax-loader.gif"></center>';
    YAHOO.util.Connect.asyncRequest("GET", url, callback);
}

/*
 * Esegue la richiesta allo script PHP per compiere l'operazione identificata da operation
 * per ottenere il tipo di informazione specificato e imposta il risultato alle varie parti
 * della finestra interpretando un JSON
 */
function executeOperation(action, mid, user, leaveopen)
{
	var callback = {
		    // Successful XHR response handler
		    success : function (o) {
				var messages = [];

		        // Use the JSON Utility to parse the data returned from the server
		        try {
		        	messages = YAHOO.lang.JSON.parse(o.responseText);
		        }
		        catch(e) {
		        	messages = { "header": "Errore", "body": "Impossibile interpretare i dati", "footer": "" };
		        }
		        
				if(messages.section != 'show_mms'){
					var body = '<center><div style="" id="sms_box_ok" class="messaggioInvioSuccesso">' +
					'<div id="sms_feedback_ok" class="feedback">' +
						messages.body +
					'</div>' +
					'</div></center>';
				}
				else{
					var mms = YAHOO.lang.JSON.parse(messages.body);
					
					var body = '<center><div class="content">' +
									'<div class="mms">' +
										'<img src="' + mms.image + '" width="300" height="250" alt="" border="0">' +
									'</div>' + 
									'<div class="mmsText">' +
									'<div class="mmsTextContent">' +
										'<strong>Testo del messaggio:</strong><br />' +  
										 mms.text +
									'</div>' +
								'</div></center>';
				}
		        
		        sentWindow(messages.header, body, messages.footer, leaveopen);
		        
		        // controllo se bisogna redirigere
				if(messages.redirect){
					location.href = messages.redirect;
				}
		        
				
				// controllo se ci sono parti da ricaricare
		        switch(messages.section){
					
					case 'remove_friend' : 
						if(document.getElementById('buddylist_ajax')){
							getHTML(base_url + '/amici/vedi_ajax', 'buddylist_ajax');
						}
						break;
					
					case 'add_friend' :
						if(document.getElementById('blacklist_ajax')){
							getHTML(base_url + '/listanera/vedi_ajax', 'blacklist_ajax');
						}
						
						if(document.getElementById('buddylist_ajax')){
							getHTML(base_url + '/amici/vedi_ajax', 'buddylist_ajax');
						}
						break;
						
					case 'remove_blacklist' :
						if(document.getElementById('blacklist_ajax')){
							getHTML(base_url + '/listanera/vedi_ajax', 'blacklist_ajax');
						}
						break;
						
					case 'delete_message':
						// siamo nella pagina che visualizza tutti i messaggi
						if(document.getElementById('message_ajax')){
							getHTML(base_url + '/messaggi/tutti_ajax', 'message_ajax');
						}
						
						// siamo nella pagina che visualizza i messaggi ricevuti
						if(document.getElementById('message_received_ajax')){
							getHTML(base_url + '/messaggi/ricevuti_ajax', 'message_received_ajax');
						}
						
						// siamo nella pagina che visualizza i messaggi inviati
						if(document.getElementById('message_sent_ajax')){
							getHTML(base_url + '/messaggi/inviati_ajax', 'message_sent_ajax');
						}
						
						// da ora in poi considero il caso in cui si accede ai messaggi tramite il webkit
						
						// siamo nella pagina che visualizza tutti i messaggi
						if(document.getElementById('messaggi_t')){
							getHTML(base_url + '/messaggi/tutti_wk_ajax', 'messaggi_t');
						}
						
						// siamo nella pagina che visualizza i messaggi ricevuti
						if(document.getElementById('messaggi_r')){
							getHTML(base_url + '/messaggi/ricevuti_wk_ajax', 'messaggi_r');
						}
						// siamo nella pagina che visualizza i messaggi inviati
						if(document.getElementById('messaggi_i')){
							getHTML(base_url + '/messaggi/inviati_wk_ajax', 'messaggi_i');
						}
						break;
						
					default:
						break;
				}
		    },
		    failure : function (o) {
		    
		    	sentWindow(connectionError.header, connectionError.body, connectionError.footer, leaveopen);
		    } ,
		    upload : function (o){
		    	var messages = [];

		        // Use the JSON Utility to parse the data returned from the server
		        try {
		        	messages = YAHOO.lang.JSON.parse(o.responseText);
		        }
		        catch(e) {
		        	messages = { "header": "Errore", "body": "Impossibile interpretare i dati", "footer": "" };
		        }
		        
		        // controllo se bisogna redirigere
				if(messages.redirect){
					location.href = messages.redirect;
				}	
				
				var body = '<center><div style="" id="sms_box_ok" class="messaggioInvioSuccesso">' +
								'<div id="sms_feedback_ok" class="feedback">' +
									messages.body +
								'</div>' +
							'</div></center>';
		        
		        sentWindow(messages.header, body, messages.footer, leaveopen);
		        
				
				// controllo se ci sono parti da ricaricare
		        switch(messages.section){
					
					case 'remove_friend' : 
						if(document.getElementById('buddylist_ajax')){
							getHTML(base_url + '/amici/vedi_ajax', 'buddylist_ajax');
						}
						break;
					
					case 'add_friend' :
						if(document.getElementById('blacklist_ajax')){
							getHTML(base_url + '/listanera/vedi_ajax', 'blacklist_ajax');
						}
						
						if(document.getElementById('buddylist_ajax')){
							getHTML(base_url + '/amici/vedi_ajax', 'buddylist_ajax');
						}
						break;
						
					case 'remove_blacklist' :
						if(document.getElementById('blacklist_ajax')){
							getHTML(base_url + '/listanera/vedi_ajax', 'blacklist_ajax');
						}
						break;
						
					case 'delete_message':
						// siamo nella pagina che visualizza tutti i messaggi
						if(document.getElementById('message_ajax')){
							getHTML(base_url + '/messaggi/tutti_ajax', 'message_ajax');
						}
						
						// siamo nella pagina che visualizza i messaggi ricevuti
						if(document.getElementById('message_received_ajax')){
							getHTML(base_url + '/messaggi/ricevuti_ajax', 'message_received_ajax');
						}
						
						// siamo nella pagina che visualizza i messaggi inviati
						if(document.getElementById('message_sent_ajax')){
							getHTML(base_url + '/messaggi/inviati_ajax', 'message_sent_ajax');
						}
						break;
						
					case 'update_status' :
						if(document.getElementById('statusupdate_ajax')){
							getHTML(base_url + '/status/vedi_ajax', 'statusupdate_ajax');
						}
						break;
						
					default:
						break;
				}
		    }
		};
	
	var operation = generateActionString(action, { "mid": mid, "user": user });
	if(action == 'sendms'){
		my_form_mms = document.getElementById("form_mms_overlay");
		YAHOO.util.Connect.setForm(my_form_mms,true);
		YAHOO.util.Connect.asyncRequest("POST", operation, callback);
	}
	else if(action == 'updatestatus'){
		form = document.getElementById("status_form");
		YAHOO.util.Connect.setForm(form,true);
		YAHOO.util.Connect.asyncRequest("POST", operation, callback);
	}
	else{
		var conn = YAHOO.util.Connect.asyncRequest("GET", operation, callback);
	}
}

/*
 * Riempie la finestra con i dati
 */
function fillWindow(header, body, footer, close)
{
	YAHOO.container.setHeader(header);
	YAHOO.container.setBody(body);
	YAHOO.container.setFooter(footer);
	
	// Abilita o disabilita la chiusura della finestra
	YAHOO.container.cfg.setProperty("close", close);
	
	YAHOO.container.render(document.body);
    YAHOO.container.show();
}

function closeWindow()
{
	YAHOO.container.hide();
	YAHOO.container = null;
}

function removeTimeout()
{
	if(timeout)
		window.clearTimeout(timeout);
}

function manageStepOne(action, mid, user)
{
	sendWindow(action, mid, user);
}

function manageStepTwo(action, mid, user, leaveopen)
{
	waitWindow(action, mid, user, leaveopen);
}

function getUserData(startingPoint, args)
{
	var user = new Array();
	var j = 0;
	
	for(var i=startingPoint; i<args.length; i++){
		if(args[i]){
			user[user_data[j]] = args[i];
		}
		j++;
	}

	return user;
}