document.suchen.onsubmit       = onsubmitSuchen;
document.suchen.checkAndSubmit = checkAndSubmit;
document.suchen.ort.onkeyup    = proposeKey;
document.suchen.ort.req        = "azs=zao&kw=2&ort=true";
document.suchen.ort.initial    = "Bitte Ort auswählen";
	
document.suchen.fachgebiet.onkeyup  = proposeKey;
document.suchen.fachgebiet.req      = "azs=zao&kw=3";
document.suchen.fachgebiet.initial  = "Bitte Fachgebiet auswählen";

document.suchen.plz.initial         = "Plz";
	
var prop = new proposalAjax();

for(i=0; i<document.suchen.length;i++){
    document.suchen[i].onfocus = focusGained;
    document.suchen[i].onblur  = focusLost;
}

function focusLost(evt) {
    if(!evt) evt = window.event;
    var source = getSource(evt);
    if(source.value == ''){
        source.value = source.initial;
    }
}
function focusGained(evt){
    if(!evt) evt = window.event;
    var source = getSource(evt);
    if(source.value == source.initial){
        source.value = '';
    }
    window.setTimeout("hideProposalDiv()", 300);
}
function proposeKey(evt) {
    if(!evt) evt = window.event;
    var source = getSource(evt);
    var key = evt.keyCode;
    if(document.suchen.debug){ document.suchen.debug.value = key; }
    if(key==13 || key==16 || key==35 || key==36 || key==37 || key==39){
        return;
    }
    propose(source, false);
}

function propose(source, force){
    showProposalDiv(source);

    if(force==false && source.lastvalue && source.value==source.lastvalue){
        return;
    }
    source.lastvalue = source.value;

    if(source.value.length==0 && force==false){
        hideProposalDiv();
        setInputValid(source, true);
    } else {
        var proposalDiv = document.getElementById("proposalDiv");
        proposalDiv.innerHTML = "";
        if(source.proposal){
            source.werte = source.proposal;
        } else {
            source.werte = prop.synchron(source, force);
        }

        if(source.werte.length == 0){
            setInputValid(source, false);
            while(source.value.length>0 && source.werte==0){
                source.value     = source.value.substring(0,source.value.length-1);
                source.lastvalue = source.value;
                source.werte     = prop.synchron(source, false);
                if(source.werte.length == 1){
                    setInputValid(source, true);
                    source.value = source.werte[0];
                    hideProposalDiv();
                } else {
                    fillProposal(source);
                }
            }
        } else if(source.werte.length == 1){
            setInputValid(source, true);
            source.value = source.werte[0];
            hideProposalDiv();
        } else {
            setInputValid(source, false);
            fillProposal(source);
        }
    }
}

function fillProposal(source){
    var html = "<p><a href='javascript:hideProposalDiv()'>schliessen</a></p>";
    for(i=0;i<source.werte.length;i++){
        if(source.werte[i].toLowerCase()==source.value.toLowerCase()){
            setInputValid(source, true);
        }
        html += "<a href='javascript:setField(\"" + source.name + "\",\"" + source.werte[i] + "\")'>"
            + source.werte[i] + "</a><br>"
        ;

    }
    var proposalDiv = document.getElementById("proposalDiv");
    proposalDiv.innerHTML = html;
}

function setInputValid(element, state){
    element.valid = state;
    element.style.backgroundColor = state ? "#ffffff" : "#fff";
}

function hideProposalDiv(){
    var proposalDiv = document.getElementById("proposalDiv");
    if(proposalDiv){
        proposalDiv.style.visibility = 'hidden';
    }        	
}

function showProposalDiv(element){
    var proposalDiv = document.getElementById("proposalDiv");
    if(proposalDiv==null){
        proposalDiv = document.createElement("div");
        proposalDiv.id        = "proposalDiv";
        proposalDiv.className = "proposalDiv";
        document.getElementsByTagName('BODY')[0].appendChild(proposalDiv);
    }

    var dim    = getDimension(element);
    proposalDiv.style.top             = dim.y + dim.height + 'px';
    proposalDiv.style.left            = dim.x     + 'px';
    proposalDiv.style.width           = dim.width + 'px';
    proposalDiv.style.backgroundColor = '#ffffff';
    proposalDiv.style.visibility      = 'visible';
}

function setField(fieldname, value){
    var element = document.getElementsByName(fieldname)[0];
    element.value = value;
    setInputValid(element, true);
    hideProposalDiv();
}

function proposalAjax()
{
    if (window.XMLHttpRequest) {
        this.http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }

    this.requestPending = false;

    this.synchron = function(element, all)
    {
        var ret = null;
        if(!this.reqestPending){
            this.reqestPending = true;
            var req = '/zan/proposal.anz?wort=' + escape(all?"":element.value) + '&' + element.req;
            this.http_request.open('GET', req, false);
            this.http_request.send(null);
            if(this.http_request.status == 200){
                var content = this.http_request.responseText;
                ret = content.length>0 ? content.split("|") : [];
            }
            this.reqestPending = false;
        } else {
        }
        return ret;
    }
}

function getDimension(element)
{
    var x = y = 0;
    var node = element;
    while (node) {
        x += node.offsetLeft;
        y += node.offsetTop;
        node = node.offsetParent;
    }

    var dimension=new Object();
    dimension.x=x;
    dimension.y=y;
    dimension.width  = element.offsetWidth;
    dimension.height = element.offsetHeight;
    return dimension;
}

function getSource(evt){
    if(evt.srcElement) return evt.srcElement;
    else if(evt.target)     return evt.target;
    return null;
}

function resetEmptyToInitial(){
    for(i=0; i<document.suchen.length;i++){
        if(document.suchen[i].initial && document.suchen[i].value==''){
            document.suchen[i].value = document.suchen[i].initial;
        }
    }
}
	
function onsubmitSuchen(){
    for(i=0; i<document.suchen.length;i++){
        if(document.suchen[i].initial && document.suchen[i].value==document.suchen[i].initial){
            document.suchen[i].value = '';
        }
    }
    if(document.suchen.ort.value.length==0 && document.suchen.plz.value.length==0){
        alert("Bitte geben Sie einen Ort oder eine Postleitzahl an.");
        resetEmptyToInitial();
        return false;
    }
    if(document.suchen.ort.valid == false){
        alert("Bitte geben Sie einen Ort aus der Vorschlagsliste an.");
        return false;
    }
    if(document.suchen.fachgebiet.value.length==0){
        alert("Bitte geben Sie einen Fachgebiet an.");
        resetEmptyToInitial();
        return false;
    }
    if(document.suchen.fachgebiet.valid == false){
        alert("Bitte geben Sie ein Fachgebiet aus der Vorschlagsliste an.");
        return false;
    }
    return true;
}

function checkAndSubmit(){
    if(onsubmitSuchen()){
        document.suchen.submit();
    }
}