;(function(d){
if(!window.site) {
	window['site'] = {};
}
site.suggestSearch = {
        
    delay: 300,
    resultAttachPoint: '#suche',
    
    form: null,
    input: null,
    
    init: function() {
        if(d.isIE && d.isIE < 7) {
	    return false;
        }
	this.runConnections();
    },
    
    runConnections: function() {
        this.form = d.byId('suggestForm');
        if(!this.form) {
            return false;
        }
        
        this.input = d.byId('suggestInput');
        if(!this.input) {
            return false;
        }
        
        this.resultAttachNode = d.query(this.resultAttachPoint);
        if(!this.resultAttachNode || !this.resultAttachNode[0]) {
            return false;
        }
        
        this.resultAttachNode = this.resultAttachNode[0];
        d.style(this.resultAttachNode,{'position': 'relative', 'zIndex': 999});
        
        d.connect(this.input,'onkeyup',this,'onKeyUp');
    	d.connect(this.input,'onblur',this,'onInputBlur');
    	d.connect(this.input,'onkeydown',this,'handleKeyPress');
    	d.connect(this.input,'onfocus',this,function(){ d.addClass(this.input,'hasFocus'); });
    },
    
    onKeyUp: function(evt) {
	if(this.timer) {
		window.clearTimeout(this.timer);
	}
	if(evt.keyCode !== 27) {
		this.timer = window.setTimeout(d.hitch(this,'startSearch'),this.delay);
	}
    },
    
    startSearch: function() {
	if(this.input.value === '') {
		return;
	}
	var data = d.formToObject(this.form);
	data.xhr = 1;
	
	d.xhrPost({
		url: this.form.action,
		handleAs: 'json',
		postData: d.objectToQuery(data),
		load: d.hitch(this,'displayResults')
	});
    },
    
    displayResults: function(resp,ioArgs) {
	if(!resp || !resp.status || resp.status !== 'success') {
		return false;
	}
	if(!this.resultWrapper) {
		this.resultWrapper = this.createResultWrapper();
	}
	this.resultWrapper.innerHTML = resp.html;
	d.style(this.resultWrapper,'display','block');
	d.anim(this.resultWrapper, { opacity: 1 }, 100);
	
    },
    
    createResultWrapper: function() {
	var wrapper = d.create("div",{id: "xhrResultWrapper", tabIndex: '0', style: 'opacity: 0;'}, d.query(this.resultAttachPoint)[0]);
	d.connect(wrapper,'onfocus',function(){d.addClass(wrapper,'hasFocus');});
	d.connect(wrapper,'onblur', this, 'onWrapperBlur');
	d.connect(wrapper,'onkeydown',this,'handleKeyPress');
	return wrapper;
    },
    
    onInputBlur: function() {
	window.setTimeout(dojo.hitch(this,function(){
		if(!d.hasClass(this.resultWrapper,'hasFocus')) {
			this.hideResults();
		}
	}),100); // avoid race condition
	d.removeClass(this.input,'hasFocus');
    },
    
    onWrapperBlur: function() {
	window.setTimeout(dojo.hitch(this,function(){
		console.log(d.hasClass(this.input,'hasFocus'));
		if(!d.hasClass(this.input,'hasFocus')) {
			this.hideResults();
		}
	}),100); // avoid race condition
	d.removeClass(this.resultWrapper,'hasFocus');
    },
    
    handleKeyPress: function(evt) {
	if(evt && evt.keyCode && evt.keyCode === 27 && this.resultWrapper) {
		this.hideResults();
	} 
    },
    
    hideResults: function() {
	var w = this.resultWrapper;
	d.anim(w, { opacity: 0}, 300, dojo._defaultEasing, function() { dojo.style(w,'display','none'); });
    }
};

d.addOnLoad(d.hitch(site.suggestSearch,'init'));
})(dojo);