AjaxTempStyles=Array();

function callServer(url,idName) {
  url = url.replace(/&amp;/g, '&');
	
  postData = arguments[2] || false;
  redirect = arguments[3] || false;
  /* Создание нового объекта XMLHttpRequest для общения с Web-сервером */
  var xmlHttp = false;
  /*@cc_on @*/
  /*@if (@_jscript_version >= 5)
  try {
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
	  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e2) {
	  xmlHttp = false;
    }
  }
  @end @*/
  if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
  }
  // Установить функцию для сервера, которая выполнится после его ответа
  xmlHttp.onreadystatechange = function(){updatePage(xmlHttp, idName, redirect);};
  // Открыть соединение с сервером
  if (postData != false) {
	xmlHttp.open("POST", url, true);
	xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	sendData = new Array();
	for(var i=0;i<postData.length;i++) {
		if ( document.getElementById(postData[i]).type == 'checkbox' ) {
			value = document.getElementById(postData[i]).checked;
			if ( value == 'true' || value == 1 )
				value = 1;
			else value = 0;
		} else value = document.getElementById(postData[i]).value;
		sendData[i] = postData[i]+'='+encodeURIComponent( value );
    }
	sendData = sendData.join('&');
  }else xmlHttp.open("GET", url, true);
  // Передать запрос
  if (postData == false) xmlHttp.send(null);
  else xmlHttp.send(sendData);
  AjaxInsertImage(idName);
}

function AjaxInsertImage(idName) {
 var Block = document.getElementById(idName);
 if(typeof AjaxTempStyles[idName] == 'undefined') {
  AjaxTempStyles[idName] = Array();
  AjaxTempStyles[idName][0] = Block.style.display;
  AjaxTempStyles[idName][1] = Block.style.background;
 }
 Block.style.display = 'block';
 Block.style.background = '#f0f0f0 url(/images/ajax.gif) no-repeat scroll center center';
}

function AjaxDeleteImage(idName) {
 var Block = document.getElementById(idName);
 Block.style.display = AjaxTempStyles[idName][0];
 Block.style.background = AjaxTempStyles[idName][1];
}

function updatePage(xmlHttp, idName, redirect) {
  if (xmlHttp.readyState == 4) {
    AjaxDeleteImage(idName);
	document.getElementById(idName).innerHTML = xmlHttp.responseText;
	if(xmlHttp.responseText.indexOf('<script')!=-1){
     script_collection = document.getElementById(idName).getElementsByTagName("SCRIPT");
     for( i = 0; i < script_collection.length; i++ ){
     eval( script_collection[ i ].innerHTML );
     }
   }
	if ( redirect ) scrollToID ( idName );
  }
}

function replace(search, replace, subject){
	var ra = replace instanceof Array,
		sa = subject instanceof Array,
		l = (search = [].concat(search)).length,
		replace = [].concat(replace),
		i = (subject = [].concat(subject)).length;
	while(j = 0, i--)
		while(subject[i] = subject[i].split(search[j]).join(ra ? replace[j] || "" : replace[0]), ++j < l);
	return sa ? subject : subject[0];
}

function scrollToID (id){
	gpos = getElementPosition(id);
	cpos = getBodyScrollTop();
	d = 0;
	if ( cpos > gpos ) {
		for (i=cpos; i>gpos; i-=50){
			window.scrollTo(0, i);
		}
		
	} else {
		for (i=cpos; i<gpos; i+=50){
			window.scrollTo(0, i);
		}
	}
	window.scrollTo(0, gpos);
}

function getBodyScrollTop()
{
	return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getElementPosition(elemId)
{
    var elem = document.getElementById(elemId);
	
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;
	
    var l = 0;
    var t = 0;
	
    while (elem)
    {
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }

    return t;
}