// 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 ElementCSS		= new Array();

var logoURL			= "";
var requestURL 		= "";			// URL to be called for the request. The input field value is escaped and appended
var callcounter 	= 0;
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) {

	//alert( inputForm.all.checked +" / "+ inputForm.jobs.checked );

       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 = ElementCSS[lastHighlightedId];
        }
        lastHighlightedId = row;
        rowDiv = document.getElementById("suggRow" + row);
        if (rowDiv) {
			rowDiv.className = ElementCSS[row] + "Sel";
		}
/*
        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 	= unescape(orte);
        inputForm.plz.value 	= plzs;
        inputForm.anzahl.value 	= anz;

        try	{
        	inputForm.target = "_self";
        	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, type, more_res, sugg_mes) {

        // remove previous elements
        while (suggBox.hasChildNodes()) {
                suggBox.removeChild(suggBox.firstChild);
        }
        //addSuggestMessage( " Suchergebnisse zur Ihre Anfrage: ", "1" );
		if( more_res == 3 && sugg_mes != "" ){
			addSuggestMessage( sugg_mes );
		}
		ElementCSS	= new Array();	// remove previous element settings

        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.style.cursor 	= "pointer";

				var encoded_jd  = unescape( jd[i] 	);
				var encoded_ort = unescape( orte[i] );

                    switch( type[i] ){
                         case "S":
                         	ElementCSS[i] = "suggRowSyn";
                         	encoded_jd 	  = "&nbsp;&nbsp;"+encoded_jd;
                           break;
                         case "A":	ElementCSS[i] = "suggRowAprox";		break;
                         case "N":	ElementCSS[i] = "suggRowNothing";	break;
                         case "T":
                         default:	ElementCSS[i] = "suggRow";			break;
                    }
                    iDiv.className = ElementCSS[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='"+ logoURL +"logo.gif' align='absmiddle' border='0' >obanova.de ",
        				   "2", "border: 1px solid #555555; padding: 2px 0px;  ","http://www.jobanova.de/" );

        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();
    }
*/
	window.open( link, "_blank" );

}


function displayResults( request, jd, orte, plzs, anz, type, more_res, sugg_mes) {
        //suggCount = astrings.length;
		suggCount = jd.length;

        fillDiv(jd, orte, plzs, anz, type, 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", requestURL + inputField.value + "&job_type=A", 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, logo_path) {
        // request and input are mandatory, rest are optional

        requestURL = request;
        inputForm  = input.form;
        inputField = input;

        if (typeof logo_path != "undefined") {
			logoURL	   = logo_path;
		}
        if (typeof width != "undefined") {
                fixedwidth = width.replace(/\D.*/, "") -1 +"px";
        }
        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(){
	submitString( inputField.value, "", inputForm.plz.value, inputForm.anzahl.value );
  return false;
}


function FieldFocus(El){
	if( !field_focused ){
		El.value = "";
		field_focused = true;
	}
}


function CheckJSSubmit(){
	if( !jssubmit ){
		jssubmit = true;
		return false;
	}
////
	else{
            inputForm.action = "http://www.jobanova.de/index.php";
            inputField.name  = "anfrage";

			inputForm.jd.value 		= "";
    		inputForm.ort.value     = "";
    		inputForm.plz.value     = "";
    		inputForm.anzahl.value  = "";
        return true;
	}
////
/*
	}
	return true;
*/
}

