var moolinks = new Class({
  Implements: [Events, Options], 

  contentElement  : '',   // élément qui contiendra le contenu
  path            : '',   // répertoire où se trouve le script par rapport à la page appelante
  delayFct        : "",   // pour stocker les fonctions sur lesquel a été appliqué un délai
  
  presets: {  
    subMenu : '',
    onComplete: $empty
  },

  initialize: function(contentElement, path, presets){
    // teste que les éléments passés en paramètre existent bien
      if (!contentElement)
      return this;
    
    this.contentElement = contentElement;
    this.path = path;
    this.presets = $merge(this.presets, presets);
    this.options = {};
		this.setOptions(this.presets);
	},
	
	/*********************************************
   *
   * Stoppe la dernière fonction delayée   
   *
   *********************************************/   
  clearDelay: function(){
    if (this.delayFct != ""){
      $clear(this.delayFct);
      this.delayFct = "";
    }
  },
	
	/*********************************************
   *
   * Récupert toutes les bonnes adresses   
   *
   *********************************************/ 
	getLinks : function(){
    // vide le contenant
    $(this.contentElement).empty();
    
    var myObject = this;
    var req = new Request.HTML({
      url: this.path + 'getLinks.php',
      onSuccess: function(tree,ele,html,js){
        myObject.contentElement.set('html',html);
        
        $$('.modifyLinks').each(function(el,index){
          el.addEvent('click',function(){
            myObject.modifyLinks(this.get('linkId'));
          });
        });
        
        $$('.removeLinks').each(function(el,index){
          el.addEvent('click',function(){
            if (confirm("Etes-vous sûr de vouloir supprimer cette bonne adresse ?")){
              myObject.removeLinks(this.get('linkId'));
              myObject.delayFct = (function(){myObject.getLinks()}).delay(3000);
            }
          });
        });
        
        $$('.changeLinksState').each(function(el,index){
          el.addEvent('click',function(){
            if (confirm("Etes-vous sûr de vouloir modifier l'état de cette bonne adresse ?")){
              myObject.setLinksState(this.get('linkId'), this.get('state'));
              myObject.delayFct = (function(){myObject.getLinks()}).delay(3000);
            }
          });
        });
      }
    }).send();
    
    // sous-menu
    if (this.options.subMenu){
      var div = new Element('div',{
        'html':'Bonnes adresses'
      });
      
      this.options.subMenu.empty();
      div.inject(this.options.subMenu);
    }
  },
  
  /*********************************************
   *
   * Affiche toutes les bonnes adresses   
   *
   *********************************************/ 
	printLinks : function(){
    // vide le contenant
    $(this.contentElement).empty();
    
    var myObject = this;
    var req = new Request.HTML({
      url: this.path + 'printLinks.php',
      onSuccess: function(tree,ele,html,js){
        myObject.contentElement.set('html',html);
        myObject.fireEvent('complete');
      }
    }).send();
    
    // sous-menu
    if (this.options.subMenu){
      var div = new Element('div',{
        'html':'Bonnes adresses'
      });
      
      this.options.subMenu.empty();
      div.inject(this.options.subMenu);
    }
  },
  
  /*********************************************
   *
   * Ajoute une nouvelle bonne adresse   
   *
   *********************************************/ 
	newLinks : function(){
    // vide le contenant
    $(this.contentElement).empty();
    
    var myObject = this;
    var req = new Request.HTML({
      url: this.path + 'newLinks.php',
      onSuccess: function(tree,ele,html,js){
        myObject.contentElement.set('html',html);
        
        if ($('annuler') && ('formNewLinks')){
          $('annuler').addEvent('click',function(){
            myObject.getLinks();
          });
          
          // contrôle du formulaire
          var myCheckForm = new checkForm($('formNewLinks'),{
                                                useAjax: false,
                                                //ajaxUrl: myObject.path + 'sendNews.php',
                                                errorPlace: 'bottom',
                                                divErrorCss: {
                                                  'margin':'5px 0 0 120px'
                                                },
                                                ajaxSuccessFct: function(msg){
                                                  if (msg == "1"){
                                                    var message = new Element('div',{
                                                      'html':"La bonne adresse a été ajoutée avec succès",
                                                      'styles':{
                                                        'textAlign':'center',
                                                        'color':myObject.colorOk,
                                                        'margin':'0 auto'
                                                      }
                                                    });
                                                    myObject.contentElement.empty();
                                                    message.inject(myObject.contentElement,'top');
                                                    // ajoute la fonction a la gestion des délais puis l'appelle
                                                    myObject.delayFct = (function(){myObject.getLinks(msg)}).delay(3000);
                                                  }
                                                  else{
                                                    var message = new Element('div',{
                                                      'html':"Une erreur est survenue lors de l'ajout de la bonne adresse : <br />" + msg,
                                                      'styles':{
                                                        'textAlign':'left',
                                                        'color':myObject.colorError,
                                                        'margin':'0 auto'
                                                      }
                                                    });
                                                    myObject.contentElement.empty();
                                                    message.inject(myObject.contentElement,'top');
                                                    // ajoute la fonction a la gestion des délais puis l'appelle
                                                    myObject.delayFct = (function(){myObject.newLinks()}).delay(3000);
                                                  }
                                                }
                                              });
        
        }
      }
    }).send('path=' + myObject.path);
    
    // sous-menu
    if (this.options.subMenu != ''){
      var div = new Element('div',{
        'html':' » Nouvelle bonne adresse'
      });
      
      var a = new Element('a',{
        'href':'#',
        'html':'Bonnes adresses',
        'events':{
          'click':this.getLinks.pass('',this)
        }
      });
      
      a.inject(div, 'top');
      this.options.subMenu.empty();
      div.inject(this.options.subMenu);
    }
  },
  
  /**************************************************
   *  
   * Change l'état d'une bonne adresse donnée
   *    
   **************************************************/
  setLinksState: function(linkId, state){
    // vide le contenant
    $(this.contentElement).empty();
    if ($defined(linkId) && $defined(state)){
      var myObject = this;
      var req = new Request.HTML({
        url: this.path + 'setLinksState.php',
        onSuccess: function(tree,ele,html,js){
          myObject.contentElement.set('html',html);
        }
      }).send('linkId=' + linkId + '&state=' + state);
    }
    else{
      this.contentElement.set('html','il manque des informations');
    }
  },
  
  /************************************
   *
   * Supprime une actualité
   *
   ************************************/   
  removeLinks : function(linkId){
    var myObject = this;
    var req = new Request({url:myObject.path + 'removeLinks.php', 
		  onSuccess: function(txt){
		    if (txt == 1){
          var message = new Element('div',{
                                    'html':"La bonne adresse a été supprimée avec succès !",
                                    'styles':{
                                      'width':'100%',
                                      'textAlign':'center',
                                      'color':myObject.colorOk
                                    }
                                  });
        }
        else{
          var message = new Element('div',{
                                    'html':"Un problème est survenu lors de la suppression de la bonne adresse : <br />" + txt,
                                    'styles':{
                                      'width':'100%',
                                      'textAlign':'center',
                                      'color':myObject.colorError
                                    }
                                  });
        }
        myObject.contentElement.empty();
        message.inject(myObject.contentElement,'top');
      }
    });
    req.send('linkId=' + linkId + '&appPath=' + myObject.path);
  },
  
  /*********************************************
   *
   * Modifie une actualité
   *
   *********************************************/ 
	modifyLinks : function(linkId){
    // vide le contenant
    $(this.contentElement).empty();
    
    var myObject = this;
    var req = new Request.HTML({
      url: this.path + 'modifyLinks.php',
      onSuccess: function(tree,ele,html,js){
        myObject.contentElement.set('html',html);
        
        // si le formulaire s'est affiché correctement
        if ($('annuler') && $('formModifyLinks')){
          $('annuler').addEvent('click',function(){
            myObject.getLinks();
          });
          
          // contrôle du formulaire
          var myCheckForm = new checkForm($('formModifyLinks'),{
                                                useAjax: false,
                                                //ajaxUrl: myObject.path + 'sendNews.php',
                                                errorPlace: 'bottom',
                                                divErrorCss: {
                                                  'margin':'5px 0 0 120px'
                                                },
                                                ajaxSuccessFct: function(msg){
                                                  if (msg == "1"){
                                                    var message = new Element('div',{
                                                      'html':"La bonne adresse a été modifiée avec succès",
                                                      'styles':{
                                                        'textAlign':'center',
                                                        'color':myObject.colorOk,
                                                        'margin':'0 auto'
                                                      }
                                                    });
                                                    myObject.contentElement.empty();
                                                    message.inject(myObject.contentElement,'top');
                                                    // ajoute la fonction a la gestion des délais puis l'appelle
                                                    myObject.delayFct = (function(){myObject.getLinks()}).delay(3000);
                                                  }
                                                  else{
                                                    var message = new Element('div',{
                                                      'html':"Une erreur est survenue lors de la modification de la bonne adresse : <br />" + msg,
                                                      'styles':{
                                                        'textAlign':'left',
                                                        'color':myObject.colorError,
                                                        'margin':'0 auto'
                                                      }
                                                    });
                                                    myObject.contentElement.empty();
                                                    message.inject(myObject.contentElement,'top');
                                                    // ajoute la fonction a la gestion des délais puis l'appelle
                                                    myObject.delayFct = (function(){myObject.modifyLinks(linkId)}).delay(3000);
                                                  }
                                                }
                                              });
      
        }
      }
    }).send('path=' + myObject.path + '&linkId=' + linkId);
    
    // sous-menu
    if (this.options.subMenu != ''){
      var div = new Element('div',{
        'html':' » Modifier une bonne adresse'
      });
      
      var a = new Element('a',{
        'href':'#',
        'html':'Bonnes adresses',
        'events':{
          'click':this.getLinks.pass('',this)
        }
      });
      
      a.inject(div, 'top');
      this.options.subMenu.empty();
      div.inject(this.options.subMenu);
    }
  }
  
});