var property = 'journals';

var sLink;
var sLinkDouble;
var sIndex;

var rID;
var xpos = 0;
var ypos = 0;
var subBlock;
var subIndex = new Array();
subIndex[0] = 'spy';
subIndex[1] = 'subscribe';
var subCheck = new Array();

var flagError;
var sError = '&#1085;&#1077;&#13;&#1091;&#1076;&#1072;&#1083;&#1086;&#1089;&#1100;&#13;&#1074;&#1099;&#1087;&#1086;&#1083;&#1085;&#1080;&#1090;&#1100;&#13;&#1076;&#1072;&#1085;&#1085;&#1086;&#1077;&#13;&#1076;&#1077;&#1081;&#1089;&#1090;&#1074;&#1080;&#1077;';
var xmlHttp = createXmlHttpRequestObject();

var sAction = new Array();
var sTxt = new Array();

sTxt['spy'] = '&#1076;&#1086;&#1073;&#1072;&#1074;&#1080;&#1090;&#1100;&#13;&#1079;&#1072;&#1087;&#1080;&#1089;&#1100;&#13;&#1074;&#13;&#34;&#1055;&#1086;&#1076;&#1087;&#1080;&#1089;&#1082;&#1080;&#34;';
sTxt['spy-'] = '&#1091;&#1076;&#1072;&#1083;&#1080;&#1090;&#1100;&#13;&#1079;&#1072;&#1087;&#1080;&#1089;&#1100;&#13;&#1080;&#1079;&#13;&#34;&#1055;&#1086;&#1076;&#1087;&#1080;&#1089;&#1086;&#1082;&#34;';
sTxt['subscribe'] = '&#1087;&#1086;&#1083;&#1091;&#1095;&#1072;&#1090;&#1100;&#13;&#1085;&#1086;&#1074;&#1099;&#1077;&#13;&#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1080;&#13;&#1085;&#1072;&#13;&#101;&#45;&#109;&#97;&#105;&#108;';
sTxt['subscribe-'] = '&#1086;&#1090;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100;&#1089;&#1103&#13;&#1086;&#1090;&#13;&#1082;&#1086;&#1084;&#1084;&#1077;&#1085;&#1090;&#1072;&#1088;&#1080;&#1077;&#1074;&#13;&#1087;&#1086;&#13;&#101;&#45;&#109;&#97;&#105;&#108;';
sTxt['bookmarks'] = '&#1089;&#1090;&#1072;&#1090;&#1100;&#13;&#1087;&#1086;&#1089;&#1090;&#1086;&#1103&#1085;&#1085;&#1099;&#1084;&#13;&#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1077;&#1084;';
sTxt['bookmarks-'] = '&#1089;&#1090;&#1072;&#1090;&#1100;&#13;&#1085;&#1077;&#1087;&#1086;&#1089;&#1090;&#1086;&#1103&#1085;&#1085;&#1099;&#1084;&#13;&#1095;&#1080;&#1090;&#1072;&#1090;&#1077;&#1083;&#1077;&#1084;';
sTxt['newjr'] = '&#1087;&#1086;&#1076;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100;&#1089;&#1103&#13;&#1085;&#1072;&#13;&#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103';
sTxt['newjr-'] = '&#1086;&#1090;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100;&#1089;&#1103&#13;&#1086;&#1090;&#13;&#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1081;';
sTxt['newhr'] = '&#1087;&#1086;&#1076;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100;&#1089;&#1103&#13;&#1085;&#1072;&#13;&#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1103';
sTxt['newhr-'] = '&#1086;&#1090;&#1087;&#1080;&#1089;&#1072;&#1090;&#1100;&#1089;&#1103&#13;&#1086;&#1090;&#13;&#1086;&#1073;&#1085;&#1086;&#1074;&#1083;&#1077;&#1085;&#1080;&#1081;';

function createXmlHttpRequestObject()
{
  var xmlHttp;
  try
  {
    xmlHttp = new XMLHttpRequest();
  }
  catch (e)
  {
    var XmlHttpVersions = new Array(
    'MSXML2.XMLHTTP.6.0',
    'MSXML2.XMLHTTP.5.0',
    'MSXML2.XMLHTTP.4.0',
    'MSXML2.XMLHTTP.3.0',
    'MSXML2.XMLHTTP',
    'Microsoft.XMLHTTP'
    );

    for (var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++)
    {
      try
      {
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e)
      {
        
      }
    }
  }

  return xmlHttp;
}

function subRecord(id, action)
{
  var sCss = (action.indexOf('-') != -1) ? action.substr(0, action.indexOf('-')) : action;
  sIndex = sCss + id;
  sLink = fetch_object(sIndex);
  sLinkDouble = fetch_object(sIndex + 'Double');

  if (!sAction[sIndex])
  {
    sAction[sIndex] = action;
  }
  var url = '/newcom.php?id=' + id + '&type=' + property + '&action=' + sAction[sIndex];

  if (!sLink || !xmlHttp)
  {
    window.location(url); // for opera 7
  }
  else
  {
    try
    {
      xmlHttp.open('GET', url + '&ajax=1', true);
      xmlHttp.onreadystatechange = handleRequestCheckSub;
      xmlHttp.send(null);
    }
    catch (e)
    {
      window.location(url);
    }
  }
}


function subProperty(userid, action)
{
  var sCss = (action.indexOf('-') != -1) ? action.substr(0, action.indexOf('-')) : action;
  sIndex = action;
  sLink = fetch_object(sCss);
  sLinkDouble = '';
  if (!sAction[sIndex])
  {
    sAction[sIndex] = action;
  }
  var urlAction = (action.indexOf('new') != -1) ? sCss : sAction[sIndex];
  var url = '/subscribe.php?userid=' + userid + '&action=' + urlAction;

  if (!sLink || !xmlHttp)
  {
    window.location(url); // for opera 7
  }
  else
  {
    try
    {
      xmlHttp.open('GET', url + '&ajax=1', true);
      xmlHttp.onreadystatechange = handleRequestCheckSub;
      xmlHttp.send(null);
    }
    catch (e)
    {
      window.location(url);
    }
  }
}

function createSubBlock(evt, id)
{
  evt = evt ? evt : ((window.event) ? window.event : null);
  rID = id;

  if (typeof(evt.clientX) == 'number')
  {
    xpos = evt.clientX + document.body.scrollLeft;
    ypos = evt.clientY + document.body.scrollTop;
  }
  else if (typeof(evt.pageX) == 'number')
  {
    xpos = evt.pageX;
    ypos = evt.pageY;
  }
  if (xpos + 250 >= document.body.clientWidth)
  {
    xpos = document.body.clientWidth - 240;
  }
  if (ypos + 50 >= document.body.clientHeight + document.body.scrollTop)
  {
    ypos -= 70;
  }

  SubBlock();

  if (!subCheck[rID])
  {
    sAction['spy' + rID] = '';
    sAction['subscribe' + rID] = '';
    try
    {
      var url = '/newcom.php?id=' + rID + '&type=' + property + '&action=check';
      xmlHttp.open('GET', url + '&ajax=1', true);
      xmlHttp.onreadystatechange = handleRequestCheckSubBlock;
      xmlHttp.send(null);
    }
    catch (e)
    {
      
    }
  }
}

function SubBlock()
{
  var availableSub = new Array();
  availableSub[0] = sAction['spy' + rID] ? sAction['spy' + rID] : '';
  availableSub[1] = sAction['subscribe' + rID] ? sAction['subscribe' + rID] : '';
  subBlock = fetch_object('subBlock');

  var t = '';
  for (var i = 0; i < subIndex.length; i++)
  {
    if (availableSub[i])
    {
      var a = availableSub[i];
      t += '<a href="newcom.php?id=' + rID + '&type=' + property + '&page=1&action=' + a + '" ';
      t += 'onClick="subRecord(' + rID + ', \'' + a + '\'); hiddenSubBlock(); return false;">';
      t += '<span id="' + subIndex[i] + rID + '">' + sTxt[a] + '</span></a><br>';
    }
  }

  if (!t)
  {
    if (subCheck[rID])
    {
      if (flagError)
      {
        t += sError + '<br>';
      }
      else
      {
        t += 'комментарии запрещены автором<br>';
      }
    }
    else
    {
      t += 'ждем ответ сервера<br>';
    }
  }
  
  t += '<a href="#" onClick="hiddenSubBlock(); return false;">закрыть</a>';
  subBlock.innerHTML = t;
  subBlock.style.left = (xpos - 15) + 'px'; 
  subBlock.style.top = (ypos + 15) + 'px';
  subBlock.style.display = 'block';
}

function hiddenSubBlock()
{
  subBlock.style.display = 'none';
}

function handleRequestCheckSubBlock()
{
  if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
  {
    try
    {
      var response = xmlHttp.responseText;
      if (!isNaN(response))
      {
        if (response.substr(0, 1) != 0)
        {
          sAction['spy' + rID] = (response.substr(0, 1) == 1) ? 'spy' : 'spy-';
        }
        if (response.substr(1) != 0)
        {
          sAction['subscribe' + rID] = (response.substr(1) == 1) ? 'subscribe' : 'subscribe-';
        }
      }
      else
      {
        flagError = 1;
        sError = response;
      }
      subCheck[rID] = 1;
      SubBlock();
    }
    catch (e)
    {
      flagError = 1;
      SubBlock();
    }
  }
}

function handleRequestCheckSub()
{
  if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
  {
    try
    {
      var response = xmlHttp.responseText;
      if (response == 1)
      {
        var t = (sAction[sIndex].indexOf('-') != -1) ? sAction[sIndex].substr(0, sAction[sIndex].indexOf('-')) : sAction[sIndex] + '-';

        sAction[sIndex] = t;
        sLink.innerHTML = sTxt[t];
        if (sLinkDouble)
        {
          sLinkDouble.innerHTML = sTxt[t];
        }
      }
      else if (isNaN(response))
      {
        alert(response);
      }
      else
      {
        alert(sError);
      }
    }
    catch (e)
    {
      alert('Невозможно получить ответ от сервера');
    }
  }
}