var arrSFBrowseArtworkCache = new Array();
var currentElement;
var SFBrowseOffset;
var iSFBrowseRelativeX;
var iSFBrowseRelativeY;
var iSFBrowseWidth = 1;
var iSFBrowseHeight = 1;
var iSFBrowseTNWidth = 1;
var iSFBrowseTNHeight = 1;
var iSFBrowseMCBaseWidth = 0;
var iSFBrowseMCBaseHeight = 0;
var miniContainer;
var miniContainerDetails;
var miniContainerImage;

$(document).ready(function() {
	miniContainer = $('<div id="sf-artwork-hover-full"></div>');
	miniContainerDetails = $('<div id="sf-artwork-hover-details"></div>');

	$(document.body).append(miniContainer);	
	iSFBrowseMCBaseWidth = $(miniContainer).width();
	iSFBrowseMCBaseHeight = $(miniContainer).height();	
	$(miniContainer).hide();
	
	sfBrowseInitMouseOver();
});

function sfBrowseReset()
{
	sfBrowseInitMouseOver();
	sfBrowseCancelHover();
}

function sfBrowseInitMouseOver()
{
	$('.sfArtworkItem').each(function(i) {
		$(this).mouseenter(function() { 
										var tempThis = this; 	
										if (currentElement != this) { 
											currentElement = this;
										}
										setTimeout(function(){sfBrowsePrepareHover(tempThis)},1000); 
									});
		$(this).mouseleave(function() { sfBrowseCancelHover(); });
		$(this).mousemove(function(e) {			
										SFBrowseOffset = $(this).offset();
										iSFBrowseRelativeX = e.pageX - SFBrowseOffset.left;
										iSFBrowseRelativeY = e.pageY - SFBrowseOffset.top;
										if ((iSFBrowseWidth * iSFBrowseHeight) == 0) {
											iSFBrowseWidth = miniContainerImage.width();
											iSFBrowseHeight = miniContainerImage.height();
										}
										sfBrowseSetImagePosition();										
									});
	});	
}

function sfBrowsePrepareHover(obj) {
	if (currentElement == obj) {		

		iSFBrowseTNWidth = $(obj).width();
		iSFBrowseTNHeight = $(obj).height();
		
		iMCWidth = iSFBrowseMCBaseWidth;
		iMCHeight = iSFBrowseMCBaseHeight;
		if ($(obj).width() > $(obj).height()) { iMCWidth += 100; } else if ($(obj).width() < $(obj).height()) {	iMCHeight += 100; }
		$(miniContainer).css({
			'width': iMCWidth,
			'height': iMCHeight
		});			
		$(miniContainerDetails).css({
			'width': iMCWidth,
			'top': iMCHeight - 44
		});			
		
		objOffset = $(obj).offset();
		iContainerX = objOffset.left+iSFBrowseTNWidth+10;
		iContainerY = objOffset.top+iSFBrowseTNHeight+10;
				
		if (iContainerX+$(miniContainer).width() > $(window).width()-10) { iContainerX = objOffset.left-10-$(miniContainer).width(); }
		if (iContainerY+$(miniContainer).height()-$(window).scrollTop() > $(window).height()-10) { iContainerY = objOffset.top-10-$(miniContainer).height(); }																				
		if (iContainerY-$(window).scrollTop()<=0) { iContainerY = objOffset.top-($(miniContainer).height()/2); }

		$(miniContainer).css({
			'left': iContainerX,
			'top': iContainerY
		});

		delete objOffset;
		delete iContainerX;
		delete iContainerY;
		
		sfBrowseLoadImage(obj);
	}
}

function sfBrowseCancelHover()
{
	currentElement = undefined;
	iSFBrowseWidth = 1;
	iSFBrowseHeight = 1;
	iSFBrowseTNWidth = 1;
	iSFBrowseTNHeight = 1;	
	$(miniContainer).hide();
}

function sfBrowseLoadImage(obj)
{
	id = $(obj).attr('id').substr(9);		
	sfBrowseShow();			
	$(miniContainer).html('');
	$(miniContainer).addClass('loading');
	titlearray = $(obj).attr('alt').split('|');
	title = titlearray[0];
	username = '';
	if (titlearray.length > 1) {
		username = titlearray[1];
		username = '<div id="sf-artwork-hover-username">' + username + '</div>';
	}
	$(miniContainerDetails).html(title + username);
	miniContainerImage = $('<img />');
	miniContainerImage
		.attr('src', previewURL + id) //defined in listview
		.css({
			opacity: '0.0',
			filter: 'alpha(opacity=0)'
		})
		.one('load', function(){
			if (obj == currentElement) {
				$(miniContainer).removeClass('loading');
				$(miniContainer).html(miniContainerImage);
				$(miniContainer).append(miniContainerDetails);
				iSFBrowseWidth = miniContainerImage.width();
				iSFBrowseHeight = miniContainerImage.height();
				sfBrowseSetImagePosition();
				miniContainerImage.css({
					opacity: '1.0',
					filter: 'alpha(opacity=100)'					
				});
			}		
		})
		.each(function(){
			//Cache fix for browsers taht don't trigger .load()
			if(this.complete) $(this).trigger('load');
		});
}

function sfBrowseSetImagePosition()
{
	iLeft = -(iSFBrowseRelativeX * (iSFBrowseWidth / iSFBrowseTNWidth*1.2)) + ($(miniContainer).width() / 2);
	iTop = -(iSFBrowseRelativeY * (iSFBrowseHeight / iSFBrowseTNHeight*1.2)) + ($(miniContainer).height() / 2);										
	if (iLeft + iSFBrowseWidth < $(miniContainer).width()) { iLeft = $(miniContainer).width() - iSFBrowseWidth; }
	if (iTop + iSFBrowseHeight < $(miniContainer).height()) { iTop = $(miniContainer).height() - iSFBrowseHeight; }										
	if (iLeft > 0) { iLeft = 0;	}
	if (iTop > 0) {	iTop = 0; }	
	
	$(miniContainer).find('img').css({
		'left': iLeft,
		'top': iTop
	});	
	
	delete iLeft;
	delete iTop;
}

function sfBrowseShow()
{
	if (currentElement != undefined) {
		$(miniContainer).fadeIn('fast');
	}
}


