/**
 * ajax / php suggest control
 * @author Vasil Anagnostos <vasko@stanga.net>
 * @version 1.5, 30.10.2007
 */
var ajaxSuggest = {
	
	/**
	 *
	 */
	install : function(params){		
		if(suggest = this.getById(params.target)){			
			this.extend(suggest, this); 			
			Event.observe(suggest.form, 'submit', function(e){
				e = e || window.event;
				el = e.target || e.srcElement;
				if(el.isSuggestElement == true){
					Event.stop(e);
				}																												 
			});
			suggest.init(params);
		}		
	}, 
	
	/**
	 *
	 */
	init : function(params){	
		this.isSuggestElement = true;
		this.params = params;
		this.selectedSuggest = null;
		this.holderOffset = this.getOffset();
		this.holder = document.createElement("DIV");	
		this.holder.className = "suggest";
		this.holder.setAttribute("class", "suggest");
		this.holder.unselectable = "on";
		this.holder.style.position = 'absolute';
		this.holder.style.top = this.holderOffset.y + this.offsetHeight + 'px';	
		this.holder.style.left = this.holderOffset.x + 'px';		
		this.holder.style.zindex = 10000;
		this.holder.style.display = 'none';		
		this.holder.owner = this;
		this.holder.activeover = false;		
		this.holder.onmouseover = function(){ this.activeover = true; }			
		this.holder.onmouseout = function(){ this.owner.selectedSuggest = null; this.activeover = false; }							
		document.body.appendChild(this.holder);		
	},
	
	/**
	 *
	 */
	extend : function(destination, source) {	
		for (property in source) 
			destination[property] = source[property];
		return destination;
	}, 
	
	/**
	 *
	 */
	getById : function(o) {
		return document.getElementById ? 
			document.getElementById(o) : 
			document.all ? document.all(o) : 
			null;
	},
	
	/**
	 *
	 */
	onkeyup : function(e){
		e = e || window.event;
		if(e.keyCode == 40)
			this.nextSuggest();
		else if(e.keyCode == 38)	
			this.prevSuggest();
		else if(e.keyCode == 27)
			this.hideSuggest();
		else {	
			if(this.value){
				eval(this.params.datasource + '(this.value,this.id,this.params.mode)');
			} else {
				this.hideSuggest();
			}
		}
	}, 
	
	/**
	 *
	 */
	onblur : function(){
		if(!this.holder.activeover)
			this.hideSuggest();
	}, 
	
	/**
	 *
	 */
	getOffset : function(o){
		f=new Object();
		f.x=this.offsetLeft;
		f.y=this.offsetTop;
		p=this.offsetParent;
		while(p !=null){
			f.y+=p.offsetTop;
			f.x+=p.offsetLeft;
			p=p.offsetParent;
		}
		return f;
	}, 
	
	/**
	 *
	 */
	hideSuggest : function(){
		this.holder.innerHTML = '';
		this.holder.style.display = 'none';
		this.selectedSuggest = null;
	}, 
	
	/**
	 *
	 */
	showSuggest : function(args){
		this.holder.innerHTML = args;
		this.holder.style.display = 'block';
		this.selectedSuggest = null;
		this.attachSuggestsEvents();
	}, 
	
	/**
	 *
	 */
	attachSuggestsEvents : function(){
		nodes = this.holder.childNodes.item(0).childNodes;
		if(nodes.length){
			n=nodes[0];			
			while(n!=null){
				n.owner = this;
				n.onmouseover = function(){
					this.owner.setSelectedSuggest(this, true);
				}	
				n.onmouseout = function(){
					this.className = 'suggest-normal';
				}					
				n.onclick = function(){ 
					eval(this.owner.params.onselection+'(this)');
					this.owner.hideSuggest();
				};
				n=n.nextSibling;
			}	
		}
	},
	
	/**
	 *
	 */
	setSelectedSuggest : function(node, novalue){		
		if(this.selectedSuggest) 
			this.selectedSuggest.className = 'suggest-normal';			
		this.selectedSuggest = node;		
		this.selectedSuggest.className = 'suggest-selected';		
		if(novalue===undefined)
			eval(this.params.onselection+'(node)'); 			
	}, 
	
	/**
	 *
	 */
	nextSuggest : function(args){		
		if(this.selectedSuggest) {
			if(this.selectedSuggest.nextSibling){	
				this.setSelectedSuggest(this.selectedSuggest.nextSibling);
			}
		} else {
			nodes = this.holder.childNodes.item(0).childNodes;
			if(nodes.length){
				this.setSelectedSuggest(nodes[0]);
			}
		}		
	}, 
	
	/**
	 *
	 */
	prevSuggest : function(args){		
		if(this.selectedSuggest) {
			if(this.selectedSuggest.previousSibling){	
				this.setSelectedSuggest(this.selectedSuggest.previousSibling);
			}
		} 		
	}
	
}


/////////////////////////////////////////////////////////////////////////////////////

function suggest_setRegCity(node){
	data = node.title.split(',');
	$('city').value = data[0] == undefined ? '' : data[0];
	$('zipCode').value = data[1] == undefined ? '' : data[1];
}







