addressBook=function(properties){
	this.uid=null;
	this.start=false;
	this.buttons={
		Add:true,
		Edit:true,
		Delete:true
	};
	this.data={};
	this.selectable=true;
	this.onDelete=false;
	this.onEdit=false;
	this.onAdd=false;
	this.onSelect=function(){};
	this.selected=false;
	this.closeOnSelect=true;
	this.selector=false;
	
	
	// set properties recursive through this object (argument object is a reference to this object)
	this.setProperties=function(object,properties){
		if(properties){
			for(property in properties){
				switch(typeof(properties[property])){
					default:
						object[property]=properties[property];
					break;
					case 'object':
						this.setProperties(object[property],properties[property]);
					break;
				}
			}
		}
	}
	if(properties){
		this.setProperties(this,properties);
	}

	this.openEditContainer=function(id){
		var self=this;
		$("#"+this.uid+" .addressBookEditButtonSave").click(function(){
			//todo add save rpc
			self.closeEditContainer();															   
			return false;
		});
		$("#"+this.uid+" .addressBookEditButtonCancel").click(function(){
			return false;
		});
		
		$("#"+this.uid+" .addressBookEditContainer").fadeOut('slow',function(){
			$(this).empty().append($("#"+id+"container")).fadeIn('slow',function(){
				$(this).find(".addressBookEditCancelButton2").css('cursor','pointer').click(function(){
					self.closeEditContainer();							  
					return false;
				});
			 }).children().show();
		});
	}


	this.init=function(){
		if(this.uid==null){
			return false;
		}
		var self=this;		
		id="#"+this.uid;		
		if(this.selectable==true){
			$(id+" .addressBookTable tr.addressBookRow").css('cursor','pointer').click(function(){
				if(typeof(self.onSelect)=="function"){
					self.selected=$(this).attr('_id')
					self.onSelect();
					if(self.selector!==false){
						self.iterate(self.selector);
					}
				}
			});
		}
		$(id+" .addressButton").css('cursor','pointer');
		$(id+" .addressBookCloseButton").click(function(){
			self.close();
		});
		
		if(!this.buttons.Delete){
			$(id+" .addressBookDeleteButton").hide();
		}else{
			$(id+" .addressBookDeleteButton").click(function(){
				//todo:  delete rpc
				return false;												 
			});
		}
		
		//container_form[UID]
		if(!this.buttons.Edit){
			$(id+" .addressBookEditButton").hide();	
		}else{
			$(id+" .addressBookEditButton").click(function(){
				self.openEditContainer($(this).attr('_id'))
				return false;
			});
			
		}
		
		if(!this.buttons.Add){
			$(id+" .addressBookAddButton").hide();
		}else{
			$(id+" .addressBookAddCloseButton").click(function(){
				$(id+" .addressBookAddForm").fadeOut('slow'); 
			});
			$(id+" .addressBookAddButton").click(function(){
				// todo: clone and append
				$(id+" .addressBookAddCancelButton").click(function(){
					$(id+" .addressBookFormAdd").fadeOut('slow');
					return false;
				});
				$(id+" .addressBookFormAdd").fadeIn('slow'); 
				return false;
			});	
		}
		
	}

	this.setData=function(id,properties){
		this.data[id]=properties;
	}
	this.render=function(){
		this.init();
		id="#"+this.uid;
		$(document.body).append($(id));
		$(id).center().fadeIn('slow');
	}
	if(this.start){
		this.render();
	}
	
	this.iterate=function(div){
		if(this.data[this.selected]){
			var self=this;
			$(div).each(function(){
				var name=$(this).attr('name');
				if(self.data[self.selected][name]){
					$(this).text(self.data[self.selected][name]);
				}else{
					$(this).text('');
				}
			});
		}
		if(this.closeOnSelect==true){
			this.close();
		}
	}
	
	this.closeEditContainer=function(){
		$("#"+this.uid+" .addressBookEditContainer").empty();
		$("#"+this.uid+" .addressBookEditContainer").fadeOut('slow');
	}
	
	this.close=function(){
		this.closeEditContainer();
		$("#"+this.uid).fadeOut('slow');
	}
	
	return this;
}
