window.addEvent('domready', function(){

  new CartPreview();

  load_ajax();

  // Esporta preferiti (ora il bottone è solo nella scheda articolo => non c'è probl con il domready)
  $$('.add-preferiti').each(function(el){

    var url = el.get('href');

    el.addEvent('click', function(e){

      noAction(e);

      new Request.JSON({
        url : url,
        method : 'get',
        onComplete : function(r){

          // Il server mi dice che l'utente non è loggato, mandiamolo a fare il login
          if(r.logged == false) {
            document.location.href = url;
          }

          // Il server mi dice che l'utente è loggato, vediamo se ci sono notifiche da mostrare
          else {

            notifiche.update();
          }
        }
      }).send();
    });
  });

});

function noAction(e){
  e = new Event(e);
  e.preventDefault();
}

function cartClick(e){

  noAction(e);

  notifiche.loading();

  var el = e.target;

  // Magazzino Esterno?
  var magext = el.hasClass('magext');

  // Magazzino Esterno: popup di blocco/avviso
  if( magext ) {
    CartPopupMagext = new CartMessage({
      width:492,
      height:296,
      bg: common_site_url() + '/img/cart-ins-magext.png',
      cssClass: 'cart-ins-magext',
      html: '<p><strong>Nota Bene:</strong><br />Questo articolo non è in pronta consegna e necessita di alcuni giorni lavorativi per essere spedito, come indicato nella scheda del prodotto.</p><p>Clicca sul bottone "Conferma" per inserire l\'articolo nel tuo carrello</p><p><a id="cart-ins-magext-ok" href="#"><img src="'+ common_site_url() + '/img/btn_conferma.png' +'" alt="" /></a><a id="cart-ins-magext-ko" href="#"><img src="'+ common_site_url() + '/img/btn_annulla.png' +'" alt="" /></a></p>',
      onOpen: function(){

        // Bottone di conferma
        $('cart-ins-magext-ok').addEvent('click', function(e){
          noAction(e);
          cartInsert(el);
        });

        // Bottone di conferma
        $('cart-ins-magext-ko').addEvent('click', function(e){
          noAction(e);
          CartPopupMagext.close();
        });
      }
    });
  }

  // Magazzino Interno: inseriamo
  else{
    cartInsert(el);
  }
}

function cartInsert(elbtn){

  new Request.JSON({
    url : elbtn.get('href'),
    method : 'get',
    onComplete : function(r){

      notifiche.update();

      // Imposto lo stile OFF al bottone del carrello
      elbtn.set('class', 'compra off');

      // rimuovo l'eventuale msg delle spese di spedizione gratuite
      $$('.spese-gratuite').each(function(el){
        el.set("style","display:none");
      });

      // Rimuovo l'evento cartClick e sostiuisco l'href di inserimento con un href che ti porta al carrello
      elbtn.removeEvent('click', cartClick);
      elbtn.set('href', common_site_url() + '/carrello.php');

      if( r.n ){
        var tmp = 'Hai ' + r.n + (r.n > 1 ? ' prodotti ' : ' prodotto ') + ' nel <a href="'+common_site_url()+'/carrello.php">carrello</a>. Tot. € '+ r.euro;
        if(r.sconto != '0,00')
          tmp += '<br />Solo oggi risparmi: € ' + r.sconto;

        $('cart-preview-txt').set('html', tmp);

        $('cart-preview-btn').set('class', 'cart-preview-btn-full');

        new CartMessage({
          countdown: 10000,
          width:432,
          height:151,
          bg: common_site_url() + '/img/cart-ins.png',
          cssClass: 'cart-ins',
          html: '<p>Prodotto aggiunto al Carrello<br />Riepilogo (' + r.n + '): € ' + r.euro + '<br /><a href="'+common_site_url()+'/carrello.php">· Vai alla cassa!</a><br /><a href="javascript:void($(\'cart-ins\').dispose())">· Continua lo shopping!</a></p>'
        });

      } else {
        $('cart-preview-txt').set('html', 'Il tuo carrello è vuoto.');

        $('cart-preview-btn').set('class', 'cart-preview-btn-empty');
      }
    }
  }).send();
}


CartMessage = new Class({

  Implements: Options,
  options: {
    // 0 => non c'è chiusura automatica
    countdown: 0,
    width: 432,
    height: 151,
    // immagine di sfondo
    bg: '',
    // classe da associare al popup
    cssClass: '',
    html: '',

    // callback chiamata dopo che viene mostrato il popup
    onOpen: null

  },

  initialize: function(options){
    this.setOptions(options);
    this.open();
  },

  close: function(){
    // volevo fare un fade ma su IE8 non funziona, credo che IE8 ha un bug nella gestione della trasparenza in css su png a loro volta trasparenti
    // il risultato è che ci monta sopra un orrendo ed enorme bordo nero
    // per questo elimino direttamente l'elemento dal dom
    // $('cart-ins').fade('out');
    $('cart-ins').dispose();
  },

  open: function(){

    var new_t = window.getScrollTop() + (window.getHeight() / 3) - 100;

    if( this.timer ) $clear(this.timer);

    if( $('cart-ins') ) $('cart-ins').dispose();

    // Eventi per gestire la chiusura automatizzata del popup
    var events = {};
    if( this.options.countdown > 0 ){
      events = {
        'mouseenter': function(){ $clear(self.timer) },

        'mouseleave': function(){ self.timer = self.close.delay(self.options.countdown) },

        'load': function(){ self.timer = self.close.delay(self.options.countdown) }
      };
    }

    var self = this;

    new Element('div', {
      'id': 'cart-ins',
      'html': self.options.html,
      'class': self.options.cssClass,
      'styles': {
        'top' : new_t,
        'background': 'url(' + self.options.bg + ') no-repeat',
        'width': self.options.width,
        'height': self.options.height,
        'margin-left': -(self.options.width.round(2) / 2)
      },
      'events': events
    }).inject(document.body);

    if( this.options.countdown  > 0 )
      this.timer = this.close.delay(this.options.countdown)

    if( typeOf(this.options.onOpen) == 'function' )
      this.options.onOpen.apply();
  }
});

CartPreview = new Class({

  Implements: [Options],

  options: {
  },

  timer: null,

  //initialization
  initialize: function(options) {

    $('cart-preview-btn').addEvent('click', function(e){
      this.open();
    }.bind(this));
  },

  // Mostra la finestra di preview del carrello
  open: function(){

    $('cart-preview-btn').removeEvents('click');

    $('cart-preview-btn').addEvent('click', function(e){
      this.close();
    }.bind(this));

    var divup = new Element('div', {
      'id': 'cart-preview-window',
      'html': '<div id="cart-preview-window-head"><span id="cart-preview-window-title">Ultimi prodotti inseriti</span> <span id="cart-preview-window-x-close" class="cart-preview-window-close">&times;</span></div><div id="cart-preview-window-body"><div id="cart-preview-window-tale-cont"><div align="center"><img src="' + common_site_url() + '/img/ajax_loading2.gif" alt="Loading..." /></div></div><div align="right"><a id="cart-preview-window-cassa" href="' + common_site_url() + '/carrello.php"></a></div><ul id="cart-preview-window-links"><li><a href="' + common_site_url() + '/carrello.php">Dettaglio Carrello</a></li><li><a href="' + common_site_url() + '/areaclienti/update_preferiti.php?task=save_cart">Salva Carrello</a></li><li><a href="' + common_site_url() + '/pagamenti.php#spedizioni">Spese di Spedizione?</a></li><li><a href="' + common_site_url() + '/pagamenti.php#pagamenti">Modalità di Pagamento?</a></li></ul></div><div id="cart-preview-window-foot"></div>'
    });

    // IE < 8
    if( (Browser.Engine.name == 'trident' && Browser.Engine.version < 6) ){

      // IE6 ha dei grossi problemi con lo z-index se metto questo oggetto dove andrebbe (dentro il div#ricerca)
      // come workaround metto il div in fondo al body (i problemi di z-index non so perchè ma così non si presentano)
      // questo però mi porta a doverlo posizionare diversamente
      // la cosa non è troppo precisa, le cose devono funzionare allo stesso modo sui browser moderni
      // su IE6 facciamo in modo che funzioni il più possibile ma senza impazzire (IE6 è sulla via della morte, fortunatamente)
      if (document.body) {
        divup.inject(document.body, 'bottom');

        var size = $('wrapper').getPosition();

        divup.setStyles({
          'top': 200,
          'right': size.x + 13
        });
      }
    }

    // Browser seri
    else if ($('ricerca'))
      divup.inject($('ricerca'), 'bottom');

    // Richiesta AJAX per il contenuto del carrello
    new Request.HTML({
      url : common_site_url() + '/feed/cart.php',
      method : 'get',
      onComplete : function(responseTree, responseElements, responseHTML, responseJavaScript){

        $('cart-preview-window-tale-cont').set('html', responseHTML);
      }
    }).send();


    $$('.cart-preview-window-close').each(function(el){
      el.addEvent('click', function(e){
        this.close();
      }.bind(this));
    }.bind(this));

    // temporizzazione per la chiusura automatica del box notifiche
    // il countdown parte sempre, se però si posiziona il mouse dentro all'area del cart preview si arresta
    // quando poi si toglie il mouse da dentro l'area del cart preview il contatore ricomincia

    var countdown = 30000;

    // questo risolve dei problemi per cui in determinati casi che non sono riuscito a riprodurre, la temporizzazione scazza
    if(this.timer) $clear(this.timer);

    this.timer = this.close.delay(countdown, this);

    $('cart-preview-window').addEvent('mouseenter', function(){
      $clear(this.timer);
    }.bind(this));

    $('cart-preview-window').addEvent('mouseleave', function(){
      this.timer = this.close.delay(countdown, this);
    }.bind(this));
  },

  // Chiude la finestra di preview del carrello
  close: function(){
    if($('cart-preview-window'))
      $('cart-preview-window').destroy();

    $('cart-preview-btn').removeEvents('click');

    $('cart-preview-btn').addEvent('click', function(e){
      this.open();
    }.bind(this));
  }
});


// funzione per attaccare l'ajax a certi oggetti,
// tipicamente si fa sul domready ma occorre farlo anche sullo scrolling della pag perche certi elementi vengono caricati solo li
// altrimenti tali elementi non avrebbero le funzionalita ajax
function load_ajax()
  {
  // carrello
  $$('.compra').each(function(el){

    // il bottone della gift card non lo voglio toccare
    if( el.hasClass('compra') && !el.hasClass('gc') ){

      // Sui bottoni di libri già nel carrello blocchiamo l'azione
      if( el.hasClass('off') || el.hasClass('omaggio') )
        el.set('href', common_site_url() + '/carrello.php');

      // Sui bottoni di libri che non sono in carrello ci montiamo l'ajax
      else
        el.addEvent('click', cartClick);
    }
  });

    // Funzionalità per i partner
  if ($('partner-subcat-export'))
    $('partner-subcat-export').addEvent('click', partnerAddToExport);

  if ($('partner-autore-export'))
    $('partner-autore-export').addEvent('click', partnerAddToExport);

  $$('.partner_export').addEvent('click', partnerAddToExport);
  }
