<!--


jQuery.fn.iWin = function( cfg ) {
	// Controllo per bloccare l'esecuzione in caso l'oggetto non esista piů.                     //
	if ( $(this).attr('class') != 'iWin' ) return $(this);
	
	///////////////////////////////////////////////////////////////////////////////////////////////
	// Parametri di configurazione predefiniti.                                                  //
	///////////////////////////////////////////////////////////////////////////////////////////////
	cfg = cfg || {};
	// Titolo della finestra:                                                                    //
	cfg.title			= cfg.title				|| "iWin - Floating Window";
	// Definisce se la finestra č visibile o meno (true|false):                                  //
	cfg.visible			= cfg.visible			|| true;
	// Definizione delle dimensioni iniziali della finestra.                                     //
	// E' possibile assegnare ogni singola dimensione, l'altra viene considerata predefinita.    //
	cfg.size			= cfg.size				|| {}
	if ( cfg.size.width+"" 		== "undefined" ) cfg.size.width 	= 300;
	if ( cfg.size.height+"" 	== "undefined" ) cfg.size.height 	= 200;
	// Definizione della posizione iniziale della finestra.                                      //
	// La posizione centrata č calcolata in base al HTML che viene impostato a "height:100%"css. //
	// Il posizionamento predefinito č centrato nello schermo per ogni singola dimensione.       //
	$('html').css('height', '100%');cfg.centerSize = $.iUtil.getSize(document.getElementsByTagName('html')[0]);cfg.centerSize.left = parseInt(cfg.centerSize.wb/2-cfg.size.width/2);cfg.centerSize.top = parseInt(cfg.centerSize.hb/2-cfg.size.height/2);
	cfg.position		= cfg.position			|| cfg.centerSize;
	if ( cfg.position.top+"" 	== "undefined" ) cfg.position.top 	= cfg.centerSize.top;
	if ( cfg.position.left+""	== "undefined" ) cfg.position.left	= cfg.centerSize.left;
	// Impostazione predefinita per la chiusura della finestra.                                  //
	cfg.close			= cfg.close				|| "hide";
	// Url da caricare all'interno della finestra.                                               //
	cfg.url				= cfg.url 				|| '';
	///////////////////////////////////////////////////////////////////////////////////////////////
	// Definizione delle procedure di callback.                                                  //
	//                                                                                           //
	// onClose: chiamata dopo la chiusura della finestra.                                        //
	//          method: "hide|destroy".                                                          //
	cfg.onClose			= typeof cfg.onClose 		== "function" ? cfg.onClose : function(){};
	//                                                                                           //
	// beforeClose: chiamata prima della chiusura. Riceve dimensioni e posizione finestra.       //
	//			size:       {width|height} // Dimensione in pixel.                               //
	//			position:   {top|left}     // Posizione in pixel.                                //
	cfg.beforeClose		= typeof cfg.beforeClose	== "function" ? cfg.beforeClose : function(){};
	//                                                                                           //
	// Entra in funzione quando il contenuto dinamico della finestra č stato caricato.           //
	cfg.success			= typeof cfg.success		== "function" ? cfg.success		: function(){};
	
	
	

	// Isolo l'id della finestra da generare per utilizzarlo all'interno della logica del plugin.//
	cfg.objId	= '#' + $(this).attr('id');
	cfg.objSid	= $(this).attr('id');
	
	
	// MODAL: Utilizzo BlockUI per creare la finestra modale. /////////////////////////////////////
	if ( cfg.modal ) {
		
		$.blockUI($(this));
		
		$('.blockMsg')
			.css('border','0px solid #fff')
			.css('margin','0')
			.css('top','0')
			.css('left','0')
			.css('cursor','none');
	} // EndOf: MODAL /////////////////////////////////////////////////////////////////////////////
	
	
	
	// Controllo per richiamo plugin su elemento giŕ costruito.                                  //
	// Questo codice serve per applicare nuove configurazioni alla finestra ad esempio far       //
	// riapparire una finestra nascosta.                                                         //
	if ( $(cfg.objId).attr('iWin') == 'done' ) {
		// Rivisualizzazione della finestra in caso di precedente chiusura (nascosta).           //
		if ( $(this).css('display') == 'none' && cfg.visible ) $(this).fadeIn();
		
		// Applico le preimpostazioni iniziali alla finestra.                                    //
		// Dimensioni:                                                                           //
		$(cfg.objId).css('width', cfg.size.width+'px');
		$(cfg.objId).css('height', cfg.size.height+'px');
		// Posizione:                                                                            //
		$(cfg.objId).css('top', cfg.position.top+'px');
		$(cfg.objId).css('left', cfg.position.left+'px');
		// Applico le proprietŕ:                                                                 //
		iWin_rePaint(cfg.objId, cfg.size, {top: 10, left: 10});
		
		// Posizionamento sopra ad ogni altra finestra.                                          //
		iWin_onTop(cfg.objId);
		
		return false;
	} // Fine controllo richiamo plugin su elemento giŕ costruito. ////////////////////////////////
	
	
	
	// Marcatura finestra esistente e controllo inserimento tag di gestione finestra.            //
	if ( $(cfg.objId).attr('iWin') != 'done' ) {
		// Marcatura della finestra come finestra iWin esistente.                                //
		$(cfg.objId).attr('iWin', 'done')
		
		
		
		// Costruzione del markup interno alla finestra.                                         //
		// Barra del titolo:                                                                     //
		cfg.myMarkup = '<div class="iWin_top"><div class="iWin_topContent">' + cfg.title + '</div><img class="iWin_imgMin" /><img class="iWin_imgMax" /><img class="iWin_imgClose" /></div>';
		// Barra del footer:                                                                     //
		cfg.myMarkup+= '<div class="iWin_bottom"><div class="iWin_bottomContent">&nbsp;</div></div>';
		// Barra del contenuto:                                                                  //
		cfg.myMarkup+= '<div class="iWin_mainContent">' + $(cfg.objId).html() + '</div>';
		// Immagine resize:                                                                      //
		cfg.myMarkup+= '<img class="iWin_imgResize" />';
		
		// Inserisco il codice xHTML nel box della finestra.                                     //
		$(cfg.objId).html(cfg.myMarkup);
		
		
		// Assegno un ID al div dei contenuti (serve per i ridimensionamenti).                   //
		$(cfg.objId + ' .iWin_mainContent').attr('id', cfg.objSid+'_mmWc');
		// Assegna un ID al div della barra del titolo (serve per i ridimensionamenti).          //
		$(cfg.objId + ' .iWin_top').attr('id', cfg.objSid+'_mmTc');
		// Assegna un ID al div dell'immagine per il ridimensionamento. (serve per i ridimension)//
		$(cfg.objId + ' .iWin_imgResize').attr('id', cfg.objSid+'_mmRs');
		
		
		
		// Applico le preimpostazioni iniziali alla finestra.                                    //
		// Dimensioni:                                                                           //
		$(cfg.objId).css('width', cfg.size.width+'px');
		$(cfg.objId).css('height', cfg.size.height+'px');
		// Posizione:                                                                            //
		$(cfg.objId).css('top', cfg.position.top+'px');
		$(cfg.objId).css('left', cfg.position.left+'px');
		// Applico le proprietŕ:                                                                 //
		iWin_rePaint(cfg.objId, cfg.size, {top: 10, left: 10});
		
	} // Fine gestione della creazione del markup interno di gestione finestra. ///////////////////
	
	
	
	
	
	
	
	// Visualizzazione iniziale della finestra.                                                  //
	if ( $(this).css('display') == 'none' && cfg.visible ) $(this).fadeIn();
	
	
	
	// Posizionamento sopra ad ogni altra finestra.                                              //
	iWin_onTop(cfg.objId);
	
	
	$(this).click(function() {
		// Posizionamento sopra ad ogni altra finestra.                                          //
		iWin_onTop(cfg.objId);
	});
	
	
	// Chiusura della finestra.                                                                  //
	$(this).find('.iWin_imgClose').click(function() {
		
		// Applico la callback prima della chiusura.                                             //
		size = $.iUtil.getSize(document.getElementById(cfg.objSid));size.width = size.wb; size.height = size.hb;
		position = $.iUtil.getPosition(document.getElementById(cfg.objSid));position.top = position.y;position.left = position.x
		if ( cfg.beforeClose.apply(this, new Array(size, position)) === false ) return false;
		
		
		$(cfg.objId).fadeOut("slow",function(){
			if ( cfg.close == "destroy" ) $(cfg.objId).remove();
			if ( cfg.modal ) $.unblockUI();
		});
		
		
		// Applico la callback di chiusura finestra.                                             //
		cfg.onClose.apply(this, new Array(cfg.close));
	}); // Fine chiusura della finestra. //////////////////////////////////////////////////////////
	
	
	// Gestione del click sul bottone di minimizzazione della finestra.                          //
	$(this).find('.iWin_imgMin').click(function() {
		$(cfg.objId + ' .iWin_mainContent').SlideToggleUp(300);
		$(cfg.objId + ' .iWin_bottom, ' + cfg.objId + ' .iWin_bottomContent').animate({height: 10}, 300);
		$(cfg.objId).animate({height:40},300).get(0).isMinimized = true;
		$(cfg.objId + ' .iWin_imgResize').hide();
		$(cfg.objId + ' .iWin_imgMax').show();
	}); // Fine gestione minimizzazione finestra. /////////////////////////////////////////////////
	
	
	// Gestione del click sul bottone di massimizzazione della finestra.                         //
	$(this).find('.iWin_imgMax').click(function() {
		var windowSize = $.iUtil.getSize(document.getElementById(cfg.objSid+'_mmWc'));
		$(cfg.objId + ' .iWin_mainContent').SlideToggleUp(300);
		$(cfg.objId + ' .iWin_bottom, ' + cfg.objId + ' .iWin_bottomContent').animate({height: windowSize.hb + 13}, 300);
		$(cfg.objId).animate({height:windowSize.hb+43}, 300).get(0).isMinimized = false;
		$(this).hide();
		$(cfg.objId + ' .iWin_imgResize, ' + cfg.objId + '.iWin_imgMin').show();
	}); // Fine gestione massimizzazione della finestra. //////////////////////////////////////////
	
	
	
	// Gestione ridimensionamento e dragging della finestra.                                     //
	$(cfg.objId).Resizable({
		minWidth:		200,
		minHeight:		100,
		maxWidth:		700,
		maxHeight:		400,
		ghosting:		true,
		dragHandle:		cfg.objId+'_mmTc',
		handlers:		{ se: cfg.objId+'_mmRs' },
		onResize:		function(size, position) {
							iWin_rePaint(cfg.objId, size, position);
						}
	}); // Fine gestione ridimensionamento e dragging della finestra. /////////////////////////////
	
	// Caricamento AJAX del contenuto della finestra. /////////////////////////////////////////////
	if ( cfg.url != '' ) {
		$.ajax({
			type:		"GET",
			url:		cfg.url,
			data:		"html",
			success:	function(msg) {
							$(cfg.objId + ' .iWin_mainContent').html(msg);
							cfg.success.apply(this, new Array($(cfg.objId + ' .iWin_mainContent'), msg));
						}
		});
	} // Fine caricamento ajax del contenuto della finestra. //////////////////////////////////////
} // End Plugin ///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////




// Gestisce il ridimensionamento della finestra ed il posizionamento.                            //
function iWin_rePaint(objId, size, position) {
	$(objId + ' .iWin_bottom, ' + objId + ' .iWin_bottomContent').css('height', size.height-33 + 'px');
	var windowContentEl = $(objId + ' .iWin_mainContent').css('width', size.width - 25 + 'px');
	if (!document.getElementById(objId.substring(1, objId.length)).isMinimized) windowContentEl.css('height', size.height - 48 + 'px');
} // Fine "iWin_rePaint()" ////////////////////////////////////////////////////////////////////////



// Porta una finestra in primo piano.                                                            //
function iWin_onTop(objId) {
	var tt = 0;
	$(".iWin").each(function() { 
		tmp = parseInt($(this).css('z-index'));
		if ( tmp > tt ) tt = tmp;
	});
	$(objId).css("z-index", tt+1);
} // Fine "iWin_onTop()" //////////////////////////////////////////////////////////////////////////


/**
 * Chiusura completa di una finestra iWin.
 */
function iWin_destroy(objId) {
	objId = '#'+objId;
	$(objId).fadeOut("slow",function(){
		$(objId).remove();
		$.unblockUI();
	});
} // EndOf: "iWin_destroy()" //////////////////////////////////////////////////////////////////////
-->
