var iframeObj;

function getXmlHttp()
{
  var xmlhttp;
  try
  {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
    try
    {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (E)
    {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp = new XMLHttpRequest();
  return xmlhttp;
}

function sendRequest(targetURL, callback, errback)
{
  var xmlhttp = getXmlHttp();
  xmlhttp.open('GET', targetURL, true);
  xmlhttp.onreadystatechange = function()
  {
    if (xmlhttp.readyState == 4)
    {
       if(xmlhttp.status == 200)
       {
          var response = xmlhttp.responseText;
          if(response.indexOf('|') != -1)
          {
            var update = new Array();
            update = response.split('|');
            callback(update, true);
          }
          else callback(response, false);
       }
       else errback(xmlhttp.statusText);
    }
  }
  xmlhttp.send(null);
}

//один элемент, senderElem является объектом
function postElement(senderElem, action, callback)
{
  phonyForm=getTempForm (action, callback);
  // заполнить форму данными из объекта
  var tn;
  tn=senderElem.cloneNode(false);
  phonyForm.appendChild(tn);
  phonyForm.submit();
}

//вся форма, senderForm является объектом
function postForm(senderForm, action, callback)
{
  phonyForm=getTempForm (action, callback);
  // заполнить форму данными из объекта
  l=senderForm.elements.length;
  if (l<1) return;
  var tn;
  for (i=0; i<l; i++)
  {
    tn=senderForm.elements[i].cloneNode(true);
    if ((tn.tagName=='TEXTAREA') || (tn.tagName=='SELECT')) tn.value=senderForm.elements[i].value;
    phonyForm.appendChild(tn);
  }
  phonyForm.submit();
}

//проверяет наличие временной формы, возвращает ее
//создает, если формы нет
//чистит, если форма есть
function getTempForm(action, callback)
{
  CreateAjaxIframe(callback);
  if(typeof phonyForm == 'undefined')
  {
    // временную форму создаем, если нет
    phonyForm = document.createElement("form");
    phonyForm.style.display = "none";
    phonyForm.enctype = "multipart/form-data";//"application/x-www-form-urlencoded"
    phonyForm.method = "POST";
    document.body.appendChild(phonyForm);
  }
  phonyForm.action = action;
  phonyForm.target = iframeObj.name;
  phonyForm.setAttribute("target", iframeObj.name);
  // убить все содержание из временной формы
  while(phonyForm.firstChild) phonyForm.removeChild(phonyForm.firstChild);
  return phonyForm;
}

function CreateAjaxIframe(callback)
{
  if (iframeObj)
  {
    iframeObj.removeEvents();
    iframeObj.addEvent('load', function(){
      //var answer=this.contentDocument.body.innerHTML;
      var answer=this.contentWindow.document.body.innerHTML;
      if(answer.indexOf('|') != -1)
      {
        var anArr = new Array();
        anArr = answer.split('|');  
      }
      else anArr=new Array(0,'Invalid answer format'+answer);
      callback(anArr);
    });
    return;
  }
  iframeObj = new IFrame({ src: '', name: 'tAjaxIframe',
    styles: { display: 'none' },
    events: {load: function(){
        //var answer=this.contentDocument.body.innerHTML;
        var answer=this.contentWindow.document.body.innerHTML;
        if(answer.indexOf('|') != -1)
        {
          var anArr = new Array();
          anArr = answer.split('|');  
        }
        else anArr=new Array(0,'Invalid answer format.'+answer);
        callback(anArr);
      }
    } 
  });
  iframeObj.inject(document.body,'bottom');
}
