var dyn_srch_clicked_elem;
var dyn_srch_routedate;

  function dyn_srch_start()
  {
    dyn_srch_set_beginstate();
    
    if(elem=getElementByClassName('dyn_srch_value_normal','div'))
    {
      dyn_srch_blockSelectEvent(elem);
    }
    if(elem=getElementByClassName('dyn_srch_value_selected','div'))
    {
      dyn_srch_blockSelectEvent(elem);
    }
  }

  function dyn_srch_blockSelectEvent(element)
  {
	  element.onselectstart = function () { return false; } // ie
	  element.onmousedown = function () { return false; } // mozilla
  }
  
  function dyn_srch_set_beginstate(empty)
  {
    if(!empty)
      var empty = false;

    if(empty==true)
    {
      if(input = document.getElementsByTagName("input"))
      {
        for (i = 0; i < input.length; i++)
        {
          if(input[i].className=="hidden")
          {
            input[i].value = "";
          }
        }
      }

      if(divs = document.getElementsByTagName("div"))
      {
        for (i = 0; i < divs.length; i++)
        {
          if(divs[i].className=='dyn_srch_value_normal'||divs[i].className=='dyn_srch_value_selected')
          {
            divs[i].style.display = 'block';
            divs[i].className = 'dyn_srch_value_normal';
          }
        }
      }
    }
    
    dyn_srch_request();
  }
  
  function dyn_srch_click(elem,request)
  {
    var value = elem.title;
    var srch_element = elem.parentNode.id.replace("x_","");
    dyn_srch_clicked_elem = srch_element;
    if(elem.className=='dyn_srch_value_normal')
    {
      elem.className = 'dyn_srch_value_selected';
      dyn_srch_addValue(srch_element,value);
    }
    else
    {
      elem.className = 'dyn_srch_value_normal';
      dyn_srch_delValue(srch_element,value);
    }
    
    if(clicked=document.getElementById('last_clicked'))
    {
      clicked.value = srch_element;
    }

    if(!request || request==true)
    {
      dyn_srch_request();
    }
  }
  
  function dyn_srch_setPrice(elem)
  {
    var srch_element = elem.parentNode.id.replace("x_","");
    dyn_srch_clicked_elem = srch_element;  
    if(input = dyn_srch_getInputElement(srch_element))
    {
      var min = -1; var max = 0;

      if(elem.className=='dyn_srch_value_normal')
      {
        elem.className = 'dyn_srch_value_selected';
        if(input.value!='')
        {
          values = input.value.split('||');
          min = parseInt(values[0]);
          max = parseInt(values[1]);
        }
        
        selected = elem.title.split('||');        
        
        if(Math.min(selected[0],min) < min || min==-1) {
          min = parseInt(selected[0]);
        }
        if(Math.max(selected[1],max) > max) {
          max = parseInt(selected[1]);
        }
      }
      else
      {
        elem.className='dyn_srch_value_normal';
        if(srch = elem.parentNode)
        {
          for( var x = 0; srch.childNodes[x]; x++ )
          {
            if(srch.childNodes[x].title && srch.childNodes[x].className=='dyn_srch_value_selected')
            {
              var value = srch.childNodes[x].title.split('||');
              if(Math.min(value[0],min) < min || min==-1) {
                min = parseInt(value[0]);
              }
              if(Math.max(value[1],max) > max) {
                max = parseInt(value[1]);
              }
            } 
          }
        }
      }
      
      input.value = ((max>0) ? min + "||" + max : '');
      
      dyn_srch_request();
      
      if(srch = elem.parentNode)
      {
        for(var i=0;srch.childNodes[i];i++)
        {
          if(srch.childNodes[i].title)
          {
            var current = srch.childNodes[i].title.split('||');
            
            if(parseInt(current[0])>=min && parseInt(current[1])<=max)
            {
              srch.childNodes[i].className = 'dyn_srch_value_selected';
            } else {
              srch.childNodes[i].className = 'dyn_srch_value_normal';
            }
          }
        }
      }
    }
  }
  
  function dyn_srch_setRoute(elem)
  {
    dyn_srch_clicked_elem = elem;
    dyn_srch_request();
  }
  
  function dyn_srch_setRecreationObject(elem)
  {
    dyn_srch_clicked_elem = elem;
    dyn_srch_request();
  }
  
  function get_dyn_srch_routedate()
  {
    if (dyn_srch_routedate != "")
    {
      if (elem = document.getElementById("srch_route"))
      {
        if (elem.name == "srch_routedate")
        {
          dyn_srch_routedate = elem.value;
        }
      }
    }
  }
  
  function dyn_srch_setRooms(elem)
  {
    var srch_element = elem.parentNode.id.replace("x_","");
    dyn_srch_clicked_elem = srch_element;  
    if(input = dyn_srch_getInputElement(srch_element))
    {
      var min = -1; var max = 0;

      if(elem.className=='dyn_srch_value_normal')
      {
        elem.className = 'dyn_srch_value_selected';
        if(input.value!='')
        {
          values = input.value.split('||');
          min = parseInt(values[0]);
          max = parseInt(values[1]);
        }
        
        selected = elem.title;
        
        if(Math.min(selected,min) < min || min==-1) {
          min = parseInt(selected);
        }
        if(Math.max(selected,max) > max) {
          max = parseInt(selected);
        }
      }
      else
      {
        elem.className='dyn_srch_value_normal';
        if(srch = elem.parentNode)
        {
          for( var x = 0; srch.childNodes[x]; x++ )
          {
            if(srch.childNodes[x].title && srch.childNodes[x].className=='dyn_srch_value_selected')
            {
              var value = srch.childNodes[x].title;
              if(Math.min(value,min) < min || min==-1) {
                min = parseInt(value);
              }
              if(Math.max(value,max) > max) {
                max = parseInt(value);
              }
            }
          }
        }
      }
      
      input.value = ((max>0) ? min + "||" + max : '');
      
      dyn_srch_request();
      
      if(srch = elem.parentNode)
      {
        for(var i=0;srch.childNodes[i];i++)
        {
          if(srch.childNodes[i].title)
          {
            var current = srch.childNodes[i].title;
            
            if(parseInt(current)>=min && parseInt(current)<=max)
            {
              srch.childNodes[i].className = 'dyn_srch_value_selected';
            } else {
              srch.childNodes[i].className = 'dyn_srch_value_normal';
            }
          }
        }
      }
    }
  }
  
  function dyn_srch_addValue(srch_element,value)
  {
    if(input = dyn_srch_getInputElement(srch_element))
    {
      var old_value = input.value;
      var old_values = input.value.split(',');
      var add_value = true;

      for (var i=0; i<old_value.length; i++)
      {
        if ((old_values[i] == value))
        {
          add_value = false;
        }
      }

      if (add_value == true)
      {
        if(old_value.length>0)
        {
          input.value += ",";
        }
        input.value += value;
      }
    }
  }
  
  function dyn_srch_delValue(srch_element,value)
  {
    if(input = dyn_srch_getInputElement(srch_element))
    { 
      var old_values = input.value.split(',');
      input.value = '';
        
      for (var i=0; i<old_values.length; i++)
      {
        if ((old_values[i] != value) && (old_values[i] != ''))
        {
          if (input.value != '')
          {
            input.value += ",";
          }
          input.value += old_values[i];
        }
      }
    }
  }
  
  function dyn_srch_getInputElement(elementName)
  {
    if(input = document.getElementsByTagName("input"))
    {
      for (i = 0; i < input.length; i++)
      {
        if(input[i].name==elementName)
        {
          return input[i];
        }
      }
    }
    return false;
  }
  
  function dyn_srch_request()
  {
    if(window.XMLHttpRequest || window.ActiveXObject)
    {
      var params = 'uri=' + obtainURI();
      
      get_dyn_srch_routedate();
      params += (dyn_srch_routedate != "" ? "&routedateCheck="+encodeURIComponent(dyn_srch_routedate) : "");
      
      if(input = document.getElementsByTagName("input"))
      { 
        for (i = 0; i < input.length; i++)
        {
          var value = encodeURIComponent(input[i].value);
        
          if((input[i].name.indexOf('srch_')!=-1) 
            && (value.length>0) 
            && ((input[i].className.indexOf('hidden')!=-1) 
            || input[i].className=='hidden noempty'))
          {
            params += "&" + input[i].name + "=" + value;
          } 
          else if (input[i].className=='search_criteria')
          {
            switch(input[i].type)
            {
              case "checkbox":
                if (input[i].checked == true)
                {
                  params += "&" + input[i].name + "=" + value;
                }
                break
              case "radio":
                if (input[i].selected == true)
                {
                  params += "&" + input[i].name + "=" + value;
                }
                break
              case "text":
              case "submit":
              case "reset":
              case "button":
              default:
                params += "&" + input[i].name + "=" + value;
                break
            }
          }
        }
      }
      if(typediv = document.getElementById('dyn_srch_buildingtype'))
      {
        params += "&buildingtype=" + typediv.innerHTML;
      }
      
      var url = 'frontend-g4/tools/dyn_srch.php';
      if (document.location.href.indexOf(getBaseHref().href) ==- 1)
      {
        var fullurl = document.location.protocol + '//' + document.location.hostname + '/';
        if (document.location.pathname && document.location.pathname.indexOf(obtainURI()) != -1)
        {
          paths = document.location.pathname.split('/');
          for (var i = 0; i < paths.length; i++)
          {
            if (paths[i].trim() != '')
            {
              fullurl += paths[i] + '/';
              if (paths[i] == obtainURI())
                break;
            }
          }
        }
        
        url = fullurl + url;
      }
        
      remoteRequest(url ,params,'dyn_srch_request_after');
    }
  }
  
  function dyn_srch_request_after()
  {
    if (http_request && http_request.readyState == 4)
    {
      if (http_request.status == 200 && http_request.responseText && http_request.responseText.trim() != '')
      {
        var values = http_request.responseText.split("::");
        var update_clicked_element = false;
        
        var input = dyn_srch_getInputElement(dyn_srch_clicked_elem);
        if(input && input.value.length<1)
        {
          update_clicked_element = true;
        }
        
        for (var i = 0; i < values.length; i++)
        {
          if(values[i].trim().length>0)
          {
            var current = values[i].split("==");

            if((current[0]!=dyn_srch_clicked_elem || update_clicked_element==true) 
              && (srch_area = document.getElementById("x_" + current[0])))
            {
              var items = current[1].split("++");
              var childNodes = srch_area.getElementsByTagName('div');

              for (var c=0; c<childNodes.length; c++)
              {
                for (var j=0; j<items.length; j++)
                {
                  var number = 0;
                  var item   = '__' + items[j];
                  
                  if(item.indexOf('__' + childNodes[c].title + ">>")!=-1)
                  {
                    var cur_item = items[j].split(">>");
                    number = cur_item[1];
                    break; 
                  }
                }
                
                if(span = childNodes[c].getElementsByTagName('span'))
                {
                  span[0].innerHTML = "(" + number + ")";
                }
                childNodes[c].style.display = (number==0) ? 'none' : 'block';
                if (number == 0) {
                  dyn_srch_delValue(current[0],childNodes[c].title);
                  childNodes[c].className = 'dyn_srch_value_normal';
                }
              }
            }
            else if (srch_area = document.getElementById(current[0]))
            {
              //extra check to ensure the element really has got the correct id (needed for ie & opera)
              if(srch_area.id && (srch_area.id==current[0]))
              {
                var items = current[1].split("++");
                
                if (items.length <= 1)
                {
                  srch_area.disabled = true;
                }
                else
                {
                  srch_area.disabled = false;
                }
              }
            }
          }
        }
      }
    }
  }
