








		
		function dataProvider(inJsonUrl, inJsonArgs, inTotalFunc, inRequestedFunc, inPageFunc, inResultsFunc, inCompareFunc) {
			
			this.logName = getFunctionName(arguments.callee.toString());												
				
			
			this.jsonUrl = inJsonUrl;																					
				
			
			this.jsonArgs = {};
			this.jsonArgs['page'] = 0;
			this.jsonArgs['num'] = 40;
			for (var i in inJsonArgs) {
				this.jsonArgs[i] = inJsonArgs[i];																		
					
			}
			
			this.totalFunc = inTotalFunc;
			this.requestedFunc = inRequestedFunc;
			this.pageFunc = inPageFunc;
			this.resultsFunc = inResultsFunc;
			this.compareFunc = inCompareFunc;
			
			this.totalResults = -1;
			this.globalData = new Array();
			this.dataClearAll = function() {
				this.globalData = new Array();
			}
			
			this.ajaxManager = jQuery.manageAjax({manageType: 'sync', maxReq: 0, blockSameRequest: true});
			
			this.dataLoad = function(inCallback) {																		
				$().log(this.logName + " -- calling dataLoad(page:" + this.jsonArgs['page'] + ", num: " + this.jsonArgs['num'] + ")");
				var id = this.ajaxManager.add( {
					url: 		this.jsonUrl, 
					data: 		this.jsonArgs, 	
					dataType:	"json",
					mydata: 	{
						"dataProviderCallback": inCallback,
						"dataProvider": this
					},
					success: 	function(data, successString) {
						var dp = this.mydata.dataProvider;
						
						dp.totalResults = dp.totalFunc(data);
						
						for (i = (dp.pageFunc(data) * dp.requestedFunc(data)); i < (dp.pageFunc(data) + 1) * dp.requestedFunc(data); i++) {
							if (dp.resultsFunc(data)[i - (dp.pageFunc(data) * dp.requestedFunc(data))]) {
								dp.globalData[i] = dp.resultsFunc(data)[i - (dp.pageFunc(data) * dp.requestedFunc(data))];									
									
							}
						}
						
						if (this.mydata.dataProviderCallback) this.mydata.dataProviderCallback.dataLoadCallback();
					}
				});
				
			}
			
			this.dataRangeExists = function(inStartIndex, inEndIndex) {
				
				var startsExists = false;
				var endsExists = false;
				for (i = 0; i < this.totalResults; i++) {
					if (this.globalData[i]) {
						if (i == inStartIndex) startsExists = true;
						if (i == inEndIndex) endsExists = true;
					}
				}
				
				return (startsExists && endsExists);
			}
			
			this.dataGetItemById = function(inId) {
				for (i = 0; i < this.globalData.length; i ++) {
					if (this.globalData[i]) {
						if (this.compareFunc(this.globalData[i], inId)) {
							return this.globalData[i];
						}
					}
				}
				return null;
			}
			
			this.dataGetRange = function(inStartIndex, inEndIndex, inCallback) {
				var returnArray = new Array();
				var dataExists = this.dataRangeExists(inStartIndex, inEndIndex);
				
				if (dataExists == false) {
					
					if (this.globalData.length == 0) {
						this.jsonArgs['page'] = 0;
						this.dataLoad(inCallback);
						return null;
					} else {
						
						for (var i = 0; i < Math.ceil(this.totalResults/this.jsonArgs['num']); i++) {
							
							var start, stop;
							start = i * this.jsonArgs['num'];
							stop = start + this.jsonArgs['num'] - 1 > this.totalResults - 1 ? this.totalResults - 1 : start + this.jsonArgs['num'] - 1;
							if (((inStartIndex >= start) && (inStartIndex < stop)) || ((inEndIndex >= start) && (inEndIndex < stop))) {
								this.jsonArgs['page'] = i;
								this.dataLoad(inCallback);
							}
						}
						return null;
					}
				} else {
					var index = 0;
					var data = new Array();
					for (i = 0; i < this.globalData.length; i ++) {
						if ((index >= inStartIndex) && (index <= inEndIndex))
							data.push(this.globalData[i]);
						index++;
					}
					return data;
				}
			}
		}
		
		function smallBrowser(inDataProvider, inCurrentPage, inPagerCounts, inPagerLinks, inPhotoContainer, inLoadingStatus) {
			
			this.pageSize = 40;
			
			this.dataProvider = inDataProvider;
			
			this.currentPage = inCurrentPage;
			this.currentPhoto = 0;
			
			this.pagerCounts = inPagerCounts;
			this.pagerLinks = inPagerLinks;
			this.resultsPhotos = inPhotoContainer;
			this.loadingStatus = inLoadingStatus;
			
			this.updateNav = function() {
				start = (this.currentPage * this.pageSize) + 1;
				stop = start + this.pageSize > this.dataProvider.totalResults ? this.dataProvider.totalResults : start + this.pageSize - 1;
				if (!this.pagerCounts.length) {
					var tempArray = new Array();
					tempArray[0] = this.pagerCounts;
					this.pagerCounts = tempArray;
				}
				for (i = 0; i < this.pagerCounts.length; i++) {
					$(this.pagerCounts[i]).html(start + "-" + stop + " of " + this.dataProvider.totalResults + " photos");
				}
				if (!this.pagerLinks.length) {
					var tempArray = new Array();
					tempArray[0] = this.pagerLinks;
					this.pagerLinks = tempArray;
				}
				var totalPages = Math.ceil(this.dataProvider.totalResults / this.pageSize);
				for (var j = 0; j < this.pagerLinks.length; j++) {
					$(this.pagerLinks[j]).empty();
					if (totalPages > 0) {
						var start, stop;
						start = 0;
						stop = totalPages;
						if (totalPages > 15) {
							start = parseInt(this.currentPage) - 7;
							stop = parseInt(this.currentPage) + 7;
							if (start < 0) {
								stop = stop + (start * -1);
								start = 0;
							}
							if (stop > totalPages) {
								start = start - (stop - totalPages);
								stop = totalPages;
							}
						}
						var i = start;
						if (start != 0)
							$(this.pagerLinks[j]).append("<b>...</b>&nbsp;|&nbsp;");
						for (; i < stop; i++) {
							if (i == this.currentPage) {
								$(this.pagerLinks[j]).append("<b>" + (i + 1) + "</b>");
							} else {
								$(this.pagerLinks[j]).append('<a href="#">' + (i + 1) + '</a>');
							}
							if (i + 1 < stop) {
								$(this.pagerLinks[j]).append('&nbsp;|&nbsp;');
							}
						}
						if (stop != totalPages)
							$(this.pagerLinks[j]).append("&nbsp;|&nbsp;<b>...</b>");
					}
					$(this.pagerLinks[j] +" > a").bind("click", this, function(e) { e.data.setPage($(this).text() - 1); return false; } );
				}
			}
			
			this.setPage = function(inPage) {
				this.currentPage = inPage;
				this.setContent();
			}
			
			this.dataLoadCallback = function() {
				var start, stop;
				
				
				start = this.currentPage * this.pageSize;
				stop = start + this.pageSize - 1 > this.dataProvider.totalResults - 1 ? this.dataProvider.totalResults - 1 : start + this.pageSize - 1;
				if (this.dataProvider.dataRangeExists(start, stop)) {
					$(this.loadingStatus).text(""); 
					this.setContent();
				} else {
					this.dataProvider.dataGetRange(start, stop, this);
					return;
				}
			}
			
			this.setContent = function setContent() {
				var imageURL, imageId, tempHTML, start, stop;
				var thumbCrop = 83;
				
				if (this.dataProvider.totalResults == -1) {
					$(this.loadingStatus).text("Loading..."); 
					this.dataProvider.dataGetRange(0, this.pageSize - 1, this);
					return;
				}
				
				start = this.currentPage * this.pageSize;
				stop = start + this.pageSize - 1 > this.dataProvider.totalResults - 1 ? this.dataProvider.totalResults - 1 : start + this.pageSize - 1;
				
				
				var data = this.dataProvider.dataGetRange(start, stop, this);
				if ((data == null) || (data.length == 0)) {
					$(this.loadingStatus).text("Loading..."); 
					return;
				}
				
				this.updateNav();
				$(this.resultsPhotos).empty();
				//$(this.resultsPhotos).css({left:'0px', top:'0px', margin:'0px 1px'});
				
				for (i = 0; i < data.length; i++) {
					imageURL = gImageBase + data[i].imageURLMedium;
					imageId = data[i].id;
					tempImg = new Image();
					$(tempImg).load(function () {
						$(this).hide();
						$(this).parent().parent().removeClass('loading');
						$(this).parent().css({left:'-'+ ( Math.ceil(($(this).width() - thumbCrop) / 2) + 4 ) +'px', top:'-'+ ( Math.ceil(($(this).height() - thumbCrop) / 2) ) +'px'});
						$(this).fadeIn('slow');
					}).error(function () {
						
					});
					$(tempImg).appendTo("#resultsPhotos").hide()
					.wrap('<div class="photoThumb loading"><a href="' + data[i].detailPageURL + '" class="photoAligner" photoId="' + imageId + '"></a></div>');
					$(tempImg).attr('src', imageURL);
					$(tempImg).attr('alt', data[i].imageTitleMedium);
				
				}
				
				$(this.resultsPhotos).append(
					$('<div id="detailOverlay"></div>').css({
						left:( $(this.resultsPhotos).width() / 2 )+'px',
						top:( $(this.resultsPhotos).height() / 2 )+'px'
					}).bind("click", this,
						function(e) {
							e.data.hideOverlay(e.data);
						}
					),
					$('<div id="detailOverlayPhoto"></div>'),
					$('<div id="detailOverlayInfo"></div>'),
					$('<a id="detailOverlayClose">Close</a>').bind("click", this,
						function(e) {
							e.data.hideOverlay(e.data);
						}
					)
				);
				
				
				$('.photoThumb > a')
				.hover(
					function () {
						$(this).parent().addClass('photoThumbOver');
						$(this).parent().parent().addClass('photoThumbOver');
					}, 
					function () {
						$(this).parent().removeClass('photoThumbOver');
						$(this).parent().parent().removeClass('photoThumbOver');
					}
				).bind("click", this,
					function(e) {
						e.data.currentPhoto =  $(this).attr('photoId');
						e.data.showOverlay(e.data);
						return false;
					}
				);
				
				//toggle css position value to force correct redraw in IE
				$(this.resultsPhotos).css({position:'relative', left:'0px', top:'0px'});
				
				setAnchorLink();
			}
			this.showOverlay = function(data) {
				$('.photoThumbOver').removeClass('photoThumbOver');
				$('#detailOverlayPhoto').hide();
				$('#detailOverlayInfo').hide();
				$('#detailOverlayClose').hide();
				$('#detailOverlay').animate({
					width: ($('#resultsPhotos').width() - 8)+'px',
					height: ($('#resultsPhotos').height() )+'px',
					top: '8px',
					left: '8px',
					opacity: 0.9
				}, 250, function () { data.showDetailsSmall(data) }); 
			}
			this.hideOverlay = function(data) {
				$('#detailOverlayPhoto').hide();
				$('#detailOverlayInfo').hide();
				$('#detailOverlayClose').hide();
				$('#detailOverlay').animate({
					width: '0px',
					height: '0px',
					left: ( $('#resultsPhotos').width() / 2 )+'px',
					top: ( $('#resultsPhotos').height() / 2 )+'px',
					opacity: 0
				}, 250 );
			}
			this.showDetailsSmall = function(data){
				var tempHTML;
				var curPhoto = data.dataProvider.dataGetItemById(data.currentPhoto);
				imageURL = gImageBase + curPhoto.imageURLLarge;
				imageTitle = curPhoto.imageTitleLarge ;
				
				tempImg = new Image();
				$(tempImg).load(function () {
					$(this).hide();
					$(this).parent().parent().removeClass('loading');
					$(this).fadeIn('medium');
				}).error(function () {
					
				});
				
				$('#detailOverlayPhoto').html('');
				$(tempImg).appendTo("#detailOverlayPhoto").hide()
				.wrap('<a href="' + curPhoto.detailPageURL + '" class="photoAligner"></a>')
				.after('<img src="../i/aligner.gif" alt="" class="aligner" />').parent().parent().addClass('loading');
				
				$(tempImg).attr('src', imageURL);
				$(tempImg).attr('alt', imageTitle);
				
				//$('#detailOverlayPhoto').html('<a href="' + curPhoto.detailPageURL + '" class="photoAligner"><img src="'+ imageURL +'" alt="" /><img src="../i/aligner.gif" alt="" class="aligner" /></a>');
	
				tempHTML = '<span class="artistName">' + curPhoto.artist.name + ' <span class="photoYear">(' + curPhoto.year + ')</span><br /></span>';
				tempHTML = (curPhoto.location != '') ? (tempHTML + '<span class="photoLocation">' + curPhoto.location + '<br /></span>') : tempHTML;
				tempHTML = tempHTML + '<span class="photographerName">by <a href="' + curPhoto.photographer.detailPageURL + '">' + curPhoto.photographer.name + '</a><br /></span>';
				if (curPhoto.priceStarting) {
					tempHTML = tempHTML + '<!--<p class="photoPrice">Starting at <span class="price">$' + curPhoto.formattedPriceStarting + '</span></p>-->';
				}

				tempHTML = tempHTML + getRatePhotoStarBarAsHtml(curPhoto.id); 
				tempHTML = tempHTML + getSaveLink(curPhoto.id);  
				tempHTML = tempHTML + getRemoveLink(curPhoto.id);  
				
				tempHTML = tempHTML + '<a href="' + curPhoto.detailPageURL + '" class="detailLink">view details</a>';
				
				$('#detailOverlayInfo').html(tempHTML);
				$('#detailOverlayPhoto').show();
				$('#detailOverlayInfo').show();
				$('#detailOverlayClose').show();

				
				initStarBar(curPhoto.id, 'resultsPhotos'); 
				initSaveRemoveLink(curPhoto.id); 
 
			}
		}
		
		function mediumBrowser(inDataProvider, inCurrentPage, inPagerCounts, inPagerLinks, inPhotoContainer, inLoadingStatus) {
			
			this.pageSize = 20;
			
			this.dataProvider = inDataProvider;
			
			this.currentPage = inCurrentPage;
			
			this.pagerCounts = inPagerCounts;
			this.pagerLinks = inPagerLinks;
			this.resultsPhotos = inPhotoContainer;
			this.loadingStatus = inLoadingStatus;
			
			this.updateNav = function() {
				start = (this.currentPage * this.pageSize) + 1;
				stop = start + this.pageSize > this.dataProvider.totalResults ? this.dataProvider.totalResults : start + this.pageSize - 1;
				if (!this.pagerCounts.length) {
					var tempArray = new Array();
					tempArray[0] = this.pagerCounts;
					this.pagerCounts = tempArray;
				}
				for (i = 0; i < this.pagerCounts.length; i++) {
					$(this.pagerCounts[i]).html(start + "-" + stop + " of " + this.dataProvider.totalResults + " photos");
				}
				if (!this.pagerLinks.length) {
					var tempArray = new Array();
					tempArray[0] = this.pagerLinks;
					this.pagerLinks = tempArray;
				}
				var totalPages = Math.ceil(this.dataProvider.totalResults / this.pageSize);
				for (var j = 0; j < this.pagerLinks.length; j++) {
					$(this.pagerLinks[j]).empty();
					if (totalPages > 0) {
						var start, stop;
						start = 0;
						stop = totalPages;
						if (totalPages > 15) {
							start = parseInt(this.currentPage) - 7;
							stop = parseInt(this.currentPage) + 7;
							if (start < 0) {
								stop = stop + (start * -1);
								start = 0;
							}
							if (stop > totalPages) {
								start = start - (stop - totalPages);
								stop = totalPages;
							}
						}
						var i = start;
						if (start != 0)
							$(this.pagerLinks[j]).append("<b>...</b>&nbsp;|&nbsp;");
						for (; i < stop; i++) {
							if (i == this.currentPage) {
								$(this.pagerLinks[j]).append("<b>" + (i + 1) + "</b>");
							} else {
								$(this.pagerLinks[j]).append('<a href="#">' + (i + 1) + '</a>');
							}
							if (i + 1 < stop) {
								$(this.pagerLinks[j]).append('&nbsp;|&nbsp;');
							}
						}
						if (stop != totalPages)
							$(this.pagerLinks[j]).append("&nbsp;|&nbsp;<b>...</b>");
					}
					$(this.pagerLinks[j] +" > a").bind("click", this, function(e) { e.data.setPage($(this).text() - 1); return false; } );
				}
			}
			
			this.setPage = function(inPage) {
				this.currentPage = inPage;
				this.setContent();
			}
			
			this.dataLoadCallback = function() {
				var start, stop;
				
				start = this.currentPage * this.pageSize;
				stop = start + this.pageSize - 1 > this.dataProvider.totalResults - 1 ? this.dataProvider.totalResults - 1 : start + this.pageSize - 1;
				if (this.dataProvider.dataRangeExists(start, stop)) {
					this.setContent();
					$(this.loadingStatus).text(""); 
				} else {
					this.dataProvider.dataGetRange(start, stop, this);
					return;
				}
			}
			
			this.setContent = function setContent() {
				var imageURL, imageId, tempHTML, start, stop;
				
				
				if (this.dataProvider.totalResults == -1) {
					$(this.loadingStatus).text("Loading..."); 
					this.dataProvider.dataGetRange(0, this.pageSize - 1, this);
					return;
				}
				
				
				start = this.currentPage * this.pageSize;
				stop = start + this.pageSize - 1 > this.dataProvider.totalResults - 1 ? this.dataProvider.totalResults - 1 : start + this.pageSize - 1;
				
				
				$().log("setContent(" + start + ", " + stop + ")");
				var data = this.dataProvider.dataGetRange(start, stop, this);
				if ((data == null) || (data.length == 0)) {
					$(this.loadingStatus).text("Loading..."); 
					return;
				}
				$().log("data.length = " + data.length);
				this.updateNav();
				
				$(this.resultsPhotos).empty();
				for (i = 0; i < data.length; i++) {
					imageURL = gImageBase + data[i].imageURLMedium;
					imageAlt = data[i].imageTitleMedium ;					

					var elementId = 'photoDetails' + (i + 1);
					
					tempHTML = "";
					tempHTML += '	<div class="photoDetailsInfo">';
					tempHTML += '		<span class="artistName">' + data[i].artist.name + ' (' + data[i].year + ')<br /></span>';
					tempHTML += '		<span class="photographerName">by <a href="' + data[i].photographer.detailPageURL + '">' + data[i].photographer.name + '</a><br /></span>';
					if (data[i].priceStarting) {
						tempHTML += '		<!--<span class="photoPrice">Starting at <span class="price">' + data[i].formattedPriceStarting + '</span><br /></span>-->';
					}
					tempHTML += '	</div>';
					
					tempHTML += getRatePhotoStarBarAsHtml(data[i].id); 
					tempHTML = tempHTML + getSaveLink(data[i].id);  
					tempHTML = tempHTML + getRemoveLink(data[i].id);  
					
					
					tempImg = new Image();
					
					$(tempImg).load(function () {
						$(this).parent().removeClass('loading');
						$(this).fadeIn('slow');
					}).error(function () {
						// notify the user that the image could not be loaded
					});
					
					$(tempImg).appendTo("#resultsPhotos").hide().attr('src', imageURL).attr('alt', imageAlt)
					.wrap(
						'<div id="' + elementId + '" class="photoDetails">'+
						'<div class="photoDetailsPhoto">'+
						'<a href="' + data[i].detailPageURL + '" class="photoAligner loading">'+
						'</a></div></div>'
					)
					.after('<img src="../i/aligner.gif" alt="" class="aligner" />')
					.parent().parent()
					.after(tempHTML);
				
					
				}
				
				
				for (i = 0; i < data.length; i++) {
				
					
					initStarBar(data[i].id, 'photoDetails' + (i + 1)); 
					initSaveRemoveLink(data[i].id); 
				}
				
				
				// Toggle css height value to force correct redraw in IE
				$(this.resultsPhotos).css({height:'auto'});
				
				setAnchorLink();
			}
		}
		
		function largeBrowser(inDataProvider, inCurrentPage, inPagerCounts, inPagerLinks, inPhotoContainer, inLoadingStatus) {
		
			this.pageSize = 40;
		
			
			this.dataProvider = inDataProvider;
			
			this.currentPage = parseInt(inCurrentPage);
			this.sliderNextX = 0;
			
			this.pagerCounts = inPagerCounts;
			this.pagerLinks = inPagerLinks;
			this.resultsPhotos = inPhotoContainer;
			this.loadingStatus = inLoadingStatus;
			
			
			this.updateNav = function() {
				start = this.currentPage + 1;
				stop = start > this.dataProvider.totalResults ? this.dataProvider.totalResults : start;
				if (!this.pagerCounts.length) {
					var tempArray = new Array();
					tempArray[0] = this.pagerCounts;
					this.pagerCounts = tempArray;
				}
				for (i = 0; i < this.pagerCounts.length; i++) {
					$(this.pagerCounts[i]).html((this.currentPage + 1) + " of " + this.dataProvider.totalResults + " photos");
				}
				if (!this.pagerLinks.length) {
					var tempArray = new Array();
					tempArray[0] = this.pagerLinks;
					this.pagerLinks = tempArray;
				}
				for (var j = 0; j < this.pagerLinks.length; j++) {
					$(this.pagerLinks[j]).empty();
					if ((this.currentPage == 0) && (this.currentPage == (this.dataProvider.totalResults - 1))) {
						$(this.pagerLinks[j]).html('previous photo | next photo');
					} else if (this.currentPage == 0) {
						$(this.pagerLinks[j]).html('previous photo | <a href="" class="nextLink">next photo</a>');
					} else if (this.currentPage == (this.dataProvider.totalResults - 1)) {
						$(this.pagerLinks[j]).html('<a href="" class="previousLink">previous photo</a> | next photo');
					} else {
						$(this.pagerLinks[j]).html('<a href="" class="previousLink">previous photo</a> | <a href="" class="nextLink">next photo</a>');
					}
				}
				
				$('#previousLinkButton').remove();
				if (this.currentPage != 0) {
					$(this.resultsPhotos).append($('<a id="previousLinkButton" class="previousLink" href="#"></a>').text('Previous Photo'));
				}
				$('#nextLinkButton').remove();
				if (this.currentPage < (this.dataProvider.totalResults - 1)) {
					$(this.resultsPhotos).append($('<a id="nextLinkButton" class="nextLink" href="#"></a>').text('Next Photo'));
				}
				
				$('a.previousLink, a.previousLinkButton').bind("click", this, function (e) {
					e.data.currentPage = e.data.currentPage - 1;
					$().log("Current Page = " + e.data.currentPage);
					$('#dynamicDetails').hide();
					
					e.data.addPhotoPrevious();
			
					/*
					$('#photoSliderBox').stop();
					e.data.sliderNextX -= gSliderWidth;
					$('#photoSliderBox').animate({left: e.data.sliderNextX+"px"}, 500, this.showDetailsLarge);
					*/
					
					e.data.setContent();
					return false;
				});
				
				$('a.nextLink, a.nextLinkButton').bind("click", this, function (e) {
					e.data.currentPage = e.data.currentPage + 1;
					$().log("Current Page = " + e.data.currentPage);
					$('#dynamicDetails').hide();
				
					e.data.addPhotoNext();
					
					/*
					$('#photoSliderBox').stop();
					e.data.sliderNextX += gSliderWidth;
					$('#photoSliderBox').animate({left: e.data.sliderNextX+"px"}, 500, this.showDetailsLarge);
					*/
					
					e.data.setContent();
					return false;
				});
			}
			
			this.setPage = function(inPage) {
				this.currentPage = parseInt(inPage);
				this.setContent();
			}
			
			this.dataLoadCallback = function() {
				var start, stop;
				
				start = this.currentPage;
				stop = this.currentPage;
				if (stop > this.dataProvider.totalResults - 1) stop = this.dataProvider.totalResults - 1;
				if (this.dataProvider.dataRangeExists(start, stop)) {
					$(this.loadingStatus).text(""); 
					this.setContent();
				} else {
					this.dataProvider.dataGetRange(start, stop, this);
					return;
				}
			}
			
			this.setContent = function() {
				var imageURL, imageId, tempHTML, start, stop;
				
				
				if (this.dataProvider.totalResults == -1) {
					$(this.loadingStatus).text("Loading..."); 
					this.dataProvider.dataGetRange(0, this.pageSize - 1, this);
					return;
				}
				
				
				start = this.currentPage;
				stop = this.currentPage;
				if (start < 0) start = 0;
				if (stop > this.dataProvider.totalResults - 1) stop = this.dataProvider.totalResults - 1;
				
				
				//if (this.dataProvider.dataRangeExists(start, stop) == false) {
				//	var blockStart, blockStop;
				//	blockStart = Math.floor(this.currentPage / this.pageSize);
				//	blockStop = Math.floor(this.currentPage / this.pageSize);
				//	this.dataProvider.dataGetRange(blockStart * this.pageSize, blockStop * this.pageSize, this);
				//}
				
				
				var data = this.dataProvider.dataGetRange(start, stop, this);
				if ((data == null) || (data.length == 0)) {
					$(this.loadingStatus).text("Loading..."); 
					return;
				}
				$(this.resultsPhotos).empty();
				
				this.updateNav();
				
				for (i = 0; i < data.length; i++) {
				
					imageURL = gImageBase + data[i].imageURLLarge;
					imageAlt = data[i].imageTitleLarge ;				

					tempImg = new Image();
					
					$(tempImg).load(function () {
						$(this).parent().parent().removeClass('loading');
						$(this).fadeIn('slow');
					}).error(function () {
						// notify the user that the image could not be loaded
					});
					
					$(tempImg).appendTo("#resultsPhotos").hide().attr('src', imageURL).attr ('alt', imageAlt)	
					.wrap('<div class="photoDetails"><div class="photoDetailsPhoto loading"><a href="' + data[i].detailPageURL + '" class="photoAligner" photoIndex="' + (i + start) + '"></a></div></div>')
					.after('<img src="../i/aligner.gif" alt="" class="aligner" />');
				
				
					//tempHTML = '<div class="photoDetails"><div class="photoDetailsPhoto"><a href="' + data[i].detailPageURL + '" class="photoAligner" photoIndex="' + (i + start) + '"><img src="' + imageURL + '"/><img src="../i/aligner.gif" alt="" class="aligner" /></a></div></div>';
					//$(this.resultsPhotos).append(tempHTML);
				}
				$(this.resultsPhotos).wrapInner('<div id="photoSliderBox"></div>');
				$().log("Number of photos in slider: " + $("#photoSliderBox>.photoDetails").length);
				$(this.resultsPhotos).css({ 'height':'400px' }).append($('<div id="dynamicDetails"></div>'));
				// $('#photoSliderBox').css({ width:(3 * gSliderWidth)+'px', position:'absolute', top:'0px', left:'-'+gSliderWidth+'px', 'z-index':'1' });
				
				this.showDetailsLarge();
				setAnchorLink();
			}
			
			this.addPhotoNext = function(){
				var tempHTML;
				var newIndex;
				var imageURL;
				
				$().log("Number of photos in slider: " + $("#photoSliderBox>.photoDetails").length);
				
				var data = this.dataProvider.dataGetRange(this.currentPage, this.currentPage, this);
				if (data == null)
					return;
				var curPhoto = data[0]; // dataGetItemById(this.currentPhoto);
				imageURL = gImageBase + curPhoto.imageURLLarge;
				imageURL = imageURL.replace(/\/\//, "/");
					
				tempHTML = '<div class="photoDetailsPhoto"><a href="' + curPhoto.detailPageURL + '" class="photoAligner"><img src="'+ imageURL +'" alt="" /><img src="../i/aligner.gif" alt="" class="aligner" /></a></div>';
				$(this.resultsPhotos+'>#photoSliderBox').html(tempHTML);
				
				// If the max number of photos is already showing, remove the first in the slider before adding the next
				//if ($('.photoDetails').length > this.pageSize) {
					//$('.photoDetails:first').remove();
					// sliderNextX += gSliderWidth;
					// $('#photoSliderBox').css('left', (sliderNextX)+'px');
				//}
				
				//$('#photoSliderBox').append(
				//	$('<div title="'+newIndex+'"></div>').addClass('photoDetails').html(tempHTML)
				//)
				
			}
			
			this.addPhotoPrevious = function(){
				var tempHTML, newIndex, imageURL;
				
				$().log("Number of photos in slider: " + $("#photoSliderBox>.photoDetails").length);
				
				var data = this.dataProvider.dataGetRange(this.currentPage, this.currentPage, this);
				if (data == null)
					return;
				var curPhoto = data[0]; // dataGetItemById(this.currentPhoto);
				imageURL = gImageBase + curPhoto.imageURLLarge;
				imageURL = imageURL.replace(/\/\//, "/");
			
				//newIndex = Number($('.photoDetails:first').attr('title')) - 1;
				
				tempHTML = '<div class="photoDetailsPhoto"><a href="' + curPhoto.detailPageURL + '" class="photoAligner"><img src="'+ imageURL +'" alt="" /><img src="../i/aligner.gif" alt="" class="aligner" /></a></div>';
				$(this.resultsPhotos+'>#photoSliderBox').html(tempHTML);
				
				// If the max number of photos is already showing, remove the last in the slider before adding the next
				//if ($('.photoDetails').length > this.pageSize) {
				//	$('.photoDetails:last').remove();
				//}
				
				//this.sliderNextX -= gSliderWidth;
				//$('#photoSliderBox').css('left', (this.sliderNextX)+'px');
				
				//$('#photoSliderBox').prepend(
				//	$('<div title="'+newIndex+'"></div>').addClass('photoDetails').html(tempHTML)
				//)
			}
			
			this.showDetailsLarge = function() {
				var tempHTML;
				
				var data = this.dataProvider.dataGetRange(this.currentPage, this.currentPage, this);
				if (data == null)
					returnl
				var curPhoto = data[0]; // dataGetItemById(this.currentPhoto);
				
				imageURL = gImageBase + curPhoto.imageURLLarge;
				imageURL = imageURL.replace(/\/\//, "/");
				
				tempHTML = '<span class="artistName">' + curPhoto.artist.name + ' <span class="photoYear">(' + curPhoto.year + ')</span><br /></span>';
				tempHTML = (curPhoto.location != '') ? (tempHTML + '<span class="photoLocation">' + curPhoto.location + '<br /></span>') : tempHTML;
				tempHTML = tempHTML + '<span class="photographerName">by <a href="' + curPhoto.photographer.detailPageURL + '">' + curPhoto.photographer.name + '</a><br /></span>';
				if (curPhoto.priceStarting) {
					tempHTML = tempHTML + '<!--<p class="photoPrice">Starting at <span class="price">$' + curPhoto.formattedPriceStarting + '</span></p>-->';
				}

				tempHTML += getRatePhotoStarBarAsHtml(curPhoto.id); 
				tempHTML = tempHTML + getSaveLink(curPhoto.id);  
				tempHTML = tempHTML + getRemoveLink(curPhoto.id);  
				
				tempHTML = tempHTML + '<a href="' + curPhoto.detailPageURL + '" class="detailLink">view details</a>';
				
				
				$('#dynamicDetails').html(tempHTML);
				$('#dynamicDetails').fadeIn('fast');
				
				
				initStarBar(curPhoto.id, 'resultsPhotos'); 
				initSaveRemoveLink(curPhoto.id); 
			}
		}