

/**
 *  on utilisera FMS (Fenêtre Modale Simple)
 *  comme espace de noms
 */

var FMS = new Hash({
});


/**
 *  initialisation des options de la fenêtre modale
 *
 */

var options = {
  id : null,
  title:      'Nouvelle fenêtre',
    methode:    'html', // autres choix : 'ajax', 'iframe', 'dom'
  contenu:    '',
  urlContenu: '', // pour la méthode 'ajax'
// reference de la fenêtre
    windowDimensions: document.getCoordinates(),

  //options de style
  width:      null,
  height:     null,
  x:          null,
  y:          null,
  couleurFond: 'blue',
  opaciteFond: 0.1,
  zIndex: 1000,
  barreHeight:  25,
  couleurBarreFond: 'black',
  couleurBarreTexte: 'white',
  couleurContenuFond: 'white'
}


/**
 *  Classe de Base 
 *
 */

FMS.fenetreModale = new Class({
    Implements: [Events, Options, Modalizer],
  options: options,
  initialize: function(options) {
    this.setOptions(options);
  },


// préparation de la fenête modale

  preparation: function() {


      this.setModalOptions({'hideOnClick': true});
      this.modalShow();

/**
* calcul des dimensions de la fenêtre modale
*
*/

      if (!this.options.width) {
	  this.options.width = this.options.windowDimensions.width - 100;
      } else {
	  if (this.options.width > (this.options.windowDimensions.width - 100)) {
	      this.options.width = this.options.windowDimensions.width - 100;
	  }
      }
      if (!this.options.height) {
	  this.options.height = this.options.windowDimensions.height - 100;
      } else {
	  if (this.options.height > (this.options.windowDimensions.height - 100)) {
	      this.options.height = this.options.windowDimensions.height - 100;
	  }
      }

     /**
      *  la fenêtre modale elle-même est positionnée
      *  à l'intérieur du document, en position absolue
      *
      */
   var scroll= window.getScroll();

     if (this.options.y) {
        var topFen = this.options.y + scroll.y;
     } else {
        var topFen = ((this.options.windowDimensions.height - this.options.height) * 0.5).toInt() + scroll.y;
     }
     if (this.options.x) {
        var leftFen = this.options.x + scroll.x;
     } else {
        var leftFen = ((this.options.windowDimensions.width - this.options.width) * 0.5).toInt() + scroll.x;
     }

     var modalFen = new Element('div', {
       'id': 'modalFen',
       'styles': {
                 'width': this.options.width,
                 'position': 'absolute',
                 'top': topFen,
                 'left': leftFen,
                 'background-color': this.options.couleurContenuFond,
                 'border': '1px solid black',
                 'z-index': this.options.zIndex + 10
                 }
      }).inject(document.body);
      $('modalFen').setStyle('height',this.options.height);

      /**
       *  wrapper interne de la fenêtre
       *
       */

      var fenWrapper = new Element('div', {
            'id': 'fenWrapper',
            'styles': {
                   'width': '100%',
                   'position': 'relative',
                   'background-color': this.options.couleurContenuFond,
                        }
            }).inject('modalFen');
      $('fenWrapper').setStyle('height', this.options.height);

      /**
       *  barre de la fenêtre modale
       *
       */

       var BarreFen = new Element('div', {
           'id': 'modalBarreFen',
           'styles': {
                     }
           }).addClass("FMSBarre").inject('fenWrapper', 'top');
       $('modalBarreFen').set('text', this.options.title);
       $('modalBarreFen').setStyle('height', this.options.barreHeight);

      /**
       *  bouton de fermeture
       *
       */

      var closeButton = new Element('a', {
            'id': 'modalFenCloseButton',
            'styles': {
                      }
           }).set('text', 'x').inject('modalBarreFen', 'top');
      $('modalFenCloseButton').addEvent('click', function() {
                                         $('modalFen').dispose();
                                         this.modalHide();
      }.bind(this));

       /**
        * wrapper du contenu de la fenêtre modale
        *
        */

       var modalContentWrapper = new Element('div',  {
            'id': 'modalContentWrapper',
            'styles': {
                      'width': '100%',
                      'position': 'absolute',
                      'top': this.options.barreHeight,
                     }
            }).inject('fenWrapper');
      $('modalContentWrapper').setStyle('height', this.options.height - this.options.barreHeight);
      if(this.options.methode != 'iframe') {
          $('modalContentWrapper').setStyle('overflow', 'auto');
      }
  }, // fin de préparation

    cacher: function() {
        $('modalFen').dispose();
        this.modalHide();
    },
        /**
         *  setWidth : 
         */

    setWidth: function(value) {
       this.options.width=value.toInt();
    },

        /**
         *  setHeight : 
         */

    setHeight: function(value) {
       this.options.height=value.toInt();
    },

 
        /**
         *  setLeft : 
         */

    setLeft: function(value) {
       this.options.x=value.toInt();
    },

        /**
         *  setTop : 
         */

    setTop: function(value) {
       this.options.y=value.toInt();
    },

       /**
         *  setTitle : 
         */

    setTitle: function(value) {
       this.options.title=value;
    },


     /**
      *  setContenu : placer le code HTML paramètre
      *     dans les options de l'objet
      *
      */

  setContenu: function(newHtml) {
     this.options.contenu = newHtml;
  },

     /**
      *  setMethode : choisir la méthode d'injection
      *
      */
  setMethode: function(methode) {
     if (methode == 'html' || methode == 'ajax' || methode == 'iframe' || methode == 'dom') {
         this.options.methode = methode; 
     }
  },


     /**
      *  setUrlContenu : URL du programme délivrant
      *     les informations en ajax
      *
      */
  setUrlContenu: function(url) {
     this.options.urlContenu = url;
  },

      /**
       *   setIframe : crée un élément iframe à l'intérieur
       *      de modalContentWrapper et place le contenu
       *      de l'urlContenu des options
       *
       */

  setIframe: function() {
      var modalIframe = new IFrame({
          'id' : 'modalIframe',
          'name': 'modalIframe',
          'src': this.options.urlContenu,
          'marginwidth': 0,
          'marginheight': 0,
          'frameborder': 0,
          'scrolling': 'auto',
          'styles': {
              'width': '100%', //$('modalContentWrapper').width,
              'height': '100%' //$('modalContentWrapper').height
                    }
          }).injectInside($('modalContentWrapper'));
   
  },

  insertContent: function() {
    this.preparation();

      switch (this.options.methode) {
        case 'html':
          $('modalContentWrapper').innerHTML = this.options.contenu;
          var top = (($('modalContentWrapper').getSize().y - $('modalContent').getSize().y) * 0.5).toInt();
          $('modalContent').setStyle('top', top);
          $('modalContent').setStyle('text-align', 'center');
          $('modalContent').setStyle('width', '100%');
        break;
        case 'ajax':
          $('modalContentWrapper').load(this.options.urlContenu, {evalResponse: true});
        break;
        case 'iframe':
          this.setIframe();
        break;
      case 'dom':
	  $('modalContentWrapper').adopt(this.options.contenu);
	  break;
      } // fin du switch
  } // fin de insertContent
});

