/*
 * 
 */

function GDraggable(element,oMoveElement)
{
  var element      = $(element);
  var oMoveElement  = (oMoveElement) ?  $(oMoveElement) : element;
  var mouseStartX;
  var mouseStartY;
  var startX;
  var startY;
  var move;
    
  var startDrag   = function (e)
  {
  	e.stop();
    mouseStartX = Event.pointerX(e);
    mouseStartY = Event.pointerY(e);
    startX      = oMoveElement.cumulativeOffset().left + oMoveElement.cumulativeScrollOffset().left;
    startY      = oMoveElement.cumulativeOffset().top + oMoveElement.cumulativeScrollOffset().top;
    move        = true;
  }
  
  var runDrag   = function (e)
  {
    if(!move) return;
    e.stop();
    var scrollOffsets = document.viewport.getScrollOffsets();
    oMoveElement.style.left  = (startX + (Event.pointerX(e) - mouseStartX) - scrollOffsets.left) + 'px';
    oMoveElement.style.top   = (startY + (Event.pointerY(e) - mouseStartY) - scrollOffsets.top) + 'px';
  }
  
  var stopDrag   = function (e)
  {
  	e.stop();
    move        = false;
  }
  element.observe('mousedown',        startDrag,  true);
  Event.observe(document,'mousemove',   runDrag,    true);
  element.observe('mouseup',          stopDrag,   true);
  
  
  oMoveElement.move = function (x,y) 
  {
    moveElement(oMoveElement,x,y)
  }
}

/**
 * Deplace un element en position absolut
 */
function moveElement(oMoveElement,x,y,relativeToViewport)
{
  var scrollOffsets = document.viewport.getScrollOffsets();
  if(x == 'center') x = (document.viewport.getWidth() / 2) 
                      - (oMoveElement.getWidth() / 2) + scrollOffsets.left;
  if(y == 'center') y = (document.viewport.getHeight() / 2) 
                      - (oMoveElement.getHeight() / 2) + scrollOffsets.top;
          
  if(relativeToViewport) 
  {
    x += scrollOffsets.left;
    y += scrollOffsets.top;
  }
  if(x<0) x=0;
  if(y<0) y=0;
  oMoveElement.setStyle({top:  y + 'px',left: x + 'px'});
}
/**
 * Loader
 */
var Loading = Class.create(
{
	initialize: function () 
	{
    if(!$('loading')) return;
		var isAppair = false;
    var op = 0.1, inc = 0.1;
		Object.extend($('loading'),
		{
      'show' : function () 
      {
      	var el   = $(this);
        el.superShow();
        var left = (document.viewport.getWidth() / 2) - (el.getWidth() /2);
        var top  = (document.viewport.getHeight() / 2) - (el.getHeight() /2);
        var top  = 100;
        el.setStyle({left:left + 'px',top:top + 'px'});
        isAppair = true;
        inc = 0.1;
        var appair  = function() { if(!isAppair) return; el.setOpacity(op = op + inc); if(op < 0.8) appair.defer(); };
        appair();
      },
      'superShow' : $('loading').show,
      
      'hide' : function () 
      {
        var el   = $(this);
        inc = -0.1;
        isAppair = false;
        var hiding  = function() { el.setOpacity(op = op + inc); if(!isAppair && (op > 0.1)) hiding.defer(); else el.superHide() };
        hiding();
      },
      'superHide' : $('loading').hide
		});
	}
});

Event.observe(window,'load',function () { new Loading() });

 
/**
 * Loader
 */
var HelpBox = Class.create(
{
  initialize: function () 
  {
    $$('.helpBox').each(function (el) {this.attachTo(el)}.bind(this));
  },
  
  attachTo: function (el)
  {
  	var control = new Element('div',{'class':'helpBoxHead'}).update('Head'); 
  	var header  = el.select('h1').first();
  	if(header) { control.innerHTML = header.innerHTML; header.remove() };
  	var contentHTML = el.innerHTML;
  	el.innerHTML = '';
  	el.insert({top:control});
  	
  	var btclose = new Element('input',{'type':'button', 'class':'bt16h bt16cancel'}).observe('click',function() {$(el).hide()});
  	btclose.setStyle({'float':'right'}); 
  	control.insert({top:btclose});
  	
    var content = new Element('div',{'class':'helpBoxContent'}).update(contentHTML);
    el.insert(content);
    
    el.move = function (x,y) 
		{
			var scrollOffsets = document.viewport.getScrollOffsets();
		  if(x == 'center') x = (document.viewport.getWidth() / 2) 
		                      - (el.getWidth() / 2) + scrollOffsets.left;
		  if(y == 'center') y = (document.viewport.getHeight() / 2) 
		                      - (el.getHeight() / 2) + scrollOffsets.top;
		  el.setStyle({top:  y + 'px',left: x + 'px'});
		}
    
    el.move('center','center');
    
    el.setStyle({position:'absolute'});
    GDraggable(control,el);
    
    el.toggle = function ()
    {
      el.move('center','center');
      Element.toggle(el);
    }
    
    el.show = function ()
    {
      el.move('center','center');
      Element.show(el);
    }
    
  }
  
});

Event.observe(window,'load',function () { new HelpBox() });

/**
 * Action d'un bouton afficher ou cacher 
 */
function moreOrLess(event)
{
  var el = Event.element(event);
  var alt = el.readAttribute('alt');
  if($(alt).visible()) 
  {
    $(alt).hide();
    el.removeClassName('lessCaption');
    el.addClassName('moreCaption');
  } else
  {
    $(alt).show();
    el.removeClassName('moreCaption');
    el.addClassName('lessCaption');
  }
}

/**
 * Créer une nouvelle boite de dialogue
 */
function dialogBox(dialogId, contentId, onClose)
{
  Element.insert($('content'),'<div id="'+dialogId+'"></div>');
  Element.insert($(dialogId),'<div id="'+dialogId+'Header" style="background-color:darkred; border:2px outset white; text-align:right; font-weight:bold;  padding:1px">&nbsp;</div>');
  Element.insert($(dialogId+'Header'),'<input  id="'+dialogId+'Close" type="button"  value=" X ">');
  $(dialogId+'Close').onclick = onClose;
  Element.insert($(dialogId),'<div id="'+contentId+'" style="padding:10px">&nbsp;</div>');
  var popup = $(dialogId);
  popup.setStyle({backgroundColor:'white', border:'1px solid black', padding:'1px', width:'900px', position:'absolute'});
  GDraggable(dialogId+'Header',dialogId);
  popup.move('center','center');
  popup.hide($(dialogId));
  return 
}

function debug(s)
{
  $('debug').show();
  $('debug').insert({top:'<div>' + s +'</div>'});
}