(function($) {
  // MAPQUERY PER BOCCONI
  // versione 0.2.0 [19 Settembre 2011]
  $.fn.mapQuery = function(prmArray, options, debug){
    
	// impostazioni di defaults del plugin
    var defaults = {
		  infoBoxSource:	'#box_regione',
		  infoBoxTitle:     '#box_title',
		  infoBoxCityList:  '#box_cityList',
		  closeIcon:      	'#box-close',
		  noFindText: 		'Nessuna area disponibile'
    };
    defaults = jQuery.extend(defaults,options);
    
    // replico tutti gli effetti a tutti gli elementi a catena
    return this.each(function() {
    
      // se sono in debug non eseguo nessun controllo sul array
      if(!debug){
        // controllo che il parametro sia valorizzato
        if(prmArray == null){
          printError("Nessun parametro passato al plugin della mappa");
          return false;
        }
        // controllo che l'array ricevuto come parametro sia realmente un array, altrimenti genero un errore
        if(!$.isArray(prmArray)){
          printError("Il parametro ricevuto non ? di tipo Array");
          return false;
        }
      }
      // applico un evento OnClick ad ogni anchor presente nel div
      $(this).find('a').live('click',function(){
        // salvo l'attributo alt dell'immagine per confrontarlo nel array passato al metodo jquery
        var imgInfo = $(this).find('img').attr('alt');
        var IsInArray = false;
        var cityListHTML = '';
        $.each(prmArray,function(i,val){
          if(val.region.toLowerCase() == imgInfo.toLowerCase()) {
            IsInArray = true; // ho trovato corrispondenza nella lista di oggetti
            // dopo che ho trovato corrispondenza con la regione ciclo tutte le sue citt? e genero l'html da mettere nel <UL>
            // prima controllo che ci siano citt?
            if(val.cityList.length > 0) { 
              $.each(val.cityList,function(c,valCity){
                cityListHTML += '<li>';
                cityListHTML += '<a href="'+ valCity.url +'" title="'+ valCity.city +'">'+ valCity.city +'</a>';
                cityListHTML += '</li>';
              });
            }
            else { IsInArray = false; }
          }
        });
        
        // Se ho trovato corrispondenza eseguo gli effetti necessari per visualizzare le citt?
        if(IsInArray){
          // Effetto toggle personalizzato
          if($(defaults.infoBoxSource).is(":visible")) {
            $(defaults.infoBoxSource).slideUp('fast',function() { 
              $(defaults.infoBoxSource).slideDown('normal');
			  
              var randomnumber=Math.floor(Math.random()*10001);
              
			  // applico il titolo e l'elenco di citt?
              $(defaults.infoBoxTitle).html(imgInfo);
              $(defaults.infoBoxCityList).html(cityListHTML);
              $(defaults.infoBoxCityList).liScroller({
                  index: randomnumber,
				  maxItems: 5,
                  fx: false,
                  navigationHtmlUp: '<img src="/repository/images/freccia-up.jpg" alt="up" />',
                  navigationHtmlDown: '<img src="/repository/images/freccia-down.jpg" alt="down" />',
                  navigationClass: 'up-down-paesi'
			  });
            });
          }
          else {
            $(defaults.infoBoxSource).fadeIn('normal');
            
			var randomnumber=Math.floor(Math.random()*10001);
			
            // applico il titolo e l'elenco di citt?
            $(defaults.infoBoxTitle).html(imgInfo);
            $(defaults.infoBoxCityList).html(cityListHTML);
            $(defaults.infoBoxCityList).liScroller({
                index: randomnumber,
				maxItems: 5,
                fx: false,
                navigationHtmlUp: '<img src="/repository/images/freccia-up.jpg" alt="up" />',
                navigationHtmlDown: '<img src="/repository/images/freccia-down.jpg" alt="down" />',
                navigationClass: 'up-down-paesi'
                });
          }
        }
        else {
          // Effetto toggle personalizzato
          if($(defaults.infoBoxSource).is(":visible")) {
            $(defaults.infoBoxSource).slideUp('fast',function() { 
              $(defaults.infoBoxSource).slideDown('normal');
              
              // applico il titolo e l'elenco di citt?
              $(defaults.infoBoxTitle).html(imgInfo);
              $(defaults.infoBoxCityList).html('<li>'+defaults.noFindText+'</li>');
            });
          }
          else {
            $(defaults.infoBoxSource).fadeIn('normal');
            
            // applico il titolo e l'elenco di citt?
            $(defaults.infoBoxTitle).html(imgInfo);
            $(defaults.infoBoxCityList).html('<li id="nothing-city">'+defaults.noFindText+'</li>');
          }
          // return false;
        }
        
        return false;
      });
      
      // applico l'evento di chiusura
      $(defaults.closeIcon).live('click',function(){
        $(defaults.infoBoxSource).fadeOut();
        return false;
      });

    });
  };
  
  // Funzioni private per la gestione degli errori/warning/log su FireBug
  function printError(string) {
    // controllo che il browser sia FireFox, dato che questi metodi funzionano solo con FireBug
    var browserInfo = navigator.userAgent;
    if(browserInfo.indexOf('Firefox') != -1)
      console.error(string);
  };
  function printWarn(string) {
    // controllo che il browser sia FireFox, dato che questi metodi funzionano solo con FireBug
    var browserInfo = navigator.userAgent;
    if(browserInfo.indexOf('Firefox') != -1)
      console.warn(string);
  };
  function printLog(string) {
    // controllo che il browser sia FireFox, dato che questi metodi funzionano solo con FireBug
    var browserInfo = navigator.userAgent;
    if(browserInfo.indexOf('Firefox') != -1)
      console.log(string);
  };

})(jQuery);
