  var AtsTypes = new Array("&nbsp;","5ESS", "?", "A-204", "ARF-50", "Alcatel", "BOSCH", "DX-200", "DX-210", "DX-220", "EWSD", "KMK-20T", "MD-110", "MT-20","Meridian", "Millennium", "Muiticom", "NEAX-61", "NEAX-7400", "NEC", "Siemens", "TDX-1B", "TMX-25000", "~ATCK","~DX-200", "~DX-210", "~DX-220", "~АТСК", "~АТСКУ", "АМЭ", "АТСДШ", "АТСК", "АТСКУ", "АТСЦ 90", "ГПЯ", "ДШ АТС-47","ДШ АТС-49", "ДШ АТС-54", "ЕСК-400", "ИСНН", "КОНТУР", "Квант", "М-100 МТА", "ПСК-1000", "Пентаконта", "УПАТС-10", "УПАТС-400");
  var cellindex = 0
  var oInterval

  SearchPref = document.location.search;
  if( browser < 2 || SearchPref.indexOf('index=') == -1 ) {
    SearchMask=15;
    SearchPref = '';
    SearchPrefLen = 0;
  }
  else {
    SearchMask = (SearchPref.indexOf('com=on') >= 0 ? 4 : 0) | (SearchPref.indexOf('upats=on') >= 0 ? 2 : 0) | (SearchPref.indexOf('gts=on') >= 0 ? 1 : 0) | (SearchPref.indexOf('mobil=on') >= 0 ? 8 : 0);
    if( !SearchMask ) SearchMask = 15;
    SearchPref = SearchPref.substring(SearchPref.indexOf('index=')+6,999);
    if( SearchPref.indexOf('&') != -1 ) SearchPref = SearchPref.substring(0,SearchPref.indexOf('&'));
    SearchPrefLen = SearchPref.length;
  }

  with( document ) {
    var x0,x,xx

    if( browser < 2 ) {
       write('<span id=baseload><p><b><i>Загружается база данных, ждите&nbsp;&nbsp;</i></b><img id=baseimg align=texttop src="/img/1x1red.gif" width=1 height=18></p></span><span id=atsform style="display:none">')
       oInterval = window.setInterval("ChangeLoadBar()",500);
    }

    write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 width=100%><TR><TD>')
    write('<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 ALIGN=left><TR><TD>')

    if( browser < 2 ) write('<form action="javascript:ShowTable()">')
    else write('<form method="get" action="'+document.location.protocol+"//"+document.location.host+document.location.pathname+'">')

    write('<TABLE BORDER=0 BGCOLOR=#6699CC CELLSPACING=0 CELLPADDING=0><TR><TD>')
    write('<table cellspacing=1 cellpadding=10 border=0 WIDTH=100%><TR><TD bgcolor="#FFCC00">')

    write('Первые цифры номера телефона: <input TYPE=Text name="index" MAXLENGTH=3 SIZE=4 value="' + SearchPref + '"><BR><BR>')
    write('<input TYPE=Checkbox name="gts"' + (SearchMask & 1 ? ' CHECKED' : '') + '>')
    if(fSpbList)write('ПТС&nbsp;и&nbsp;Петерстар&nbsp;(некоммерческие&nbsp;абоненты)&nbsp;')
    else write('МГТС&nbsp;и&nbsp;ЦентрТелеком')
    write('<BR><input TYPE=Checkbox name="com"' + (SearchMask & 4 ? ' CHECKED' : '') + '>Коммерческие&nbsp;операторы')
    if(!fSpbList)write('<BR><input TYPE=Checkbox name="mobil"' + (SearchMask & 8 ? ' CHECKED' : '') + '>Сотовые&nbsp;операторы')
    write('<BR><input TYPE=Checkbox name="upats"' + (SearchMask & 2 ? ' CHECKED' : '') + '>Ведомственные&nbsp;АТС')
    write('<BR><BR><input type=')
    if( browser < 2 ) write('"button" onclick="ShowTable();"')
    else write('"submit"')
    write(' value="Показать">')
    write('</td></tr></table></td></tr></table>')
    write('</form>')

    write('</td><td><img src="/img/1x1.gif" width=10 height=1></td></tr></table>')

    write('Для просмотра списка АТС наберите первые 1-3 цифры номера телефона')
    if( browser < 2 ) write(', или ничего, если хотите просмотреть весь список АТС'+(fSpbList?'.':' (<font color=red>не рекомендуется - таблица отрисовывается очень долго</font>).'))
    else write(' (пользователи браузеров Opera и Netscape не могут просматривать полный список, пользователем Netscape не рекомендуется просматривать список по одной цифре - этот браузер очень долго перерисовывает большие таблицы).')
    if( browser < 2 ) write('</SPAN>')

    write('</td></tr></table>')

    write('<STYLE type="text/css"><!--')
    if( browser == 2 ) {
      xx = 'x-small'
      x = 'small'
      x0 = 'small'
    }
    else {
      xx = 'xx-small'
      x = 'x-small'
      x0 = 'small'
    }
    write('.z0{text-decoration:none;color:#0000FF;font-size:'+x+';font-family:Arial}')
    write('.z1{text-decoration:none;color:#008000;font-style:italic;font-size:'+xx+';font-family:Arial}')
    write('.z2{text-decoration:none;color:#0000FF;font-weight:bold;font-size:'+x+';font-family:Arial}')
    write('.z3{text-decoration:none;color:#0000FF;font-weight:font-style:italic;bold;font-size:'+x+';font-family:Arial}')
    write('.x{color:black;font-size:'+xx+';font-family:Arial}')
    write('.xx{color:black;font-size'+x0+';font-family:Arial}')
    write('.t0{text-decoration:none;color:#000000;font-size:13px;font-family:Arial}')
    write('.t2{text-decoration:none;color:#0000FF;font-size:13px;font-family:Arial}')
    write('.t1{text-decoration:none;color:#008000;font-size:13px;font-style:italic;font-family:Arial}')
    write('.t3{text-decoration:none;color:#0000FF;font-size:13px;font-weight:bold;font-style:italic;font-family:Arial}')
    write('.tq{text-decoration:none;color:#800080;font-size:13px;font-family:Arial}')
    write('.to{text-decoration:none;color:#FF0000;font-size:13px;font-family:Arial}')
    write('.t0s{text-decoration:none;color:#000000;font-size:9px;font-family:Arial}')
    write('.t2s{text-decoration:none;color:#0000FF;font-size:9px;font-family:Arial}')
    write('.t1s{text-decoration:none;color:#008000;font-size:92x;font-style:italic;font-family:Arial}')
    write('.t3s{text-decoration:none;color:#0000FF;font-size:9px;font-weight:bold;font-style:italic;font-family:Arial}')
    write('.tqs{text-decoration:none;color:#800080;font-size:9px;font-family:Arial}')
    write('.tos{text-decoration:none;color:#FF0000;font-size:9px;font-family:Arial}')
    write('--></STYLE>')

    if( browser < 2 ) write('<SPAN ID="myTable" STYLE="position:relative"></SPAN>')
  }

function AtsListInit(bl) {
 cellindex = 0;
 A = new Array(bl);
}

function SetLoadBar() {
  var p = Math.round(cellindex * 100 / A.length);
  if( browser >= 2 ) return;
  element('baseimg').width = p + 1;
//element('basecnt').innerHTML = p + ' %';
}

function ChangeLoadBar() {
  var o
  if( browser >= 2 ) return;
  o = element('baseimg')
  o.width = (o.width) % 100 + 1
}

function AI(ats,data,type,op,atsoradr,prov,zone,comment) {
 var n = ats.substring(0,1);
 n = n >= '0' && n <= '9' ? 0 : 1;
 if( browser>=2 && (!SearchPrefLen || ats.substring(n,SearchPrefLen+n) != SearchPref || !((1 << (data&3)) & SearchMask)) ) return;
 var t,z=data&~3;
 var a=z,b=a<<1,c=b<<1,d=c<<1,e=d<<1,f=e<<1,g=f<<1,h=g<<1;
 var i=z,j=i>>1,k=j>>1,l=k>>1,m=l>>1,n=m>>1,o=n>>1,p=o>>1;
 if( typeof(type) == 'number' ) t = AtsTypes[type];
 else if( typeof(zone) == 'number' ) t = A[zone][6];
 else if( type != '' ) t = type;
 else t = '&nbsp;';
 A[cellindex] = new Array(ats,t,eval(op),data&3,cellindex,atsoradr,zone,prov,comment);
 cellindex++
}

function SetTable(text) {
  if( browser <= 1) element('myTable').innerHTML = text;
}

var iw

function breakindex(str) {
  var s = '', w = 12, prev, next;
  iw = 0

  while( str.length > w ) {
     prev = -1;
     while( (next = str.substring(prev+1,999).indexOf(',')) != -1 ) {
       next += prev + 1;
       if( next > w ) break;
       prev = next;
     }

     if( prev == -1 ) {
        if( next == -1 ) break;
     }
     else if( next == -1 ) next = prev;
     else if( next > w ) next = prev;
     s += str.substring(0, next + 1) + '<br>&nbsp;&nbsp;';
     str = str.substring(next + 1, 999);
     next -= w;
     if( next > iw ) iw = next;
     w = 10;
  }
  return s + str;
}

function AtsListGen(data) {
 var i, n, c = 0;
 var out = new Array(data ? data.length * 10 + 10 : 10), cOut = 0;
 var head=new Array(
    new Array("Индекс","Тип","Оператор","Адрес","Зона обслуживания"),
    new Array("Индекс","Тип","Оператор","АТС (для УПАТС - фирма)")
 );
 var w,s,ss,h

 if( !data || !data.length )
    out[cOut++] = "<b><font size=+1>Вашему запросу не соответствует ни одна АТС</font><b>";
 else {
    out[cOut++] = '<font color=red><b>Для посмотра детальной информации об АТС, щелкните по индексу в списке.</b></font> Информация выводится в новом окне.<br><br>'
    out[cOut++] = 'Расшифровка информации в списке и описание типов АТС - в конце таблицы<br><br>'
    out[cOut++] = '<table border=0 CELLSPACING=0 CELLPADDING=0 valign=top bgcolor=#808080 width=100%><tr><td><table border=0 CELLSPACING=1 CELLPADDING=2 width=100%><tr>';

    for( i=0;i<5-fSpbList; i++ ) 
       out[cOut++] = '<TD bgcolor="#FFCC00" valign=top class=tn><b>'+head[fSpbList][i]+'</b></td>';
    out[cOut++] = "</tr>"

    for( n = 0; n < data.length; n++ ) {
      out[cOut++] = '<tr valign=top>';
      h = new Array(breakindex(data[n][0]),data[n][1],data[n][7],data[n][5],data[n][6]);
      s = 't'+data[n][3];
      if( data[n][3] == 0 ) {
        w=h[0].substring(0,1)
        if( w == '?' ) s = 'tq';
        else if( w == '-' ) s = 'to';
      }

      for( i = 0; i < 5 - fSpbList; i++ ) {
        if( !h[i] || h[i] == '' ) h[i] = '&nbsp;'
        if( !i || i == 1 && h[1] == 'ДШ АТС-54' ) w=' nowrap'
        else w='';
        ss = s+(i==2&&h[2].length>10?'s':'')
        out[cOut++] = '<TD'+w+' bgcolor="#FFCC00" valign=top class='+ss+'><a class='+ss+' href="javascript:InfoATS('+data[n][4]+')">'+h[i]+'</a></td>'
      }
      out[cOut++] = "</tr>"

      if( data[n][8] ) out[cOut++] = '<TR><TD colspan=5 bgcolor="#FFCC00" valign=top>&nbsp;&nbsp;Примечание: '+data[n][8]+'</td></tr>'
    }
    out[cOut++] = '</table></tr></td></table>';
    out[cOut++] = AtsListLegend();
  }
  if( browser >= 2 ) document.write(out.join(''));
  else SetTable(out.join(''));
}

function AtsListLegend() {
 var p = '<p>Примечания:<UL><LI><font color="#FF0000">Красным</font> цветом выделены демонтированные АТС</LI><LI><font color="#008000"><i>Зеленым</i></font> цветом выделены ведомственные АТС</LI><LI><font color="#0000FF">Синим</font> цветом выделены АТС коммерческих операторов</LI>'
 if( fSpbList )
   return p+'<LI>Названия фирм-владельцев УПАТС приведены в основном по состоянию на 1995 год.</LI></ul></p>'
 return p+'<LI><font color="#0000FF"><b><i>Синим жирным</i></b></font> цветом выделены АТС сотовых операторов</LI><LI>@xxx в адресе АТС означает, что данная АТС находится в здании АТС "xxx", в случае недостоверных данных отмечено вопросом</LI><LI>В случае расхождения данныхо типе АТС в разных источниках, выводится наиболее вероятный тип АТС и альтернатива в фигурных скобках</LI><LI>Вопрос в индексе АТС (например 258-?) означает отсуствие данных о точных номерах тысяч (требует уточнения)</LI><LI>Вопрос в адресе означает отсутствие данных об адресе АТС или номера дома</LI><LI>При отсуствии данных о владельце ведомственной АТС, в зоне обслуживания указан ее предположительный адрес. Индекс отмечен знаком <b>?</b>. Аналогично отмечены ведомственные АТС, владелец которых известен неточно</LI></UL></p>' 
}

function InfoATS(n) {

eval('win'+'dow.o'+'pen("http://"+document.location.host+"/base/"+(fSpbList?"":"m")+A[n][2]+".html","atsinfo","toolbar=0,directories=0,location=0,menubar=0,scrollbars=1,resizable=1,status=0,fullscreen=0,width=620,height=450,left=10,top=10")');
}

function ShowTable() {
 var i, n, pref, preflen, cnt, mask;
 var B;

 with( document ) {
  mask = (forms[0].com.checked ? 4 : 0) | (forms[0].upats.checked ? 2 : 0) | (forms[0].gts.checked ? 1 : 0);
  if( !fSpbList ) mask |= forms[0].mobil.checked ? 8 : 0
  pref = forms[0].index.value;
  preflen = pref.length;
  if( preflen > 3 ) {
    preflen = 3;
    pref = pref.substring(0,3);
  }
  if( fSpbList && pref.substring(0,1) == '9' ) {
    preflen = 1;
    pref = pref.substring(0,1);
  }
  var B = new Array();
  cnt = 0;
  for( i = 0; i < A.length; i++ ) {
    var n = A[i][0].substring(0,1);
    n = n >= '0' && n <= '9' ? 0 : 1;
    if( ((1 << A[i][3]) & mask) )
      if( A[i][0].substring(n,preflen+n) == pref ||
          A[i][0].charAt(n + 3) == '.' && preflen == 3 &&
            A[i][0].substring(n,2+n) == pref.substring(0,2) )
        B[cnt++] = A[i];
  }
  AtsListGen(cnt ? B : 0);
 }
  //if ( document.body.scrollWidth && document.body.clientWidth && document.body.clientWidth < document.body.scrollWidth )
  KillR()
}

function SetBaseLoaded() {
  window.clearInterval(oInterval)
  element('baseload').style.display='none'
  element('atsform').style.display=''
  SetBottomSpace()
}