// -- Ajax legacy support

var Ajax = new Class({
 
  Extends: Request.HTML,
 
  initialize: function(url, options) {
    options['encoding'] = 'windows-1251';
    
  	if ('undefined' != typeof(MooWaiter)) {
  		this.options.waiterOptions = $merge({
        className: 'waiting',
        timeUntilShow: MooWaiter.timeUntilShow,
        opacity: MooWaiter.opacity,
        inlineInject: MooWaiter.inlineInject
  		}, options.waiterOptions);
  	}
  	
    options['url'] = url;
    this.parent(options);
    
    if (('undefined' != typeof(MooWaiter)) && (this.options.waiterTarget || this.options.update) || (this.options.overwrite && $(this.options.overwrite))) {
    	var start = function () {
    		var el = ($(this.options.waiterTarget) || (this.options.update && $(this.options.update)) || (this.options.overwrite && $(this.options.overwrite)));
    		if (el) el.startWaiting(this.options.waiterOptions.className, this.options.waiterOptions.timeUntilShow, this.options.waiterOptions.opacity, this.options.waiterOptions.inlineInject);
    	}.bind(this);
      var stop = function () {
        var el = ($(this.options.waiterTarget) || (this.options.update && $(this.options.update)) || (this.options.overwrite && $(this.options.overwrite)));
        if (el) el.stopWaiting();
      }.bind(this);
      this.addEvent('onRequest', start);
      this.addEvent('onComplete', stop);
      this.addEvent('onFailure', stop);
    }
    
    return this;
  },
 
  request: function(data){
    return this.send(this.url, data || this.options.data);
  },
 
  processHTML: function(text){
    var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
    text = (match) ? match[1] : text;
    var container = new Element('div');
    return container.set('html', text);
  },
  
  onSuccess: function(tree, elements, html, javascript) {
  	this.parent(tree, elements, html, javascript);
  	if (this.options.overwrite) {
  		var replacement = $(this.options.overwrite).setStyle('display', 'none');
  		if (elements.length > 0) {
  			elements[0].injectAfter(replacement);
  		}
  		replacement.destroy();
  	}
  }

});

Element.implement({

  send: function(options) {
    return new Ajax(this.getProperty('action'), $merge({data: this.toQueryString()}, options, {method: 'post'})).request();
  }

});

// -- Fx legacy support

Element.implement({
  
  effect: function(property, options){
    return new Fx.Tween(this, $extend({property: property}, options));
  }
 
});

// -- Browser

if (/chrome/i.test(navigator.userAgent)) {
  Browser.Engine.name = 'chrome';
  Browser.Engine.version = '0.2';
  Browser.Engine[Browser.Engine.name] = Browser.Engine[Browser.Engine.name + Browser.Engine.version] = true;
}
