var o2jOverDiv = new Class({
    
    overdiv:    null,
    parent:     null,
    title:      null,
    mask:       null,
    urlContent: null,
    typeContent: null,
    largeur:    false,
    hauteur:    false,
    postfields: false,
    callback:   false,
    
    initialize: function(options) {
        this.overdiv = new Element('div',{
            'id': 'chargement',
            styles:{
                'padding': '50px 10px',
                'background': '#fff',
                'position': 'absolute',
                'top': '100px',
                'left': '50%',
                'marginLeft': '-440px',
                'zIndex': 9998,
                'border': 'solid 1px #ccc',
                'borderRadius': '5px',
                'boxShadow': '0px 0px 5px #000'
            }
        });
        
        if(!options.largeur){
            this.overdiv.setStyles({
                'width':'860px',
                'marginLeft':'-440px'
            });
        }else{
            this.largeur = options.largeur;
            this.overdiv.setStyles({
                'width':options.largeur,
                'marginLeft':Math.round(-0.5*options.largeur.toInt())+'px'
            });
        }
        
        if(options.hauteur){
            this.hauteur = options.hauteur;
        }
        
        if(options.postfields){
            this.postfields = options.postfields;
        }
        
        if(options.callback){
            this.callback = options.callback;
        }
        
        if(options.parent){
            this.parent = options.parent;
            this.accroche(options.parent);
        }
        
        if(options.mask){
            this.mask = options.mask;
        }
        
        if(options.title){
            this.setTitle(options.title);
        }
        
        if(options.typeContent){
            this.typeContent = options.typeContent;
        }else{
            this.typeContent = 'ajax';
        }
        
        if(options.url){
            this.setContent(options.url);
        }
        
        var overDivTemp = this.overdiv;
        var maskTemp = this.mask;
        if(!options.unclosable){
            new Element('div', {
                'html': 'X',
                styles:{
                    position:'absolute',
                    right:'10px',
                    top:'10px',
                    borderRadius: '11px',
                    height: '20px',
                    width: '20px',
                    padding: '2px 0 0 2px',
                    textAlign: 'center',
                    fontWeight: 'bold',
                    color:'#fff',
                    fontSize:'14px',
                    background:'#f60',
                    cursor:'pointer'
                },
                events:{
                    'click':function(){
                        overDivTemp.destroy();
                        maskTemp.destroy();
                    }
                }
            }).inject(this.overdiv);
        }
        
        new Fx.Scroll(window).toTop();
    },
    accroche: function(parent){
        this.parent = parent;
        this.overdiv.inject(this.parent);
    },
    setTitle: function(title){
        this.title = title;
        new Element('div', {
            'html': title,
            styles:{
                color:'#f60',
                fontWeight:'bold',
                fontSize:'18px',
                margin: '0px 25px 35px 25px',
                padding: '0',
                textAlign:'center'
            }
        }).inject(this.overdiv);
    },
    setContent: function(url){
        switch(this.typeContent){
            case 'ajax':
                this.setAjaxContent(url);
                break;
            case 'iframe':
                this.setIframeContent(url);
                break;
        }        
    },
    setIframeContent: function(url){
        this.urlContent = url;
        
        var hauteur = this.hauteur;
        
        var iframe = new Element('iframe', {
            src: url,
            styles:{
                width: '100%',
                border: 'none',
                background: 'url(/images/fenetreModale/waiting.gif) no-repeat center center #fff'
            },
            events:{
                'load': function(){this.setStyle('background', '#fff');}
            },
            frameborder: '0'
        }).inject(this.overdiv);
        if(!hauteur) iframe.setStyle('height','550px');
        else iframe.setStyle('height',hauteur);
    },
    setAjaxContent: function(url){
        var self = this;
        
        this.urlContent = url;
        
        var overDivCopy = this.overdiv;
        var ajaxRequest = new Request({
            url:this.urlContent,
            evalResponse:true,
            onSuccess: function(responseText){
                new Element('div', {
                    'html': responseText
                }).inject(overDivCopy);
                if(self.callback) self.callback();
                overDivCopy.getElements('script').each(function(script){
                    eval(script.get('html'));
                });
                self.mask.resize();
            }
        });
        if(this.postfields){
            ajaxRequest.post(this.postfields);
        }else{
            ajaxRequest.get();
        }
    },
    setLoader: function(form){
        window.location.hash = '#chargement';
        new Element('div').appendText('Le formulaire est en cours de soumission.').setStyles({'textAlign':'center','marginBottom':'24px'}).inject(this.overdiv);
        new Element('img',{
            'alt':'En attente',
            'src':'/images/fenetreModale/waiting.gif'
        }).inject(new Element('div',{
            styles:{
                'textAlign':'center'
            }
        }).inject(this.overdiv));
//        form.submit();
    },
    addHtmlContent: function(html){
        new Element('div', {
            'html': html
        }).inject(this.overdiv);
    },
    addElement: function(elt){
        elt.inject(this.overdiv);
    },
    closeAll: function(){
        this.mask.destroy();
        this.overdiv.destroy();
    }
    
});

var longSubmit = function(){
    if(!this.hasClass('waitingOnSubmit')){
        return true;
    }
    
    $(document.body).scrollTo(0,0);
    var mask = new Mask();
        mask.show();

    if(this.get('title')){
        var titre = this.get('title');
    }else{
        var titre = 'Opération en cours';
    }
        
    var overDiv = new o2jOverDiv({
        'parent': $('body') ? $('body') : $(document.body),
        'title': titre,
        'mask': mask,
        'unclosable': true
    });
    overDiv.setLoader(this);
}

function startOverdivListeners(){
    $$('a.o2jOverDiv').addEvent('click', function(e){
        e.stop();
        var mask = new Mask();
        mask.show();
        
        var params = this.get('title').split('|');
        var largeur = false;
        var hauteur = false;
        if(params.length>1){
            var typeContent = params[1];
            if(params.length>2) largeur = params[2];
            if(params.length>3) hauteur = params[3];
        }else{
            var typeContent = 'ajax';
        }
            
        var overDiv = new o2jOverDiv({
            'parent': $('body'),
            'title': params[0],
            'url': this.get('href'),
            'mask': mask,
            'typeContent': typeContent,
            'largeur': largeur,
            'hauteur': hauteur
        });
    });
}

document.addEvent('domready',function(){
    startOverdivListeners();
    
    // Fenetre de chargement pour les formulaires à chargement long
    $$('form.waitingOnSubmit').each(function(form){
        form.addEvent('submit',longSubmit);
    });
});


