var smRequest = new smRequestClass();

function smRequestClass()
{
  this.Method = 'GET';
	this.Async = false;
	this.Request = null;
	this.State = 'stay';
	this.XMLdoc = '';
	this.callback = null;

	dateStart = new Date();
	this.startTime = dateStart.getTime();
	this.requestTime = 0;

	var self = this;
	this.stateChange = function()
  {
    if(self.Request.readyState == 4 && self.Request.status == 200)
    {
	    self.State = 'ready';
			dateEnd = new Date();
			self.requestTime = dateEnd.getTime()-self.startTime;
    }
		if (self.callback)
		  eval(self.callback+'(\''+self.State+'\');');
  }  

  this.Query = function(query,callback)
	{
	  this.State = 'process';
	  if (callback)
	    this.callback = callback;
    if (window.XMLHttpRequest)
      this.Request = new XMLHttpRequest();
    else if (window.ActiveXObject)
    {
      try {
        this.Request = new ActiveXObject('Msxml2.XMLHTTP'); } 
      catch (e) {
        try { 
          this.Request = new ActiveXObject('Microsoft.XMLHTTP'); }
        catch (e){}
      }
    }
    if (this.Request)
    {
      this.Request.open(this.Method, query, this.Async);
      this.Request.send(null);
      if(this.Request.readyState == 4)
			  this.stateChange();
			else
        this.Request.onreadystatechange = this.stateChange;
    } 
  }
//------------------------------------------------------------------------------
	this.getTXTdata = function()
	{
    if (window.ActiveXObject)
  	{
      this.XMLdoc = new ActiveXObject('Microsoft.XMLDOM');
    	this.XMLdoc.async = 'false';
      this.XMLdoc.loadXML(this.Request.responseText);
			return this.XMLdoc.childNodes[1].firstChild.nodeValue;
		}
    else
		{
      parser = new DOMParser();
      this.XMLdoc = parser.parseFromString(this.Request.responseText,'text/xml');
		  return this.XMLdoc.firstChild.firstChild.textContent;
		}
	}
	
	this.getXMLdata = function()
	{
	  serverData = new Array();
    if (window.ActiveXObject)
  	{
      this.XMLdoc = new ActiveXObject('Microsoft.XMLDOM');
    	this.XMLdoc.async = 'false';
      this.XMLdoc.loadXML(this.Request.responseText);
			records = this.XMLdoc.getElementsByTagName('response')[0].childNodes;
			for (i=0; i<records.length; i++)
			{
			  var dataRec = new Array();
			  for (j=0; j<records[i].childNodes.length; j++)
				{
				  field = records[i].childNodes[j];
			    dataRec[field.getAttribute('name')] = '';
					if (field.childNodes.length>0)
			      dataRec[field.getAttribute('name')] = smTrim(field.childNodes[0].nodeValue);
				}
				serverData.push(dataRec);
			}
		}
    else
		{
      parser = new DOMParser();
      this.XMLdoc = parser.parseFromString(this.Request.responseText,'text/xml');
			records = this.XMLdoc.getElementsByTagName('response')[0].childNodes;
			for (i=0; i<records.length; i++)
			{
			  if (records[i].nodeType==1)
				{
			    var dataRec = new Array();
			  	for (j=0; j<records[i].childNodes.length; j++)
					{
				    field = records[i].childNodes[j];
						if (field.nodeType==1)
			        dataRec[field.attributes['name'].value] = smTrim(field.textContent);
					}
				  serverData.push(dataRec);
				}
			}

		}
		return serverData;
	}

}
