var FormAjaxUpload = Class.create(FormAjax, {


    _submitForm: function (event) {
        
        if (this.is_processing) {
            event.stop();
            return 0;
        }

        if (!this._validateForm()) {
            event.stop();
            return 0;
        };
        
        this.is_processing = 1;

        this.showSpinner();

        var iframe = this._getIframe();

        if (!this.form_action) this.form_action = this.form.action;
        var new_sid = Math.round((Math.random() * 100000000000000));

        this.form.action = this.form_action + '?load-' + new_sid;

        return 1;
    },
    _getIframe: function() {

        if (this.iframe) return this.iframe;

        // We love IE soooo much
        var iframe;
        try {
            iframe = document.createElement('<iframe name="' + this.form.id + '_iframe' + '">');
        } catch (ex) {
            iframe = document.createElement('iframe');
            iframe.name = this.form.id + '_iframe';
        }

        iframe.width = 1;
        iframe.height = 1;
        iframe.style.position = 'absolute';
        iframe.style.left = '-1000px';
        iframe.style.top = '-1000px';

        document.body.appendChild(iframe);

        this.form.target = iframe.name;
        
        jQuery(this.form).attr( "enctype", "multipart/form-data" )
        jQuery(this.form).attr( "encoding", "multipart/form-data" )

        Event.observe(iframe, 'load', this._handleIframe.bind(this));

        this.iframe = iframe;

        return this.iframe;
    },

    _validateForm: function() {
        if (!this.form.file.value.length) {
            alert('Please specify picture');
            return 0;
        } else if (!this.form.file.value.match(/\.(GIF|BMP|JPG|JPEG|PNG)$/i)) {
            alert('Unsupported file format');
            return 0;
        };
        return 1;
    },

    _handleIframe: function (event) {
        var result = $(event.target).contentWindow.document.body.innerHTML;
        this.form.action = this.form_action;
        this._parseResult({responseText: result});
        return 1;
    }
});

Element.addMethods('iframe', {
document: function(element) {
  element = $(element);
  if (element.contentWindow)
      return element.contentWindow.document;
  else if (element.contentDocument)
      return element.contentDocument;
  else
      return null;
},
$: function(element, frameElement) {
  element = $(element);
  var frameDocument = element.document();
  if (arguments.length > 2) {
      for (var i = 1, frameElements = [], length = arguments.length; i < length; i++)
          frameElements.push(element.$(arguments[i]));
      return frameElements;
  }
  if (Object.isString(frameElement))
      frameElement = frameDocument.getElementById(frameElement);
  return frameElement || element;
}
});


