/*
Отправка формы
2008 - Magic Wand
*/

FormSender = function(form, button, status_block) {
    this.form = form;
    this.button = button;
    this.status_block = status_block;
    
    this.x_field = '';
    this.y_field = '';
    this.code_src = false;
		
		this.init();
}

FormSender.prototype = {
    init: function() {
			if(this.getButton().is('[type=image]'))
			 this.initImageButton();
		},
		
		initImageButton: function() {
			this.getButton().bind('click', { target: this }, this.onImageClick);
			var image_name = this.getButton().attr('name');
      this.x_field = image_name + '_x';
      this.y_field = image_name + '_y';
			this.getForm().append('<input type="hidden" name="' + this.x_field +'"/>')
			              .append('<input type="hidden" name="' + this.y_field +'"/>');
		},	 
	
    send: function() {
        this.displaySendProcess();
        var _this = this;
        $.post(this.getFormAction(), this.getFieldsData(), function(data) {
           _this.processResponse(data);
           _this.updateCodeImage();
        });
    },
    
    log: function() {
        var _this = this;
        $.post(this.getFormAction(), this.getFieldsData(), function(data) {
          $(_this.getStatusBlock()).html(data);
        });
    },
    
    processResponse: function(data) {
        data = $.trim(data);
        if(!data) {
            data = '<div class="error response_data" style="display: none">Ошибка передачи данных</div>';
        } else if(data.substr(0, 1) == '+') {
            this.cleanFields();
            data = '<div class="ok response_data" style="display: none">' + data.substr(1) + '</div>';
        } else {
            data = '<div class="error response_data" style="display: none">' + data.substr(1) + '</div>';
        }
        this.hideSendProcess(data);
        $('.response_data', this.getStatusBlock()).slideDown('slow');
    },
    
    updateCodeImage: function() {
      var $code_image = this.getCodeImage();
      if($code_image.length == 0)
        return;
        
      var src = $code_image.attr('src');
      if(!this.code_src)
        this.code_src = src;
      
      $code_image.attr('src', this.code_src + '?' + Math.random() * 10000);
    },
    
    cleanFields: function() {
        this.getFields().val('');
    },
    
    getFormAction: function() {
        return this.getForm().attr('action');
    },
    
    displaySendProcess: function() {
        this.disableButton(true);
        this.showStatus('<img src="/img/ajax-loader.gif"/>');
    },
    
    hideSendProcess: function(result) {
        this.disableButton(false);
        this.showStatus(result);
    },
    
    disableButton: function(disable) {
        this.getButton().each(function() {
          this.disabled = disable;
        });
    },
    
    showStatus: function(msg) {
        this.getStatusBlock().html(msg);
    },
    
    getFieldsData: function()
    {
        var data = {};
        this.getFields().each(function() {
          data[this.name] = this.value;
        });
        return data;
    },
		
		onImageClick: function(event) {
      var _this = event.data.target;
      var offset = _this.getButton().offset();
      _this.getXField().val(Math.round(event.pageX - offset.left));
      _this.getYField().val(Math.round(event.pageY - offset.top));
		},
    
    getFields: function() {
        return $(":input[type!='submit']", this.getForm());
    },
    
    getForm: function() {
        return $(this.form);
    },
    
    getButton: function() {
        return $(this.button);
    },
    
    getXField: function() {
        return $('[name=' + this.x_field + ']', this.getForm());
    },
    
    getYField: function() {
        return $('[name=' + this.y_field + ']', this.getForm());
    },
    
    getStatusBlock: function() {
        return $(this.status_block);
    },
    
    getCodeImage: function() {
        return $('.code_image', this.getForm());
    }
}


