// Copyright Jobanova GmbH, 2005. All rights reserved.
// Author: Evgeni Krasnopolski
// Version: 1.0

var local = true;                // flag: testing from local file
var inputForm = null;
var inputField = null;           // input field element
var suggBox = null;              // suggestion box (DIV)
var suggVisible = false;
var xmlhttp = null;
var lastHighlightedId = -1;
var suggCount = -1;
var searchDelay = 250;                // ms until search is started
var fixedwidth = -1;                // if -1, width is calculated automatically; can be set in the setup function

var highlightfg = "white";
var highlightbg = "#7e4530";

var requestURL = "";                // URL to be called for the request. The input field value is escaped and appended
var callcounter = 0;
var datenbank="us_firms";
var lastkeyevent = -1;
var field_focused = false;

var jssubmit = true;


function doBlur(event) {
        if (!event && window.event) {
                event = window.event;
        }
        // hide suggestion box
        hideSuggBox();
}

function doFieldKeyDown(event) {
   if (!event && window.event) {
           event = window.event;
   }
    if ( lastkeyevent == 17 &&  (event.keyCode == 86 || event.keyCode == 88)){}
    else if ( lastkeyevent == 17 ||   lastkeyevent == 18){
    		lastkeyevent = event.keyCode;
    	return;
    }
    if (!xmlhttp) return;
    if(     (event.keyCode >111 && event.keyCode <124)
        ||  (event.keyCode >143 && event.keyCode <146)
        ||  (event.keyCode >15  && event.keyCode <21 ) )
    {
            lastkeyevent = event.keyCode;
        return;
    }
    //alert( "Key-Event" );
    switch (event.keyCode) {
            case 17: // Ctrl
            case 18: // Alt
            case 37: // left
            case 39: // right
            case 45: // Insert
            case 91: // Context Key
            case 91: // Windows Key
            {
             break;
            }
            case 40: {
                    // down
                    if (!suggVisible) {
                            setTimeout("doSearch()", 10);
                    } else
                        if (suggCount > 0) {
                            if (lastHighlightedId < suggCount - 1) {
                                    selectRow(lastHighlightedId + 1);
                                    showSuggBox();
                            }
                            cancelEvent(event);
                            break;
                        }
            }
            case 38: {
                    // up
                    if (suggCount > 0) {
                            if (lastHighlightedId > 0) {
                                    selectRow(lastHighlightedId - 1);
                                    showSuggBox();
                            }
                            cancelEvent(event);
                            break;
                    }
            }
            case 33: {
                    // PgUp
                    if (suggVisible && (suggCount > 0)) {
                            selectRow(0);
                            cancelEvent(event);
                            break;
                    }
            }
            case 34: {
                    // PgDn
                    if (suggVisible && (suggCount > 0)) {
                            selectRow(suggCount - 1);
                            cancelEvent(event);
                            break;
                    }
            }
            case 35: {
                    // End
                    if (suggVisible && (suggCount > 0)) {
                            selectRow(suggCount - 1);
                            cancelEvent(event);
                            break;
                    }
            }
            case 36: {
                    // Home
                    if (suggVisible && (suggCount > 0)) {
                            selectRow(0);
                            cancelEvent(event);
                            break;
                    }
            }
            case 13: {
                    // Enter
                    if (suggVisible && (lastHighlightedId >= 0)) {
                    		inputField.blur();
                            hideSuggBox();
                            var row = document.getElementById("suggRow" + lastHighlightedId);
                            cancelEvent(event);
                            if (row) {
                                    var fx = row.onmousedown;
                                    fx();
                            }
                    }
                    break;
            }
            case 27: {
                    // Escape
                    if (suggVisible) {
                            selectRow(-1);
                            hideSuggBox();
                            cancelEvent(event);
                            // restore input value after a short time
                            backupValue = inputField.value;
                            setTimeout("inputField.value = backupValue", 180);
                    }
                    break;
            }
            default: {
                    callSearch();
            }

    }
    lastkeyevent = event.keyCode;
}


function cancelEvent( event ){
    if( event.cancelBubble ) event.cancelBubble();
    if( event.returnValue  ) event.returnValue = false;
}

function getXMLHTTP() {
  var result = false;
  if(typeof XMLHttpRequest != "undefined") {
    result = new XMLHttpRequest();
  } else {
        try {
                result = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
                try {
                        result = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (ie) {}
        }
  }
  return result;
}

function getParentProps(elem, prop) {
        // returns the sum of the property "prop" along the offsetParent row of elem
        var result = 0;
        while (elem != null) {
                result += elem[prop];
                elem = elem.offsetParent;
        }
        return result;
}

function selectRow(row) {
        if (lastHighlightedId > -1) {
                rowDiv = document.getElementById("suggRow" + lastHighlightedId);

//                rowDiv.className = "suggItem";
                rowDiv.style.backgroundColor = normalbg;
                rowDiv.style.color 			 = normalfg;
        }
        lastHighlightedId = row;
        rowDiv = document.getElementById("suggRow" + row);
        if (rowDiv) {
				normalbg = rowDiv.style.backgroundColor;
				normalfg = rowDiv.style.color;

                rowDiv.style.backgroundColor = highlightbg;
                rowDiv.style.color 			 = highlightfg;
        }
}

function mouseEnter(id) {
        selectRow(id);
}

function submitString(jd, orte, plzs, anz) {

        inputField.value 		= unescape(jd + ' ' + orte);
        inputForm.jd.value 		= jd;
        inputForm.ort.value 	= orte;
        inputForm.plz.value 	= plzs;
        inputForm.anzahl.value 	= anz;
//		action 		= 'http://www.jobanova.de/index.php?datenbank=jobsearch&suggest=_SUGGEST_'
		inputForm.action 		= "http://www.jobanova.de/index.php?datenbank=jobsearch&suggest=1";

        try		 {	inputForm.submit();		}
        catch (e){
         			inputForm.target = "_top";
         			inputForm.submit();
         		 }
        jssubmit = false;
}

function setDivSize() {
        if (suggBox) {
        	suggBox.style.width = (fixedwidth < 0 ? inputField.offsetWidth : fixedwidth);
            suggBox.style.top 	= getParentProps(inputField, "offsetTop") + "px";
            suggBox.style.left 	= ( getParentProps(inputField, "offsetLeft") - 2 -
            							 suggBox.style.width.replace(/\D.*/, "") ) + "px";
        }
}

function fillDiv(jd, orte, plzs, anz, more_res, sugg_mes) {
        // remove previous elements
        while (suggBox.hasChildNodes()) {
                suggBox.removeChild(suggBox.firstChild);
        }
        addSuggestMessage( " Suchergebnisse zu Ihrer Anfrage: ", "1" );
		if( more_res == 3 && sugg_mes != "" ){
			addSuggestMessage( sugg_mes );
		}
        for (i = 0; i < jd.length; i++) {
                iDiv = document.createElement("div");
                iDiv.onmousemove = new Function("omo" + i, "mouseEnter(" + i + ")");
                iDiv.onmousedown = new Function("omd" + i,
									"submitString('" + jd[i].replace(/'/g, "\"") + "'," +
												 "'" + orte[i].replace(/'/g, "\"") + "'," +
												 "'" + plzs[i].replace(/'/g, "\"") + "'," +
												 "'" +  anz[i] + "')");
                iDiv.id 			= "suggRow" + i;
                iDiv.className 		= "suggRow";
                iDiv.style.cursor 	= "pointer";
/*                iDiv.innerHTML = "<span class='suggItem'><nowrap>" +
                        "<div class='suggProduct'>" + astrings[i] + "</div>" +
                        "<div class='suggCat'>" + bstrings[i] +"</div>" +
                        "</nowrap></span>";

		.suggProduct,
		.suggPLZ,
		.suggOrt
*/
				var encoded_jd  = unescape( jd[i] 	);
				var encoded_ort = unescape( orte[i] );

				iDiv.innerHTML = "<div class='suggItem'><span class='suggProduct'><nobr>"
								 + (( encoded_jd.length >33 )? (encoded_jd.substr(0, 32) + "...") : encoded_jd) +
                		 		 "&nbsp;&nbsp;</nobr></span><span class='suggPLZ'><nobr>"  +
                		 				unescape( (!plzs[i])? " &nbsp;&nbsp;" :  plzs[i] ) +
                		 		 "</nobr></span><span class='suggOrt'><nobr>" +
                		 		 (( encoded_ort.length >23 )? (encoded_ort.substr(0, 21) + "...") : encoded_ort) +
                		 		 " (" + unescape( anz[i] ) + ")</nobr></span></div>";
                suggBox.appendChild(iDiv);
        }
		if(more_res == 1){
			addSuggestMessage( "... tippen Sie einfach weiter um exaktere Ergebnisse zu bekommen ..." );
		}
		else if( more_res == 2 && sugg_mes != "" ){
			addSuggestMessage( sugg_mes );
		}
       addSuggestMessage( " powered by <img src='logo.gif' align='absmiddle' border='0' >obanova.de ",
        				   "2", "border: 1px solid #555555; padding: 2px 0px;  ","http://www.jobanova.de/" );
//		   addSuggestMessage( " powered by <img src='logo.gif' align='absmiddle' border='0' >obanova.de ",
//        				   "2", "border: 1px solid #555555; padding: 2px 0px;  " );
        //
        lastHighlightedId = -1;
}

function addSuggestMessage( message, messcolors, messcss, link ) {

		var mess_col;
		var mess_bgcol;

		switch (messcolors) {
		  case "1":
		  		mess_col 	= "white";
		  		mess_bgcol	= "6f6f6f";
            break;
          case "2":
		  		mess_col 	= "black";
		  		mess_bgcol	= "99aacc";
            break;
          default:
		  		mess_col 	= "black";
		  		mess_bgcol	= "bbbbbb";
            break;
        }

        iDiv = document.createElement("div");

		if (typeof link != "undefined")
		{
			iDiv.style.cursor 	= "pointer";
			iDiv.onmousedown = new Function( "go_to_message_link1", "gotoMessageLink('"+link+"');" );
		}
        iDiv.innerHTML =    "<center> " +
                            "<div style = '" + ((typeof messcss != "undefined")? messcss : "") +
                            "color: "+ mess_col +"; background-color: " + mess_bgcol + ";' >" +
                            unescape( message ) +
                            " </div> </center>";

        suggBox.appendChild(iDiv);
}

function gotoMessageLink( link )
{
	if(typeof document.VirtualS == "undefined") {
		var NewDiv 		 = document.createElement("div");
		NewDiv.setAttribute("style", "visibility:hidden;");
		NewDiv.innerHTML = '<form 	target="_blank" name="VirtualS"' +
						   ' 		action="'+ link +'" method="POST">' +
						   '</form>';
		document.body.appendChild( NewDiv );
	}
	try		 {	document.VirtualS.submit();		}
    catch (e){
         			document.VirtualS.target = "_top";
         			document.VirtualS.submit();
    }
}

function displayResults( request, jd, orte, plzs, anz, more_res, sugg_mes) {
        //suggCount = astrings.length;
		suggCount = jd.length;

        fillDiv(jd, orte, plzs, anz, more_res, sugg_mes);
        setDivSize();
        // no results?
        if (suggCount == 0) {
                hideSuggBox();
                return;
        }
        showSuggBox();
}

function callSearch() {
        callcounter++;
        setTimeout("doSearch()", searchDelay);
}

function doSearch() {
        if (callcounter > 0) callcounter--;
        if (callcounter > 0) return;
        if (inputField.value.length < 2){
        	hideSuggBox();
           return;
        }
        if (!xmlhttp) return;

        if (xmlhttp.readyState != 0) // search running right now?
        {
           xmlhttp.abort();	// cancel current search
        }

        xmlhttp.open("GET","request.php?datenbank="+datenbank+"&request=" + inputField.value +
        				"&job_type=0", true);

        xmlhttp.onreadystatechange = checkRequestResponse;
        xmlhttp.send(null);
}


function checkRequestResponse() {
      if (xmlhttp.readyState == 4 && xmlhttp.responseText)
      {
        if (xmlhttp.responseText.charAt(0) != "<"){
          // The response text gets executed as javascript...
           try{	eval(xmlhttp.responseText);	}
           catch (e)
           {	// error - probably due to special characters ('), try again after character substitution
                var txt = xmlhttp.responseText.replace(/\'/g, "''");

             	try			{ eval(txt); }
             	catch (ie) 	{	// still errors? don't display anything
                    			hideSuggBox();
                }
           }
        }
      }
}


function showMess( mess, name ){
	if( document.getElementById( name ) )
        	document.getElementById( name ).innerHTML = mess;
}


function SetupAutoSuggest(request, input, width, nfg, nbg, hfg, hbg) {
        // request and input are mandatory, rest are optional

        requestURL = request;
        inputForm  = input.form;
        inputField = input;

        if (typeof width != "undefined") {
                fixedwidth = width.replace(/\D.*/, "") -1 +"px";
        }
        if (typeof nfg != "undefined") normalfg = nfg;
        if (typeof nbg != "undefined") normalbg = nbg;
        if (typeof hfg != "undefined") highlightfg = hfg;
        if (typeof hbg != "undefined") highlightbg = hbg;

        xmlhttp = getXMLHTTP();
        if (!xmlhttp) {
                return;
        }

        if (typeof netscape != 'undefined' && typeof netscape.security != 'undefined') {
                try {
                	netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
                }
                catch (e) {
//                        alert('Error ' + e.message + ' occurred.');
                }
        }

        input.autocomplete = "off";
        input.onblur       = doBlur;
        input.onkeydown    = doFieldKeyDown;
        input.onmousedown  = doBlur;
//        input.onselect = doBlur;

        suggBox 		= document.createElement("div");
        suggBox.name 	= "suggBox";
        document.body.appendChild(suggBox);

        suggBox.className 	= "suggBox";
        suggBox.id 			= "suggBox";
        setDivSize();

        window.onresize = setDivSize;
}


function showSuggBox() {
        document.getElementById("suggBox").style.visibility="visible";
        suggVisible = true;
}

function hideSuggBox() {
        document.getElementById("suggBox").style.visibility="hidden";
        suggVisible = false;
}


function OnFieldSubmit(){

	//alert("OnFieldSubmit");
	inputForm.jd.value 		= "";
    inputForm.ort.value     = "";
    inputForm.plz.value     = "";
    inputForm.anzahl.value  = "";

  return true;
}


function FieldFocus(El){
	if( !field_focused ){
		El.value = "";
		field_focused = true;
	}
}


function CheckJSSubmit(){
	if( !jssubmit ){
		jssubmit = true;
		return false;
	}
	return true;
}
