var matchedItems = [];
function monkeyPatchAutocomplete() {
	  $.ui.autocomplete.prototype._renderItem = function( ul, value, type) {
		  var re = new RegExp("^" + this.term, "i") ;
		  var t = value.replace(re,"<b>" + this.term + "</b>");
		  return $( "<li></li>" )
			  .data( "item.autocomplete", value )
			  .append( "<a>" + t + "</a>" )
			  .appendTo( ul );
	  };
  }

$(function() {
		monkeyPatchAutocomplete();

		$.ajax({
			url: "http://www.historichotels.org/en/xml/property.php",
			dataType: "xml",
			success: function( xmlResponse ) {
				var data = $( "item", xmlResponse ).map(function() {
					return {
						value: $( "property_name", this ).text() + ", " +
								( $.trim( $( "city", this ).text() ) || "(unknown city)" ) + ", " +
								( $.trim( $( "state_name", this ).text() ) || "(unknown state)" ),
						id: $( "property_name", this ).text(),
						city: $.trim( $( "city", this ).text() ),
						state: $.trim( $( "state_name", this ).text() )
					};
				}).get();
				$.widget( "custom.catcomplete", $.ui.autocomplete, {
					_renderMenu: function( ul, items ) {
						var self = this;
						var searchTerm = this.term;
						matchedItems = [];
						$.each( items, function( index, item ) {
							var re = new RegExp(searchTerm,"i");						
							
							var searchItem = item.city;					
							if(re.test(searchItem) ){
								matchedItems.push('<h4>' + item.city + ', ' + item.state + '</h4>');								
							}
							
							searchItem = item.state;
							if(re.test(searchItem) ){
								matchedItems.push('<h4>' + item.state + '</h4>');
							}
							
							searchItem = item.id;
							if(re.test(searchItem) ){
								matchedItems.push('<h4>' + item.id + '</h4><span class="citystate">' + item.city + ', ' + item.state + '</span>');
							}
							
						});
						matchedItems = $.uniqueArray(matchedItems);
						$.each(matchedItems, function(index, value) { 
  							self._renderItem( ul, value);
						});

					}
				});
				
				$( "#advanced" ).catcomplete({
					delay: 0,
					source: data,		
					minLength: 3,
					focus: function( event, ui ) {
						$( "#avanced" ).val( ui.item );
						return false;
					},
					select: function( event, ui ) {	
						var endNum = ui.item.search("</h4>");
						var newText = ui.item.substr(4,endNum-4);
						$( "#advanced" ).val( newText );
						$('form#property-console #property').val( newText );
						return false;
					}
				});
				
				$( "#property" ).catcomplete({
					delay: 0,
					source: data,		
					minLength: 3,
					focus: function( event, ui ) {
						$( "#avanced" ).val( ui.item );
						return false;
					},
					select: function( event, ui ) {	
						var endNum = ui.item.search("</h4>");
						var newText = ui.item.substr(4,endNum-4);
						$( "#property" ).val( newText );
						$('form#reservations-console #advanced').val( newText );
						return false;
					}
				});
				
			}
		});	
});
