function creerEditeur(e, commentaire){
  var largeur = e.getSize().x;
  if($(e.get('id')+'-mooeditable-container')){
    e.inject($(e.get('id')+'-mooeditable-container'), 'before').setStyle('display', 'block');
    $(e.get('id')+'-mooeditable-container').destroy();
  }
  var instance = new MooEditable(e,{
    xhtml:true,
    semantics:true,
    toolbar:true,
    extraCSS:'body{background-color:#fff;}',
    externalCSS:'/css/utilitaires.css',
    actions:'bold italic underline strikethrough | '+
      'formatBlock forecolor | '+
      'justifyleft justifyright justifycenter justifyfull | '+
      'insertunorderedlist insertorderedlist indent outdent insertHorizontalRule | '+
      'undo redo removeformat | '+
      'createlink unlink | '+(commentaire ? '' : 'urlimage ')+
      'charmap'+(e.hasClass('srcview') ? ' | toggleview' : ''),
    onAttach:function(){
      var frame = e.getPrevious('iframe');
      frame.setStyles({
        'width':(largeur.toInt()-4)+'px',
        'border':'2px solid #eee',
        'borderTop':'0'
      });
      instance.focus();
      instance.toggleView();
      instance.toggleView();
    }
  });
  return instance;
}

function ouvrirImagePopUp(parent){
  parent.addEvent('click', function(l){
    $$('iframe').each(function(iframe){
      iframe.setStyle('visibility','hidden');
    });
    var img = new Element('img',{
      'src': parent.get('href')
    }).set('class','popup_image');
    var div = new Element('div').set('class','popup_background').addEvent('click', function(){
      $$('iframe').each(function(iframe){
        iframe.setStyle('visibility','visible');
      });
      this.destroy();
    }).adopt(img);
    $(document.body).adopt(div);
    img.addEvent('load',function(){
      if(img.getSize().y >= div.getSize().y){
        var btn = new Element('div').set('class','popup_bouton');
        div.adopt(btn.adopt(new Element('a',{
          'html':'Voir l\'image en taille r&egrave;elle',
          'class':'popup_lien',
          'href':parent.get('href'),
          events:{
            click:function(a){
              a.stop();
              window.open(parent.get('href'), '_blank');
            }
          }
        })));
      }
    });
    div.setStyle('lineHeight', div.getSize().y+'px');
    l.stop();
  });
}

function ouvrirImagePopUpNext(lien, index, tableau){
  lien.addEvent('click', function(e){
    if(e) e.stop();
    var img = new Element('img',{
      'src':lien.get('href'),
      'class':'popup_image'
    });
    var div = new Element('div',{
      'class':'popup_background',
      'events':{
        'click':function(){
          this.destroy();
        }
      }
    }).adopt(img);
    $(document.body).adopt(div);
    img.addEvent('load',function(){
      if(img.getSize().y >= div.getSize().y || img.getSize().x >= div.getSize().x){
        var btn = new Element('div').set('class','popup_bouton');
        div.adopt(btn.adopt(new Element('a',{
          'text':'Voir l\'image en taille réelle',
          'class':'popup_lien',
          'href':lien.get('href'),
          events:{
            click:function(a){
              a.stop();
              window.open(lien.get('href'), '_blank');
            }
          }
        })));
      }else if(img.getSize().x + 40 < div.getSize().x){
        if(index > 0 && tableau[index-1]){
          var precedent = new Element('img',{
            'src':tableau[index-1].get('href'),
            'class':'popup_image precedent',
            'events':{
              'click':function(){
                div.fireEvent('click');
                tableau[index-1].fireEvent('click');
              },
              'load':function(){
                var l = this.width;
                var h = this.height;
                this.setStyles({
                  'right':'auto',
                  'left':(-l+18)+'px',
                  'top':'50%',
                  'marginTop':(-1*Math.round(h/2))+'px'
                });
              }
            }
          });
          div.adopt(precedent);
        }
        if(tableau[index+1]){
          var suivant = new Element('img',{
            'src':tableau[index+1].get('href'),
            'class':'popup_image suivant',
            'events':{
              'click':function(){
                div.fireEvent('click');
                tableau[index+1].fireEvent('click');
              },
              'load':function(){
                var l = this.width;
                var h = this.height;
                this.setStyles({
                  'left':'auto',
                  'right':(-l+18)+'px',
                  'top':'50%',
                  'marginTop':(-1*Math.round(h/2))+'px'
                });
              }
            }
          });
          div.adopt(suivant);
        }
      }
    });
    div.setStyle('lineHeight', div.getSize().y+'px');
  });
}

function activerImagePopUp(){
  $$('div.news a>img.popup').each(function(e){
    ouvrirImagePopUp(e.getParent('a'));
  });
  $$('a.popup_image').each(function(e){
    ouvrirImagePopUp(e);
  });
  var suivants = $$('a.popup_image_next');
  if(suivants.length > 0){
    var ref = $(suivants[0].get('class').replace(/(.*)popup_image_next(.*)/, '$1 $2').clean());
    if(ref){
      suivants.each(function(e,i){
        ouvrirImagePopUpNext(e, i, suivants);
      });
    }
  }
}

function voirEnregistrement(b){
  if($('enregistrement')){
    if(b) $('enregistrement').setStyle('display', 'block');
    else  $('enregistrement').setStyle('display', 'none');
  }
}

function activerGoogleAnalytics(){
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-21890344-2']);
  _gaq.push(['_trackPageview']);
  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
}

function chargerEditeur(tableau, fonction){
  if(tableau.length == 0){
    fonction();
  }else{
    Asset.javascript(tableau.shift(),{onLoad:function(){ chargerEditeur(tableau, fonction) }});
  }
}

function activerEditeur(){
  var editeurs = $$('textarea.editeur');
  var lecteurs = $$('textarea.lecteur');
  lecteurs.each(function(l){creerLecteur(l)});
  editeurs.each(function(e){creerEditeur(e)});
}

function activerDecoupage(){
  $$('.decoupage').each(function(e,i){
    var classe = e.get('class');
    var taille = parseInt(classe.split(' ')[1].split('a')[1]);
    var texte = e.get('text');
    if(texte.length > taille){
      e.set('text', texte.substring(0,taille-4)+"(..)");
    }
  });
}

function activerLiensExterieurs(){
  $$('a').each(function(a){
    var lien = a.get('href');
    if(lien && /^http:\/\/.*$/.test(lien) && !a.hasClass('popup_image')){
      a.addEvent('click',function(e){
        e.stop();
        window.open(lien, '_blank');
      });
    }
  });
}

function initialiserAdministration(){
  if($('backend') && $('backend').getElement('div.acces')){
    new Drag(
      $('backend').getElement('div.acces'),{
        handle:$('backend').getElement('div.acces h1'),
        snap:0,
        onSnap:function(el){
          el.setStyle('right','auto');
          el.addClass('dragging');
        },
        onComplete:function(el){
          el.removeClass('dragging');
          var x = el.getStyle('left').toInt();
          var y = el.getStyle('top').toInt();
          if(x < 0) x = 0;
          if(y < 0) y = 0;
          Cookie.write('AdminPanCoor',x+','+y,{duration:90});
        }
      }
    );
  }
}

function creerBackend(div){
  $$('.popup_background *').destroy();
  $$('.popup_background').destroy();
  var bg = new Element('div').addClass('popup_background').adopt(div.setStyle('display','block')).inject($(document.body));
  creerEditeurPourBackend(div, bg);
  creerDatePickerPourBackend(div, bg);
  div.getElement('div.fermer').removeEvents('click').addEvent('click',function(){
    div.setStyle('display','none').inject($('backend'));
    bg.destroy();
  });
  bg.addEvent('click',function(e){
    if(e.target == bg){
      div.setStyle('display','none').inject($('backend'));
      bg.destroy();
    }
  });
}

function creerDatePickerPourBackend(div, bg){
  var picker = [];
  bg.getElements('input.datepicker').each(function(elt){
    picker.push(new Picker.Date(elt,{
      pickerClass: 'datepicker_vista',
      useFadeInOut: false,
      timePicker: true,
      minDate: elt.hasClass('beforeNow') ? null : new Date(),
      maxDate: elt.hasClass('noFuture') ? new Date() : new Date().increment('year', 1),
      positionOffset:{
        x:0,
        y:-160
      }
    }));
  });
  div.getElement('div.fermer').removeEvents('click').addEvent('click',function(){
    picker.each(function(inst){
      try{
        inst.detach();
      }catch(ex){}
    });
    picker.empty();
  });
  bg.addEvent('click',function(e){
    if(e.target == bg){
      picker.each(function(inst){
        try{
          inst.detach();
        }catch(ex){}
      });
      picker.empty();
    }
  });
}

function creerEditeurPourBackend(div, bg){
  var moo = [];
  bg.getElements('textarea.backendediteur').each(function(elt){
    moo.push(creerEditeur(elt,true));
  });
  bg.getElements('textarea.backendfullediteur').each(function(elt){
    moo.push(creerEditeur(elt,false));
  });
  div.getElement('div.fermer').removeEvents('click').addEvent('click',function(){
    moo.each(function(inst){
      try{
        inst.detach();
      }catch(ex){}
    });
    moo.empty();
  });
  bg.addEvent('click',function(e){
    if(e.target == bg){
      moo.each(function(inst){
        try{
          inst.detach();
        }catch(ex){}
      });
      moo.empty();
    }
  });
}

function activerAdministration(){
  $$('div#backend div.acces ul li a').each(function(a){
    if(a.get('href').test(/^#/)) return false;
    a.addEvent('click',function(e){
      if(this.get('href').test(/\?/)) return true;
      var liste = $$('div#backend div.'+this.get('href'));
      if(liste.length == 0) return true;
      if(e) e.stop();
      liste.each(function(div){
        creerBackend(div);
      });
    });
    return true;
  });
}

function activerPopupDejaActive(){
  var bg = $(document.body).getElement('.popup_background');
  if(bg){
    var destroyAll = function(e, elt){
      if(!e || e.target == elt){
        bg.getElements().destroy();
        bg.destroy();
      }
    };
    bg.removeEvents('click');
    bg.getElement('div.fermer').removeEvents('click');
    bg.addEvent('click', function(e){destroyAll(e,this)});
    bg.getElement('div.fermer').addEvent('click', function(e){destroyAll(e,this)});
  }
}

function desactiverSubmit(){
  $$('form').each(function(form){
    form.addEvent('submit', function(){
      if(!form.getElement('input[type=submit][name=login][value=Connexion]')){
        form.getElements('input[type=submit]').set('disabled', 'disabled');
      }
    });
  });
}

function activerAccordeon(){
  $$('.accordeon').each(function(div){
    var options = {};
    if(div.hasClass('noFirstLine')){
      options.display = -1;
    }
    new Fx.Accordion(div, div.getElements('h3'), div.getElements('.accordeon_fils'), options);
  });
}

document.addEvent('domready', function(){
  Locale.use('fr-FR');
  activerGoogleAnalytics();
  activerEditeur();
  activerDecoupage();
  activerImagePopUp();
  activerLiensExterieurs();
  activerAdministration();
  initialiserAdministration();
  activerPopupDejaActive();
  desactiverSubmit();
  activerAccordeon();
});
