var getWindowScrollPosition = function() {
  var scrollX = 0;
  var scrollY = 0;
  if(typeof(window.pageYOffset) == 'number') {
	//Netscape compliant
	scrollY = window.pageYOffset;
	scrollX = window.pageXOffset;
  } else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
	//DOM compliant
	scrollY = document.body.scrollTop;
	scrollX = document.body.scrollLeft;
  } else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
	//IE6 standards compliant mode
	scrollY = document.documentElement.scrollTop;
	scrollX = document.documentElement.scrollLeft;
  }
  return {x: scrollX, y:scrollY};
}

$(function() {
	// tooltip texts
	$('.tooltip-text-controller').hover(
		function(e) {
			// remove previous if left
			$('#tooltip-text').remove();
			// create new one
			$(this).data('title',$(this).attr('title'));
			$(this).attr('title','');
			$('body').append('<div id="tooltip-text" class="tooltip tooltip-3"><p>'+ $(this).data('title') + '</p></div>');
			var offsetX = e.pageX + 15;
			var offsetY;
			/* var outerHeight = $('#tooltip-text').outerHeight(); */
			var outerWidth = $('#tooltip-text').outerWidth();
			if (offsetX + outerWidth > $(window).width()) { // out of the viewport
				offsetX = ($(window).width() - outerWidth - 10);
				offsetY = e.pageY + 25;
			} else { // in the viewport
				offsetY = e.pageY + 15;
			}
			/* if (offsetY + outerHeight > getWindowScrollPosition().y + $(window).height()) { // out of the viewport
				offsetY = getWindowScrollPosition().y + $(window).height() - outerHeight - 10;
			} */
			$('#tooltip-text')
				.css('position','absolute')
				.css('top',(offsetY) + 'px')
				.css('left',(offsetX) + 'px')
				.fadeIn('fast');
		},
		function() {
			$(this).attr('title',$(this).data('title'));
			$('#tooltip-text').remove();
		}
	);
	$('.tooltip-text-controller').mousemove(function(e) {
		var offsetX = e.pageX + 15;
		var offsetY;
		/* var outerHeight = $('#tooltip-text').outerHeight(); */
		var outerWidth = $('#tooltip-text').outerWidth();
		if (offsetX + outerWidth > $(window).width()) { // out of the viewport
			offsetX = ($(window).width() - outerWidth - 10);
			offsetY = e.pageY + 25;
		} else { // in the viewport
			offsetY = e.pageY + 15;
		}
		/* if (offsetY + outerHeight > getWindowScrollPosition().y + $(window).height()) { // out of the viewport
			offsetY = getWindowScrollPosition().y + $(window).height() - outerHeight - 10;
		} */
		$('#tooltip-text')
			.css('top',(offsetY) + 'px')
			.css('left',(offsetX) + 'px');
	});

	// tooltip image previews
	$('img.tooltip-imgpreview-controller').hover(
		function(e) {
			// remove previous if left
			$('#tooltip-imgpreview').remove();
			// create new one
			$(this).data('alt',$(this).attr('alt'));
			$(this).attr({
				alt: '',
				title: ''
			});
			$('body').append('<div id="tooltip-imgpreview" class="tooltip tooltip-1"><img src="'+ $(this).attr('src') +'" alt="' + $(this).data('alt') + '" /></div>');
			var offsetX = e.pageX + 15;
			var offsetY;
			/* var outerHeight = $('#tooltip-imgpreview').outerHeight(); */
			var outerWidth = $('#tooltip-imgpreview').outerWidth();
			if (offsetX + outerWidth > $(window).width()) { // out of the viewport
				offsetX = ($(window).width() - outerWidth - 10);
				offsetY = e.pageY + 25;
			} else { // in the viewport
				offsetY = e.pageY + 5;
			}
			/* if (offsetY + outerHeight > getWindowScrollPosition().y + $(window).height()) { // out of the viewport
				offsetY = getWindowScrollPosition().y + $(window).height() - outerHeight - 10;
			} */
			$('#tooltip-imgpreview')
				.css('position','absolute')
				.css('top',(offsetY) + 'px')
				.css('left',(offsetX) + 'px')
				.fadeIn('fast');
		},
		function() {
			$(this).attr('alt',$(this).data('alt'));
			$(this).attr('title',$(this).data('alt'));
			$('#tooltip-imgpreview').remove();
		}
	);
	$('img.tooltip-imgpreview-controller').mousemove(function(e) {
		var offsetX = e.pageX + 15;
		var offsetY;
		/* var outerHeight = $('#tooltip-imgpreview').outerHeight(); */
		var outerWidth = $('#tooltip-imgpreview').outerWidth();
		if (offsetX + outerWidth > $(window).width()) { // out of the viewport
			offsetX = ($(window).width() - outerWidth - 10);
			offsetY = e.pageY + 25;
		} else { // in the viewport
			offsetY = e.pageY + 5;
		}
		/* if (offsetY + outerHeight > getWindowScrollPosition().y + $(window).height()) { // out of the viewport
			offsetY = getWindowScrollPosition().y + $(window).height() - outerHeight - 10;
		} */
		$('#tooltip-imgpreview')
			.css('top',(offsetY) + 'px')
			.css('left',(offsetX) + 'px');
	});

	// tooltip image preview rollovers
	$('.tooltip-imgrollover').each(function() {
		// move to body
		$('body').append($(this));
		// store original image size after onload
		$(this).data('_imgHeight',$(this).find('img').eq(0).height());
		$(this).data('_imgWidth',$(this).find('img').eq(0).width());
		// hide rollover
		$(this).hide();
		$(this).css('visibility','visible');
	});
	$('img.tooltip-imgrollover-controller').hover(
		function(e) {
			// remove previous rollover if left
			$('.tooltip-imgrollover').hide();
			// remove controller alt
			$(this).data('alt',$(this).attr('alt'));
			$(this).attr({
				alt: '',
				title: ''
			});
			// load images into rollover
			var fileID = $(this).data('_fileID');
			var listID = $(this).data('_listID') ? $(this).data('_listID')+'-' : '';
			var rollover = $('#tooltip-imgrollover-' + listID + fileID);
			var currentThumbsCount = rollover.find('img').length;
			var thumbs = $(this).data('_thumbsUrl');
			var thumbsPreloadedCount = typeof $(this).data('_thumbsPreloadedCount') == 'undefined' ? 0 : $(this).data('_thumbsPreloadedCount');
			if (currentThumbsCount <= thumbsPreloadedCount && thumbs.length) {
				for (var i = 0; i < thumbs.length; i++) {
					rollover.append('<img src="'+ thumbs[i] +'" alt="' + $(this).data('alt') + '" />');
				}
			}
			// style current rollover
			var offsetX = e.pageX + 15;
			var offsetY;
			/* var outerHeight = rollover.outerHeight(); */
			var outerWidth = rollover.outerWidth();
			if (offsetX + outerWidth > $(window).width()) { // out of the viewport
				offsetX = ($(window).width() - outerWidth - 10);
				offsetY = e.pageY + 25;
			} else { // in the viewport
				offsetY = e.pageY + 5;
			}
			/* if (offsetY + outerHeight > getWindowScrollPosition().y + $(window).height()) { // out of the viewport
				offsetY = getWindowScrollPosition().y + $(window).height() - outerHeight - 10;
			} */
			rollover
				.css('position','absolute')
				.css('top',(offsetY) + 'px')
				.css('left',(offsetX) + 'px')
				.fadeIn('fast')
				.cycle({timeout: 2000, speed: 300});
		},
		function() {
			$(this).attr('alt',$(this).data('alt'));
			$(this).attr('title',$(this).data('alt'));
			var fileID = $(this).data('_fileID');
			var listID = $(this).data('_listID') ? $(this).data('_listID')+'-' : '';
			var rollover = $('#tooltip-imgrollover-' + listID + fileID);
			rollover
				.hide()
				.cycle({timeout: 0});
		}
	);
	$('img.tooltip-imgrollover-controller').mousemove(function(e) {
		var fileID = $(this).data('_fileID');
		var listID = $(this).data('_listID') ? $(this).data('_listID')+'-' : '';
		var rollover = $('#tooltip-imgrollover-' + listID + fileID);
		var offsetX = e.pageX + 15;
		var offsetY;
		/* var outerHeight = rollover.outerHeight(); */
		var outerWidth = rollover.outerWidth();
		if (offsetX + outerWidth > $(window).width()) { // out of the viewport
			offsetX = ($(window).width() - outerWidth - 10);
			offsetY = e.pageY + 25;
		} else { // in the viewport
			offsetY = e.pageY + 5;
		}
		/* if (offsetY + outerHeight > getWindowScrollPosition().y + $(window).height()) { // out of the viewport
			offsetY = getWindowScrollPosition().y + $(window).height() - outerHeight - 10;
		} */
		rollover
			.css('top',(offsetY) + 'px')
			.css('left',(offsetX) + 'px');
	});

});