function getNewXmlHttpRequest() {
    var obj = false;
    try {
        obj = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e) {
        try {
            obj = new ActiveXObject('Microsoft.XMLHTTP');
        } catch(e) {
            obj = new XMLHttpRequest();
        }
    }
    return obj;
}

function openUrl(url,target) {

     var Obj = document.getElementById(target);

     var xmlhttp = getNewXmlHttpRequest();

     xmlhttp.open('GET',url,false);
     xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=koi8-r');
     xmlhttp.setRequestHeader("Connection", "close");
     xmlhttp.setRequestHeader('Accept-charset','koi8-r');
     xmlhttp.send(null);

     stat(Obj,xmlhttp.readyState); 
     if (xmlhttp.readyState == 4) {
       launchJavascript(xmlhttp.responseText);
       Obj.innerHTML = xmlhttp.responseText;
     }
}

function sendForm(formObj) {
     var url = '';
     var Obj = document.getElementById(formObj.elements['target'].value);
     for(i=0;i<formObj.elements.length;i++) {
       if(formObj.elements[i].name) {
         if(i != 0) url += '&';
         url += formObj.elements[i].name + '=' + formObj.elements[i].value;
       }
     }


     var xmlhttp = getNewXmlHttpRequest();
     xmlhttp.open('POST',formObj.action,false);
     xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=koi8-r');
     xmlhttp.setRequestHeader("Connection", "close");
     xmlhttp.setRequestHeader('Accept-charset','koi8-r');
     xmlhttp.send(url);

//     var rText = escapeToWin1251(xmlhttp.responseText);
     var rText = xmlhttp.responseText;

     stat(Obj,xmlhttp.readyState); 
     if (xmlhttp.readyState == 4) {
       launchJavascript(xmlhttp.responseText);
       Obj.innerHTML = rText;
     }
}

function escapeToWin1251(str) {
  str = str.replace(/&/g, '&');
  str = str.replace(/ /g, ' ');
  str = str.replace(/=/g, '=');
  str = str.replace(/\+/g, '+');
  str = str.replace(/©/g, '©');
  str = str.replace(/\;/g, ';');
  str = str.replace(/Ё/g, 'Ё');
  str = str.replace(/ё/g, 'ё');
  str = str.replace(/c/g, 'c');
  str=str.replace(/[А-Яа-я]/g, function(symbol) { return '%'+Number(symbol.charCodeAt(0)-0x0350).toString(16);} );
  return str;
}

function launchJavascript(responseText) {
  var ScriptFragment = '(?:<script.*?>)((\n|.)*?)(?:</script>)';
           
  var match    = new RegExp(ScriptFragment, 'img');
  var scripts  = responseText.match(match);

    if(scripts) {
        var js = '';
        for(var s = 0; s < scripts.length; s++) {
            var match = new RegExp(ScriptFragment, 'im');
            js += scripts[s].match(match)[1];
            js += ';';
        }
        eval(js);
    }
}

function stat(Obj,n) {
  var innerHTML = "";
  switch (n) {
    case 0:
      innerHTML = "не инициализирован";
    break;   
    case 1: 
      innerHTML =  "загрузка...";
    break;
    case 2: 
      innerHTML = "загружено";
    break;
    case 3: 
      innerHTML = "в процессе...";
    break;
    case 4: 
      innerHTML = "готово";
    break;
    default:
      innerHTML = "неизвестное состояние";  
  }  
//  Obj.innerHTML = "<img src=\"/img/uploading.gif\" width=100 height=30 alt=\"" + innerHTML + "\" align=center>";
}

function hideSelect() {
        var selArray=(document.getElementsByTagName)?
                document.getElementsByTagName('SELECT'):
                        ((document.all)?document.all.tags('SELECT'):null);
        if (selArray) {
                for (i=0;i<selArray.length;i++) {
                        if (selArray[i].name!='url') selArray[i].style.visibility='hidden';
                }
        }
}

function showSelect() {
        var selArray=(document.getElementsByTagName)?document.getElementsByTagName('SELECT'):((document.all)?document.all.tags('SELECT'):null);
        if (selArray) for (i=0;i<selArray.length;i++) selArray[i].style.visibility='visible';
}

function hideDiv() {
  document.getElementById('popup').style.display = 'none';
  document.getElementById('shadow').style.display = 'none';
  document.getElementById('body').style.display = 'none';
  showSelect();
}

function showDiv(url,target) {
  document.getElementById('body').style.top = document.body.scrollTop;
  document.getElementById('body').style.display = 'block';

  var div = document.getElementById('popup');
  var sh = document.getElementById('shadow');
  var l = document.getElementById('loader');

  l.style.display = 'block';
  l.style.top = Math.round(document.body.clientHeight/2 + document.body.scrollTop);

  openUrl(url,target);

  div.style.display = 'block';

  var xPos = Math.round((document.body.clientWidth - div.offsetWidth)/2);
  var yPos = Math.round((document.body.clientHeight - div.offsetHeight)/2 + document.body.scrollTop);
  div.style.left = xPos; 
  div.style.top = yPos;

  sh.style.width = div.offsetWidth;
  sh.style.height = div.offsetHeight;
  sh.style.display = 'block';
  sh.style.left = xPos+8; 
  sh.style.top = yPos+8;
  hideSelect();
  loader();
}

function loader(div) {
  var sh = document.getElementById('shadow');
  var div = document.getElementById('popup');
  if(!div || div.complete) {
    document.getElementById('loader').style.display = 'none';
    sh.style.width = div.offsetWidth + 'px';
    sh.style.height = div.offsetHeight + 'px';
  } else {
    setTimeout("loader();",64);
  }
}

window.onscroll = function onScroll() {
  var bb = document.getElementById('body');
  var div = document.getElementById('popup');
  var sh = document.getElementById('shadow');
  if(bb.style.display == 'block') {
    bb.style.top = document.body.scrollTop;
//    div.style.top = Math.round((document.body.clientHeight - div.offsetHeight)/2 + document.body.scrollTop);
//    sh.style.top = Math.round((document.body.clientHeight - div.offsetHeight)/2 + document.body.scrollTop)+8;
  }
}

function openImg(obj,url,target) {
  openUrl(url,target);
  var tar = document.getElementById(target);
  tar.style.top = obj.style.top;
  tar.style.left = obj.style.left;
  tar.style.display = 'block';
}

