var variablesDivStateSmplFrm =  false;
var isIE	= navigator.userAgent.toLowerCase().indexOf('msie') > -1;
var isOpera	= navigator.userAgent.toLowerCase().indexOf('opera') > -1;
var ver = parseInt(navigator.appVersion);
var hospiceListSmplFrm = new Array();
var selectedLineSmplFrm = -1;
var curHospiceSmplFrm = "";
var intervalIDSmplFrm;
var curKeyCodeSmplFrm = "";
var isRealHospiceSmplFrm = false;
var mouseInVarDivSmplFrm = false;
var mouseInOneOfVariantSmplFrm = false;
var iframeEl;
var hostName = "";
var inputIDSmplFrm = "srch_region";//!!ID инпута с контекстным поиском!! 
var variantsIDSmplFrm = "variantsSmplFrm";//ID выпадающего списка, дива с вариантами
var wrongDivIDSmplFrm = "wrongHospiceWarningDivSmplFrm";//ID предупреждающего об ошибке дива
var inoutDivIDSmplFrm = "hospiceDivSmplFrm";//ID дива содержащего инпут с контекстным поиском
var oneVariantIDSmplFrm = "variantSmplFrm";//"общая часть" ID одного варианта из выпадающего списка
var realEnterSmplFrm = true;
var shAllVrntsClickSmplFrm = false;
var blurFlagSmplFrm = false;
var focusTimeSmplFrm;       // 

function mouseInVariantsDivSmplFrm(flag)
{
  mouseInVarDivSmplFrm = flag;
}

window.onload = function ()
{
  /*var variantsDiv = document.getElementById("variants");
  iframeEl = document.createElement("IFRAME");
  iframeEl.frameBorder = 0;
  iframeEl.src = "javascript:false;";
  iframeEl.style.display = "none";
  iframeEl.style.position = "absolute";
  iframeEl.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
  variantsDiv.parentNode.insertBefore(iframeEl, variantsDiv);*/

  try 
  {
    onloadCmplxFrm();
  }
  catch(e)
  {  
  }

  try 
  {
    onloadOrderFrm();
  }
  catch(e)
  {  
  }
  curHospice = document.getElementById(inputIDSmplFrm).value;
  document.getElementById(inputIDSmplFrm).disabled = "";

  document.getElementById(variantsIDSmplFrm).style.width = document.getElementById(inputIDSmplFrm).clientWidth + (isIE ? 2 : 0);
  //document.getElementById(inoutDivIDSmplFrm).style.width = document.getElementById(inputIDSmplFrm).clientWidth + 2;
  document.getElementById(variantsIDSmplFrm).style.height = "300px";
  document.getElementById(variantsIDSmplFrm).style.overflow = "auto";
  document.getElementById(variantsIDSmplFrm).style.zIndex = "10000";

  if (isIE)
  {
    document.getElementsByTagName("body")[0].attachEvent("onmousedown", onUserClickSmplFrm);
  }
  else
  {
    document.getElementsByTagName("body")[0].addEventListener("mousedown", onUserClickSmplFrm, false);
  }

  hostName = document.getElementById("hostName").value;
};

function onloadSmplFrm()
{
  curHospice = document.getElementById(inputIDSmplFrm).value;
  document.getElementById(inputIDSmplFrm).disabled = "";

  document.getElementById(variantsIDSmplFrm).style.width = document.getElementById(inputIDSmplFrm).clientWidth + (isIE ? 2 : 0);
  //document.getElementById(inoutDivIDSmplFrm).style.width = document.getElementById(inputIDSmplFrm).clientWidth + 2;
  document.getElementById(variantsIDSmplFrm).style.height = "300px";
  document.getElementById(variantsIDSmplFrm).style.overflow = "auto";

  if (isIE)
  {
    document.getElementsByTagName("body")[0].attachEvent("onmousedown", onUserClickSmplFrm);
  }
  else
  {
    document.getElementsByTagName("body")[0].addEventListener("mousedown", onUserClickSmplFrm, false);
  }

  hostName = document.getElementById("hostName").value;
}

function userUpKeySmplFrm(e)
{
  e = (window.event) ? event : e;
  var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;

  var hospiceStr = document.getElementById(inputIDSmplFrm).value;
  var variantsDiv = document.getElementById(variantsIDSmplFrm);

  if (hospiceStr != curHospiceSmplFrm && hospiceStr != "" && keyCode != 38 && keyCode != 40 && keyCode != 27 && keyCode != 13 && keyCode != 39 && keyCode != 37)
  {
    curHospiceSmplFrm = hospiceStr;
    isRealHospiceSmplFrm = false;

    /*var listStr = httpRequest(hostName + "ajaxResponse.asp",
                                           "action=rgInptSrchFrmChng" +
                                           "&hospice=" + escape(String(hospiceStr).substr(0,200)));*/
                                           
    fillHospiceListSmplFrm(hospiceStr); 

    if (hospiceListSmplFrm.length > 0)
    {
      showVariantsSmplFrm()
    }
    else
    {
      hideVariantsSmplFrm();
      if (!isRealHospiceSmplFrm)
        showWarningDivSmplFrm();
    }
  }

  if (hospiceStr == "" && curHospiceSmplFrm != hospiceStr)
  {
      hideVariantsSmplFrm();
      hideWarningDivSmplFrm();
      curHospiceSmplFrm = "";
  }

  if ((keyCode == 38 || keyCode == 40)  && variablesDivStateSmplFrm && isIE)//отпущена клавиша вверх (вниз) в браузере IE
  {
    curKeyCodeSmplFrm = "";              //останавливаем периодическое выполнение ф-ии moveChoicedLineSmplFrm
    clearInterval(intervalIDSmplFrm);
  }

  if (keyCode == 27) //отпущена клавиша Esc
  {
    if (!isIE && !isOpera)//и браузер есм FireFox or something like that, то бишь любой Gecko-браузер
    {
      if (variablesDivStateSmplFrm)
      {
        hideVariantsSmplFrm();
        if (!isRealHospiceSmplFrm)
          showWarningDivSmplFrm();
      }
      else
      {
        document.getElementById(inputIDSmplFrm).value = "";
        document.getElementById(inputIDSmplFrm).blur();
      }
        
    }
  }
}

function userPressKeySmplFrm(e)
{
  e = (window.event) ? event : e;
  var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;

  if (!isIE && variablesDivStateSmplFrm && (keyCode == 38 || keyCode == 40) && !e.shiftKey)
  {
    if (keyCode == 38)//нажата клавиша вверх
    {
      if (-1 == selectedLineSmplFrm)
      {
        selectedLineSmplFrm = hospiceListSmplFrm.length - 1;
        document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
      }
      else
        if (0 == selectedLineSmplFrm)
        {
          selectedLineSmplFrm = - 1;
          document.getElementById(inputIDSmplFrm).value = curHospiceSmplFrm;
        }
        else
        {
          selectedLineSmplFrm -= 1;
          document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
        }
    }
    else//клавиша вниз
    {
      if (-1 == selectedLineSmplFrm)
      {
        selectedLineSmplFrm = 0;
        document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
      }
      else
        if (hospiceListSmplFrm.length - 1 == selectedLineSmplFrm)
        {
          selectedLineSmplFrm = - 1;
          document.getElementById(inputIDSmplFrm).value = curHospiceSmplFrm;
        }
        else
        {
          selectedLineSmplFrm += 1;
          document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
        }
    }
    colorVariantSmplFrm();
  }

  if (keyCode == 27 && (isIE || isOpera))//нажата клавиша Esc
  {
    var variantsDiv = document.getElementById(variantsIDSmplFrm);
    if (variablesDivStateSmplFrm)
    {
      hideVariantsSmplFrm();
      document.getElementById(inputIDSmplFrm).value = curHospiceSmplFrm;
      
      if (!isRealHospiceSmplFrm)
        showWarningDivSmplFrm();
    }
    else
    {     
      document.getElementById(inputIDSmplFrm).value = "";
      document.getElementById(inputIDSmplFrm).blur();
      hideWarningDivSmplFrm();
    }
    e.cancelBubble = true;
  }
}

function userDownKeySmplFrm(e)
{
  e = (window.event) ? event : e;
  var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;

  if (variablesDivStateSmplFrm && (keyCode == 38 || keyCode == 40) && isIE)
  {
    moveChoicedLineSmplFrm(keyCode);
    curKeyCodeSmplFrm = keyCode;
    intervalIDSmplFrm = setInterval('moveChoicedLineSmplFrm()', 500, '38')
  }

  if (keyCode == 13) //отпущена клавиша Enter
  {
    if (variablesDivStateSmplFrm)
    {
      if (selectedLineSmplFrm > -1)
        document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
      else
        if (!isRealHospiceSmplFrm)
          showWarningDivSmplFrm();
      hideVariantsSmplFrm();
      realEnterSmplFrm = false;
    }
  }
}

function onUserClickSmplFrm(e)
{
  var clickTime = (new Date()).getTime();
  
  if (!(shAllVrntsClickSmplFrm && ((clickTime - focusTimeSmplFrm) < 50)))//исправление неправильно поведения в Opere при обработке события onFocus для всемогущего нашего инпута с контекстным поиском 
  {
    if (variablesDivStateSmplFrm)//если список вариантов имеет место быть
    {
      if (mouseInVarDivSmplFrm)//если щелчок внутри списка вариантов
      {
        if (mouseInOneOfVariantSmplFrm)//и внутри одного из вариантов
        {
          var variantsDiv = document.getElementById(variantsIDSmplFrm);
    
          document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
          curHospiceSmplFrm = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
          isRealHospiceSmplFrm = true;
        }
      }
      else
        if (!(blurFlagSmplFrm && ((clickTime - focusTimeSmplFrm) < 50)))
          document.getElementById(inputIDSmplFrm).value = curHospiceSmplFrm;
          

      if (mouseInOneOfVariantSmplFrm || !mouseInVarDivSmplFrm)
      {
        hideVariantsSmplFrm();      
    
        if (document.getElementById(inputIDSmplFrm).value > "" && !isRealHospiceSmplFrm && !(blurFlagSmplFrm && ((clickTime - focusTimeSmplFrm) < 50)))
          showWarningDivSmplFrm();
      }    
    }
  } 

  shAllVrntsClickSmplFrm = false;
  blurFlagSmplFrm = false; 
}

function moveChoicedLineSmplFrm(keyCode)
{
  keyCode = arguments[0] ? arguments[0] : curKeyCodeSmplFrm;

  if (keyCode == 38)//нажата клавиша вверх
  {
    if (-1 == selectedLineSmplFrm)
    {
      selectedLineSmplFrm = hospiceListSmplFrm.length - 1;
      document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
    }
    else
      if (0 == selectedLineSmplFrm)
      {
        selectedLineSmplFrm = - 1;
        document.getElementById(inputIDSmplFrm).value = curHospiceSmplFrm;
      }
      else
      {
        selectedLineSmplFrm -= 1;
        document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
      }
  }
  else//клавиша вниз
  {
    if (-1 == selectedLineSmplFrm)
    {
      selectedLineSmplFrm = 0;
      document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
    }
    else
      if (hospiceListSmplFrm.length - 1 == selectedLineSmplFrm)
      {
        selectedLineSmplFrm = - 1;
        document.getElementById(inputIDSmplFrm).value = curHospiceSmplFrm;
      }
      else
      {
        selectedLineSmplFrm += 1;
        document.getElementById(inputIDSmplFrm).value = removePathFromRegion(hospiceListSmplFrm[selectedLineSmplFrm]);
      }
  }
  colorVariantSmplFrm();
}

function leaveVariantSmplFrm(numb)
{
  mouseInOneOfVariantSmplFrm = false;
}

function colorVariantSmplFrm()
{
  mouseInOneOfVariantSmplFrm = true;

  var sltdLine = (arguments[0] == undefined) ? selectedLineSmplFrm : arguments[0];
  
  for (i = 0; i < hospiceListSmplFrm.length; i++)
  {
    var variant = document.getElementById(oneVariantIDSmplFrm + i);
    if (i == sltdLine)
    {
      variant.className = "variantSmplFrm selectedVariantSmplFrm"
      selectedLineSmplFrm = i;
    }
    else
      variant.className = "variantSmplFrm"
  }
}

function httpRequest(url, params)
{
   var httpR = false;
   if (window.XMLHttpRequest && !(window.ActiveXObject))
   {
       try
       {
          httpR = new XMLHttpRequest();
       }
       catch(e)
       {
          httpR = false;
       }
   }
   else
     if(window.ActiveXObject)
     {
         try
         {
            httpR = new ActiveXObject("Msxml2.XMLHTTP");
         }
         catch(e)
         {
             try
             {
                httpR = new ActiveXObject("Microsoft.XMLHTTP");
             }
             catch(e)
             {
                httpR = false;
             }
         }
     }

   httpR.open("POST", String(url), false);
   httpR.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
   httpR.send(params);
   return String(httpR.responseText);
}

//ф-ция делает видимым список вариантов-подстановок.
function showVariantsSmplFrm()
{
  hideWarningDivSmplFrm();//сперва убираем warning div

  var variantsDiv = document.getElementById(variantsIDSmplFrm);

  variablesDivStateSmplFrm = true;
  variantsDiv.innerHTML = "";
  
  var tmpInnerHtml = "";
  
  for (var i = 0; i < hospiceListSmplFrm.length; i++)
  {
    tmpInnerHtml += "<div id='" + oneVariantIDSmplFrm + i + "' class='variantSmplFrm' onMouseOut='leaveVariantSmplFrm(" + i + ")' onMouseOver='colorVariantSmplFrm(" + i + ")'>" + markPrintLettersSmplFrm(hospiceListSmplFrm[i]) + "</div>";
  }

  variantsDiv.innerHTML = tmpInnerHtml;

  if (iframeEl)
  {
    iframeEl.style.left    = variantsDiv.style.left;
    iframeEl.style.top     = variantsDiv.style.top;
    iframeEl.style.width   = variantsDiv.offsetWidth + "px";
    iframeEl.style.height  = variantsDiv.offsetHeight + "px";
    iframeEl.style.display = "block";
    iframeEl.style.zIndex  = 100000;
  }

  variantsDiv.style.display = "block";
}

//ф-ция скрывает список вариантов-подстановок.
function hideVariantsSmplFrm()
{
  var variantsDiv = document.getElementById(variantsIDSmplFrm);

  variablesDivStateSmplFrm = false;
  variantsDiv.style.display = "none";
  if (iframeEl)
    iframeEl.style.display = "none";
  selectedLineSmplFrm = -1;
  hospiceListSmplFrm = new Array();
}

//ф-ция делает видимым блок, предупреждающий о том, что здравницы с набранным именем не существует
function showWarningDivSmplFrm()
{
  document.getElementById(inoutDivIDSmplFrm).className = "wrongHospice";
  document.getElementById(wrongDivIDSmplFrm).style.display = "block";
}

//ф-ция скрывает блок, предупреждающий о том, что здравницы с набранным именем не существует
function hideWarningDivSmplFrm()
{
  document.getElementById(inoutDivIDSmplFrm).className = "";
  document.getElementById(wrongDivIDSmplFrm).style.display = "none";
}

function realSimpleSearchFormSend(fl)
{
  /*var f = document.f;
  f.method = "get";
  f.action = hostName + "search.asp";*/
  
  if (realEnterSmplFrm)
  {
    document.getElementById(inputIDSmplFrm).disabled = true;
    document.getElementById("rg_fld").value = getRegionIDSmplFrm(document.getElementById(inputIDSmplFrm).value);

    if (fl)
      return true
    else
      document.simpleSearchForm.submit();
  } 
  else
  {
    realEnterSmplFrm = true;
    return false;
  }
}

function getRegionIDSmplFrm(val)
{
  for (var key in ableValuesSmplFrm)
  {
    if (removePathFromRegion(ableValuesSmplFrm[key]).toLowerCase() == String(val).toLowerCase())
      return String(key).replace(/\_/g, "");
  }
  
  return "";
}

function removePathFromRegion(str, direction)
{ 
  return (direction ? (str.match(/^-+/) ? str.match(/^-+/)[0] : "") : String(str).replace(/^-+/g, ""));
}

//для текстового инпута - при onBlur, если ничего не введено вставляем дефолтное зн-е dfltVal, при onFocus - убираем это же dfltVal
function setDefaultValueSmplFrm(inpt, focus, dfltVal)
{
  shAllVrntsClickSmplFrm = (focus && (inpt.value == dfltVal));
  blurFlagSmplFrm = !focus && (inpt.value == "");
  
  var hdWarn = (!focus && (inpt.value == "" || inpt.value == dfltVal));
  
  if (focus)
  {
    if (inpt.value == dfltVal)
      inpt.value = ""    
  }
  else
    if (inpt.value == "")
      inpt.value = dfltVal;
       
  /*inpt.value = () ?
                 (inpt.value == dfltVal ? "" : inpt.value)
                       :
                 (inpt.value == "" ? dfltVal : inpt.value);*/

  if (hdWarn)
    hideWarningDivSmplFrm();
  if (shAllVrntsClickSmplFrm)
    showAllVariantsSmplFrm();
    
  focusTimeSmplFrm = (new Date()).getTime();
}

function showAllVariantsSmplFrm()
{
  curHospiceSmplFrm = "";
  isRealHospiceSmplFrm = false;
  
  hospiceListSmplFrm = new Array();
    
  for (var key in ableValuesSmplFrm)
  {
    if (String(key).toLowerCase() != "popx" && String(key).toLowerCase() != "contain")//НЕчто УЖАСНОЕ творится в дебрях клиентского JavaScripta. Причем происходит это повсеместно, так сказать, кроссбраузерно, будьте осторожны!!!
    {       
      hospiceListSmplFrm.push(ableValuesSmplFrm[key]);
    }
  }
    
  if (hospiceListSmplFrm.length > 0)
  {
    showVariantsSmplFrm()
  }
}

function markPrintLettersSmplFrm(str)
{
  if (curHospiceSmplFrm == "")
    return str;

  var stStr = removePathFromRegion(str, 1);
  str = removePathFromRegion(str);
  
  try
  {
    var myRegExp = new RegExp("(" + String(curHospiceSmplFrm).replace(/\(/g, "\\(").replace(/\)/g, "\\)").replace(/\./g, "\\.").replace(/\[/g, "\\[").replace(/\]/g, "\\]") + ")", "i");
    myRegExp.test(str);
  }
  catch(e)
  {
    return str;
  }
  return stStr + (RegExp.$1 ? (String(str).replace(myRegExp, "<span class=\"boldWordPart\">" + RegExp.$1 + "</span>")) : str);
}

function fillHospiceListSmplFrm(wordPart)
{
  hospiceListSmplFrm = new Array();

  try
  {
    var myRegExp = new RegExp(String(wordPart).replace(/\\/g, "\\\\").replace(/\(/g, "\\(").replace(/\)/g, "\\)").replace(/\./g, "\\."), "gi");

    for (var key in ableValuesSmplFrm)
    {
      if (myRegExp.test(removePathFromRegion(ableValuesSmplFrm[key]))  && String(key).toLowerCase() != "popx" && String(key).toLowerCase() != "contain")
      {
        addParentSmplFrm(parentIDsSmplFrm[key]);
        
        hospiceListSmplFrm.push(ableValuesSmplFrm[key]);
        isRealHospiceSmplFrm = isRealHospiceSmplFrm || (removePathFromRegion(ableValuesSmplFrm[key]).toLowerCase() == curHospiceSmplFrm.toLowerCase());
      }
    }
  }
  catch(e)
  {  
  }  
}      

function addParentSmplFrm(parent)
{
  if (parent == "_0")
    return;
  else
  {
    var parentInList = false;
    for (i = 0; i < hospiceListSmplFrm.length; i++)
      parentInList = parentInList || (hospiceListSmplFrm[i] == ableValuesSmplFrm[parent]);
    
    addParentSmplFrm(parentIDsSmplFrm[parent]);
    
    if (!parentInList)
      hospiceListSmplFrm.push(ableValuesSmplFrm[parent]);           
  }
}