var callback = ({
    success : "",
    error : "",
    complete : "",
    before : "",
    dataxml: "",
});

/* Оформление callback
callback.success = arguments.callee - вызов функции которая вызвала метод
callback.success = callback_function - вызов пользовательской функции
(прим. callback_function - указывается без кавычек)
*/

function AjaxHttpRequest() {
	this.ENV = arguments;

	this.settings = ({
			async : false,
			cache : false,
			global : false,
      contentType : "application/x-www-form-urlencoded",
			data : "",
			dataType : "xml",
			type : "POST",
			url : "",
			beforeSend : this.onAjaxBeforeSend,
			success : this.onAjaxSuccess,
			complete : this.onAjaxComplete,
			error : this.onAjaxError,
			timeout: 5000
		});

};

AjaxHttpRequest.prototype.sendPost = function(){
    var _class = this;
    var xhr = jQuery.ajax( this.settings )
}


AjaxHttpRequest.prototype.onAjaxBeforeSend = function(){
  if( callback.before ) callback.before.apply(this, arguments);
}
AjaxHttpRequest.prototype.onAjaxSuccess = function(){
  if( callback.success ) callback.success.apply(this, arguments);
}
AjaxHttpRequest.prototype.onAjaxComplete = function(){
  if( callback.complete ) callback.complete.apply(this, arguments);
}
AjaxHttpRequest.prototype.onAjaxError = function(){
  if( callback.error ) callback.error.apply(this, arguments);
}

var ajax = new AjaxHttpRequest();
var _object;
function Reservation()
{
    this.ENV = arguments;
}

Reservation.prototype.changeStatus = function(obj,ses,id){
    if( arguments[1] == "success" ){
        if ( $("typeOK", obj).text() == 'ERROR' ){
            callback.error = $("typeOK", obj).text();
        }
        else {
                callback.dataxml = $("fields", obj);
                $(_object).parents("TR").eq(0).remove();
        }
    return false;
    }

    _object = obj;
    callback.dataxml = 'undefined';
    ajax.settings.data = ({ status: obj.value, _SESSION_ID: ses, _ID: id , act : "edit_status" });
    ajax.settings.url = "./cgi-bin/resender.pl";
    //callback.error = this.changeStatus;
    callback.success = this.changeStatus;
    ajax.sendPost();
}

Reservation.prototype.changeBlocked = function(obj,ses,id){
    if( arguments[1] == "success" ){
        if ( $("typeOK", obj).text() == 'ERROR' ){
            alert( $("message", obj).text() );
        }
        else {
            if ( /unlock/.test( $(_object).attr('src') ) ){
                $(_object).attr({'src': 'img/ico/lock.png', 'alt':'Снять блокировку', 'title':'Снять блокировку'})
            }
            else {
                $(_object).attr({'src': 'img/ico/unlock.png', 'alt':'Блокировать', 'title':'Блокировать'})
            }
        }
        $(_object).removeAttr('value');
        return false;
    }

    _object = obj;
    ajax.settings.data = ({ status: obj.value, _SESSION_ID: ses, _ID: id , act : "edit_status" });
    ajax.settings.url = "./cgi-bin/resender.pl";
    callback.success = this.changeBlocked;
    ajax.sendPost();
}

Reservation.prototype.changeApply = function(obj,ses,id, act){
    if( arguments[1] == "success" ){
        if ( $("typeOK", obj).text() == 'ERROR' ){
            alert( $("message", obj).text() );
        }
        else {
            if ( /null/.test( $(_object).attr('src') ) ){
                $(_object).attr({'src': 'img/ico/aply.png'})
            }
            else {
                $(_object).attr({'src': 'img/ico/null.png'})
            }
        }
        $(_object).removeAttr('value');
        return false;
    }

    _object = obj;
    ajax.settings.data = ({ status: obj.value, _SESSION_ID: ses, _ID: id , act : act });
    ajax.settings.url = "./cgi-bin/resender.pl";
    callback.success = this.changeApply;
    ajax.sendPost();
}

Reservation.prototype.changeSort = function(obj,sort,ses, table){
    if( arguments[1] == "success" ){
        if ( $("typeOK", obj).text() == 'ERROR' ){
            $(_object).sortable("cancel")
        }

        return false;
    }
    _object = obj;
    ajax.settings.data = ({ sort: sort, _SESSION_ID: ses, act : "edit_sort", table: table });
    ajax.settings.url = "./cgi-bin/resender.pl";
    callback.success = this.changeSort;
    ajax.sendPost();
}

Reservation.prototype.changeDateTR = function(obj,ses,id){
    if( arguments[1] == "success" ){
        $("field", obj).each(
            function() {
                $(_object).parents("TR").eq(0)
                    .find("[name="+( $("name", $(this)).text() )+"]")
                    .val( $("value", $(this)).text() );
            }
        );
        $("tag", obj).each(
            function() {
                $(_object).parents("TR").eq(0)
                    .find($("name", $(this)).text())
                    .html( $("content", $(this)).text() );
            }
        );
        $("url", obj).each(
            function() {
                $(_object).parents("TR").eq(0)
                .find($("name", $(this)).text())
                .attr("href", $("href", $(this)).text() )
            }
        );
    return false;
    }

    _object = obj;
    ajax.settings.data = ({ data: obj.name + ":" + obj.value, _SESSION_ID: ses, _ID: id , act : "edit_datas" });
    ajax.settings.url = "./cgi-bin/resender.pl";
//     ajax.settings.dataType = "xml";
    callback.success = this.changeDateTR;
    ajax.sendPost();

}
Reservation.prototype.changeDate = function(obj,ses,id){
    if( arguments[1] == "success" ){
        $("field", obj).each(
            function() {
                $(_object).parents("TR").eq(0)
                    .find("[name="+( $("name", $(this)).text() )+"]")
                    .val( $("value", $(this)).text() );
            }
        );
        $("tag", obj).each(
            function() {
                $(_object).parents("TR").eq(0)
                    .find($("name", $(this)).text())
                    .text( $("content", $(this)).text() )
            }
        );
    return false;
    }

    _object = obj;
    ajax.settings.data = ({ data: obj.name + ":" + obj.value, _SESSION_ID: ses, _ID: id , act: "edit_data" });
    ajax.settings.url = "./cgi-bin/resender.pl";
    callback.success = this.changeDate;
    ajax.sendPost();

}

Reservation.prototype.changHtml = function(obj,ses,acts){
    if( arguments[1] == "success" ){
        $("html", obj).each(function(){
            var text = $(this).text();
            text.replace(/&lt;/g,'<');
            text.replace(/&gt;/g,'>');
            text.replace(/&#lt;/g,'&lt;');
            text.replace(/&#gt;/g,'&gt;');
            $(text).insertAfter($(_object))
        })
        return false;
    }

    _object = obj;
    ajax.settings.data = ({ data: $(obj).val(), _SESSION_ID: ses, act: (acts ? acts : "city_region_metro") });
    ajax.settings.url = "./cgi-bin/xmlHtml.pl";
    callback.success = this.changHtml;
    ajax.sendPost();

}

Reservation.prototype.changeForm = function(obj,data,ses,id){
    if( arguments[1] == "success" ){
        $("field", obj).each(
            function() {
                $(_object)
                .find("[name="+( $("name", $(this)).text() )+"]")
                .val( $("value", $(this)).text() );
            }
        );
        $("tag", obj).each(
            function() {
                $(_object)
                .find($("name", $(this)).text())
                .text( $("content", $(this)).text() )
            }
        );
        return false;
    }

    _object = obj;
    ajax.settings.data = ({ data: data, _SESSION_ID: ses, _ID: id , act: "return_form" });
    ajax.settings.url = "./cgi-bin/resender.pl";
    callback.success = this.changeForm;
    ajax.sendPost();

}

Reservation.prototype.changeNote = function(obj,data,ses,id,acts){
    if( arguments[1] == "success" ){
        callback.error = $("status", obj).text();
        return false;
    }

    _object = obj;
    ajax.settings.data = ({ data: data, _SESSION_ID: ses, _ID: id , actnote: acts });
    ajax.settings.url = "./cgi-bin/notices.pl";
    callback.success = this.changeNote;
    ajax.sendPost();

}

var reserv = new Reservation();
