/**
 * @category   Aims
 * @package    Aims_Ajax
 * @author     AIMS Interactive
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

/**
 * @todo Ajouter la validation des champs
 */

Event.observe(window, 'load', function() { 
    if($$('.wrapper')[0]){
        Element.clonePosition($('loading-mask'), $$('.wrapper')[0])
        setLoaderPosition();
    }
});

function submitAndReloadArea(area, url, showloader, callbacks) {
    
    if(callbacks) {
        alert('callback ok, now fire');
        callbacks.success.call();
        callbacks.error.call();
        return;
    }
    if($(area)) {
        if(showloader == true) {
            $('loading-mask').show();
        }
        var fields = $(area).select('input', 'select', 'textarea');
        var data = Form.serializeElements(fields, true);
        url = url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true');
        new Ajax.Request(url, {
            parameters: $H(data),
            loaderArea: area,
            onSuccess: function(transport) {
                try {
                    if (transport.responseText.isJSON()) {
                        var response = transport.responseText.evalJSON()
                        if (response.error) {
                            alert(response.message);
                        }
                        if(response.ajaxExpired && response.ajaxRedirect) {
                            setLocation(response.ajaxRedirect);
                        }

                        if(response.blocks) {
                            
                            if(response.blocks.length > 0) {
                            
                                for(var i=0;i<response.blocks.length;i++) {

                                    var block = response.blocks[i];
                                    if(!block.id) block.id = area;

                                    if(block.value.length > 0) {
                                        update(block.id,block.value, block.useEffect);
                                    }

                                }
                                
                            }
                            else {
                                
                                block = response.blocks;
                                if(!block.id) block.id = area;
                                
                                if(response.blocks.value.length > 0) {
                                    update(response.blocks.id,response.blocks.value, response.blocks.useEffect);
                                }
                            }
//                            alert(callback.isFunction(callback));
//                            if($.isFunction(callback)) {
//                                callback.call(callback);
//                            };

//                            if(element) element.fire('success');

                        }
                    } else {
                        if(transport.responseText != '') {
                            update(area, transport.responseText, true);
//                            if(element) element.fire('success');
//                            if(element) element.fire("widget:frobbed", { widgetNumber: 19 });
                        }
                    }
                }
                catch (e) {
                    update(area, transport.responseText, true);
                }
                if(showloader == true) {
                    $('loading-mask').hide();
                }

            },
            onFailure: function() {
                if(showloader == true) {
                    $('loading-mask').hide();
                }
            }
        });

    }

}

function setLoaderPosition(){
    var elem = $('loading_mask_loader');
    if (elem && Prototype.Browser.IE) {
        var middle = parseInt(document.body.clientHeight/2)+document.body.scrollTop;
        elem.style.position = 'absolute';
        elem.style.top = middle;
    }
}

function update(id, value, useEffect) {

    if(useEffect) {
        Effect.Fade(id, {
            duration:0.5,
            fps:25,
            afterFinish:function() {
                Element.replace(id, value);
                $(id).show();
            }
        });
    }
    else {
        Element.replace(id, value);
    }
}

function isEmpty( string ) {return ( null == string || "" == string || 0 == string )}

