/* =============
    Classe Boite
   ============= */

/* LES CONSTANTES (LES MEMES QU'EN PHP ET QU'EN BASE !!!) */
var FLUX   = 1;
var MAIL   = 2;
var GOOGLE = 3;
var METEO  = 4;
var NOTE   = 5;
var RUBRIQUE = 6;

var sortableReordered = false;

function Boite(id_config, colonne, position, reduite)
{
  this.id_config     = id_config;
  this.colonne       = colonne;
  this.position      = position;
  this.reduite       = reduite;
  this.refreshOnLoad = true;

  /* Les methodes de la classe */
  this.doRefreshOnLoad = function()
  {
    return (this.refreshOnLoad == true)
  }

  this.afficher = function(last)
  {
    var col = this.colonne;
    new Ajax.Request('module_web/flux/ajax/affiche.php',
                     {method: 'post', postBody: 'type=boite&id_config='+this.id_config,
                      onSuccess: function(t)
                              {
                                ajaxEnCours = false;
                                if (last == 0)
                                  document.getElementById('colonne1').innerHTML = t.responseText;
                                else
                                  new Insertion.After(document.getElementById('div_'+last), t.responseText);
                              },
                      onFailure: function(t)
                              {
                                ajaxEnCours = false;
                              }});
  }

  this.rafraichirContenu = function()
  {
    var id = this.id_config;

    document.getElementById('infos_'+id).innerHTML = '<img src="images/loading.gif" alt="chargement" /><br />Chargement';
    new Ajax.Request('module_web/flux/ajax/affiche.php',
                     {method: 'post', postBody: 'type=contenu&id_config='+this.id_config,
                      onSuccess: function(t)
                              {
                                ajaxEnCours = false;
				var tmp = t.responseText.split('<_TiTrE_SpLiTtEr_>');
                                if (tmp.length == 2)
                                {
                                  document.getElementById('title_'+id).innerHTML = tmp[0];
                                  document.getElementById('infos_'+id).innerHTML = tmp[1];
                                }
                                else
                                {
                                  document.getElementById('infos_'+id).innerHTML = t.responseText;
                                }
                              },
                      onFailure: function(t)
                              {
                                ajaxEnCours = false;
				alert('Error during AJAX process');
                                //rafraichirContenu(id);
                              }});
  }

  this.afficherConfig = function ()
  {
    new Ajax.Request('module_web/flux/ajax/affiche.php',
                     {method: 'post', postBody: 'type=config&id_config='+this.id_config,
                      onSuccess: function(t)
                              {
                                document.getElementById('contenu_config').innerHTML = t.responseText;
				wTop = document.documentElement.scrollTop + document.body.scrollTop;
                                if (wTop == '' || wTop < 200)
                                  wTop = 180;
				var obj = document.getElementById('config');
				obj.style.top = (wTop + 50) + 'px';
				Effect.BlindDown('config', {duration:0.2});
                              }});
  }

  this.reduire = function()
  {
    if (this.reduite)
    {
      this.reduite = 0;
      if (this.refreshOnLoad)
        this.rafraichirContenu();
      Effect.SlideDown('contenu_'+this.id_config, {duration:0.5});
    }
    else
    {
      this.reduite = 1;
      Effect.SlideUp('contenu_'+this.id_config, {duration:0.5});
    }
    new Ajax.Request('module_web/flux/ajax/reduire.php', {method: 'post', postBody: 'id_config='+this.id_config});
  }

  this.isReduite = function()
  {
    return (this.reduite);
  }

  this.supprimer = function(t)
  {
    var id = this.id_config;
    if(confirm('Etes-vous sûr de vouloir supprimer cette boite ?'))
    {	
      new Ajax.Request('module_web/flux/ajax/supprimer.php', {method: 'post', postBody: 'id_config='+this.id_config,
                       onSuccess: function(t)
                                {	
				  Effect.Fade('div_'+id, {duration:0.2});
                                },
                       onFailure: function(t)
                                {
                                  alert('Erreur lors de la suppression...');
                                }});
    }
  }

  /* Les méthodes abstraites à définir dans les classes filles */
  this.modifier           = NotImplementedException;
}

/* Les methodes static */
Boite.afficherNewConfig = function(type)
{
  new Ajax.Request('module_web/flux/ajax/affiche.php', {method: 'post', postBody: 'type=newConfig&boite='+type,
                   onSuccess: function(t)
                            {
                              document.getElementById('contenu_config').innerHTML = t.responseText;
				wTop = document.documentElement.scrollTop + document.body.scrollTop;
                                if (wTop == '' || wTop < 200)
                                  wTop = 180;
				var obj = document.getElementById('config');
				obj.style.top = (wTop + 50) + 'px';
				Effect.BlindDown('config', {duration:0.2});
                              }});
}

Boite.ecrireNouvelleBoite = function(t, func)
{
  if (func == undefined)
    func = 'Boite';

  if (t.responseText != '')
  {
    Effect.DropOut('config', {duration:0.2});

    tmp = t.responseText.split(':');
    var idNewBoite = tmp[0];
    var lastPos = tmp[1];
    var idLastBoite = tmp[2];
    boites[idNewBoite] = new func(idNewBoite, 1, lastPos, 0, '');
    boites[idNewBoite].afficher(idLastBoite);
    ids[nbBoites] = idNewBoite;
    nbBoites++;
    cacheOuAffBiblio('biblio');
    delayRefreshContent(idNewBoite);
    return (idNewBoite);
  }
}

Boite.nouvelleBoite       = NotImplementedException;

function NotImplementedException()
{
   alert("Ce module ne permet pas cette action.");
}

/*****************************************/
/* Des fonctions qui utilisent la classe */
/*****************************************/

function rafraichirContenu(idBoite)
{
  var id = idBoite;
  boites[id].rafraichirContenu();
}

function delayRefreshContent(idNewBoite)
{
  if (document.getElementById('infos_'+idNewBoite))
  {
    if (boites[idNewBoite].doRefreshOnLoad())
      rafraichirContenu(idNewBoite);
    setSortable(1);
  }
  else
  {
    setTimeout('delayRefreshContent('+idNewBoite+')', 100);
  }
}

function rafraichirBoiteModifiee(t)
{
  var idBoite = t.responseText;
  boites[idBoite].rafraichirContenu();
  Effect.DropOut('config', {duration:0.2});
}

/* D'autres fonctions utiles */
function updateColonne(col)
{
  sortableReordered = true;
  var drop_seq = Sortable.sequence(col.id,{tag:'div'});
  new Ajax.Request('module_web/flux/ajax/move.php', 
	                            {
	                             method: 'post',
	                             postBody: 'COLONNE='+col.id+'&SEQ='+drop_seq
                                    });
}

function setSortable(col, strContainment)
{
  if (document.getElementById('colonne'+col))
  {
    if (!strContainment)
      {
        var i = 1;
	while (document.getElementById('colonne'+i))
	  {
	    if (i == 1)
	      strContainment = '"colonne'+i+'"';
	    else
	      strContainment += ', "colonne'+i+'"';
	    i++;
	  }
      }
    var options = "{dropOnEmpty:true, tag:'div', handle:'title', containment:["+strContainment+"], constraint:false, scroll: window, onUpdate: updateColonne}";
    eval("Sortable.create('colonne"+col+"', "+options+")");
  }
}

function cacheOuAffFlux(id)
{
  if (document.getElementById(id).style.display == 'none')
  {
    Effect.SlideDown(id, {duration:0.5});
  }
  else
  {
    Effect.SlideUp(id, {duration:0.5});
  }
}

function cacheOuAffBiblio(id)
{
  if (document.getElementById(id).style.display == 'none')
  {
    bibli.afficher();
    Effect.Appear(id, {duration:0.5});
  }
  else
  {
    Effect.Squish(id, {duration:0.5});
    setTimeout('document.getElementById("biblio_flux").style.display = "none";', 1000);
  }
}

function checkSortable(event)
{
    if (sortableReordered) {
         Event.stop(event);
         sortableReordered = false;
    }
}