var hHintTimer=null;
var HintAllowed=1;
var tMobID=-1;
var tMobImgID="";
var tMobLeft=0;
var tMobTop=0;
var tMobObj="";

var hintTimer=null;
var hintMobID=-1;
var hintACode=-1;
var hintOBInfo="";
var hintLeft=0;
var hintTop=0;
var hintShown=0;
var strpntShown=0;

var hintUserName="";
var hintUserID=0;
var hintUserPic=0;
var hintPrice=0;
var hintIsShowUser=0;

// Stat as x,y,...,z where values are stat dependent
// Generally [0] means base, [1] means global modifiers, [2] means local/expiring modifiers

function GetEX(e) {
   var xLeft=e.x;
   if (isNaN(xLeft)) { xLeft=e.pageX; }
   return xLeft;
}

function GetEY(e) {
   var xTop=e.y;
   if (isNaN(xTop)) { xTop=e.pageY; }
   return xTop;
}

function GetStatByIndex(AStat, AIndex) {
   var xS=new String(AStat);
   var xStats=xS.split(",");
   if (xStats[AIndex]) { return xStats[AIndex]; }
   else { return 0; }
}

function GetStat(AStat) {
   var xS=new String(AStat);
   var xStats=xS.split(",");
   var xSum=0;
   for (var xi=0; xi<xStats.length; xi++) {
      xSum=xSum + eval(xStats[xi]);
   }
   return xSum;
}

function GetStatBase(AStat) {
   var xS=new String(AStat);
   var xStats=xS.split(",");
   var xLen=2;
   if (xStats.length<2) { xLen=xStats.length; }
   var xSum=0;
   for (var xi=0; xi<xLen; xi++) {
      xSum=xSum + eval(xStats[xi]);
   }
   return xSum;
}

function GetStatLocal(AStat) {
   var xS=new String(AStat);
   var xStats=xS.split(",");
   if (xStats.length<3) { return 0; }
   return eval(xStats[2]);
}

function GetStatMod(AStat) {
   var xS=new String(AStat);
   var xStats=xS.split(",");
   var xSum=0;
   for (var xi=1; xi<xStats.length; xi++) {
      xSum=xSum + eval(xStats[xi]);
   }
   return xSum;
}

function GetGRAPLocal(AGRAP) {
   if (AGRAP=="") { return 0; }
   var xS=new String(AGRAP);
   var xGRAPs=xS.split("/");
   return (Math.round(xGRAPs[0] * 100) / 100);
}

function GetHealthLength(AHealth, AWidth) {
   var xS=AHealth.split(",");
   var xHl=eval(xS[0]) + eval(xS[1]);
   var xLc=eval(xS[2]);
   if (xLc>xHl) { xLc=xHl; }
   var xRes=Math.round(xLc * eval(AWidth) / xHl);
   if (isNaN(xRes)) { xRes=0; }
   if (xRes<0) { xRes=0; }
   return xRes;
}

function GetHealthColor(AHealth, BHealth) {
   var xHC=new Array("#FF0000", "#FF1100", "#FF3300", "#FF6600", "#FF9900", "#FFAA00", "#CCAA00", "#99AA00", "#66AA00", "#33AA00", "#00AA00");
   if (eval(AHealth)<0) { AHealth=0; }
   var xPer=Math.round(eval(AHealth) * 10 / eval(BHealth));
   if ((xPer<0) || (xPer>10)) { xPer=0; }
   return xHC[xPer];
}

function IsFloatObj(AObjID) {
   if ((eval(AObjID)==4) || (eval(AObjID)==5) || (eval(AObjID)==50) ||
       (eval(AObjID)==65) || (eval(AObjID)==66) || (eval(AObjID)==67) || (eval(AObjID)==68) ||
       (eval(AObjID)==85) || (eval(AObjID)==133) || (eval(AObjID)==407) || (eval(AObjID)==535) ||
       (eval(AObjID)==555) || (eval(AObjID)==600) || (eval(AObjID)==601) || (eval(AObjID)==602)) { return 1; }
   else { return 0; }
}

function GetMobByID(AID) {
   if ((AID!="") && (gamefrm.Mobs)) {
      for (var xi=0; xi<gamefrm.Mobs.length; xi++) {
         if ((gamefrm.Mobs[xi]) && (gamefrm.Mobs[xi][1]==AID)) { return xi; }
      }
   }
   return -1;
}

function GetMobName(ALID) {
   if ((ALID>=0) && (gamefrm.Mobs[ALID])) { return gamefrm.Mobs[ALID][20]; }
   else { return ""; }
}

function ParseOBInfo(AOBInfo) {
   var xS=AOBInfo;
   var xArr=null;
   var xLID=-1;
   var xSlID=-1;
   if ((xS=="") || (xS=="undefined")) { return ""; }
   if (xS.indexOf("LID")>=0) {
      xArr=xS.split("LID");
      xLID=eval(xArr[0]);
      xSlID=eval(xArr[1]);
      if ((xLID>=0) && (xSlID>=0) && (gamefrm.Mobs[xLID]) && (gamefrm.Mobs[xLID][21 + xSlID])) { xS=gamefrm.Mobs[xLID][21 + xSlID]; }
      else xS=xArr[2];
   }
   if (xS.indexOf(",")>=0) {
      xArr=xS.split(",");
      xS=xArr[2];
      if ((xS=="") || (xS=="undefined")) { return ""; }
   }
   if (xS.indexOf(";")<0) { return ""; }
   xArr=xS.split(";");
   xS=xArr[1];
   if ((xS=="") || (xS=="0") || (xS=="undefined")) { xS=""; }
   else if ((!xArr[2]) || (xArr[2]=="") || (xArr[2]=="0") || (xArr[2]=="undefined")) { }
   else { xS=xS + ";" + xArr[2]; }
   return xS;
}

// Mob Format
// 0    1   2    3  4  5 
// lid, id, tid, x, y, full/mons
// 6    7    8    9    10   11   12   13   14     15      16    17    18    19    20   21  22
// lov, str, hit, vyn, met, emo, rat, wil, int    fear    dft   hel   ene   pic   nm   w1  w2

function ShowMobHint() {
   clearTimeout(hintTimer);
   hintTimer=null;
   if (msgShown==1) { return; }
   var xEl=document.getElementById("hintWndA");
   if (xEl==null) { return; }
   hintShown=1;
   var xData="";
   var xStr="";
   var xStats=null;
   xData="<div class=\"hintName\">" + gamefrm.Mobs[hintMobID][20] + "</div>";
   var xMobType=eval(gamefrm.Mobs[hintMobID][5]);
   if (xMobType!=3) {
      xData=xData + "<span class=\"hintSkills\">Профессия: " + Profs[gamefrm.Mobs[hintMobID][60]] + "</span><br />";
      xData=xData + "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td class=\"hintSkills\">";
      var xCount=0;
      var xSum=0;
      var xMod=0;
      var xModStr="";
      for (var xi=0; xi<Skills.length; xi++) {
         xStr=gamefrm.Mobs[hintMobID][6 + xi];
         if (xStr!="") {
            xStats=xStr.split(",");
            xSum=eval(xStats[0]) + eval(xStats[1]) + eval(xStats[2]);
            xMod=eval(xStats[1]) + eval(xStats[2]);
         } else {
            xSum=0;
            xMod=0;
         }
         xSum=Math.floor(xSum * 100) / 100;
         xMod=Math.floor(xMod * 100) / 100;
         if (xMod==0) { xModStr=""; } else { xModStr="(" + (Math.floor(xStats[0] * 100) / 100) + "+" + xMod + ")"; }
         xData=xData + Skills[xi] + ": " + xSum + xModStr + "<br />";
         xCount++;
         if ((xCount==3) && (xi<8)) {
            xData=xData + "</td><td class=\"hintSkills\">";
            xCount=0;
         }
      }
      xData=xData + "</td></tr></table><br />";
      xData=xData + "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td class=\"hintSkills\">";
      for (var xi=0; xi<Lives.length; xi++) {
         xStr=gamefrm.Mobs[hintMobID][16 + xi];
         if (xStr!="") {
            xStats=xStr.split(",");
            if (xi==0) {
               xSum=(Math.round(xStats[2] * 100) / 100) + "/" + (eval(xStats[0]) + eval(xStats[1]));
            } else if (xi==1) {
               xSum=(Math.round(xStats[2] * 100) / 100) + "/" + (eval(xStats[0]) + eval(xStats[1]));
            } else if (xi==2) {
               xSum=(Math.round(xStats[2] * 100) / 100) + "/" + (eval(xStats[0]) + eval(xStats[1]));
            } else {
               xSum=eval(xStats[0]) + eval(xStats[1]);
               xMod=eval(xStats[1]);
            }
          } else {
            xSum=0;
            xMod=0;
          }
          xMod=Math.round(xMod * 100) / 100;
          if ((xMod==0) || (xi!=1)) { xModStr=""; } else { xModStr="(" + xStats[0] + "+" + xStats[1] + ")"; }
          xData=xData + Lives[xi] + ": " + xSum;
          if (xi<2) { xData=xData + "</td><td class=\"hintSkills\">"; }
      }
      xData=xData + "</td></tr></table>";
      xStr="";
      for (var xi=0; xi<16; xi++) {
         if (gamefrm.Mobs[hintMobID][62 + xi]!="") {
            if (xStr!="") { xStr=xStr + ", "; }
            xStr=xStr + PlusInfo[xi] + ": +" + GetGRAPLocal(gamefrm.Mobs[hintMobID][62 + xi]);
            if ((xi!=4) && (xi!=7) && (xi!=8) && (xi!=10)) { xStr=xStr + "%"; }
            else if (xi==7) { xStr=xStr + "(" + PlusEffects[gamefrm.Mobs[hintMobID][79]] + ")"; }
         }
      }
      if (xStr!="") { xData=xData + "<div class=\"hintText\" style=\"font-size: 10px; paddign-bottom: 6px;\">Активировано: " + xStr + "</div>"; }
   } else {
      var xOwnID=eval(gamefrm.Mobs[hintMobID][6]);
      if (!isNaN(xOwnID)) {
         xData=xData + "<div class=\"hintText\" style=\"font-size: 10px; paddign-top: 6px; width: 200px\">Установил: " + gamefrm.Mobs[hintMobID][7] + "</div>";
      }
   }
   if ((gamefrm.Mobs[hintMobID][5]==3) && (gamefrm.Mobs[hintMobID][1]==218) && (gamefrm.Mobs[hintMobID][18]!="")) {
      xStr=gamefrm.Mobs[hintMobID][18];
      xStats=xStr.split(",");
      xData=xData + "<div class=\"hintText\" style=\"font-size: 10px; paddign-top: 6px; width: 200px\">Состояние: " + PlayTblCnd[xStats[0]];
      var xPl1=GetMobName(GetMobByID(gamefrm.Mobs[hintMobID][56]));
      var xPl2=GetMobName(GetMobByID(gamefrm.Mobs[hintMobID][57]));
      if ((xPl1!="") || (xPl2!="")) {
         xData=xData + "<br />Играют: " + xPl1 + ", " + xPl2;
      }
      xData=xData + "</div>"
   }
   if ((gamefrm.Mobs[hintMobID][5]==3) && (gamefrm.Mobs[hintMobID][8]!=0) && (gamefrm.Mobs[hintMobID][8]!="0,0,0")) {
      xData=xData + "<div class=\"hintText\" style=\"font-size: 10px; paddign-top: 6px; width: 200px\">Прочность: " + gamefrm.Mobs[hintMobID][8] + "</div>";
   }
   var xWeaName="Вооружение: ";
   var xWeaLimit=2;
   if (xMobType==3) {
      xWeaName="Предметы<br />";
      xStr=gamefrm.Mobs[hintMobID][17];
      xStats=xStr.split(",");
      xWeaLimit=eval(xStats[0]);
      if (isNaN(xWeaLimit)) { xWeaLimit=2; }
   }
   xData=xData + "<div style=\"font-size: 10px; paddign-top: 6px;\">" + xWeaName;
   for (var xi=0; xi<xWeaLimit; xi++) {
      if ((gamefrm.Mobs[hintMobID][21 + xi]!="") && (gamefrm.Mobs[hintMobID][21 + xi]!="undefined")) {
         xStr=gamefrm.Mobs[hintMobID][21 + xi];
         xStats=xStr.split(",");
         if (eval(xStats[1])!=0) {
            xData=xData + "<img src=\""+ImgDir+"o/" + xStats[1] + "min.jpg\" width=\"48\" height=\"48\" alt=\"\" border=\"\" style=\"vertical-align: top\" />&nbsp;";
         }
      }
   }
   xData=xData + "</div>";
   //xData=xData + "<br />";
   //xData=xData + "Боится: " + Skills[gamefrm.Mobs[hintMobID][15]];
   xEl.innerHTML=xData;
   xEl=document.getElementById("hintWnd");
   xEl.style.left=hintLeft + "px";
   xEl.style.top=hintTop + "px";
   xEl.style.display="block";
}

function ShowObjHint() {
   clearTimeout(hintTimer);
   hintTimer=null;
   if (msgShown==1) { return; }
   var xEl=document.getElementById("hintWndA");
   if (xEl==null) { return; }
   if ((Objs[hintMobID]==null) || (Objs[hintMobID]==undefined)) { return; }
   hintShown=1;
   var xData="";
   var xStr="";
   var xNum=0;
   var xArr=null;
   var xArr2=null;
   xData="<div class=\"hintName\">" + Objs[hintMobID][24] + "</div>";
   if ((hintIsShowUser==1) && (hintUserName!="")) {
      xData=xData + "<div class=\"hintText\" style=\"height: 50px;\">";
      xData=xData + "<img src=\""+ImgDir+"p/100/u" + hintUserPic + ".jpg\" width=\"50\" height=\"50\" alt=\"\" border=\"0\" align=\"left\" style=\"padding-right:6px;\" />";
      xData=xData + "Продавец: <span class=\"userName\">" + hintUserName + "</span><br />";
      xData=xData + "Цена: <img src=\""+StylesDir+"moneys.gif\" width=\"11\" height=\"11\" border=\"0\" alt=\"Серебряные монеты\" title=\"Серебряные монеты\" />&nbsp;" + hintPrice;
      xData=xData + "</div>";
   }
   xData=xData + "<div class=\"hintText\" style=\"white-space: nowrap\">";
   var xObjCls=eval(Objs[hintMobID][1]);
   var xObjSubCls=eval(Objs[hintMobID][2]);
   var xLevel=eval(Objs[hintMobID][3]);
   var xUses1=eval(Objs[hintMobID][13]);
   var xUses2=eval(Objs[hintMobID][14]);
   var xProfID=-1;
   if (Objs[hintMobID][25]) { xProfID=eval(Objs[hintMobID][25]); }
   xData=xData + "Уровень:&nbsp;" + xLevel + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
   if ((hintMobID==65) || (hintMobID==66)) {
      xData=xData + "Класс:&nbsp;Рука&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
   } else {
      xData=xData + "Класс:&nbsp;" + ObjectClasses[xObjCls] + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
   }
   if (xObjCls==0) {
      if ((hintMobID!=65) && (hintMobID!=66)) { xData=xData + "Тип:&nbsp;" + AttackClasses[xObjSubCls]; }
   } else if (xObjCls==1) {
      xData=xData + "Тип:&nbsp;" + DefenceClasses[xObjSubCls];
   } else if (xObjCls==3) {
      xData=xData + "Тип:&nbsp;" + MagicClasses[xObjSubCls];
   } else if (xObjCls==5) {
      xData=xData + "Тип:&nbsp;" + HouseClasses[xObjSubCls];
   }
   if ((hintMobID==6) || (hintMobID==33)) { xData=xData + "<br /><font color=\"red\"><b>Оружие удалено из игры. Если у вас есть это оружие,<br />пожалуйста, сдайте его в магазин:<br />его принимают по номинальной стоимости!</b></font><br />"; }
   xData=xData + "</div>";
   var xSkillsPlus="";
   var xKffStr="+";
   for (var xi=0; xi<Skills.length; xi++) {
      xNum=eval(Objs[hintMobID][4 + xi]);
      if (xNum!=0) {
         if (xSkillsPlus!="") { xSkillsPlus=xSkillsPlus + ", "; }
         if (xNum<0) { xKffStr=""; } else { xKffStr="+"; }
         xSkillsPlus=xSkillsPlus + Skills[xi] + "&nbsp;" + xKffStr + xNum;
      }
   }
   var xKffStr="+";
   for (var xi=0; xi<Lives.length; xi++) {
      xNum=eval(Objs[hintMobID][15 + xi]);
      if (xNum!=0) {
         if (xSkillsPlus!="") { xSkillsPlus=xSkillsPlus + ", "; }
         if (xNum<0) { xKffStr=""; } else { xKffStr="+"; }
         xSkillsPlus=xSkillsPlus + Lives[xi] + "&nbsp;" + xKffStr + xNum;
      }
   }
   if (xObjCls==0) {
      if (xSkillsPlus!="") { xSkillsPlus=xSkillsPlus + "<br />"; }
      if (IsFloatObj(hintMobID)==1) {
         xSkillsPlus=xSkillsPlus + "Использует способности владельца";
      } else { xSkillsPlus=xSkillsPlus + "Использует:&nbsp;" + Skills[xUses1] + ",&nbsp;" + Skills[xUses2]; }
   } else if ((xObjCls==6) && (xProfID>=0)) {
      xSkillsPlus="Профессия:&nbsp;" + Profs[xProfID];
   }
   if (xSkillsPlus!="") { xData=xData + "<div class=\"hintText\">" + xSkillsPlus + "</div>"; }
   if ((xObjCls!=4) && (xObjCls!=7) && (hintMobID!=50)) {
      xData=xData + "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td class=\"hintSkills\">";
      for (var xi=0; xi<3; xi++) {
         if ((xObjCls==3) && (xObjSubCls!=4) && (xi==0)) { continue; }
         if ((xObjCls==1) && (xi>0)) { break; }
         if ((xObjCls==2) && (xi>0)) { break; }
         if ((xObjCls==5) && (xi>0)) { break; }
         if ((xObjCls==6) && (xi>0)) { break; }
         if ((xObjCls==7) && (xi>0)) { break; }
         xStr=Objs[hintMobID][18 + xi];
         if ((xObjCls==3) && (xObjSubCls==4)) {
            xStr=GetStatByIndex(Objs[hintMobID][27], xi);
            if (xStr==0) { continue; } else { xStr="+" + xStr + "%"; }
         }
         if ((xObjCls==1) && (xObjSubCls!=8)) {
            xData=xData + "Защита: " + xStr;
         } else if (xObjCls==2) {
            if (xObjSubCls==1) { xData=xData + "Сила: " + xStr; }
         } else if ((xObjCls==5) && (xObjSubCls!=9)) {
            xData=xData + "Вместимость: " + xStr;
         } else if ((xObjCls==5) && (xObjSubCls==9)) {
            xData=xData + "Разрешено строительство";
         } else if (xObjCls==6) {
            xData=xData + "Емкость: " + xStr;
         } else {
            xData=xData + Weaps[xi] + ": " + xStr;
         }
         if (xi<2) { xData=xData + "</td><td class=\"hintSkills\">"; }
      }
      xData=xData + "</td></tr></table>";
   } else if (hintMobID==50) {
      xData=xData + "<span style=\"font-size: 9px;\">Зависит от способностей владельца</span>";
   }
   if (Objs[hintMobID][33]!="") {
      xData=xData + "<span style=\"font-size: 10px;\">";
      xStr=Objs[hintMobID][33];
      xArr=xStr.split(",");
      for (var xi=0; xi<xArr.length; xi++) {
         if (xArr[xi]!="0/0") {
            xStr=xArr[xi]; xArr2=xStr.split("/");
            xData=xData + PlusInfo[xi] + ": +" + xArr2[0];
            if ((xi!=4) && (xi!=7) && (xi!=8)) { xStr=xStr + "%"; }
            else if (xi==7) { xData=xData + "(" + PlusEffects[Objs[hintMobID][39]] + ")"; }
            xData=xData + ". Ходов: " + xArr2[1] + "<br />";
         }
      }
      xData=xData + "</span>";
   }
   if (hintOBInfo!="") {
      if (xObjCls==7) {
         xData=xData + "<div style=\"font-size: 9px\">";
         xData=xData + "Вес:&nbsp;" + hintOBInfo;
         xData=xData + "</div>";
      } else {
         xArr=hintOBInfo.split(";");
         xData=xData + "<div style=\"font-size: 9px; height: 72px;\">";
         xData=xData + "<span style=\"white-space: nowrap;\">Прочность:&nbsp;" + xArr[0] + "&nbsp;&nbsp;&nbsp;Вероятность&nbsp;поломки:&nbsp;1/" + Objs[hintMobID][23] + "&nbsp;&nbsp;&nbsp;</span>";
         if ((Objs[hintMobID][30]!="") && (!isNaN(Objs[hintMobID][30]))) {
            xStr="Все профессии"; if (Objs[hintMobID][32]>=0) { xStr=Profs[Objs[hintMobID][32]]; }
            xData=xData + "<br /><img src=\""+ImgDir+"o/" + Objs[hintMobID][30] + "min.jpg\" width=\"48\" height=\"48\" alt=\"\" border=\"\" style=\"margin-top: 4px; margin-right: 4px;\" align=\"left\" />Чинит: " + xStr + "<br />Ремонт единицы прочности требует:<br />" + Objs[hintMobID][31] + " ед. веса";
         }
         xData=xData + "</div>";
         if ((xArr[1]) && (xArr[1]!="") && (xArr[1]!="undefined")) {
            xData=xData + "<div style=\"font-size: 9px; height: 72px;\">";
            xData=xData + "<span style=\"white-space: nowrap;\">Магический заряд:&nbsp;" + xArr[1] + "&nbsp;&nbsp;&nbsp;Срабатывание&nbsp;магии:&nbsp;1/" + Objs[hintMobID][35] + "</span>";
            if ((Objs[hintMobID][36]!="") && (!isNaN(Objs[hintMobID][36]))) {
               xStr="Все профессии"; if (Objs[hintMobID][38]>=0) { xStr=Profs[Objs[hintMobID][38]]; }
               xData=xData + "<br /><img src=\""+ImgDir+"o/" + Objs[hintMobID][36] + "min.jpg\" width=\"48\" height=\"48\" alt=\"\" border=\"\" style=\"margin-top: 4px; margin-right: 4px;\" align=\"left\" />Заряжает: " + xStr + "<br />Перезарядка единицы требует:<br />" + Objs[hintMobID][37] + " ед. веса";
            }
            xData=xData + "</div>";
         }
      }
   }
   hintIsShowUser=0;
   xEl.innerHTML=xData;
   xEl=document.getElementById("hintWnd");
   xEl.style.left=hintLeft + "px";
   xEl.style.top=hintTop + "px";
   xEl.style.display="block";
}

function ShowMapHint() {
   clearTimeout(hintTimer);
   hintTimer=null;
   if (msgShown==1) { return; }
   var xEl=document.getElementById("hintWndA");
   if (xEl==null) { return; }
   if (hintACode>808517631) {
      if ((!gamefrm.AreaDsks) || (!gamefrm.AreaDsks[hintMobID])) { return; }
   }
   hintShown=1;
   var xData="";
   var xCode=gamefrm.GetOverColor(hintACode);
   if (hintACode>808517631) {
      xData="<div class=\"hintName\">" + gamefrm.AreaDsks[hintMobID][10] + "</div>";
      xData=xData + "<div style=\"font-size: 9px\">";
      xData=xData + "Владелец:&nbsp;" + gamefrm.AreaDsks[hintMobID][8];
      var xCls=gamefrm.AreaDsks[hintMobID][12];
      var xCNm=gamefrm.AreaDsks[hintMobID][11];
      var xCUNm=gamefrm.AreaDsks[hintMobID][9];
      xCNm=xCNm.replace(/ /gi, "&nbsp;");
      xCUNm=xCUNm.replace(/ /gi, "&nbsp;");
      if (xCls!=0) {
         xData=xData + "<br />" + CityClasses[xCls];
         if (xCNm!="") { xData=xData + ":&nbsp;" + xCNm; }
         if (xCUNm!="") { xData=xData + "<br />" + CityUClasses[xCls] + ":&nbsp;" + xCUNm; }
      }
      xData=xData + "<br />" + Areas[xCode];
      xData=xData + "</div>";
   } else {
      xData="<div class=\"hintName\">" + Areas[xCode] + "</div>";
   }
   xEl.innerHTML=xData;
   xEl=document.getElementById("hintWnd");
   xEl.style.left=hintLeft + "px";
   xEl.style.top=hintTop + "px";
   xEl.style.display="block";
}

function GetScrollTop() {
  return ((gamefrm.document.documentElement && gamefrm.document.documentElement.scrollTop) || (gamefrm.document.body && gamefrm.document.body.scrollTop));
}

function SetObjHintXY(e) {
   hintLeft=e.x; hintTop=e.y;
   if (isNaN(hintLeft)) { hintLeft=e.pageX; hintTop=e.pageY; }
   hintLeft=hintLeft + 138;
   hintTop=hintTop + 116;
   if (e.layerX) { hintTop=hintTop - GetScrollTop(); }
   if ((hintLeft + 300)>document.body.clientWidth) {
      hintLeft = document.body.clientWidth - 300;
   }
}

function SetMobHint(e, ALID, AImgID, AObj) {
   if (msgShown==1) { return; }
   if (strpntShown==1) { return; }
   if (HintAllowed!=1) { return; }
   if ((ALID==hintMobID) && (hintTimer!=null)) { return; }
   if (!gamefrm.Mobs) { return; }
   if (!gamefrm.Mobs[ALID]) { return; }
   hintMobID=ALID;
   if (e.layerX) { hintLeft=eval(gamefrm.Mobs[ALID][3]) + 254; }
   else { hintLeft=eval(gamefrm.Mobs[ALID][3]) + 138; }
   hintTop=eval(gamefrm.Mobs[ALID][4]) + 116;
   if (hintTimer!=null) { clearTimeout(hintTimer); }
   hintTimer=setTimeout("ShowMobHint()", 1000);
}

function SetObjHint(e, AID, AImgID, AObj) {
   if (msgShown==1) { return; }
   if (strpntShown==1) { return; }
   if (HintAllowed!=1) { return; }
   if ((AID==hintMobID) && (hintShown==0)) { SetObjHintXY(e); return; }
   if ((AID==hintMobID) && (hintTimer!=null)) { return; }
   if (!Objs) { return; }
   if (!Objs[AID]) { return; }
   hintMobID=AID;
   hintOBInfo=ParseOBInfo(AObj);
   SetObjHintXY(e);
   if (hintTimer!=null) { clearTimeout(hintTimer); }
   hintTimer=setTimeout("ShowObjHint()", 1000);
}

function SetObjHintM(e, AID, AImgID, AObj, AUserName, AUserID, AUserPic, AUserPrice) {
   hintUserName=AUserName;
   hintUserID=AUserID;
   hintUserPic=AUserPic;
   hintPrice=AUserPrice;
   hintIsShowUser=1;
   SetObjHint(e, AID, AImgID, AObj);
}

function SetMapHint(e, AID, ACode) {
   if (msgShown==1) { return; }
   if (strpntShown==1) { return; }
   if (HintAllowed!=1) { return; }
   if ((AID==hintMobID) && (hintShown==0)) { SetObjHintXY(e); return; }
   if ((AID==hintMobID) && (hintTimer!=null)) { return; }
   if (ACode>808517631) {
      if (!gamefrm.AreaDsks) { return; }
      if (!gamefrm.AreaDsks[AID]) { return; }
   }
   hintMobID=AID;
   hintACode=ACode;
   SetObjHintXY(e);
   if (hintTimer!=null) { clearTimeout(hintTimer); }
   hintTimer=setTimeout("ShowMapHint()", 1000);
}

function HideHint() {
   if (hintTimer!=null) {
      clearTimeout(hintTimer);
      hintTimer=null;
   }
   hintMobID=0;
   if (msgShown==1) { return; }
   if (strpntShown==1) { return; }
   var xEl=document.getElementById("hintWndA");
   if (xEl!=null) {
      hintShown=0;
      xEl.innerHTML="";
      xEl=document.getElementById("hintWnd");
      xEl.style.left="0px";
      xEl.style.top="0px";
      xEl.style.display="none";
   }
}

function EnableHint() {
   HintAllowed=1;
}

function DisableHint() {
   HideHint();
   HintAllowed=0;
}

function ShowStrPntWnd(AX, AY) {
   if (msgShown==1) { return; }
   if (hintShown==1) { HideHint(); }
   var xEl=document.getElementById("hintWndA");
   if (xEl==null) { return; }
   hintShown=1;
   strpntShown=1;
   //var xData="<img src=\""+StylesDir+"d.jpg\" width=\"75\" height=\"150\" border=\"0\" alt=\"\" usemap=\"#strkpnts\" />";
   var xData=StrPntTbl;
   xEl.innerHTML=xData;
   xEl=document.getElementById("hintWnd");
   AX=AX - 37;
   AY=AY - 75;
   if (AY<0) { AY=0; }
   if (AY>250) { AY=250; }
   xEl.style.left=(AX + 138) + "px";
   xEl.style.top=(AY +116) + "px";
   xEl.style.display="block";
}

function SetStrkPntStyle(ACode, AStyle) {
   var xEl=document.getElementById("spd" + ACode);
   if (xEl!=null) {
      xEl.style.backgroundColor="#BEA37B";
   }
}

var msgFunc="";
var msgResult=0;
var msgValue1="";
var msgValue2="";
var msgShown=0;

function alert1(AMsg) {
   ShowMsgWnd("Сообщение", AMsg, "", 0);
}

function ShowMsgWnd(AMsgTitle, AMsg, AFunc, ACancel) {
   if (msgShown==1) { return; }
   HideHint();
   msgShown=1;
   msgFunc=AFunc;
   var xDEl=document.getElementById("disabler");
   xDEl.style.left="0px";
   xDEl.style.top="0px";
   xDEl.style.width=document.body.clientWidth + "px";
   xDEl.style.height=document.body.clientHeight + "px";
   xDEl.style.display="block";

   AMsg=AMsg + "<br /><br /><br /><div style=\"text-align: center; width: 300px;\"><input type=\"button\" value=\"  OK  \" class=\"submit\" onclick=\"HideMsgWnd(0);\" />";
   if (ACancel==1) { AMsg=AMsg + "&nbsp;&nbsp;&nbsp;<input type=\"button\" value=\"  Отмена  \" class=\"submit\" onclick=\"HideMsgWnd(1);\" />"; }
   AMsg=AMsg + "</div>";
   var xEl=document.getElementById("hintWndA");
   xEl.innerHTML=AMsg;
   xEl=document.getElementById("hintWndT");
   xEl.innerHTML=AMsgTitle;
   xEl.style.display="block";
   xEl=document.getElementById("hintWnd");
   xEl.style.left=(Math.round(document.body.clientWidth / 2) - 150) + "px";
   xEl.style.top=(Math.round(document.body.clientHeight / 2) - 100) + "px";
   xEl.style.display="block";
}

function HideMsgWnd(ACode) {
   var xDEl=document.getElementById("disabler");
   xDEl.style.display="none";
   var xEl=document.getElementById("hintWnd");
   xEl.style.display="none";
   xEl=document.getElementById("hintWndT");
   xEl.style.display="none";
   xEl=document.getElementById("msgValue1");
   if (xEl!=null) { msgValue1=xEl.value; }
   xEl=document.getElementById("msgValue2");
   if (xEl!=null) { msgValue2=xEl.value; }
   if ((msgFunc!="") && (ACode!=1)) { eval(msgFunc); }
   msgFunc="";
   msgResult=0;
   msgValue1="";
   msgValue2="";
   msgShown=0;
}

var heroName="";
var heroID=0;
var heroSID=0;
var heroLV=1;
var heroEN=0;
var heroHP=0;
var heroEX=0;
var heroMS=0;
var heroMG=0;
var heroLS=0;
var heroLG=0;
var heroPID=0;
var heroRLVL=0;

function setHeroInfo(AData) {
   if (AData=="::") { return; }
   var xDatas=AData.split(":");
   heroName=xDatas[0];
   heroID=xDatas[1];
   heroLV=xDatas[2];
   if (!isNaN(xDatas[3])) { heroSID=xDatas[3]; }
   if ((heroName!="") && (IsChat==0)) { chatInit(); }
   else if ((heroName=="") && (IsChat==1)) { chatClose(); }
   var xEl=document.getElementById("heroname");
   xEl.innerHTML=xDatas[0] + " (" + heroLV + ")";
}

function setHeroState(AState, AData1, AData2) {
   var xEl=document.getElementById(AState);
   if (xEl==null) { return; }
   if ((AState=="heroms") || (AState=="heromg")) {
      xEl.innerHTML="&nbsp;" + AData1 + "&nbsp;&nbsp;&nbsp;";
      if (AState=="heroms") { heroMS=AData1; } else { heroMG=AData1; }
   } else if (AState=="herohp") {
      var xHl=GetHealthLength(AData1, 40);
      var xHlC=GetHealthColor(xHl, 40);
      var xBase=GetStatBase(AData1);
      var xLoc=GetStatLocal(AData1);
      heroHP=xLoc;
      xEl.style.width=xHl + "px";
      xEl.style.backgroundColor=xHlC;
      xEl.title="Здоровье: " + xLoc + " из " + xBase;
   } else if (AState=="heroex") {
      var xHl=GetHealthLength(AData1, 40);
      var xBase=GetStatBase(AData1);
      var xLoc=GetStatLocal(AData1);
      heroEX=xLoc;
      xEl.style.width=xHl + "px";
      xEl.title="Опыт: " + xLoc + " из " + xBase;
      xEl=document.getElementById(AState + "em");
      if (xEl!=null) { xEl.title="Опыт: " + xLoc + " из " + xBase; }
   } else if (AState=="heroen") {
      var xHl=GetHealthLength(AData1, 40);
      xEl.style.width=xHl + "px";
      var xBase=GetStatBase(AData1);
      var xLoc=GetStatLocal(AData1);
      heroEN=xLoc;
      xEl.title="Энергия: " + xLoc + " из " + xBase;
   }
}

function setHeroLive(AData) {
   if (AData=="") { return; }
   var xDatas=AData.split(":");
   var xStr=xDatas[0];
   var xData=xStr.split(",");
   setHeroState("heroen", xData[0] + ",0," + xData[1]);
   xStr=xDatas[1];
   xData=xStr.split(",");
   setHeroState("herohp", xData[0] + ",0," + xData[1]);
   xStr=xDatas[2];
   xData=xStr.split(",");
   setHeroState("heroex", xData[0] + ",0," + xData[1]);
}

function addHeroState(AState, AData1, AData2) {
   var xEl=document.getElementById(AState);
   if ((AState=="heroms") || (AState=="heromg")) {
      var xPrice=new String(xEl.innerHTML);
      xPrice=xPrice.replace(/&nbsp;/g, "");
      xPrice=eval(xPrice) + eval(AData1);
      xEl.innerHTML="&nbsp;" + xPrice + "&nbsp;&nbsp;&nbsp;";
   }
}


