//= require ./hash_table

$(function(){

    var init = function(params) {

        var
            xhr = new XMLHttpRequest()
            ,url = params.url || null
            ,user = params.user || null
            ,password = params.password || null
            ,responseData = null
            ,token = null
        ;

        // async não informado dá warning de deprecated
        xhr.open(params.type, url, params.async, user, password);

        meta = document.querySelector('meta[name=csrf-token]');
        if(meta) { token = meta.getAttribute('content'); }
        if(token) { xhr.setRequestHeader('X-CSRF-Token', token); }
        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

        params.xhr = xhr;

        return params;
    }

    Ajax = {

        // try {
        // } catch(e) {
        //     console.error(e.message)
        // }

        get: function(params) {

            params.type = 'GET';

            if(params.async) {
                this.async = params.async;
            } else {
                this.async = true;
            }

            if(params.urlParams) {
                params.url += '?';
                for(i in params.urlParams) {
                    params.url += i + '=' + params.urlParams[i] + '&';
                }
                params.url = params.url.slice(0, params.url.length-1);
            }

            params.async = this.async;
            params = init(params);
            xhr = params.xhr;
            params.xhr.send(null);

            this.respondAsync = function(callback) {
                if(params.progressMedia) {
                    //
                    xhr.addEventListener('progress',
                        function(e) {
                            params.progressMedia(e);
                        }
                    , false);
                }

                xhr.onreadystatechange = function(){
                    if(xhr.readyState > 1 && xhr.readyState < 4) {
                        if(params.readyStateChange) {
                            params.readyStateChange(xhr);
                        }
                    }
                    else if(xhr.readyState === 4) {
                        if(xhr.status === 200) {
                            // usar para dar uma resposta caso done não seja chamado
                            if( xhr.getResponseHeader('Content-Type').search('text/javascript') > -1 ) {
                                eval(xhr.response);
                            }
                            if(callback) {
                                callback(xhr.response);
                            }
                        }
                    }
                }
            }

            this.respondSync = function(callback){
                if( xhr.getResponseHeader('Content-Type').search('text/javascript') > -1 ) {
                    eval(xhr.response);
                }
                if(callback) {
                    callback(xhr.response);
                }
            }

            if( params.urlParams ) {
                if(params.urlParams.format === 'js') {
                    if(this.async) {
                        this.respondAsync();
                    } else {
                        this.respondSync();
                    }
                }
            }

            return this;
        },

        // deixar somente para os casos de envio
        // xhr.send( dataSend || null );

        //ver possibilidade de colocar como método de instância em get
        done: function(callback) {
            if(this.async) {
                this.respondAsync(callback);
            }
            else {
                this.respondSync(callback);
            }

            return this.xhr;
        },

    }
})

@@ -3009,32 +3009,96 @@
 %0A            %7D%0A%0A
+            // deve ser declarado ap%C3%B3s as defini%C3%A7%C3%B5es com o this%0A
             if( 
@@ -3515,79 +3515,8 @@
 );%0A%0A
-        //ver possibilidade de colocar como m%C3%A9todo de inst%C3%A2ncia em get%0A
     

remove comentário