// auto suggest

//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
   if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
   } else if(window.ActiveXObject) {
			return new ActiveXObject("Microsoft.XMLHTTP");
   } else {
			alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
   }
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
var place_suggest = false;
//Called from keyup on the search textbox.
//Starts the AJAX request.

var searchinput = "searchInput";
var comefrom = "";

window.setTimeout(function() {
	if(document.getElementById('searchInput')) {
		//remove complete here to stay W3C valid!
		document.getElementById('searchInput').setAttribute('autocomplete','off');
	}
},500);


function searchSuggest(mehr) {
    if(mehr != '1') {
      if(window.event) {
         evt = window.event;
         var Taste = evt.keyCode;
      } else {
				if(mehr) {
					var Taste = mehr.which;
				}
		}
		if(Taste == 40 ||  Taste == 38 || Taste == 13 ) {
				return;
		}
		mehr = '';
	 }
    if (!suggestActive) {
       if (searchReq.readyState == 4 || searchReq.readyState == 0) {
          var str =  (document.getElementById(searchinput).value);
          if(str != '') {
             suggestActive = true;
             searchReq.open("GET", '/dynamic/search_suggest.php?search=' + str +'&more='+mehr+comefrom, true); // CHANGE: /wohnen/
             searchReq.onreadystatechange = handleSearchSuggest;
             searchReq.send(null);
          } else {
             document.getElementById('search_suggest_rahmen').style.display = "none";
          }
       }
    }
}

// Handles KeyBoard
Tastencode_alt = 0;
function searchSuggestKey(event) {
       if(window.event) {
          evt = window.event;
          Tastencode = evt.keyCode;
       } else {
          if(event) {
             Tastencode = event.which;
          }
       }
       if(Tastencode == 40) {
          suggestActiveId = suggestActiveId + 1;
       }
       if(Tastencode == 38) {
          if(suggestActiveId > 0) {
             suggestActiveId = suggestActiveId - 1;
          }
       }

       if(Tastencode == 13) {
          if(document.getElementById('suggest_tbody')) {
             var ch = document.getElementById('suggest_tbody').childNodes
          } else {
             return true;
          }
          if(ch.length> 0) {
             if(ch[suggestActiveId].firstChild.innerHTML.indexOf('mehr...') >0 ) {
                searchSuggest(1);
                Tastencode_alt = 0;
                return false;
             } else {
                var t =  ch[suggestActiveId].firstChild.innerHTML;
                var t2 = ch[suggestActiveId].getAttribute("param");
                setSearch(t,t2);
                var r = Tastencode_alt == Tastencode;
                Tastencode_alt = 13;
					if(document.getElementById('searchInput') && document.getElementById('searchInput').parentNode) {
						//submit form
						document.getElementById('searchInput').parentNode.submit();
					}
                return r;
             }
          }
          Tastencode_alt = 13;
          return true;
       } else {
          Tastencode_alt = 0;
       }
	   if(Tastencode == 38 || Tastencode == 40) {
         if(document.getElementById('suggest_tbody')) {
           var ch = document.getElementById('suggest_tbody').childNodes

          if(suggestActiveId >= ch.length) suggestActiveId = ch.length -1
          for(var i = 0; i < ch.length; i++) {
          if(i == suggestActiveId) {
             ch[i].className = "suggest_link suggest_aktiv";
          } else {
             ch[i].className = "suggest_link";
          }
           }
          ch[suggestActiveId].scrollIntoView(false);
              } else {
          return false;
         }
       } else {
          suggestActiveId = 0;
       }
       return true;
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
       if (searchReq.readyState == 4) {
          suggestActive = false;
          if(Tastencode != 40 && Tastencode != 38 && Tastencode_alt != 13  ) {
				var ss = document.getElementById('search_suggest')
				var ssa = document.getElementById('search_suggest_rahmen');
				var str = searchReq.responseText.split("\n");
				if (str.length > 1) {
					ssa.style.display="block";
					if(isIE() ) {
						 if(document.FM) {
							document.FM.WAS.style.visibility = 'hidden';
							document.FM.TYP.style.visibility = 'hidden';
						}
					}
					placesuggest_final();

					if(str.length > 22) {
						ssa.style.overflow='auto';
						ssa.style.overflowX='hidden';
						ssa.style.height='400px';
						ssa.style.width='280px';
						ssa.style.border='1px solid black';
						ss.style.border='1px none black';
					} else {
						ss.style.border='1px solid black';
						ssa.style.border='1px none black';
						ssa.style.overflow='visible';
					}
					if(str.length > 22) {
						var sb = "160";
					} else {
						var sb = "184px";
					}
					ss_innerHTML ='<table id="suggest_table" cellpadding=0 cellspacing=0 border=0 style="padding:0px; margin:0px;width:'+sb+'" >';
					ss_innerHTML +='<tbody id="suggest_tbody">';
					if(str[0].toLowerCase()!=document.getElementById('searchInput').value.toLowerCase()) {
						i=-1;
						suggestActiveId=i;
						var data = document.getElementById('searchInput').value.toLowerCase();
						var suggest ='<tr onmouseover="javascript:suggestOver(this);" ';
						suggest += 'onmouseout="javascript:suggestOut(this);" ';
						suggest += 'onclick="javascript:setSearch(\''+data+'\');" ';
						var cl = (suggestActiveId == i) ? cl = "suggest_aktiv" : cl = '';
						suggest += 'class="suggest_link '+cl+'" param="'+i+'"><td param="'+i+'">'+unescape(data)+'</td>';
						suggest += '</tr>';
						ss_innerHTML += suggest ;
					}
					for(i=0; i < str.length - 1; i++) {
						//Build our element string.  This is cleaner using the DOM, but
						//IE doesn't support dynamically added attributes.
						var data = escape(str[i]);
						var suggest ='<tr onmouseover="javascript:suggestOver(this);" ';
						suggest += 'onmouseout="javascript:suggestOut(this);" ';
						suggest += 'onclick="javascript:setSearch(\''+data+'\');" ';
						var cl = (suggestActiveId == i) ? cl = "suggest_aktiv" : cl = '';
						suggest += 'class="suggest_link '+cl+'" param="'+i+'"><td param="'+i+'">'+unescape(data)+'</td>';
						suggest += '</tr>';
						ss_innerHTML += suggest ;
					}
					if(str.length == 22) {
						var cl = (suggestActiveId == i) ? cl = "suggest_aktiv" : cl = '';
						ss_innerHTML += '<tr class="suggest_link '+cl+'" ><td colspan=2><a href="#" onclick="searchSuggest(1); return false;">&nbsp;&nbsp;mehr...</a></td></tr>';
					}
					ss.innerHTML = ss_innerHTML + "</tbody></table>";
					suggestActive = false;
            }
				else {
					ssa.style.display="none";
			   }
        } 
	 }
 }

//Mouse over function
function suggestOver(div_value) {
       div_value.className = 'suggest_link_over';
}

//Mouse out function
function suggestOut(div_value) {
       div_value.className = 'suggest_link';
}

//Click function
function setSearch(val) {
		if (unescape(val) != "Keine Daten") {
			document.getElementById(searchinput).value = unescape(val); 
			document.getElementById('searchInput').parentNode.submit();
		}
		document.getElementById('search_suggest_rahmen').style.display = "none";
      document.getElementById('search_suggest').innerHTML = '';
      closesuggest();
}

function placesuggest() {
       place_suggest = true;
}

function i_getLeft(ireds_l) {
       if (ireds_l.offsetParent) return (ireds_l.offsetLeft + i_getLeft(ireds_l.offsetParent));
       else return (ireds_l.offsetLeft);
}

function i_getTop(ireds_l) {
            if (ireds_l.offsetParent) return (ireds_l.offsetTop + i_getTop(ireds_l.offsetParent));
            else return (ireds_l.offsetTop);
}

function i_getFromId(e) {
       if(e) {
          if(e.tagName == "FORM") {
             return e;
           }
          else {
             return i_getFromId(e.parentNode);
          }
       } else {
          return false;
       }
}

var map_pos_x = 0 ;
var map_pos_y = 0 ;
var lastfix = '';

function rahmen(e,was) {
    var f = (was == 1) ? '1px solid #3362A8' : '1px solid #CCCCCC';
    var h = (was == 1) ? '1px solid #3362A8' : '1px solid #FFFFFF';

    if(document.getElementById(e)) {
          document.getElementById(e).style.borderTop = f;
          document.getElementById(e).style.borderBottom = f;
          document.getElementById(e).style.borderLeft = h;
          document.getElementById(e).style.borderRight = h;
    }
}

function placesuggest_final() {
     if(place_suggest) {
		var sg = document.getElementById("search_suggest_rahmen");
		var left = i_getLeft(document.getElementById(searchinput));
		var top = i_getTop(document.getElementById(searchinput))+30;
		sg.style.top = top + "px";
		sg.style.left = left + "px";
     }
     place_suggest = false;
}

function chdup(t) {
   var a = t.name;
   var v = t.value;
   var wie = t.checked;
   for(var i = 0; i < document.BOXFORM.elements.length;i++) {
      var e = document.BOXFORM.elements[i];
      if(e.name == a && e.value == v) {
         e.checked = wie;
      }
   }
   var b = document.BOXFORM.elements[a];
}

function closesuggest() {
	if(document.getElementById('search_suggest_rahmen').style.display != "none") {
          document.getElementById('search_suggest_rahmen').style.display = "none";
    }
    if(isIE()) {
        if(document.FM) {
          document.FM.WAS.style.visibility = 'visible';
          document.FM.TYP.style.visibility = 'visible';
        }
    }
}

addAnEvent(document, 'click',closesuggest);

var suggestActive = false;
var suggestStr = '';
var suggestActiveId = 0;
var Tastencode = 0;

function addAnEvent(el, evname, func) {
		 if (el.attachEvent) { // IE
     el.attachEvent("on" + evname, func);
     } else if (el.addEventListener) { // Gecko / W3C
     el.addEventListener(evname, func, true);
     } else {
     el["on" + evname] = func;
     }
}

function isIE() {
    return (navigator.appName.indexOf("Microsoft")!=-1);
}

