function showShadow(id) {
	id = id || 'shadow';
	
	var h = document.height ? document.height : document.body.scrollHeight;
	var w = document.width ? document.width : document.body.scrollWidth;
		
	getEl(id).style.width = w+'px';
	getEl(id).style.height = h+'px';
	
	showEl(id);
        document.body.style.overflow='hidden';
}

function hideShadow(id) {
	id = id || 'shadow';
	hideEl(id);
        document.body.style.overflow='auto';
}

function hideShadowedSubPage(id) {
    hideCenteredSubPage(id);
    hideShadow();
}

function showCenteredSubPage(id) {
	var id = document.getElementById(id);
	var h = window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight); 
	var w = window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth);
	var st = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
	var sl = document.body.scrollLeft ? document.body.scrollLeft : document.documentElement.scrollLeft;
	id.style.top =  (h - id.style.height.match(/\d+/))/2 + st + 'px';
	id.style.left = (w - id.style.width.match(/\d+/))/2 + sl + 'px';
	id.style.display = 'block';
}

function hideCenteredSubPage(id) {
	document.getElementById(id).style.display='none';
}


function sendForm(form, nobusy, noreply)
{
	var url = window.location.href.match(/http:\/\/[^\/]+\//) + "cgi-bin/r/bg/" + form + ".cgi";
	var params = '';
	for(var i = 0; i < document.forms[form].length; i++) {
		var el = document.forms[form].elements[i];
		if (el.type != 'button')
			params += el.name + '=' + el.value + '&';
	}

	if (document.getElementById(form)) hideCenteredSubPage(form);
        if(document.getElementById('shadow')) hideShadow();
	ajaxRequest(url, params, nobusy, noreply);
}

function ajaxFormSubmit(data)
{
	var url = window.location.href.match(/http:\/\/[^\/]+\//) + "cgi-bin/r/bg/" + data.script + ".cgi";
	var params = '';
        var form = data.form ? document.forms[data.form] : document.forms[0];
	for(var i = 0; i < form.length; i++) {
		var el = form.elements[i];
		if (el.type == 'checkbox') params += el.name + '=' + (el.value ? 1:0) + '&';
		else if (el.type == 'select-multiple') params += el.name + '=' + getSelectValues(el) + '&';
		else if (el.type != 'button') params += el.name + '=' + el.value + '&';
	}
	
	ajaxRequest(url, params, 1, 1, data.doAfter, data.doBefore);
}

function ajaxRequest(url, params, nobusy, noreply, doAfter, doBefore) {
        if(!nobusy) showCenteredSubPage('busy');
	    
	var aj = [];
	aj = initAjax();
	var ajax = aj[0];
	
        var handler = function() {

		var reply = document.getElementById('reply');
		if(ajax.readyState == 4) {

			var html = ajax.responseText;
			var blocks = html.split('<js>');

			if (/<js>/.test(html)) {
				eval(blocks[1]);
				if(!noreply) reply.innerHTML = blocks[2];
			}
			else 
				if(!noreply) reply.innerHTML = html;
                                
                        if (doAfter) eval(doAfter);

			if(!nobusy) hideCenteredSubPage('busy');
			if(!noreply) showCenteredSubPage('reply');
		}
        }

            if (doBefore) eval(doBefore);
            ajax.open("POST",url,1);
            ajax.send(params);
            ajax.onreadystatechange = handler;
}

function clearUrl(val) {
	if (/[=&\+]/.test(val)) {
	  val = val.toString();	
	  val = val.replace(/=/g,"%3D");
	  val = val.replace(/&/g,"%26");
	  val = val.replace(/\+/g,"%2B");
	}
	return val;
}

function BGSubmit(data) {
	
	var params = data.params ? (data.params + '&') : '';
	var f;
	if (data.form) {
	  params = params + 'form='+ data.form +'&';
	  f = document.forms[data.form];
	} else {
	  f = document.forms[0];
	}

	for(var i = 0; i < f.length; i++) {
		var el = f.elements[i];
		if (el.disabled == true) continue;
		if (el.type == 'radio' && el.checked == true) {
		    params += el.name + '=' + el.value + '&';
		}
		else if (el.type == 'checkbox' && el.checked == true) {
		    params += el.name + '=1&';
		}
		else if (el.type != 'button' && el.type != 'submit' && el.type != 'radio' && el.type != 'checkbox') {
		    clearUrl(el.value);
		    params += el.name + '=' + el.value + '&';
		}
	}
	BGRequest({url:data.url, params:params, reply_id:data.reply, doAfter:data.doAfter, sync:data.sync, busy:data.busy});
}


function BGRequest(data) {  

	var aj = [];
	aj = initAjax();
	var ajax = aj[0];
	var ie = aj[1];
	data.params = data.params + '&is_ie=' + ie; 

	var ajaxHandler = function() {

		if(ajax.readyState == 4) {
			var html = ajax.responseText;
			var blocks = html.split('<js>');
			var count = blocks.length - 1;
			var content = blocks[count];
			
			count--;
			var arr = [];
			while (count > 0) {
			  arr.push(count);
			  count = count-2;
			}
			arr = arr.reverse();
			for (var i in arr) eval(blocks[arr[i]]);
			
			// if (/./.test(blocks[count])) getEl(data.reply_id).innerHTML = blocks[count];
			
			if (content && data.reply_id) $('#'+data.reply_id).empty().prepend(content);
			
			if(data.busy) hideBusy();

			if (data.doAfter) {if (typeof(data.doAfter) == 'function') data.doAfter(); else eval(data.doAfter);}
		}

	}

	var sign = /\?/.test(data.url) ? '&' : '?';
	var url = data.url + sign + Math.random();
	var async = 1 - (data.sync || 0);
	
	if(data.busy) showBusy();
	
	ajax.open("POST", url, async);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	ajax.send(data.params);

	if (async) ajax.onreadystatechange = ajaxHandler;
	else ajaxHandler();
}


function initAjax() {
	var xmlHttp;
	var ie = 1;
	try {
	    xmlHttp = new XMLHttpRequest();
	    ie = 0;
	}
	catch (e) {
	    try {
		xmlHttp = new ActiveXObject('MSXML2.XMLHttp.5.0');
	    }
	    catch (e) {
		try {
		    xmlHttp = new ActiveXObject('MSXML2.XMLHttp.4.0');
		}
		catch (e) {
		    try {
			xmlHttp = new ActiveXObject('MSXML2.XMLHttp.3.0');
		    }
		    catch (e) {
			try {
			    xmlHttp = new ActiveXObject('MSXML2.XMLHttp');
			}
			catch (e) {
			    try {
				xmlHttp = new ActiveXObject('Microsoft.XMLHttp');
			    }
			    catch (e) {
				alert("Ваш браузер не поддерживает AJAX.");
				return false;
			    }
			}
		    }
		}
	    }
	}
	return [xmlHttp, ie];
}
