(function($) {
	/**
	 * Презагрузка изображений (Preload)
	 * @param {String or Array} Атрибут или массив атрибутов src изображений,
	 * 						    для которых выполнить презагрузку.
	 */
	$.preloadImages = function(parameter) {
		if (typeof parameter == 'string') 
			preload(parameter);
		else
		if (typeof parameter == 'object') 
            $.each(parameter, function() {
				var src = ('src' in this)? this.src : this;
				preload(src);
			});
            
		function preload(imageSrc) {
			$('<img>').attr({
				'src': imageSrc,
				'width': '1',
				'height': '1'
			}).css({
				'position': 'absolute',
				'visibility': 'hidden',
				'left': 0,
				'top': 0
			}).appendTo($(document.body));	
		}
	}
	
	var settings;
	/**
	 * Устанавливает контейнер в качестве просмотрщика изображений.
	 * @param {Object} callerSettings Параметры
	 */
	$.fn.setAsImageViewer = function(callerSettings) {
		settings = $.extend({
			source: this,
			imageContainerID: 'image-changer',  // ID элемента, служащего контейнером сменного изображения.
			buttonsContainerClass: 'tabs',      // Класс элемента, служащего контейнером для вкладок переключения.
			defaultActiveTabNumber: 1,   	    // Номер активной вкладки.
			defaultImagePath: '/images/',       // Директория картинок.
			defaultImagesFile: '/css/call.json?anticache=' + new Date().getTime()  // Файл изображений
		}, callerSettings || {} );
	
	$.getJSON(settings.defaultImagesFile,  function(data) {
		settings.imageArray = data.images;
		$.map(settings.imageArray, function(image) {
				image.src = settings.defaultImagePath + image.src;
				return image;
			})
		$.preloadImages(settings.imageArray);
		setHandlers();
	});
	
	function setHandlers() {
		var activeTab = $('.' + settings.buttonsContainerClass + ' div a', settings.source)
			.each(function(number) {
				var imageElement = settings.imageArray[number];
				$(this).click(function() {
					// Устанавливаем классы
					$('.active', settings.source).removeClass('active');
					$(this).parent().addClass('active');
					
					// Устанавливаем изображение и ссылку
					$('#' + settings.imageContainerID + ' img', settings.source)
						.attr({
							'src': imageElement.src,
							'alt': imageElement.title
							})
						.parent()  // Link
							.attr({
								'href': imageElement.href,
								'title': imageElement.title
								});
					return false;
				}).focus(function() {
					this.blur();
				})
			}).get(settings.defaultActiveTabNumber - 1);
		$(activeTab).click();
	}	

	return this;
	}
	
})(jQuery);
