/** * $file: NamePicker.js $ * $Revision: 1.001 $ * $Date: 2006/06/23 $ * * @author Jake Howlett, codestore.net * @copyright Copyright \u00A9 2006, Rockall Design ltd, All rights reserved. */ var NamePicker = {	target_field: "",	target_type: "",	remember_last: false,	prompt:  'Type the name of the person you are looking for and then click their name to add to it.',		init: function(settings){		NamePicker.settings = settings;		$("search_results").appendChild(Builder.node('p', this.prompt));		new Form.Element.Observer('search_text', 1, this.lookup);	},	reset: function (){		Element.hide('search_spinner');		$("search_text").value="";		$("search_results").replaceChild(Builder.node('p', this.prompt), $("search_results").firstChild);			},		open: function(caller, field, type, prompt){		if (!this.RememberLast)			this.reset();			this.target_field = field;		this.target_type = type;		$('NamesPickerLabel').replaceChild(Builder.node('strong',prompt),$('NamesPickerLabel').firstChild);		Element.setStyle('NamesPicker', {position: 'absolute', top: this.findPosY(caller)+"px", left: this.findPosX(caller)+"px"} );				new Effect.SlideDown('NamesPicker');	},	close: function(){		new Effect.SlideUp('NamesPicker');	},	add: function(name){		switch (this.target_type){			case "single":				$(this.target_field).value = name;				new Effect.Highlight(this.target_field, { queue: 'front' }); //'Message');				this.close();			break;						case "multi":				$(this.target_field).value+=name+'\n';			break;						case "table":			  	//build the row				tr = Builder.node('tr', [							Builder.node('td', [name, Builder.node('input', {'type':'hidden', 'name':this.target_field, 'value':name})]),							Builder.node('td', [Builder.node('img', {'alt':'remove','title':'Remove '+name, 'src':'images/icons/remove.gif',														'onclick':'NamePicker.remove(this.parentNode.parentNode)'})])						]				);				$(this.target_field+'-List').appendChild(tr);			break;					}	},	lookup: function(element, value) {		if (value=="") return;			new Ajax.Request(      		  NamePicker.settings['addressbook']+'/'+NamePicker.settings['viewname']+'?readviewentries&count=10',         			{asynchronous:true, evalScripts:true,            			onSuccess:NamePicker.list_results,            			onLoading:function(request)            				{Element.show('search_spinner')},  		        	 	method:'get', parameters:{'startkey':value, 'OutputFormat':NamePicker.settings["OutputFormat"]}				}		)	},	list_results: function (response){				list = Builder.node('ul', {className:'names'});				if (NamePicker.settings["OutputFormat"]=="JSON"){						var root = eval("("+response.responseText+")");			root.viewentry.each( function(entry){					list.appendChild(Builder.node('li', {onclick:'NamePicker.add(this.innerHTML)'},						[entry.entrydata[NamePicker.settings['column']-1].text['0']]));				}			) //end each					} else { //must be XML in that case			var root = response.responseXML;			entries=root.getElementsByTagName("viewentry");			for (var i=0; i<entries.length; ++i){				list.appendChild(Builder.node('li',{'onclick':'NamePicker.add(this.innerHTML)'},						[entries[i].getElementsByTagName("text").item(NamePicker.settings["column"]-1).firstChild.nodeValue]));			}		}				$('search_results').replaceChild(list, $('search_results').firstChild);				Element.hide('search_spinner');	},	remove: function (row){		Element.remove(row);	},		findPosX: function(obj) 	{			var curleft = 0;		if (obj.offsetParent)		{			while (obj.offsetParent)			{				curleft += obj.offsetLeft				obj = obj.offsetParent;			}		}		else if (obj.x)			curleft += obj.x;				return curleft;	},	findPosY: function(obj)	{		var curtop = 0;		if (obj.offsetParent)		{			while (obj.offsetParent)			{				curtop += obj.offsetTop				obj = obj.offsetParent;			}		}		else if (obj.y)			curtop += obj.y;					return curtop;	}}
