/*
 * jQuery Panel-Down
 *
 * Copyright 2011, Marco Poglie
 * THINKPLACE scripts.
 * http://www.thinkplace.it
 * http://www.poglie.com
 * 
 */

(function($) {
	var _element;
    var panelDown = function(element, options){
		//Defaults are below
		var settings = $.extend({}, $.fn.panelDown.defaults, options);

        
        //Trigger the onInit callback
        settings.onInit.call(this);
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//													       SETTING
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        _element = $(element); // l'oggetto selezionato
		
		// la misura dello scostamento bottom prelevato dal css ................................
		var elementPosCss = _element.css('bottom');
		var elementPos = settings.Hfoot; //Number(elementPosCss.substr(0, elementPosCss.length-2));
		//window.alert(elementPos/*elementPosCss.substr(0, elementPosCss.length-2)*/);
		// .....................................................................................
		
		// --------[ PARAMETRI di Configurazione ]-------
		
		
		
		//  ------- controllo dei ink ------
		var isOpen = false;	// Booleana true se la pagina è aperta ( ... )
		var pageSelect = -1; // l'indice del bottone scelo
		var old_pageSelect; // l'indice del bottone precedentemente scelto
		
		
		//$.extend({pippo:lunghezzaElement});
		
		// --------[ OGGETI ]-------
		var paneldown; // la classe princale
		
		var figli = _element.children();
		var lunghezzaElement = figli.length; // i figli di element, solo content
		
		var bottoni = []; // è un'array contenente i bottoni li contenuti in ul#first-menu
		var quantitaBottoni = 0; // memorizzo quanti bottoni ci sono nel menu.
		
		var content;
		var sidebar;
		var menu;
		
		var colum;
		var quit;
		
		var mainContent;
		
		
		var pagina; // pagina è l'elemento $('#page-content') che viene creato e distrutto dinamicamente
		
		
		
		
		// --------[ Memoria ALTEZZE ]-------
		var altMenu = 0; // per misurare l'altezza del menu (nel menu è compreso il margine sotto)
		var altPagina = 0; // per misurare l'altezza della pagina
		var differenza = 0; // differenza è altM-altP dopo che è stata caricata la pagina.. è calcolato in appoggia
		
		// --------[ PAGINE ]-------
		var pageUrl = "#"; // la pagina che deve aprire
		var pagesUrls = [];
		
		// --------[ Memoria POSIZIONI ]-------
		var posQuit = 0; // è la posizione della x quit rispetto element che lo contiene
		
		var posSidebar = 0;
		var heightSidebar = 0;
		var heightMainContent = 0;
		
		var isEntrato = false;
		var isNascosto = false;
		
		//
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//														EVENT functions
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//
		
		// --------------------------------------[ menu-FIRST ]
		var onClickBut = function(event){
			event.preventDefault();
           	event.stopPropagation();
			
			old_pageSelect = pageSelect;
			pageSelect = $(this).parent().index();
			pageUrl = $(this).attr("href"); // l'url della pagina appena cliccata
			
			
			if(!isOpen) settings.clickBut(pageSelect, old_pageSelect); // callBack > ClickBut
			
			controllaBut();
			
			if(isOpen){ // se è aperto scambio ...
			
				if(quit) quit.fadeOut();
				scambia();
				
			}else{
				//
				creaPagina(true, function(){});// solo la prima volta
				//
			}
		};
		var onOverBut = function(event){
			//
			$(this).stop().animate({opacity:.5});
			//
		};
		var onOutBut = function(event){
			//
			$(this).stop().animate({opacity:1});
			//
		};
		
		
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//													Controllo dei BOTTONI
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// 
		// il controllo dei bottoni serve ad accendere (colore) il bottone apena cliccato .. elimino gli eventi per quel bottone
		var controllaBut = function(){
			var k;
			
			bottoni.each(function(){
				k = $(this).index();		  
				if(k==pageSelect){
					// il bottone scelto !
					rimuoviEventi($(this).children('a'));
					$(this).delay(500).animate({'backgroundColor':settings.colorHover});
					
					if(sidebar && sidebar.data('jsp')) sidebar.data('jsp').scrollToY($(this).position().top, true); // scrollo la lista di LI posizionando quello scelto in alto a zero
																													// NOTA: uso JScrollPane methods
					
					//$(this).children('a').removeAttr('href');
				}else{
					// tutti gli altri bottoni !
					/*aggiungiEventi($(this).children('a'));
					$(this).children('a').animate({opacity:1});
					$(this).animate({'backgroundColor':settings.colorTxBg});
					
					//if($(this).index() == old_pageSelect) $(this).children('a').attr('href',pagesUrls[old_pageSelect]);*/
				}
				if(k==old_pageSelect){
					// il vecchio ritorna allo stato normale
					aggiungiEventi($(this).children('a'));
					$(this).children('a').animate({opacity:1});
					$(this).animate({'backgroundColor':settings.colorTxBg});
					
					//if($(this).index() == old_pageSelect) $(this).children('a').attr('href',pagesUrls[old_pageSelect]);
				}
			});// end each
			
		}
		var aggiungiEventi = function(target){
			
			target.bind("click",onClickBut);
			target.hover(onOverBut, onOutBut);
		}
		var rimuoviEventi = function(target){
			target.unbind();
		
		}
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//														  	Genera Scroll
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// 
		var generaScroll = function(elem){
			elem.jScrollPane({
									  animateScroll: true,
									  animateDuration: 1000,
									  animateEase: 'easeOutExpo',
									  mouseWheelSpeed: 1,
									  enableKeyboardNavigation: false
									  });
			
			
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//														  	INIT 
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// 
		var init = function(setting){
			// coclo i figli di element
			// definisco di DEFAULT il il #content in BASSO a SX come di default
			
			
			_element.css({
						 'bottom' : settings.Hfoot+'px'
						});
			figli.each(function() { 
				//
				var figlio = $(this);
				var sottofigli = figlio.children();
				//				
				content = figlio; // <--- 
				//
				
				// Posizionamento iniziale degli oggetti, è tutto nascosto o fuori dalla scena 	
				//
				// 
				if(figlio.attr('class') == "content"){
					
					
					
					// ciclo i figli di content
					sottofigli.each(function() {
						//
						var sottofiglio = $(this);
						//
						
						//
						// ---[ #sidebar ]---------------------------------------------------------------------------------------
						if(sottofiglio.is('div') && sottofiglio.attr('id') == "sidebar"){
							heightSidebar = sottofiglio.outerHeight();
							sidebar = sottofiglio; // <--- 
							
							// posiziono di DEFAULT il pannello sidebar i basso a sinistra
							scala();
							//
							sottofiglio.css({
												'position':'relative', 
												//'overflow':'auto',
												//'height':heightSidebar-diff+'px',
												'padding-top':'0',
												'bottom':'-'+(_element.outerHeight(true)+settings.Hfoot+elementPos)+'px' // lo metto fuori ...
												});
							
							//window.alert(_element.height()+settings.Hfoot+'  -  '+'-'+(_element.outerHeight(true)+settings.Hfoot)+'px');
							
							// faccio cos' per relevare gli elementi ul>li senza considerare l'oggetto jScrollPlane
							menu = $('ul',sottofiglio); //sottofiglio.children('ul');
							altMenu = menu.outerHeight(true);
							
							bottoni = $('li', menu);//menu.children('ul');
							quantitaBottoni = bottoni.length;
							
							//window.alert(menu.attr('id'));
							
							bottoni.each(function(){
											   //
											  
											   pagesUrls.push($(this).children('a').attr('href'));
												/*$(this).children('a').bind("click",onClickBut);
												$(this).children('a').hover(onOverBut, onOutBut);*/
												aggiungiEventi($(this).children('a'));
											   //
											   
											   });// fine del ciclo ul#first-menu
							
							
							
						}
						// ---[ #content ]---------------------------------------------------------------------------------------
						if(sottofiglio.is('div') && sottofiglio.attr('id') == "main-content"){
							//
							sottofiglio.css({
											'position':'relative', 
											'bottom':'-'+content.outerHeight(true)+1+'px'
											});
							//
							//_element.append(sottofiglio.attr('id'));
							
							
							if(settings.otherSelector=='') {
								// ---[ 'main-content' ]------------------------------------------------------------------------
								mainContent = sottofiglio; // <--- 
							}else{
								if($(settings.otherSelector)){
									// ---[ 'other pageContent' ]---------------------------------------------------------------
									mainContent = $(settings.otherSelector); // <--- 
								}else{
									// !!! se ho sbagliato fa ancora main-content !!!
									mainContent = sottofiglio;
								}
							}
							heightMainContent = mainContent.outerHeight(true); // non serve a nulla..
							
						}
						// ---[ #colum ]----------------------------------------------------------------------------------------
						if(sottofiglio.is('div') && sottofiglio.attr('id') == "colum"){
							
							sottofiglio.css({'position':'relative', 'bottom':'-'+content.height()+'px'});
							
							//_element.append(sottofiglio.attr('id'));
							
							colum = sottofiglio; // <--- 
						}
						
						// -------------------------------------------------------------------------------------------------
					});
				}
			});
		}
		
		//
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//															APERTURA
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// 
		var apri = function(){
			//
			//mostra(settings.delay);
			//
			// ------------------------[ START ]----------------------------
			
			// l'animazione iniziale quella che fa entrare la lama head
			var contentFigli = content.children();
			// ciclo solo i figli di content
			contentFigli.each(function() {
				var sottofiglio = $(this);
				
				//
				// ---[ #sidebar ]---------------------------------------------------------------------------------------
				if(sottofiglio.is('div') && sottofiglio.attr('id') == "sidebar"){
					//window.alert(diff);
				
					
					if(diff>0){
						sottofiglio.css({'height':heightSidebar-diff+'px'});
						
						generaScroll(sidebar);
						
						sottofiglio.delay(settings.delay*1.1).animate({bottom:-1 /*posSidebar  elementPos+differenza*/}, settings.velocita, 'easeOutExpo', function() {isEntrato=true;});
					}else{
						sottofiglio.delay(settings.delay*1.1).animate({bottom:-1 /*posSidebar  elementPos+differenza*/, 'height':heightSidebar+'px'}, settings.velocita, 'easeOutExpo', function() {isEntrato=true;});
					}
				}
				// ---[ #content ]---------------------------------------------------------------------------------------
				if(sottofiglio.is('div') && sottofiglio.attr('id') == "main-content"){
					sottofiglio.delay(settings.delay*1.3).animate({bottom:'0px'}, settings.velocita, 'easeOutExpo', function() {});
				}
				// ---[ #colum ]----------------------------------------------------------------------------------------
				if(sottofiglio.is('div') && sottofiglio.attr('id') == "colum"){
					sottofiglio.delay(settings.delay*1.5).animate({bottom:'0px'}, settings.velocita, 'easeOutExpo', function() {});
				}
			});
			
			
			
			
		}
		
        //
       	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//														  CHIUDI - CANCELLA
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var chiudi = function(end){
			//
			// l'animazione iniziale quella che fa entrare la lama head
			_element.animate({
				
				bottom :'-'+_element.height()+'px'
				
			  }, 500, 'easeInBack', function() {
				//
				if(end) end();
				
			  });
			
		}
		
		
		
		
		
		
		
		
		
		
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//														  Crea PAGINA
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var creaPagina = function(crea, end){
			
			if(crea){
				
				
				mainContent.append("<div id='page-content' ></div>");
				
				// -------------------------
				pagina = $('#page-content');
				// -------------------------
				pagina.css({
							   'display':'none',
							   'text-align':'left',
							   'position':'absolute'
							   });
				
				
				
				
				
				// questi sono gli elementi pubblici utili per le pagine panel
				pagina.data('_obj',settings);
				
				
				loadPagina(pagina, false, end); // la prima volta
				
			}else{
				loadPagina(pagina, true, end); // ad ogni scambio
			}
			
			
			
			
		}
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//														  Mostra PAGINA
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var mostraPagina = function(end){
			
			// la pagina viene mostrata solo quando, è stato caricato il contenuto
			pagina.delay(0).fadeIn( 400, 'easeInOutExpo', function() { 
																			 			isOpen = true;
																						if(end) end(); 
																						//scala();
																						});
			
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//														  Cancella PAGINA
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var cancellaPagina = function(cancella, resetBut, end, cb){
			if(!cb) cb=false; // perché è restituito solo se è un callBack
			
			//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
			function chiudiPagina(){
				/*pagina.fadeOut( 0, 'easeInOutExpo', function() { 
																							isOpen = false;
																							end();
																							if(cancella) $(this).remove();
																							
																							});*/
				if(cancella){
					
					mainContent.empty();
					mainContent.css('height','auto');
					//ritorna(0, function(){});
					
				}
				isOpen = false;
				if(cb) scala(true); // in questo caso scalo con animazione
				if(end) end();
			}
			// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
			if(cancella) settings.clickQuit(pageSelect); // callBack  ClickQuit
			
			if(resetBut){
				old_pageSelect = pageSelect;
				pageSelect = -1;
				controllaBut();
			}
			
			// se la pagina è aperta ed esiste la funzione di chiusura:
			if(isOpen && pagina.data('chiudi')){
				// uso la funzione 'chiudi()' globalizzata in DATA nel file caricato
				// e poi cancello #page-content
				pagina.data('chiudi')(function(){ 
														   
														   chiudiPagina(); 
														   
														   });
				
			}else{
				chiudiPagina();	
			}
			
		}

		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//															  SCAMBIA (!)
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var scambia = function(){
			//
			cancellaPagina(false, false, function(){ creaPagina(false, function(){}); });
			//
		}
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//												  LOAD la pagina
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var loadPagina = function(elem, scambia, end){
			
			//
			if(scambia) elem.empty(); // se non è "la prima volta" svuoto il contenuto della pagina precedente
			//
			if(pageUrl!="#"){
				// memorizzo i dati in DATA nel file caricato...
			   elem.data('chiudiPage',cancellaPagina)
			   elem.load(pageUrl, function(response, status, xhr) {
																			  if (status == "error") {
																					var msg = "Sorry but there was an error: ";
																					$(this).append(msg + xhr.status + " " + xhr.statusText);
																			  }else{
																				  	/* da quello che ho capito è che dalla versione JQ1.6 
																					restituisce [response] automaticamente nell'oggetto indicato alla chiamata $().load
																					quindi append non serve*/
																					//
																				    // $(this).append(response);
																					//
																				   	// misuro la pagina
																					
																					//heightSidebar = sidebar.outerHeight(); // ridefinisco sidebarHeight ..
																					
																					altPagina = $(this).height(); // misuro l'altezza della pagina appena creata ..
																				    //
																					if(settings.otherSelector=='') appoggia(0, function(){});
																					//
																					mostraPagina(end);
																					//
																					
																			  }
																	   });
			   }else{
				    // se l' href è '#' ..
					// ... 
			   }
		}

		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//															      APPOGGIA
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var appoggia = function(d, end){
			//
			
			
			var heightSidebarAppoggio = sidebar.outerHeight(true);
			//window.alert(heightSidebar);
			// se il menu è + basso del contenuto .. appoggio al contenuto
			if(heightSidebarAppoggio<=altPagina){
				
				if(HfreeWindow<altPagina){
					
					settings.onFuoriWindow(); // <-- callBack
					
					//window.alert('!');
					// window.alert('altP: '+altP+'   '+'altM: '+altMenu);
					differenza = altPagina-heightSidebarAppoggio;
					//
					_element.delay(d).animate({
					
												bottom : elementPos+differenza-1
												
											  }, 1000, 'easeInOutExpo', function()   {
																					
																					if(end) end();
																					
																				  });
				}
			}else{
				//settings.onDentroWindow(); // <-- callBack	
			}
		}
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//													 RITORNA (è il contrario di appoggia)
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var ritorna = function(d, end){
			//
			
			var posRitorno;
			if(diff>0){
				posRitorno = posSidebar;
			}else{
				posRitorno = elementPos
			}
			differenza = altPagina-altMenu;
			
			_element.delay(d).animate({
			
										bottom : settings.Hfoot/*posRitorno*/
										
									  }, 600, 'easeInOutExpo', function()   {
										
																			if(end) end();
																			
																		  });
	}
		
		
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//															    MOSTRA (pubblica)
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var mostra = function(d, end){
			if(!d) d=0;
			// ------------------------[ SHOW ]----------------------------
			// 
			scala();
			isNascosto = false;
			
			_element.delay(d).animate({
				
				bottom : elementPos
				
			  }, 700, 'easeOutExpo', function() {
				
				if(end) end();
				scala(true);
			  });
			
		}
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//															   NASCONDI(pubblica)
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		var fuori = 0;
		var nascondi = function(d, end){
			if(!d) d=0;
			var delay = 0;		
			isNascosto = true;	
			fuori = Number('-'+_element.outerHeight(true));		
					
			// nascondo è una funzione interna (semplifica) che a mi serve per decidere quando nascondere 
			// se la pagina è aperta(aspetto che prima chiudo la pagina) se la pagina è chiusa (nascodo subito)... 
			
			
			var nascondo = function(){
				// nascondo la lama head ...
				//window.alert('mmmmmmm');
				
				_element.delay(d).animate({
											//
											bottom : fuori+'px'
											//
										  }, 600, 'easeInOutExpo', function() {
											
																	if(end) end();
																	
																	
																		});
			} // end nascondo
			
			
			
			
			// ------------------------[ HIDE ]----------------------------
			if(isOpen)	{
						d = d;
						//
						//
						cancellaPagina(true, true, function(){
													  	
													  	nascondo();	
														 
															});
						}else{
							d = delay;
							nascondo();
							
						}
			
			
			
			//window.alert(d);
			
			
			
		}
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//															 RESIZING
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		var Hpanel = 0;
		var HfreeWindow = 0;
		var diff = 0;
		var diffPanelOpen = 0;
		
		var scala = function(anim){
			if(!anim) anim = false;
			Hpanel = _element.height();
			HfreeWindow = $(window).height()-(settings.Hfoot+settings.Hhead);
			
			//heightSidebar = sidebar.outerHeight();
			
			// se chiuso
			if(!isOpen){
			}
			// se aperto
			else{
				
				
			}
			
			diff = heightSidebar-HfreeWindow+settings.staccoPanelHead; // se differenzia, è positiva! quindi sono fuori ..
			if(isOpen) diffPanelOpen =  altPagina-HfreeWindow+settings.staccoPanelHead;
			
			
			var posizionaSidebarResize = function(){
				if(!isNascosto){
					if(anim){
						sidebar.stop().delay(0).animate({'height':(heightSidebar-diff)+'px'},500, 'easeOutExpo', function(){
																													 	generaScroll(sidebar);
																														sidebar.data('jsp').reinitialise();
																														
																														});
					}else{
						sidebar.css({'height':(heightSidebar-diff)+'px'});
					}
					//$('#trace').text('fuori');
				}
			}
			var posizionaPanelResize = function(){
				if(!isNascosto){
					$('#trace').text('a');
					if(anim){
						mainContent.stop().delay(0).animate({'height':(heightMainContent-diffPanelOpen)+'px'},500, 'easeOutExpo', function(){
																													 	generaScroll(sidebar);
																														sidebar.data('jsp').reinitialise();
																														
																														});
					}else{
						mainContent.css({'height':(heightMainContent-diffPanelOpen)+'px'});
					}
				}
				
			}
			if(isEntrato){ // ---------------------------------------
				// se c'è differenza..
				if(diff>-1/*Hpanel>HfreeWindow*/){
					posSidebar = diff;
					// nascondo una parte del pannello
					
					//_element.stop().delay(200).animate({'bottom':0},1000, 'easeOutExpo');
					//sidebar.stop().delay(200).animate({'height':(heightSidebar-diff)+'px'},1000, 'easeOutExpo');
					
					// al resize:
					// quando è aperto il pannello (isOpen)
					// quando lo spazio del pannello 
					// se lo spazio a disposizione è minore del pannelo, appoggio a pannello no alla sidebar
					if(isOpen){
						if(settings.otherSelector==''/* && !isNascosto*/) {
							
							if(diffPanelOpen>=0){
								posizionaPanelResize();
								settings.onFuoriWindow(); // segnalo con un callBack che il pannello è fuori misura
								
							}else{
								//$('#header').append('a')
								posizionaSidebarResize();
								settings.onDentroWindow(); // segnalo con un callBack che il pannello è dentro misura
								
							}
						}
						
					}else{
						
						posizionaSidebarResize();
					}
					
					if(!isNascosto) {
						if(anim){
							_element.stop().delay(0).animate({'bottom':settings.Hfoot-1+'px'},500, 'easeOutExpo');
						}else{
							_element.css({'bottom':settings.Hfoot-1+'px'});
						}
					}else{
						
						_element.css({'bottom':'-'+_element.outerHeight(true)+'px'});
					}
					
					
				}else{
					// altrimenti se non c'è differenza appoggio sempre a zero 0
					
					diff = 0;
					posSidebar = settings.Hfoot;
					
					//sidebar.css('overflow','visible')
					
					//_element.stop().animate({'bottom':-1+'px'},500, 'easeOutExpo');
					//sidebar.stop().animate({'height':heightSidebar+'px'},500, 'easeOutExpo');
					
					/*if(differenza>0){
						
					}else{
						_element.css({'bottom':settings.Hfoot-1+'px'});
					}*/
					if(anim){
						sidebar.stop().delay(0).animate({'height':(heightSidebar)+'px'},700, 'easeOutExpo', function(){
																													 	generaScroll(sidebar);
																														sidebar.data('jsp').reinitialise();
																														
																														});
					}else{
						sidebar.css({'height':heightSidebar+'px'});
					}
				}
			}// -------------------------------------------------------
			//elementPos = elementPos-diff;
			//
			// quindi devo generare lo scroll
			if(!anim){
				generaScroll(sidebar);
				sidebar.data('jsp').reinitialise();
			}
		}		
		
		
		
		
		
		
		
		
		
		
		
		/***********************************************************************************************************************/
		var vars = {
            pageSelect: pageSelect,
            chiudi: chiudi,
			mostra: mostra,
			nascondi: nascondi,
			
			scala:scala,
			
			isOpen:isOpen
            
        };
		_element.data('vars',vars)
		/***********************************************************************************************************************/
		
		
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//															GOOOOOOO
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		//
		init(settings);
		apri();
		
		
		
		return this;
    };
    
	
	
	
	
	
	
    $.fn.panelDown = function(options) {
    
        return this.each(function(key, value){
            var element = $(this);
			
            // Rientro anticipato dell'attrubuto se questo elemento ha già un plugin istanza
            if (element.data('paneldown')) return element.data('paneldown');
            
			// COSTRUTTORE: -----------------------------
            paneldown = new panelDown(this, options);
			// ------------------------------------------
			
            // memorizzo il l'istanza in data
            element.data('paneldown', paneldown);
        });

	};
	 
	//Default settings
	$.fn.panelDown.defaults = {
		delay: 0,
		velocita: 700,
		
		Hfoot:0,
		Hhead:0,
		
		left:0,
		
		staccoPanelHead:0,
		
		otherSelector:'',
		
		clickQuit: function(){},
		clickBut: function(){},
		
        onInit: function(){},
		
		onFuoriWindow: function(){},
		onDentroWindow: function(){}
	};
	
	$.fn._reverse = [].reverse;
	
	
})(jQuery);
