function ReleaseView(settings, player) 
{
	var release_view= this;
	this.ReleaseDIV= $('div#'+settings.releaseDiv);
	// now required for the tab browsing.
	this.SetModel= function(model) {
		this.Model= model;
		
	// make the bindings now...
		$(".prev-button", this.ReleaseDiv).bind("click", function(e){
			if(model.PrevPageAvailable()) {
				model.PrevPage();
			}
	    });
	
		$(".next-button", this.ReleaseDiv).bind("click", function(e){
			if(model.NextPageAvailable()) {
				model.NextPage();
			}
	    });

		$(".search-commit", this.ReleaseDIV).bind("click", function(e) {
			model.Search($("input[type=text].search:not(.fake)", release_view.ReleaseDIV).val());
		});

		$(".search-clear", this.ReleaseDIV).bind("click", function(e) {
			$('input[type=text].fake', release_view.ReleaseDIV).show();
			$('input[type=text].search:not(.fake)', release_view.ReleaseDIV).hide();
			$('input[type=text].search:not(.fake)', release_view.ReleaseDIV).val('');
			model.ClearSearch();
		});
	};

	// search related
	$('input[type=text].search:not(.fake)', release_view.ReleaseDIV).hide();
	$('.search-commit', release_view.ReleaseDIV).hide();

	$('input.fake', release_view.ReleaseDIV).focus(function() {
		$(this).hide();
		$("input[type=text].search:not(.fake)", release_view.ReleaseDIV).show().focus();
	});
	
	$('input[type=text].search:not(.fake)', release_view.ReleaseDiv).keyup(function() {
		if($(this).val().length>0) {
			$(".search-commit", this.ReleaseDiv).show();
		} else {
			$(".search-commit", this.ReleaseDiv).hide();
		}
	});
	
	this.Refresh= function(releaseModel) {
		var status= "";
		if(settings.releaseViewUsesLongDescription) {
			if(releaseModel.SearchField != null)
			{
				status= 'Search results for "'+releaseModel.SearchField+'"';
			} else {
				status= 'Category results for "'+releaseModel.CurrentCategory+'"';
			}
			status += ' ('+releaseModel.StartIndex+'-'+releaseModel.EndIndex()+' of '+releaseModel.TotalCount+')';
		} else {
			status += releaseModel.StartIndex+'-'+releaseModel.EndIndex()+' of '+releaseModel.TotalCount;
		}

		if(releaseModel.SearchField != null)
		{
			// hide the search button
			$(".search-commit", this.ReleaseDiv).hide();
			$(".search-clear", this.ReleaseDiv).show();
		} else {
			// show the search button
			$(".search-clear", this.ReleaseDiv).hide();
		}


		if(releaseModel.NextPageAvailable()) {
			$(".next-button", this.ReleaseDiv).show();
		} else {
			$(".next-button", this.ReleaseDiv).hide();
		}

		if(releaseModel.PrevPageAvailable()) {
			$(".prev-button", this.ReleaseDiv).show();
		} else {
			$(".prev-button", this.ReleaseDiv).hide();
		}

		$(".release-status", this.ReleaseDiv).text(status);

		// show the results
		var container= $('div.release-contents', this.ReleaseDIV);
		container.empty();

		$('<ul id="xxxx">').appendTo(container);
		var itemContainer= $('ul#xxxx', container);
		for(var ii=0; ii<releaseModel.Releases.length; ii++)
		{
			var release= releaseModel.Releases[ii];
			
			// clone the release template item...
			$('.release-template > *', this.ReleaseDIV).clone().appendTo(itemContainer);
			
			// select the last one...
			// it'll have the "template" class on it. so we replace that one's data, then remove the template class
			$('.template', container).wrap("<li></li>");
			$('.template .thumbnail', container).attr('src', release.thumbnailURL);
			$('.template .title', container).html(release.title);
			$('.template .author', container).html(release.author);
			$('.template .duration', container).html(releaseModel.DurationString(release.length));
			$('.template .description', container).html(release.description);
			
 			// if(typeof(release.series) != 'undefined') 
 			if(typeof(release.series_thumbnail) != 'undefined') $('.template .series', container).html(release.series);
 			if(typeof(release.series_thumbnail) != 'undefined') $('.template .series_thumbnail', container).attr('src', release.series_thumbnail);
			
			$('.template', container).removeClass('template');
		}
			
		// force truncation
		$('.description', container).truncate(250);	

		// round the corners
		// DD_roundies.addRule('.release-item', '7px', true);

/*
			var starSection= '<p class="rating">';
			var starDescriptions= ["Poor", "Below Average", "Average", "Good", "Excellent"];
			for(var jj= 0; jj<5; jj++)
			{
				starSection += '<input type="radio" name="'+release.EpisodeCode+'" class="star" value="'+starDescriptions[jj]+'"';
				if(jj==Math.round(release["avg-stars"])) starSection+= 'checked="checked"'; // use partial stars..
				starSection += '/>';
			}
			starSection+= '('+release["avg-stars-count"]+')'+ // release.stars, release["avg-stars"]
				'</p>';

//for(var xx in release) alert('release['+xx+']=> '+release[xx]);
			$('<li><div class="release-item"><img src="'+release.thumbnailURL+'"/>'+
//				'<h3>'+release.title+'</h3> <i>('+releaseModel.DurationString(release.length)+')</i>'+
				'<p><strong>'+release.title+'</strong>&nbsp;<i>('+releaseModel.DurationString(release.length)+')</i><br/>'+release.description+'</p>'+
//				starSection+(releaseModel.Player.WebService.Authenticated()?'<a class="toggle_favorite">XXX</a>':'')+
				'</div><li>').appendTo(itemContainer);

			// setup the rating
			$('input[name='+release.EpisodeCode+'].star', this.ReleaseDIV).rating({
				required: true,
				readOnly: true
//				readOnly: !releaseModel.Player.WebService.Authenticated(), 
//				callback: function(value, link) { 
//						var starValue;
//						for(var aa=0; aa<starDescriptions.length; aa++)
//						{
//							if(starDescriptions[aa]==value)
//							{
//								starValue= aa; // 0-4 ranking
//								break;
//							}
//						}
//						releaseModel.Player.WebService.Rate(
//							$(this).attr('name'), starValue, 
//							function(statusCode, jsonData) {
//								releaseModel.Load();
//							});
//					} 
				});
		}
*/

//		this.ReleaseDIV.append( $(".toggle_favorite").map(function(){
//	      return $(this).html();
//	    }).get().join(", ") );

/*
		$(".toggle_favorite", this.ReleaseDIV).unbind("click");
		$(".toggle_favorite", this.ReleaseDIV).each(function(pos) {
			var release= releaseModel.Releases[pos];
			if(release.favorite) {
				$(this).html("Remove from Favorites");
			} else {
				$(this).html("Add to Favorites");
			}
			$(this).bind("click", function(e) {
				releaseModel.Player.WebService.AddOrRemoveFromFavorites(
					(release.favorite)?'del':'add', 
					release.EpisodeCode, 
					function(statusCode, jsonData, rm) {
						rm.Player.ReloadAll(false);
					}, releaseModel);
			});
		});
*/		
		// make sure the current item is highlighted...
//		this.SyncToCurrentRelease(releaseModel);
		
		// bind the animation effects...
		var releaseView= this;
		$('div.release-item', this.ReleaseDIV).bind("click", function(e) {
			var clicked= $(this);
			$('div.release-item', this.ReleaseDIV).each(function(index, elem) {
				if($(clicked).html()==$(this).html()) {
					releaseModel.SetCurrentRelease(releaseModel.Releases[index]);
				}
			});
		});
		
		$("div.release-item", this.ReleaseDIV).hover(
	      function () { // over
	      	if(!$(this).hasClass('current-release'))
	      	{
		      	$(this).addClass('over-release');
	      	}
	      }, 
	      function () { // out
	      	$(this).removeClass('over-release');
	      }
	    );
	};
	this.SyncToCurrentRelease= function(releaseModel) {
		var items= $('div.release-item');
		for(var xx=0; xx<releaseModel.Releases.length; xx++)
		{
			var release= releaseModel.Releases[xx];
			if(releaseModel.CurrentRelease != null && 
				release.URL==releaseModel.CurrentRelease.URL)
			{
				items.slice(xx).removeClass('over-release');
				items.slice(xx).addClass('current-release');
			} else {
				items.slice(xx).removeClass('current-release');
			}
		}
	};
	this.DisplayLoading= function(model) {
		var releaseView= this;

		 // reload it all...
		if(this.LastCategory != model.CurrentCategory || 
			this.LastSearch != model.SearchField)
		{
			var container= $('div.release-contents', this.ReleaseDIV);
			container.empty();

			$('<div style="margin-top: 50px;"><div class="loading-graphic"/></div>').appendTo(container);		

//			this.LastCategory= model.CurrentCategory;
//			this.LastSearch= model.SearchField;
//			this.LastAuthenticated= player.WebService.Authenticated();
	
//			var contentsBelt= $(".belt", this.ReleaseDIV);
//			contentsBelt.empty();
			
//			contentsBelt.css('width', '920px');
		}
	};
}
