//******************************************
//Класс асинхронного запроса с XML парсингом
//******************************************
pCounter = 0;
EMAXajaxRequest = function(url, type, vars, loadingTarget) {
	this.url = url;
	this.type = type;
	this.vars = vars;
	this.request = false;
  
  this.loadingTarget = loadingTarget || false;
  pCounter++;
	this.create();

}

EMAXajaxRequest.prototype.create = function() {
  var varStr = "";
  
  for(var i=0; i<=this.vars.length-1; i++) {
  var value = escape(this.vars[i][1]);
    if(this.vars[i][0] != "") {
      if(i==0)
      varStr = varStr + "randAjax=" + Math.random(11111111,99999999) + "&";
      
    	varStr = varStr + this.vars[i][0] + "=" + value;
      if(i<this.vars.length-1)
      varStr = varStr + "&";
    }
  }

  if(this.type == "GET")
  url = this.url + "?" + varStr;
  else
  url = this.url;  

  if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    this.request = new XMLHttpRequest();
  } else if (window.ActiveXObject) { // IE
    try {
        this.request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
          try {
          this.request = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
        }
  }

  if (!this.request) {
  alert('Cant send request, check configaration or try other browser.');
  return flase;
  }
  
  var rObj = this;

  this.loading();
  this.request.onreadystatechange = function() {rObj.statusChange(rObj) };
  this.request.open(this.type, url, true);
  
  if(this.type == "POST") {
  var sendVar = varStr;
  this.request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  } else
  var sendVar = null;

  this.request.send(sendVar);
}

EMAXajaxRequest.prototype.statusChange = function(rObj) {
	var request = rObj.request;
  if (request.readyState == 4) {
    if (request.status == 200) {
      var respType = request.getResponseHeader("Content-Type");
      var respTypeArr = respType.split(";");
      respType = respTypeArr[0];
    
      if( respType == "text/xml" ) {
      rObj.parseXML(rObj);
      } else {
      alert("The reponse is not a correct XML:\r\n " + request.responseText + "\r\nURL: " + rObj.url);
      }
    } else {
      alert("Error:" + request.statusText);
    }
  pCounter--;
  rObj.loading();
  }
}

EMAXajaxRequest.prototype.parseXML = function(rObj) {
	var XMLcontent = rObj.request.responseXML;
	
  var Message = XMLcontent.getElementsByTagName('insert');
  var mCount = Message.length;

  for(var i=0; i<mCount; i++) {
		var target = document.getElementById(Message[i].attributes[0].value);
		if(target == undefined)
		alert("The is no element with id " + Message[i].attributes[0].value + "\r\nURL: " + rObj.url);
		else {
  	target.innerHTML = Message[i].childNodes[0].data;
    }
  }

}

EMAXajaxRequest.prototype.loading = function() {
	var loadingId = "loading";
  var oldloading = document.getElementById(loadingId);
  if( (pCounter == 0) && (oldloading != undefined)) {
  	oldloading.parentNode.removeChild(oldloading);
  } else {
	
  	if(oldloading == undefined) {
  	var loadingContainer = document.createElement("div");
  	loadingContainer.className = "EMAXloading";
  	loadingContainer.id = loadingId;
  	document.body.appendChild(loadingContainer);
  	
  	var newloading = document.getElementById(loadingId);
  	newloading.innerHTML = "Загрузка...";
    }
    
  }
}
//******************************************
//Конец класса асинхронного запроса
//******************************************
