/* Suppress console.log() and console.error() errors in IE */
if (typeof console == "undefined"){

    var console             = {};

    if (typeof console.log == "undefined"){
        console.log         = function(){};
    }

    if (typeof console.error == "undefined"){
        console.error       = function(){};
    }
}

/* Create droplet namespace */
(function() {
    window.droplet = {

        constants           : {},
        modules             : {

            add: function(moduleName){

                if (typeof(moduleName) == 'string'){

                    this[moduleName] = this[moduleName] || {};

                } else {

                    for (var i in moduleName){
                        this.add(moduleName[i]);
                    }
                }
            }
        },
        
        init : function(){
            
            $('a.void').attr('href','javascript:void(0);');
        },

        api : {

            get : function(apiURL,successCallback,errorCallback){
                this.exec('GET',apiURL,null,successCallback,errorCallback);
            },

            post : function(apiURL,data,successCallback,errorCallback){
                this.exec('POST',apiURL,data,successCallback,errorCallback);
            },

            put : function(apiURL,data,successCallback,errorCallback){
                this.exec('PUT',apiURL,data,successCallback,errorCallback);
            },

            del : function(apiURL,successCallback,errorCallback){
                this.exec('DELETE',apiURL,null,successCallback,errorCallback);
            },

            exec : function(verb,apiURL,data,successCallback,errorCallback){

                console.log('[DROPLET '+verb+' REQUEST] '+apiURL,data);

                var ajax = $.ajax({
                    type: verb,
                    url: apiURL,
                    data: data,

                    beforeSend: function(xhr) {
                        xhr.setRequestHeader("X-Droplet-Token", window.droplet.constants.SINGLE_USE_TOKEN)
                    },

                    success: function(data){

                        var token           = ajax.getResponseHeader('X-Droplet-Token');

                        if (token !== null){
                            window.droplet.constants.SINGLE_USE_TOKEN = token;
                        }

                        successCallback(data);
                    },
                    error: function(data){
                        errorCallback(data);
                    }
                });
            }
        }
    };
})();

$(document).ready(function(){
    window.droplet.init();
});
