var setupAddressBook = function(_root) {
	//log('setupAddressBook()');
	var _callback = getArg(arguments, 1, function() {});
	
	var _list = _root.find(".address-list");
	var _entry_form = _root.find(".address-data-entry");
	var errorBlock = _entry_form.find('p.error');
	var _removeSelected = function() {
		_list.find("li.selected").removeClass("selected");
	};
	var _clearDataEntry = function() {
		_entry_form.find("input").val("");
	};
	
	// for highlighting an entry on the left
	var _setupList = function() {
		_list.find("li").unbind("click");
		_list.find("li").click(function() {
			errorBlock.text("").hide();
			_removeSelected();
			$(this).addClass("selected");
			$(this).find("span").each(function() {
				_entry_form.find("input[name="+$(this).attr("class")+"]").val($(this).text());
				_entry_form.find("select[name="+$(this).attr("class")+"]").val($(this).text());
			});
		});
	};
	_setupList();
	
	// for updating the entry as the user is typing
	var _update_text = function(_self) {
		var _current = _list.find("li.selected");
		_current.find("span."+_self.attr("name")).text(_self.val());
	};
	_entry_form.find("input,textarea").keyup(function() { _update_text($(this)); 	}	);
	_entry_form.find("input,textarea,select").change(function() { _update_text($(this)); }	);
	
	// adding a new address
	_root.find(".add-address a").click(function() {
		var hasNewLi = _list.find("li.new");
		if(hasNewLi.length == 0)
		{
			errorBlock.text("").hide();
			_removeSelected();
			_clearDataEntry();
			var _li = _list.find("li:first").clone();
			_li.removeClass("placeholder");
			_li.attr('id', '')
			_li.addClass("selected new");
			_li.find("span").text("");
			_li.find("span:first").text("Enter new address");
			_li.appendTo(_list.find("ul"));
			_list.animate({ scrollTop: _list.height() });
			_setupList();
			_entry_form.find("input:first").focus();
			return false;
		}
		else
		{
			return false;
		}
	});
	
	// delete an address
	_root.find(".delete-address a").click(function() {
		errorBlock.text("").hide();
		var _item = _list.find("li.selected");
		
		//get address_id 
		var address_id = $(_item).attr("id");
		
		var _new_index = _list.find("ul li").index(_item);
		if(_new_index==0) { _new_index=1; }
		_clearDataEntry();
		_item.slideUp("fast", function() {
			_item.remove();
			_list.find("li:nth-child("+(_new_index)+")").click();
		});
		// send ajax to backend
		$.get("/cs/Satellite?pagename=PotsAndPans%2FDeleteAddress", {
					"address_id": address_id	}, function(data) {
				});
		return false;
	});
	
	// save data entry
	var validUSzip = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
	_root.find(".save-address a").click(function() {
		var newLi = _list.find("li.new");
		var updateLi = _list.find("li.selected");
//		_list.find("li.new").removeClass("new");
			//if ($(newLi).length == 0)
			if (!updateLi.hasClass("new"))
			{
				var firstnameUpdate = $(updateLi).find(".first-name").text();
				var lastnameUpdate = $(updateLi).find(".last-name").text();
				var streetaddressUpdate = $(updateLi).find(".street-address-1").text();
				var cityUpdate = $(updateLi).find(".city").text();
				var stateUpdate = $(updateLi).find(".state").text();
				var zipUpdate = $(updateLi).find(".post-code").text();
				//alert(firstnameUpdate);
				if($.trim(firstnameUpdate)=="")
				{
					errorBlock.text("Please enter a First name").show();
					return false;
				}
				else if($.trim(lastnameUpdate)=="")
				{
					errorBlock.text("Please enter a Last name").show();
					return false;
				}
				else if($.trim(streetaddressUpdate)=="")
				{
					errorBlock.text("Please enter street address 1").show();
					return false;
				}
				else if($.trim(cityUpdate)=="")
				{
					errorBlock.text("Please enter a city").show();
					return false;
				}
				else if($.trim(stateUpdate)=="")
				{
					errorBlock.text("Please select a state.").show();
					return false;
				}
				else if(($.trim(zipUpdate)=="")||(!validUSzip.test($.trim(zipUpdate))))
				{
					errorBlock.text("Please enter a valid zip code").show();
					return false;
				}
				else
				{
					errorBlock.text("").hide();
					//in update
					$.get("/cs/Satellite?pagename=PotsAndPans%2FUpdateAddress", {
						"address_id":$(updateLi).attr("id")
						,"firstname":$(updateLi).find(".first-name").text(), 
						"mi":$(updateLi).find(".middle-initial").text(), 
						"lastname":$(updateLi).find(".last-name").text(), 
						"Address1":$(updateLi).find(".street-address-1").text(),
						"Address2":$(updateLi).find(".street-address-2").text(),
						"city":$(updateLi).find(".city").text(),
						"state":$(updateLi).find(".state").text(),
						"zip":$(updateLi).find(".post-code").text() 
						}, function(data) {
							_root.find("a.cancel").click();
					});
				}
			}
			else
			{
				//in new
				//alert(_entry_form.find("select[name=state]").val());
				 //added by wm 20110328
				var firstnameNew = $(newLi).find(".first-name").text();
				var lastnameNew = $(newLi).find(".last-name").text();
				var streetaddressNew = $(newLi).find(".street-address-1").text();
				var cityNew = $(newLi).find(".city").text();
				var stateNew = $(newLi).find(".state").text();
				var zipNew = $(newLi).find(".post-code").text();
				if(($.trim(firstnameNew)=="")||($.trim(firstnameNew)=="Enter new address"))
				{
					errorBlock.text("Please enter a First name").show();
					return false;
				}
				else if($.trim(lastnameNew)=="")
				{
					errorBlock.text("Please enter a Last name").show();
					return false;
				}
				else if($.trim(streetaddressNew)=="")
				{
					errorBlock.text("Please enter street address 1").show();
					return false;
				}
				else if($.trim(cityNew)=="")
				{
					errorBlock.text("Please enter a city").show();
					return false;
				}
				else if(($.trim(zipNew)=="")||(!validUSzip.test($.trim(zipNew))))
				{
					errorBlock.text("Please enter a valid zip code").show();
					return false;
				}
				else
				{
					$(newLi).find(".state").text(_entry_form.find("select[name=state]").val());
					errorBlock.text("").hide();
					_list.find("li.new").removeClass("new");
					$.getJSON("/cs/Satellite?pagename=PotsAndPans%2FAddAddress", {
						"firstname":$(newLi).find(".first-name").text(), 
						"mi":$(newLi).find(".middle-initial").text(), 
						"lastname":$(newLi).find(".last-name").text(), 
						"Address1":$(newLi).find(".street-address-1").text(),
						"Address2":$(newLi).find(".street-address-2").text(),
						"city":$(newLi).find(".city").text(),
						"state":$(newLi).find(".state").text(),
						"zip":$(newLi).find(".post-code").text(),
						"type":"s"  
						}, function(data) {
							//once added the Li ID needs to updated with new ID from the table.		
							$(newLi).attr("id", data.newID);
							_root.find("a.cancel").click();
					});
				}
			}
		return false;
	});
	_callback(_root);
};

