/*
 * Copyright 2006 OST-SYSTEMS. All rights reserved.
 */

function XMLHttpRequestSafari() {
  this.request = new window.XMLHttpRequest();
  this.readyState = 0;
  this.onreadystatechange = null;
  this.onload = null;
  this.status = 0;
  this.statusText = null;
  this.responseXML = null;
  this.responseText = null;
  
  var proxypath = location.protocol + "//" + location.host + location.pathname;
  lastSlash = proxypath.lastIndexOf("/");
  if (lastSlash >= 0) {
    proxypath = proxypath.substring(0, lastSlash);
  }
  
  var defaultRequestHandler = function(_self) {
    if (window.netscape) {
      //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    }
    _self.readyState = _self.request.readyState;
    if (_self.readyState == 4) {
      _self.status = _self.request.status;
      _self.statusText = _self.request.statusText;
      _self.responseXML = _self.request.responseXML;
      if (typeof ActiveXObject != "undefined" && _self.mimeType != null) {
         var d = new ActiveXObject("MSXML.DomDocument");
         d.loadXML(_self.request.responseText);
         _self.responseXML = d;
      }
      _self.responseText = _self.request.responseText;
      if (_self.onreadystatechange != null) {
        _self.onreadystatechange();
      }
      if (_self.onload != null) {
        evt = new Object();
        evt.target = _self.request;
        _self.onload(evt);
      }
    }    
  }
  
  this.checkOpen = function(url) {
    var value = widgetsHelper.getWidgetValue(this.widgetId, "HasNetworkAccess");
    if (value == null || !eval(value)) {
      return false;
    }   
    value = widgetsHelper.getWidgetValue(this.widgetId, "HectorNetworkAccess");
    if (value != null && !eval(value)) {
      return false;
    }   
    var index = url.indexOf("/", 8);
    if (index > 0) {
      url = url.substring(0, index);
    }
    /*
    value = widgetsHelper.getWidgetValue(this.widgetId, "NetWorkURL:" + url);
    var allowed = false;
    if (value != null) {
      allowed = eval(value);
    }
    else {  
      allowed = confirm("Accessing " + url + " ?");
      if (confirm("Save Choice for " + url + " ?")) {
        widgetsHelper.storeWidgetKey(this.widgetId, "NetWorkURL:" + url, "" + allowed);
      }  
    }
    return allowed;
    */
    return true;
  }

  this.open = function(method, url, asynch) {
    addError("Open URL: " + url);
    if (window.netscape) {
      //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    }  
    try {
      if (url.indexOf("http") == 0 || url.indexOf("ftp") == 0) {
        if (!this.checkOpen(url)) {
          addError("Open blocked");
          return;          
        }
        addError("Using Proxy");
        var result = null; 
        var proxy = proxypath + "/Proxy?url=" + encodeURIComponent(url);
        if (asynch != null) {
          result = this.request.open(method, proxy, asynch);
        }
        
        else {
          result = this.request.open(method, proxy);
        }  
        this.request.setRequestHeader("url", url);
        var _self = this;
        this.request.onreadystatechange = function() {
          defaultRequestHandler(_self);
        }
        return result;
      }
      else {
        addError("No proxy: " + this.path + url);
        if (asynch != null) {
          return this.request.open(method, this.path + url, asynch);
        }  
        return this.request.open(method, this.path + url);
      }
    }  
    catch(e) {
      addError("Open failed: " + e);
      throw e;
    }
  }
  
  this.abort = function() {
    return this.request.abort();
  }
  
  this.overrideMimeType = function(type) {
    if (this.request.overrideMimeType) {
	    return this.request.overrideMimeType(type);
	  }
	  else {
	    this.mimeType = type;
	  }
  }
  
  this.setRequestHeader = function(key, value) {
    try {
      this.request.setRequestHeader(key, value);
    }
    catch (e) {
      addError("setRequestHeader failed: " + e);
    }  
  }
  
  this.send = function(param) {
    try {
      if (window.netscape) {
        //netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
      }
      if (param) {
        var result = this.request.send(param);
        if (!this.asynch) {
          defaultRequestHandler(this);
        }
        return result;
      }
      var result = this.request.send(null);  
      if (!this.asynch) {
        defaultRequestHandler(this);
      }
      return result;  
    }
    catch (e) {
      addError("Send Error: " + e);
      //throw e;
    }  
  }
  
  this.getResponseHeader = function(key) {
    return this.request.getResponseHeader(key);
  }  

  this.getAllResponseHeaders = function() {
    return this.request.getAllResponseHeaders(key);
  }
}

