/**
 * @author Alexandre araste
 *  v 1.0.1
 *  Necessite Prototype 1.5.1.1
 */
var OBJdisplayMessage=Class.create()
OBJdisplayMessage.prototype = {
	initialize:function(filterId, messageId){
		/*Définit le div qui sert de filtre */
		if (!$(filterId)){
			var d = document.createElement('DIV')
			d.id=filterId
			this.filter = $(d)
			document.forms[0].appendChild(d)
		}else {this.filter=$(filterId)}
		
		this.filter.hide()
		
		if (messageId) this.setMessage(messageId, false)
		
		this.filter.setStyle({position:'absolute', top:'0px', left:'0px', backgroundColor:'#4f4c4c', zIndex:'999', MozOpacity:'0.5', filter:'alpha(opacity=50),display:none'})
		this.moveOnScroll = true
		
		this.curvySettings = {
          tl: { radius: 10 },
          tr: { radius: 10 },
          bl: { radius: 10 },
          br: { radius: 10 },
          antiAlias: true,
          autoPad: true,
          validTags: ["div"]
      }
	  
	  this.minMessageTop = 10 // position mini du message

		 Event.observe(window, 'resize', function(e){this.setFilter();this.setPositionMessage()}.bindAsEventListener(this))
		 Event.observe(window, 'scroll', function(e){
		 	if (!this.message.visible()) return ;
		 	this.setFilter();
			if (this.moveOnScroll)this.setPositionMessage()
		}.bindAsEventListener(this))
	
	},
	
	setPositionMessage:function(){
			if (!this.message) return ;
			if (!this.message.visible()) return ;
			
			var h = parseInt(((document.documentElement.clientHeight  - this.message.clientHeight) / 2) +  document.documentElement.scrollTop)
			if (h<0)h=this.minMessageTop
			h += 'px'
			
			var l = parseInt(((document.documentElement.clientWidth - this.message.clientWidth)/2) + document.documentElement.scrollLeft) + 'px'
			
			this.message.setStyle({left:l,top:h})	
    },
	
	showMessage:function(){
	    this.setFilter()
	    this.filter.style.display='block'
	    this.message.style.display='block'
		
		if (this.curvySettings!=null){
			var myBoxObject = new curvyCorners(this.curvySettings, this.message);
      		myBoxObject.applyCornersToAll();
		}
		
		this.setFilter()
		this.setPositionMessage()
	},
	
	hideMessage:function(){
	    Element.hide(this.filter)
		Element.hide(this.message)
	},
	
	setMessage:function(objMessage, bDisplay){
	    this.message = (typeof objMessage=='string')?$(objMessage):objMessage
		this.message.hide()
		this.message.setStyle({zIndex:'99999', position:'absolute', top:'0px', left:'0px'})
		if (this.message.parentNode!=this.filter.parentNode){
		    var m = this.message.cloneNode(true)
		    document.forms[0].appendChild(m)
		    this.message.parentNode.removeChild(this.message)
		    this.message = m
		}
		if (bDisplay){
			this.setPositionMessage()
			this.message.show()
		}
	},
	
	toggle:function(){
	        if (this.message.style.display=='none'){this.showMessage();return}
	        this.hideMessage()
	},
	
	setFilter:function(){
	   // if (!this.filter) return
	    //if (!this.filter.visible) return
	     
	    this.filter.style.width = document.documentElement.clientWidth  + document.documentElement.scrollLeft + 'px'
		this.filter.style.height= document.documentElement.clientHeight  + document.documentElement.scrollTop + 'px'
		
		
		
    },
	
	setCorners:function(settings){
        var myBoxObject = new curvyCorners(settings, this.message);
        myBoxObject.applyCornersToAll();
    }
}


/*******************************************************************************/
/********************Message flottant*******************************************/
/*******************************************************************************/

var OBJMovableMessage = Class.create()
OBJMovableMessage.prototype={
    initialize:function(element, bVisible){
        var el = element
        if (typeof element=='string') el=$(element)
        Object.extend(this, el)
        this.setStyle({position:'absolute', zIndex:'999'})
        if (!bVisible) {this.hide()} else {this.show()}
        
        this.isMovable = false
        this.isResisable = false
        this.mouseDelta = {top:0, left:0}
        
        this.setHandler()
        this.setFooter()
        this.setContent()
        this.onResize=null
        
        this.resize()
 
    },
    
    setCorners:function(arrondis){
        var  settings = {
          tl: { radius: 0 },
          tr: { radius: 0},
          bl: { radius: arrondis },
          br: { radius: arrondis },
          antiAlias: true,
          autoPad: true,
          validTags: ["div"]
      }
      
      myBoxObject = new curvyCorners(settings, $(this.footer.id));
      myBoxObject.applyCornersToAll();
        
      settings = {
          tl: { radius: arrondis },
          tr: { radius: arrondis},
          bl: { radius: 0 },
          br: { radius: 0 },
          antiAlias: true,
          autoPad: true,
          validTags: ["div"]
      }
      
      myBoxObject = new curvyCorners(settings, $(this.handler.id));
      myBoxObject.applyCornersToAll();
    },                                                                                                  
    
    setHandler:function(){
        var a = $(this.id).getElementsBySelector('[type="handler"]')
        if (a.length==0) return
        this.handler = a[0]
        this.handler.setStyle({overflow:'hidden'})
        
        
        Event.observe($(this.handler.id), 'click', function(e){
            var tg = Event.element(e)
            if (tg.getAttribute('type')=='closeWindow') {this.hide();return}
        }.bindAsEventListener(this))
        
        Event.observe(this.handler, 'mousedown', function(e){
            this.isMovable=true
            var p = Position.cumulativeOffset($(this.id))
            this.mouseDelta.top = Event.pointerY(e) - p[1]
            this.mouseDelta.left = Event.pointerX(e) - p[0]
        }.bindAsEventListener(this))
        
        Event.observe(this.handler, 'mouseup', function(e){
            this.isMovable=false
        }.bindAsEventListener(this))
        
        Event.observe(this.handler, 'mousemove', function(e){
            if (!this.isMovable) return
            this.setStyle({top:Event.pointerY(e) - this.mouseDelta.top + 'px', left:Event.pointerX(e)-this.mouseDelta.left + 'px'})       
        }.bindAsEventListener(this))
        
         Event.observe(this.handler, 'mouseout', function(e){
            this.isMovable = false
        }.bindAsEventListener(this))    
    },
    
    setFooter:function(){
        var a = $(this.id).getElementsBySelector('[type="footer"]')
        if (a.length==0) return
        this.footer = a[0]
     
        Event.observe(this.footer, 'mouseover', function(e){
            var p = Position.cumulativeOffset($(this.id)) 
            if (Event.pointerX(e) < p[0] + $(this.id).getWidth() - 20){
                this.footer.setStyle({cursor:'auto'})}
            else{this.footer.setStyle({cursor:'NW-resize'})}  
        
        }.bindAsEventListener(this))
        
        Event.observe(this.footer, 'mousedown', function(e){
            this.isResizable=true
            var p = Position.cumulativeOffset($(this.id))
            this.mouseDelta.top = p[1] + $(this.id).getHeight() - Event.pointerY(e)
            this.mouseDelta.top = (this.mouseDelta.top < 0)?5:this.mouseDelta.top 
            this.mouseDelta.left = p[0] + $(this.id).getWidth() - Event.pointerX(e)
        }.bindAsEventListener(this))
        
         Event.observe(this.footer, 'mouseup', function(e){
            this.isResizable=false
        }.bindAsEventListener(this))
        
        Event.observe(this.footer, 'mousemove', function(e){
            
            var p = Position.cumulativeOffset($(this.id))
            this.footer.setStyle({cursor:(Event.pointerX(e) < p[0] + $(this.id).getWidth() - 20)?'auto':'NW-resize'})
            if (!this.isResizable ) return
            var h = Event.pointerY(e) - p[1] + this.mouseDelta.top + 'px'
            var w = Event.pointerX(e) - p[0] + this.mouseDelta.left + 'px'
            this.setStyle({width:w, height:h })
            this.resize()
        }.bindAsEventListener(this))
        
        Event.observe(this.footer, 'mouseout', function(e){
            this.isResizable = false
        }.bindAsEventListener(this))    
    },
    
    setContent:function(){
        var a = $(this.id).getElementsBySelector('[type="content"]')
        if (a.length==0) return
        this.content = a[0]        
        
    },
    
    resize:function(e){
             this.content.setStyle({width:'100%', height:$(this.id).getHeight() - this.footer.getHeight() - this.handler.getHeight() + 'px'})
             this.footer.setStyle({width:$(this.id).getWidth() + 'px'})
             if (this.onResize != null) this.onResize()
    }
}

/**
 * @author Axel Bocquet
 * Necessite Prototype 1.5.1.1
 */

function Message_getMessage(idDiv)
{
  var Message_temp = new OBJdisplayMessage(Message_createFilter());
  Message_temp.setMessage(idDiv, false);
  Message_temp.curvySettings = null; 
  Message_temp.filter.style.backgroundColor = '#ffffff';
  Message_temp.filter.style.opacity = '0.65'; 
  return Message_temp;
}

function Message_createFilter()
{
  var filter = document.createElement('div');
  filter.id = 'filter'+ parseInt(Math.random()*10000000);

  return filter.id;
}

