
dojo.declare("Miolo.Ajax",null,
{
	loading: "<img src=\"images/loading.gif\" border=\"0\" alt=\"\">",
	url: null,
    form: null,
    response_type: 'JSON',
    updateElement: null,
    parameters: null,
    content: null,
    remote_method: '',
    constructor: function(obj) {
		if (obj.url) this.url = obj.url;
		if (obj.form) this.form = obj.form;
		if (obj.content) this.content = obj.content;
		if (obj.response_type) this.response_type = obj.response_type;
		if (obj.updateElement) this.updateElement = obj.updateElement;
        if (obj.parameters) this.parameters = obj.parameters;
        if (obj.remote_method) this.remote_method = obj.remote_method;
		if (obj.callback_function) this.callback_function = obj.callback_function;
	},
	update: function (result, ioArgs) {
        miolo.getElementById(this.updateElement).innerHTML = result;
        miolo.stopShowLoading();
	},
    error: function(error,ioArgs) {
        if (errDiv = miolo.getElementById('stdout'))
        {
			        console.log(ioArgs.xhr.responseTex);
            errDiv.innerHTML = ioArgs.xhr.responseText;
        }
    },
    ioerror: function(error,ioArgs) {
        console.log('Error!');
        console.log(ioArgs);
        console.log(error);
    },
	call: function() {
        var response_type = this.response_type.toLowerCase();
        if (miolo.getElementById('__ISAJAXCALL'))
        {
            miolo.setElementValueById('__ISAJAXCALL', 'yes');
        }
        if (miolo.getElementById('cpaint_response_type'))
        {
            miolo.setElementValueById('cpaint_response_type', response_type);
        }
		if (this.updateElement) {
           this.update(this.loading);
		}
        miolo.showLoading();
		var callback_function = this.callback_function ? this.callback_function : this.update;
        if (this.form != null) {
            this.content.cpaint_response_type = response_type;
            if (miolo.page.fileUpload == 'yes')
            {
                dojo.io.iframe.send({
                    form: this.form,
                    content: this.content,
                    error: this.ioerror,
                    handleAs: "json",
                    handle: callback_function
                });
            }
            else
            {
                dojo.xhrPost({
                    form: this.form,
                    content: this.content,
                    error: this.error,
                    handleAs: "json",
                    handle: callback_function
                });
            }
        }
        else {
            var goUrl = this.url ? this.url : miolo.getCurrentURL();
            var parameters = {};
            if (this.parameters != null)
            {
                if (dojo.isFunction(this.parameters))
                {
                    parameters = this.parameters();
                    if (!dojo.isObject(parameters))
                    {
                        parameters = {__EVENTARGUMENT: parameters};
                    }
                }
                else
                {
                    parameters = this.parameters;
                }
            }
            parameters.__ISAJAXCALL = 'yes';
            parameters.__EVENTTARGETVALUE = this.remote_method;
            if (response_type == 'object')
            {
                response_type = 'json';
            }
            /*
            console.log('>>>>>>>>>>- ' + goUrl);
            if (goUrl.indexOf('?') > -1)
            {
                console.log('>>>>>>>>>>' + goUrl.substr(0,goUrl.indexOf('?')));

                var nv = goUrl.substr(goUrl.indexOf('?')+1).split('&');
                var qs = '';
                for(i = 0; i < nv.length; i++)
                {
                    eq = nv[i].indexOf('=');
                    qs = qs + encodeURIComponent(nv[i].substring(0,eq)) + '=' + encodeURIComponent(nv[i].substring(eq + 1)) + '&';
                }
                goUrl = goUrl.substr(0,goUrl.indexOf('?')) + '?' + qs;
            }
            console.log('>>>>>>>>>>' + goUrl);
            */
            parameters.cpaint_response_type = response_type;
            dojo.xhrPost({
                updateElement: this.updateElement,
                url: goUrl,
                content: parameters,
                error: this.error,
                handleAs: response_type,
                handle: callback_function
            });
        }
	}
});
