(function($) {
	$.fn.alternateViewsProgress = function(options) {
		var opts = $.extend({}, $.fn.alternateViewsProgress.defaults, options);
		this.show();
		$("#" + opts.currentPageId).html(opts.pageNumber);
		$("#" + opts.totalPagesId).html(opts.pageCount);
		return this;
	};

	// pager defaults. hardly worth bothering with in this case but used as placeholder for expansion in the next version
	$.fn.alternateViewsProgress.defaults = {
		pageNumber: 1,
		pageCount: 1,
		currentPageId: null,
		totalPagesId: null
	};

})(jQuery);

(function($) {
	$.fn.chartTipster = function(options) {

		var opts = $.extend({}, $.fn.chartTipster.defaults, options);
		var map = $("map[name=" + this.attr("usemap").replace("#", "") + "]");
		var ul = $("<ul class=\"chartTipster\"><li><div class=\"content\"><div class=\"imageContainer\"></div></div></li></ul>");
		var chart = this.clone(true);
		ul.insertAfter(this);
		ul.find("div[class=imageContainer]").append(chart);

		var tips = new Array();
		map.children("area").each(function(i, de) {
			var coords = $(this).attr("coords").split(",", 4);
			var left = parseInt(coords[2]);
			var top = parseInt(coords[3]);
			var url = $(this).attr("href");
			var lotId = parseInt($(this).attr("title"));
			var descr = null;
			if (typeof (options.getContent) != "undefined") {
				descr = options.getContent(lotId);
			}
			var tip = null;
			if (descr != null) {
				tip = $("<span></span>").html(descr);
				if (typeof ($.preload) != "undefined") {
					tip.find("img").preload();
				}
			}
			var tipContainer = $("<div></div>").attr("class", "marker").attr("title", left + "," + top);
			var image = $("<img />");
			tipContainer.append(image);
			if (tip != null) {
				tipContainer.append(tip);
			}
			image.load(function() {
				var markerContainer = $(this).parents("div[class=marker]:first");
				$.fn.chartTipster.correctBounds(markerContainer, $(this).parents("div[class=content]"), opts.marginLeft, opts.marginRight, opts.marginTop, opts.marginBottom);
			});
			var separator = url.indexOf("?") >= 0 ? "&" : "?";
			image.attr("src", url + separator + "rnd=" + (new Date()).getMilliseconds());
			ul.find("div[class=content]").append(tipContainer);
			tips.push(tipContainer);
		});

		chart.removeAttr("usemap");
		this.remove();
		map.remove();
		return ul.jTipster(options);

	};

	var positions = new Array();

	$.fn.chartTipster.correctBounds = function(objContainer, objField, marginLeft, marginRight, marginTop, marginBottom) {
		var maxWidth = objField.width();
		var maxHeight = objField.height();

		var top = objContainer.css("top");
		var left = objContainer.css("left");
		
		var contWidth = objContainer.width();
		var contHeight = objContainer.height();
		if (!isNaN(parseInt(top)) && !isNaN(parseInt(left))) {
			// register orange point indicator position
			left = parseInt(left);
			top = parseInt(top);
			positions.push({ left: left-10, top: top-10, width: 20, height: 20 });
			
			left -= (contWidth / 2);	
			top -= contHeight + 5;
			//debugger;
			var pos = $.fn.chartTipster.correctMarkerPosition(left, top, contWidth, contHeight, maxWidth - marginRight, maxHeight - marginBottom, marginLeft, marginTop);
			objContainer.css("top", pos.top).css("left", pos.left);
			
			positions.push(pos);
		}
	};

	$.fn.chartTipster.correctMarkerPosition = function(left, top, width, height, maxLeft, maxTop, marginLeft, marginTop) {
		var isFree = $.fn.chartTipster.isPositionFree;
		var isFound = false;
		var pi = 3.14;
		var dim = 3 * Math.max(width, height);
		var dR = dim / 20;
		//debugger;
		for (var r = dR; r <= dim; r += dR) {
			for (var alpha = 0; alpha < 2 * pi; alpha += pi / 8) {
				var x = left - r * Math.cos(alpha);
				var y = top - r * Math.sin(alpha);
				if (isFree(x, y, width, height, maxLeft, maxTop, marginLeft, marginTop)) {
					left = x;
					top = y;
					isFound = true;
					break;
				}
			}
			if (isFound) {
				break;
			}
		}

		if (left < marginLeft) {
			left = marginLeft;
		}
		if (top < marginTop) {
			top = marginTop;
		}
		var contMaxLeft = left + width;
		if (contMaxLeft > maxLeft) {
			contMaxLeft = maxLeft;
		}
		left = contMaxLeft - width;
		var contMaxTop = top + height;
		if (contMaxTop > maxTop) {
			contMaxTop = maxTop;
		}
		top = contMaxTop - height;
		return { left: left, top: top, width: width, height: height };
	};
	$.fn.chartTipster.isPositionFree = function(left, top, width, height, maxLeft, maxTop, marginLeft, marginTop) {
		if (left < marginLeft || left + width > maxLeft || top < marginTop || top + height > maxTop) {
			return false;
		}


		var isFree = true;
		for (var i = 0; i < positions.length; i++) {
			var position = positions[i];
			if ($.fn.chartTipster.isIntersects(left, top, width, height, position.left, position.top, position.width, position.height)) {
				isFree = false;
				break;
			}
		}
		return isFree;
	};

	$.fn.chartTipster.isIntersects = function(left, top, width, height, left2, top2, width2, height2) {

		var isConflicts = $.fn.chartTipster.isSingleDimIntersects;
		return isConflicts(left, width, left2, width2) && isConflicts(top, height, top2, height2);
	};

	$.fn.chartTipster.isSingleDimIntersects = function(x1, w1, x2, w2) {
		var isIntersects = false;
		if (x1 < x2) {
			return x2 - x1 <= 0.7*w1;
		}
		return x1 - x2 <= 0.7*w2;
	};

	$.fn.chartTipster.defaults = {
		marginLeft: 0, marginRight: 0, marginTop: 0, marginBottom: 0
	};

})(jQuery);

function centerPopup(elementId) {	var windowWidth = document.documentElement.clientWidth;	var windowHeight = document.documentElement.clientHeight;	var popupHeight = $("#" + elementId).height();	var popupWidth = $("#" + elementId).width();	var scrollTop = $(document).scrollTop();	//centering	$("#" + elementId).css({		"position": "absolute",		"top": scrollTop + windowHeight / 2 - popupHeight / 2,		"left": windowWidth / 2 - popupWidth / 2	}).show();}

var enlargedPhotos = new Array()var photos = new Array()var photoslink = new Array()var which = 1

//Specify whether images should be linked or not (1=linked)var linkornot = 0
//Set corresponding URLs for above images. Define ONLY if variable linkornot equals "1"if (photoslink == 0)	for (var i = 0; i < photos.length; i++)		photoslink[i] = "";


//do NOT edit pass this linevar preloadedimages = new Array()var preloadedEnlargedimages = new Array()for (i = 0; i < photos.length; i++) {	preloadedimages[i] = new Image()	preloadedimages[i].src = photos[i]	preloadedEnlargedimages[i] = new Image();	preloadedEnlargedimages[i].src = enlargedPhotos[i];}
function keeptrack() {	window.status = "Image " + (which + 1) + " of " + photos.length}

function changeEnlargeLink() {	var lnk = document.getElementById("enlargeLink2");	if (lnk)		lnk.href = enlargedPhotos[which];}
function backward() {	if (which > 0) {		which--		document.images.photoslider.src = photos[which]		keeptrack()		changeEnlargeLink();	}}

function forward() {	if (which < photos.length - 1) {		which++		document.images.photoslider.src = photos[which]		keeptrack()		changeEnlargeLink();	}}

function transport() {	window.location = photoslink[which]}

function articleShare(site) {	var shareUrl;	var currentUrl = location.href;
		switch (site) {		case "newsvine":			shareUrl = 'http://www.newsvine.com/_wine/save?ver=2&popoff=0&t=' + 'keywords' + '&e=' + 'description' + '&h=' + 'title' + '&u=' + currentUrl;			window.open(shareUrl, 'newsvine', 'toolbar=0,status=0,height=445,width=650,scrollbars=yes,resizable=yes');			break;
		case "facebook":			shareUrl = 'http://www.facebook.com/sharer.php?u=' + currentUrl + '&t=' + 'title';			window.open(shareUrl, 'facebook', 'toolbar=0,status=0,height=445,width=650,scrollbars=yes,resizable=yes');			break;
		case "digg":			shareUrl = 'http://digg.com/remote-submit?phase=2&url=' + currentUrl + '&title=' + 'title' + '&bodytext=' + 'description';			window.open(shareUrl, 'digg', 'toolbar=0,status=0,height=445,width=650,scrollbars=yes,resizable=yes');			break;
		case "permalink":			window.open(currentUrl, 'Permalink');
			break;
		case "delicious":			shareUrl = 'http://del.icio.us/post?url=' + currentUrl + '&title=' + 'title';			window.open(shareUrl, 'delicious', 'toolbar=0,status=0,height=445,width=650,scrollbars=yes,resizable=yes');			break;	}}

function changeMainImage() {	var mainImg = document.getElementById("imgMain");	var mainLnk = document.getElementById("lnkMain");	if (mainImg)		mainImg.setAttribute("src", photos[which]);
	if (mainLnk)		mainLnk.setAttribute("href", enlargedPhotos[which]);}

function CarouselPagerSyncExtender(opts) {	this._carousel = null;	this._itemsCount = 0;	this._carouselId = opts.carouselId;	this._pagerDivId = opts.pagerDivId;	this._imagePreviewId = opts.imagePreviewId;	this._linkEnlargeId = opts.linkEnlargeId;	this._viewItemClass = opts.viewItemClass;	this._selectedViewItemClass = opts.selectedViewItemClass;	this._statusContainerId = opts.statusContainerId;	this._statusOptions = opts.statusOptions;	this._selectionCallback = opts.selectionCallback;
};

CarouselPagerSyncExtender.prototype.initialize = function(carousel) {	this._carousel = carousel;	this._itemsCount = $("#" + this._carouselId + " img").length;	this.selectPage(1);	this.highlightItemByPageNumber(1);	// Preloading	var caller = this;	$("#" + this._carouselId + " img").click(function() {		caller.itemSelected($(this));	});	if (typeof ($.preload) != "undefined") {		$("#" + this._carouselId + " img").each(function(i) {			$("<a href='" + $(this).attr("previewUrl") + "'>loading</a>").preload();		});	}};

CarouselPagerSyncExtender.prototype.selectPage = function(pageNumber) {	var caller = this;	if (this._pagerDivId != null) {		$("#" + this._pagerDivId).pager({ pagenumber: pageNumber, pagecount: this._itemsCount, buttonClickCallback: function(selectedPage)
		{ caller.pageSelected(selectedPage); }		});	}
	if (typeof (jQuery.fn.alternateViewsProgress) != "undefined") {		var statusOptions = $.extend({}, caller._statusOptions, { pageNumber: pageNumber, pageCount: caller._itemsCount });		var statusSelector = "#" + this._statusOptions.containerId;		$(statusSelector).alternateViewsProgress(statusOptions);	}};

CarouselPagerSyncExtender.prototype.scrollTo = function(pageNumber) {	this._carousel.scroll(jQuery.jcarousel.intval(pageNumber));};

CarouselPagerSyncExtender.prototype.highlightItemByPageNumber = function(pageNumber) {	var selectedImage = $("#" + this._carouselId + " img:eq(" + (parseInt(pageNumber) - 1) + ")");	this.highlightItem(selectedImage);};

CarouselPagerSyncExtender.prototype.highlightItem = function(selectedImage) {
	var previewUrl = selectedImage.attr("previewUrl");
	var enlargeUrl = selectedImage.attr("enlargeUrl");
	if (this._imagePreviewId != null) {
		$("#" + this._imagePreviewId).attr("src", previewUrl);
	}
	if (this._zoomer != null) {
		this._zoomer.setImageDescriptor(previewUrl);
	}
	$("#" + this._linkEnlargeId).attr("href", enlargeUrl);
	var previouslySelectedContainer = $("#" + this._carouselId + " div[class=" + this._selectedViewItemClass + "]:first");
	previouslySelectedContainer.attr("class", this._viewItemClass);
	previouslySelectedContainer.find("img:first").fadeTo("slow", 1);
	selectedImage.fadeTo("slow", 0.6);
	/*$(this).parent("div:first").attr("class", caller._viewItemClass);	$(this).fadeTo(0, 1, function() { selectedImage.fadeTo("slow", 0.5) });*/
	selectedImage.parent("div:first").attr("class", this._selectedViewItemClass);
	//selectedImage.fadeTo("slow", 0.13, function() { $(this).show(); });
}

/* *************************************************** Event Handlers *************************************************** */CarouselPagerSyncExtender.prototype.pageSelected = function(selectedPage) {	this.selectPage(selectedPage);	this.scrollTo(selectedPage);	this.highlightItemByPageNumber(selectedPage);};
CarouselPagerSyncExtender.prototype.itemSelected = function(selectedImage) {	this.highlightItem(selectedImage);	var items = $("#" + this._carouselId + " img");	var itemNumber = jQuery.inArray(selectedImage[0], items) + 1;	this.selectPage(itemNumber);	if (typeof (this._selectionCallback) == 'function')
		this._selectionCallback(itemNumber);
};
/* *************************************************** Event Handlers *************************************************** */