
function xmlHttp(fieldID,pagesID,baseURL)
{
	this.request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	if(fieldID != '')
	{
		this.formField = document.getElementById(fieldID);
	}
	this.url = baseURL;
	this.loadingText = '';
	this.errorText = '';
	this.okText = '';
	this.StatusField = '';
	this.dataText = '';
	this.currentPage = 0;
	this.totalPage = 0;
	this.loadComplete = false;
	this.callAsync = true;
	this.useProgressBar = false;
	this.progressBar = new ProgressBar('blue','red',400,4);
	this.progressBar.ID = 'progBar';
	if(pagesID != '')
	{
		this.pBlock = document.getElementById(pagesID);
		this.tBlock = document.getElementById('total_'+pagesID);
	}
}
xmlHttp.prototype.configure = function(baseURL, statusField,loadTxtOK,loadTXTErr,loadTXTProgress)
{
	this.url = baseURL;
	this.loadingText = loadTXTProgress;
	this.errorText = loadTXTErr;
	this.okText = loadTxtOK;
	this.StatusField = statusField;
	this.dataText = '';
	this.currentPage = 0;
	this.totalPage = 0;
	this.loadComplete = false;
	this.useProgressBar = false;
}


xmlHttp.prototype.setAddictField = function(fieldName,fieldValue)
{
	eval('this.'+fieldName + '=\''+fieldValue+'\'');
}
xmlHttp.prototype.processData = function()
{
	this.formField.innerHTML = '<div align="center"><h3>Processing request</h3></div>';
	if(this.pBlock && this.tBlock)
	{
		this.pBlock.innerHTML = '';
		this.tBlock.innerHTML = '';
	}
}
xmlHttp.prototype.load = function (url)
{
	this.loadComplete = false;
	var req = this;
	
	// branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        this.request = new XMLHttpRequest();       
        this.request.onreadystatechange = function(){changeState(req);};
        this.request.open("GET", url, this.callAsync);
        this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	this.request.setRequestHeader("Content-Transfer-Encoding", "Windows-1251");
        this.request.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        this.request = new ActiveXObject("Microsoft.XMLHTTP");
        
        if (this.request) {
        	
            this.request.onreadystatechange = function(){changeState(req);};
 //           this.request.onerror = function(){handleRequestError(req);};
            this.request.open("GET", url, this.callAsync);
            this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	    this.request.setRequestHeader("Content-Transfer-Encoding", "Windows-1251");
            this.request.send();
        }
    }
}
xmlHttp.prototype.abortRequest = function()
{
	this.request.abort();
}

xmlHttp.prototype.stat = function(n)
{
  switch (n) {
    case 0:
      return "не инициализирован";
    break;
      
    case 1: 
      return '<img src="/lib/images/tiny_red.gif" border="0">';
    break;
    
    case 2: 
      return "загружено";
    break;
    
    case 3: 
      return '<img src="/lib/images/tiny_red.gif" border="0">';
    break;
      
    case 4: 
      return "готово";
    break;
    
    default:
      return "неизвестное состояние";  
  }  
}
handleRequestError = function(obj)
{
	throw new Error("Ошибка запроса XMLHttpRequest");
}

changeState = function(obj)
{
	obj.url = this.url;
	if (obj.statusField != '')
	{
		messageBox = document.getElementById(obj.StatusField);
		if(null != messageBox)
			messageBox.innerText = obj.stat(obj.request.readyState);
		// ab = window.setTimeout("obj.request.abort();", 5000);
	}
	if (obj.request.readyState == 4) 
	{
        	messageBox.innerHTML = obj.request.statusText;
        if (obj.request.status == 200) {
       		
       		if(obj.useProgressBar)
       		{
       			obj.progressBar.create();
       			obj.progressBar.showProgress(0);
       		}
       		
       	if( obj.request.responseXML.documentElement == null || obj.request.responseXML.documentElement.nodeName == 'parsererror')
       	{
       		messageBox.innerHTML = obj.errorText + "<Br>Not well-formed XML recieved<br>"+obj.url;
       	//	handleRequestError(obj);
       		obj.request.onreadystatechange = null;
       		return;
       	}
	else
	{
		errlog = '';
		actlog = '';
	       	messageBox.innerHTML = obj.okText;
	       	response = obj.request.responseXML.documentElement;
	       	response.getElementsByTagName('result')[0].normalize();
	      method = response.getElementsByTagName('method')[0].firstChild.data;
	      result = response.getElementsByTagName('result')[0].firstChild.data;
	      percents = response.getElementsByTagName('percentage')[0];
	      obj.percentage = -1;
	      if(percents != null)
	      {
	      	obj.percentage = percents.firstChild.data;
		}
	      mnresult = response.getElementsByTagName('result')[0].childNodes[1];
	      if(mnresult != null)
	      	result = mnresult.data;
	      obj.dataText = result;
	      
	      if(response.getElementsByTagName('errlog')[0])
	      {
	      	errlog =  response.getElementsByTagName('errlog')[0].firstChild.data;
		}
		if(response.getElementsByTagName('actlog')[0])
		{
	      		actlog =  response.getElementsByTagName('actlog')[0].firstChild.data;
	      	}
	      if(response.getElementsByTagName('pages')[0])
	      {
	      	 response.getElementsByTagName('pages')[0].normalize();
	      	pages_total = response.getElementsByTagName('pages')[0].getElementsByTagName('total')[0].firstChild.data;
	      	
	      	pages_current = response.getElementsByTagName('pages')[0].getElementsByTagName('current')[0].firstChild.data;
	      	obj.currentPage = pages_current;
	      	obj.totalPage = pages_total;
	      }
	      obj.errlog = errlog;
	      obj.actlog = actlog;
	      obj.urel = this.url;
	       obj.response = '4';		
	       eval(method + '(obj)'); 
	       obj.request.onreadystatechange = null;
	   }    
        } else {
            messageBox.innerHTML = obj.errorText + "\mSYSINFO:\nThere was a problem retrieving the XML data:\n" + obj.request.statusText;
        }
        /*
        if(percentage >= 0)
        {
	        if(percentage < 100)
	         	setTimeout(obj.pollProgressBar, 1000);
	         else
	         	setTimeout(obj.completeTask,500);
        }
        */
         	
    }
else //readyState != 4
	{
		messageBox.innerHTML = obj.stat(obj.request.readyState);
	}
}

xmlHttp.prototype.completeTask = function()
{
}

xmlHttp.prototype.pollProgressBar = function()
{
	alert('this');
//	document.getElementById(this.StatusField).innerHTML = this.dataText;
}

xmlHttp.prototype.processPollRequest = function() 
{    
	if (req.readyState == 4) 
	{        
		if (req.status == 200) 
		{            
			var item = req.responseXML.getElementsByTagName("message")[0];            
			var message = item.firstChild.nodeValue;            
			showProgress(message);            
			messageHash = message;                   
			} else {            
				window.status = "No Update for " + targetId;        }        
				if (messageHash < 100) {            
					setTimeout("pollTaskmaster()", 5000);        
					} else {            
						setTimeout("complete()", 2500);       
						 }    
	}
}


function pushPage(xmlObj)
{

	 if (xmlObj.dataText != ''){ 
    // Response mode
    var message   = xmlObj.formField;
    if (xmlObj.dataText != ''){
    	 message.style.color='#222222';
    	 message.innerHTML = xmlObj.dataText;
    	 var pBlock = xmlObj.pBlock;
    	 pBlock.innerHTML = parseInt(xmlObj.currentPage);
    	 var tBlock = xmlObj.tBlock;
    	 tBlock.innerHTML = xmlObj.totalPage;
//	alert(xmlObj.currentPage);
//	alert(xmlObj.totalPages);
//      message.style.display = 'inline';
	xmlObj.loadComplete = true;
    }else{
      message.innerHTML = '';
    }	 
	}
  return xmlObj;
}

function loadXMLDoc(dname)
{
	var xmlDoc;
	// code for IE
	if (window.ActiveXObject)
	{
	xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
	}
	// code for Mozilla, Firefox, Opera, etc.
	else
	{
		var parser=new DOMParser();
  		var doc=parser.parseFromString(dname,"text/xml");

	}

	xmlDoc.async=false;
	xmlDoc.load(dname);
	return(xmlDoc);
}

function pushListbox(xmlObj)
{
	var lbox = xmlObj.formField;
	if(xmlObj.dataText != '')
	{
		while(lbox.options.length>0)
			lbox.remove(0);
		
		var elt = xmlObj.request.responseXML.getElementsByTagName('entry');
		
		for(i=0;i<elt.length;i++)
		{
			var eName = elt[i].getElementsByTagName('optiontext')[0].firstChild.data;
			var eValue = elt[i].getElementsByTagName('optionvalue')[0].firstChild.data;
			
			lbox.options[i] = new Option( eName , eValue );
		}
	}
	else
	{
		xmlObj.disabled = true;
	}
}
function getAJAXData(baseURL,input,messageBlock,pagesBlock,sBar,vText)
{

    // Input mode
    statusB = document.getElementById(sBar);
    statusB.style.display='inline';
    urel  = baseURL + input;
    var req = new xmlHttp(messageBlock,pagesBlock,'');
    req.configure(urel,sBar,vText[0],vText[1],vText[2]);
    req.processData();
    req.load(urel);
    
  //  while(req.request.readyState != 4)
    //	alert(req.request.readyState);
    return req;
}
