var req;
var reqTimeout;
var tag;

var str;
var form_id;

// Ассинхронное обращение get с запросом подтверждения
function ajax_confirm(url,tag_id, text_confirm) {
	if (confirm(text_confirm))
		ajax(url,tag_id);
	return false;
}

// Ассинхронное обращение get
function ajax(url,tag_id) {
		if (req!=undefined) {
			req.abort();
		}
		url_ajax = url + "&ajax=on";
		tag=tag_id;
    // для "родного" XMLHttpRequest
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = req_change;
        req.open("GET", url_ajax, true);
        req.send(null);
    // для версии с ActiveX
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = req_change;
            req.open("GET", url_ajax, true);
            req.send();
        }
    }
    if (req)
    	reqTimeout = setTimeout( function(){ req.abort(); handle_error("Timeout") }, 20000);
    else
    	document.location=url;
}

// Ассинхронное обращение get с запросом подтверждения
function ajax_post_confirm(url,tag_id, formname, text_confirm) {
	if (confirm(text_confirm))
		ajax_post(url,tag_id, formname);
	return false;
}

// Ассинхронное обращение post
function ajax_post(url,tag_id, formname) {
		if (req!=undefined)
			return false;
		url_ajax = url + "&ajax=on";
		tag=tag_id;
		form_id=document.forms[formname];
		
		for (i=0;i<form_id.elements.length;i++)  {
			if (i==0)
					str=form_id.elements[i].name + "=" + encodeURIComponent( form_id.elements[i].value );
			else
					str+="&" + form_id.elements[i].name + "=" + encodeURIComponent( form_id.elements[i].value );
		}

    // для "родного" XMLHttpRequest
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = req_change;
        req.open("POST", url_ajax, true);
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
        req.send(str);
    // для версии с ActiveX
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = req_change;
            req.open("POST", url_ajax, true);
            req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
            req.send(str);
        }
    }
    if (req)
    	reqTimeout = setTimeout( function(){ req.abort(); handle_error("Timeout") }, 20000);
    return false;
}

function req_change() {
    // только при состоянии "complete"
    if (req.readyState == 4) {
    		clearTimeout(reqTimeout);
        // для статуса "OK"
        if (req.status == 200) {
           make_result(req.responseText);     
           req=undefined;
				} 
				else if (req.status == 302 ) {			
					req=undefined;
					ajax(document.location,tag);
				}
				else {
            handle_error(req.statusText);
            req=undefined;
        }
    }
}

function handle_error(message) {
	req=undefined;
	alert(message);	
}

function make_result(result) {
	var elem = document.getElementById(tag);
	elem.innerHTML=result;
}
