//
//      _______                          .__ .__   .__   .__                 
//      \      \    ____   __ __ _______ |__||  |  |  |  |__|  ____    ____  
//      /   |   \ _/ __ \ |  |  \\_  __ \|  ||  |  |  |  |  | /  _ \  /    \ 
//     /    |    \\  ___/ |  |  / |  | \/|  ||  |__|  |__|  |(  <_> )|   |  \
//     \____|__  / \___  >|____/  |__|   |__||____/|____/|__| \____/ |___|  /
//    =========\/======\/=================================================\/==
//  v0.01 15/APR/2007 (C) Copyright 2007-2007 Scott D. Yelich SOME RIGHTS RESERVED
// .,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.,-*~'`^`'~*-,._.-*~'`^`'~*-,._.,-*~'`^`'~*-,. 
//
//
//  LICENSE:  Creative Commons Attribution 3.0 License.
//  SEE:      http://creativecommons.org/licenses/by/3.0/
//


// 
//  Sajax.js
//  

//  Sun Apr 15 21:20:36 CST 2007, v0.02 sdy
//  Sun Apr 22 23:02:15 CST 2007, v0.03 sdy


function Sajax ( ) {

  var self = 0;

  var url = 0;
  var postData = 0;
  var requestObject = 0;
  var callbackFunction = 0;

  this.getRequestObject = function() {
    if (window.ActiveXObject)
      return new ActiveXObject('Microsoft.XMLHTTP');
    else if (window.XMLHttpRequest)
      return new XMLHttpRequest();
    else
      return false;
  }

  this.bindFunction = function (caller, object) {
    return function() {
      return caller.apply(object, new Array(object));
    }
  }

  this.stateChange = function () {
    if (requestObject.readyState == 4) {
     callbackFunction(requestObject.responseText);
    }
  }

  this.setCallback = function ( callback ) {
    if(requestObject) {
      callbackFunction = callback;
    }    
  }

  this.request = function (url,callback,payload) {

    if(requestObject) {

      url = url;
      postData = payload;
      self.setCallback(callback);

      requestObject.onreadystatechange = self.bindFunction(self.stateChange, self);

      if (postData != "" && postData != undefined ) {
        requestObject.open("POST", url, true);
        requestObject.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        requestObject.setRequestHeader('Connection', 'close');
      } else {
        requestObject.open("GET", url, true);
      }

      requestObject.send(postData);

    }

  }

  this.init = function () {
    self = this;
    requestObject = self.getRequestObject();
  }
  
  this.init();

}

/*
    if (arguments[2])
      self.postBody = arguments[2];
    else
      self.postBody="";



  this.doGet = function(url, hand, format) {
    this.url = url;
    this.handleResp = hand;
    this.responseFormat = format || 'text';
    this.doReq();
  };
  this.doPost = function(url, dataPayload, hand, format) {
    this.url = url;
    this.dataPayload = dataPayload;
    this.handleResp = hand;
    this.responseFormat = format || 'text';
    this.method = 'POST';
    this.doReq();
  };
*/
