/* boc-group.com JS
 * (C) Copyright 2008 BOC Group
 *------------------------------------------------*/

var isLangSelectExpanded = false;
var dontActOnLangSelect = false;

var isLoginExpanded = false;


// -----------------
// https://sites.google.com/a/van-steenbeek.net/archive/explorer_domparser_parsefromstring

if(typeof(DOMParser) == 'undefined') {
 DOMParser = function() {}
 DOMParser.prototype.parseFromString = function(str, contentType) {
  if(typeof(ActiveXObject) != 'undefined') {
   var xmldata = new ActiveXObject('MSXML.DomDocument');
   //var xmldata = new ActiveXObject('Microsoft.XMLDOM');
   xmldata.async = false;
   xmldata.loadXML(str);
   return xmldata;
  } else if(typeof(XMLHttpRequest) != 'undefined') {
   var xmldata = new XMLHttpRequest;
   if(!contentType) {
    contentType = 'application/xml';
   }
   xmldata.open('GET', 'data:' + contentType + ';charset=utf-8,' + encodeURIComponent(str), false);
   if(xmldata.overrideMimeType) {
    xmldata.overrideMimeType(contentType);
   }
   xmldata.send(null);
   return xmldata.responseXML;
  }
 }
}
// -----------------


function toggleLangSelect() {
  if(dontActOnLangSelect) {
    return;
  }
  if(isLangSelectExpanded){
    hideLangSelect();
  } else {
    showLangSelect();
  }
}

function showLangSelect(){
  //var divLangSelStyle = document.getElementById('slidedown_lang_menu').style;  
  //divLangSelStyle.display = 'block';
  //alert("showLangSelect " + isLangSelectExpanded);
  if(isLangSelectExpanded){
    return;
  }
  //scriptaculous:
  //Effect.SlideDown('slidedown_lang_menu', { duration: 0.8});
  
  //mootools
  myVerticalSlide.slideIn();
    
  setTimeout("showLangSelectCloseIcon()", 800);
  isLangSelectExpanded = true;
}

function showLangSelectCloseIcon(){
  $('close_lang_select').style.display = 'block';
  $('lang_select_arrow').style.display = 'none';
}

function hideLangSelect(){
  //var divLangSelStyle = document.getElementById('slidedown_lang_menu').style;  
  //divLangSelStyle.display = 'none';
  //alert("hideLangSelect " + isLangSelectExpanded);
  if(!isLangSelectExpanded){
      return;
  }
  //scriptaculous:
  //Effect.SlideUp('slidedown_lang_menu', { duration: 0.4} );
  
  //mootools
  myVerticalSlide.slideOut();
  
  $('close_lang_select').style.display = 'none';
  $('lang_select_arrow').style.display = 'block';
  isLangSelectExpanded = false;
}

function goToCountry(url){
  dontActOnLangSelect = true;
  window.location.href = url;
}

function toggleLoginSelect() {
  if(isLoginExpanded){
    loginVerticalSlide.slideOut();
    isLoginExpanded = false;
  } else {
    loginVerticalSlide.slideIn();
    isLoginExpanded = true;
  }
}


function searchInputKeyPressed(event){
  //alert("event " + event.keyCode);
  /*
  key codes:
  13 enter
  27 esc
  38 up
  40 down
  */
  var aList = document.getElementById("tx_mhajaxsearch_ul");
  //alert("aList=" + aList);
  
  //========== escape
  if(event.keyCode == 27){
    var aInput = document.getElementById("tx_mhajaxsearch_q");
    if(aInput){
      var aVal = aInput.value;
      if(aVal == "Search" || aVal == "Suche" || aVal == "BÃºsqueda" || aVal == "Recherche"){
        aInput.value = "";
      }
    }
  }
  
  if(aList && aList.hasChildNodes()){
    //alert("size " + aList.childNodes.length + " event " + event.keyCode + " aList.firstChild.className" + aList.firstChild.className);
    
    //========== go down
    if(event.keyCode == 40){
      isSelected = false;
      for(i = 0; i < aList.childNodes.length; i++){
        if(aList.childNodes[i].className == "active"){
          isSelected = true;
          if(i < (aList.childNodes.length - 1)){
            aList.childNodes[i].className = ""; 
            aList.childNodes[i+1].className = "active";
          }
          break;
        }
      }
      if(!isSelected){
        aList.firstChild.className = "active";
      }
      
    }
    
    //========== go up
    if(event.keyCode == 38){
      isSelected = false;
      for(i = 0; i < aList.childNodes.length; i++){
        if(aList.childNodes[i].className == "active"){
          isSelected = true;
          if(i > 0){
            aList.childNodes[i].className = ""; 
            aList.childNodes[i-1].className = "active";
          }
          break;
        }
      }
      if(!isSelected){
        aList.lastChild.className = "active";
      }
      
    }
    
    //========== escape
    if(event.keyCode == 27){
      var aInput = document.getElementById("tx_mhajaxsearch_q");
      aInput.className="inactive"; 
      var result = document.getElementById("tx_mhajaxsearch_result");
      result.style.display = "none";
      result.innerHTML = "";
      
      //hide flash banner (slideshow) on start page
      //var flashObj = document.getElementById('tx_slideshow_pi1'); 
      //if(flashObj != null) { flashObj.style.visibility = 'visible'; }
      
      return false;  
    }
    
    //========== enter
    if(event.keyCode == 13){
    
      //is one entry in the list selected?
      for(i = 0; i < aList.childNodes.length; i++){
        if(aList.childNodes[i].className == "active"){
          var activeNode = aList.childNodes[i];
          location.href = activeNode.childNodes[0].childNodes[0].href;
          return;
        }
      }
      
      var aForm = document.getElementById("tx_mhajaxsearch_form");
      var aHiddenInput = document.createElement("input");
      aHiddenInput.type = "hidden";
      aHiddenInput.name = "tx_indexedsearch[sword]";
      aHiddenInput.value = document.getElementById("tx_mhajaxsearch_q").value;
      aForm.appendChild(aHiddenInput);
      //aForm.action = "/testhp/global/search/";
      aForm.action = document.getElementById("search_page_link").href;
      aForm.submit();
      return;
    }
    
  }
  
    
}


function ajaxSearch(){
  //ajaxSearchMH();
  ajaxSearchBOC()
}

function ajaxSearchMH(){
  tx_mhajaxsearch_search(xajax.getFormValues('tx_mhajaxsearch_form', 0, 'tx_mhajaxsearch_q'))
}


var xmlHttp = null;
var searchStr = "";

var tx_mhajaxsearch_lastq = 'search';
var empty_search = '<q>tx_mhajaxsearch_q=</q>';

var _q_temp = '';
var search_task;

function tx_mhajaxsearch_search_BOC(_q) {
  if(_q.length < 3) {
    return;
  }
  _q_temp = _q;
  if(search_task){
    clearTimeout(search_task);
  }
  search_task = setTimeout("tx_mhajaxsearch_search_do_BOC()", 600);
}

function tx_mhajaxsearch_search_do_BOC() {
  
  _q = _q_temp;
  
  _q = tx_mhajaxsearch_trim(_q);

  if(tx_mhajaxsearch_lastq == _q || _q == '' || _q.indexOf(empty_search) > 0) { return false; }

  if(tx_mhajaxsearch_spinner != 1) {
    document.getElementById('tx_mhajaxsearch_spinner').style.display = 'inline';
  }
  
  tx_mhajaxsearch_lastq = _q;
  //tx_mhajaxsearch_pi1Search(_q);
  sendAjaxSearchRequest(_q);
}

function ajaxSearchBOC(){
  tx_mhajaxsearch_search_BOC(document.getElementById('tx_mhajaxsearch_q').value);
}

function sendAjaxSearchRequest(_q){
  try {
      // Mozilla, Opera, Safari sowie Internet Explorer (ab v7)
      xmlHttp = new XMLHttpRequest();
  } catch(e) {
      try {
          // MS Internet Explorer (ab v6)
          xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
          try {
              // MS Internet Explorer (ab v5)
              xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
          } catch(e) {
              xmlHttp  = null;
          }
      }
  }
  if (xmlHttp) {
      var currLang = getCurrentLanguage();
      if(currLang == "en"){
        currLang = "";
      } else {
        currLang = "/" + currLang;
      }
      searchStr = _q;
      xmlHttp.open('GET', 'http://' + window.location.hostname + currLang + '/search-xml/?tx_indexedsearch[sword]=' + searchStr + '&tx_indexedsearch[results]=7', true);
      xmlHttp.onreadystatechange = handleSearchResult;
      xmlHttp.send(null);
  }
}

function handleSearchResult(){
  try {
    if (xmlHttp.readyState == 4) {
        //alert(xmlHttp.responseText);
        //var dom = xmlHttp.responseXML;
        var domParser = new DOMParser();
        //alert("1");
        //var xmlDec = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
        //var sRes = xmlHttp.responseText.substring(xmlDec.length, xmlHttp.responseText.length);
        //alert(sRes);
        var dom = domParser.parseFromString(xmlHttp.responseText, "text/xml");
        //alert("2");
        // print the name of the root element or error message
        
        if(dom.documentElement && dom.documentElement.nodeName == "parsererror"){
           //alert("3");
           //works only in firefox:
           var errStr = dom.documentElement.childNodes[0].nodeValue;
           alert("error while parsing " + errStr);
        } else if (dom.documentElement) {
           //alert("4");
           //alert("result: " + dom.documentElement.nodeName);
        } else if (dom.parseError) {
           //gives the following error in IE: "die parameterentität muss definiert werden bevor sie verwendet wird"
           alert("has child node: " + dom.hasChildNodes());   
           alert("error: " + dom.parseError);
        }

        //alert("5");

        var mainContent = getElementById(dom, "mainContent");
        //alert("mainContent: " + mainContent);
        
        var titles = new Array();
        var paths = new Array();
        var descs = new Array();
        var cnt = -1;
        var whatis = "";
        var browsebox = "";
        
        var divs = mainContent.getElementsByTagName("div");
        for (i = 0; i < divs.length; i++) {
          var classAttr = divs[i].getAttribute("class");
          if(classAttr == "tx-indexedsearch-title title"){
            //alert(divs[i] + " / " + divs[i].getAttribute("class") + " / " + divs[i].innerHTML);
            cnt++;
            titles[cnt] = divs[i].innerHTML;
          }
          if(classAttr == "tx-indexedsearch-descr descr"){
            descs[cnt] = divs[i].innerHTML;
          }
          if(classAttr == "tx-indexedsearch-pathspan"){
            paths[cnt] = divs[i].innerHTML;
          }
          if(classAttr == "tx-indexedsearch-whatis"){
            whatis = divs[i].innerHTML;
          }
          if(classAttr == "tx-indexedsearch-browsebox" && browsebox == ""){
            browsebox = divs[i].firstChild.innerHTML;
          }
          
        }
      
        var ret = "";
        ret += whatis;
        ret += ": ";
        ret += browsebox;
        ret += '<ul class="tx_mhajaxsearch_ul" id="tx_mhajaxsearch_ul">';
        
        for (i = 0; i < titles.length; i++) {
          //ret = ret + ("<div>" + titles[i] + "<br/>" + descs[i] + "</div>");
          ret += "<li><div class='tx_mhajaxsearch_pagetitle'>";
          ret += titles[i];
          ret += "</div>";
          //if(descs[i].length > 50){
          //  descs[i] = descs[i].substring(0,50);
          //}
          ret += descs[i];
          ret += "<br />";
          ret += '<span class="tx_mhajaxsearch_grey">';
          ret += paths[i];
          ret += '</span>';
          ret += "&nbsp;</li>";
        }
        
        var txtAllRes = "All results / advanced search";
        var langId = getCurrentLanguage();
        if(langId == "de" || langId == "at" || langId == "de") {
          txtAllRes = "Alle Ergebnisse / Erweiterte Suche";
        } else if(langId == "es") {
          txtAllRes = "Todos los resultados / BÃºsqueda avanzada";
        } else if(langId == "pl") {
          txtAllRes = "All results / Szukanie zaawansowane";
        }
        

        var currLang = getCurrentLanguage();
        if(currLang == "en"){
          currLang = "";
        } else {
          currLang = currLang + "/" ;
        }
        
        ret += ('<a href="' + currLang + 'search?tx_indexedsearch[sword]=' + searchStr + '" id="allResults"><strong>' + txtAllRes + '</strong></a></li>');
        ret += "</ul>";
        //document.getElementById("mainContent").innerHTML = ret;
        document.getElementById("tx_mhajaxsearch_result").innerHTML = '<span class="tx_mhajaxsearch_result">' + ret + '</span>';
        
        if(tx_mhajaxsearch_spinner != 1) { 
          document.getElementById('tx_mhajaxsearch_spinner').style.display = 'none'; 
        }
        document.getElementById('tx_mhajaxsearch_result').style.display = 'block';

    }
  } catch(e) {
    alert("Error in handleSearchResult: " + e);
  }
}



function getCurrentLanguage() {
  var url = "" + window.location;
  if(url.indexOf("/de/") > 0) {
    return "de";
  } else if(url.indexOf("/at/") > 0) {
    return "at";
  } else if(url.indexOf("/ch/") > 0) {
    return "ch";
  } else if(url.indexOf("/pl/") > 0) {
    return "pl";
  } else if(url.indexOf("/es/") > 0) {
    return "es";
  } else {
    return "en";
  }
}


//
// The function you could call from your code when looking for an id
function getElementById(domObj, id) {
  if (domObj.getElementById) {
    var test = domObj.getElementById(id);
    if (typeof(test)!== 'undefined') return test;
  }
  return findID(domObj, id);
}

//
// The recursive function which reproduces the actual
// getElementById functionality
function findID(domObj, id) {
  // use XPath:
  var query = "//*[@id='" + id + "']";
  return domObj.selectSingleNode(query);  
} 
