jQuery.noConflict()

jQuery.imageMagnifier={
	dsettings: {
		magnifyby: 4, //Кратность увеличения "по умолчанию"
		duration: 500, //Продолжительность анимации в милисекундах "по умолчанию"
		imgopacity: 0.2 //Прозрачность оригинального изображения. Применяется к изображению при увиличении
 	},
	cursorcss: 'url(/colorbox/magnifier/magnify.cur), -moz-zoom-in', //Параметр CSS для курсора оригинального изображения
	zIndexcounter: 100,
	imgshells: [],

	refreshoffsets:function($window, $target, warpshell){
		var $offsets=$target.offset()
		var winattrs={x:$window.scrollLeft(), y:$window.scrollTop(), w:$window.width(), h:$window.height()}
		warpshell.attrs.x=$offsets.left //Обновление позиционирования по оси x относительно страницы
		warpshell.attrs.y=$offsets.top
		warpshell.newattrs.x=winattrs.x+winattrs.w/2-warpshell.newattrs.w/2
		warpshell.newattrs.y=winattrs.y+winattrs.h/2-warpshell.newattrs.h/2
		if (warpshell.newattrs.x<winattrs.x+5){ //нет пробела слева?*
			warpshell.newattrs.x=winattrs.x+5	
		}
		else if (warpshell.newattrs.x+warpshell.newattrs.w > winattrs.x+winattrs.w){//нет пробела справа?*
			warpshell.newattrs.x=winattrs.x+5
		}
		if (warpshell.newattrs.y<winattrs.y+5){ //нет побела сверху?*
			warpshell.newattrs.y=winattrs.y+5
		}
	},
// *под словом пробел подразумеваю - пустое место
	magnify:function($, $target, options){
		var setting={} //Создает объект для хранения комбинации настроек
		var setting=jQuery.extend(setting, this.dsettings, options)
		var effectpos=this.imgshells.length
		var attrs={w:$target.outerWidth(), h:$target.outerHeight()}
		var newattrs={w:Math.round(attrs.w*setting.magnifyby), h:Math.round(attrs.h*setting.magnifyby)}
		$target.css('cursor', jQuery.imageMagnifier.cursorcss)
		var $clone=$target.clone().css({position:'absolute', left:0, top:0, visibility:'hidden', border:'1px solid gray', cursor:'pointer'}).appendTo(document.body)
		$target.add($clone).data('pos', effectpos) //сохраняет позиции изображения
		this.imgshells.push({$target:$target, $clone:$clone, attrs:attrs, newattrs:newattrs}) //запоминает информацию об превьюшке
		$target.bind('click.magnify', function(e){ //действие при клике если изображение находится в оригинальном размере
			var $this=$(this).css({opacity:setting.imgopacity})
			var imageinfo=jQuery.imageMagnifier.imgshells[$this.data('pos')]
			jQuery.imageMagnifier.refreshoffsets($(window), $this, imageinfo) //Обновляет позиционирование для искаженного (увеличеного) и оригинала изображения
			var $clone=imageinfo.$clone
			$clone.stop().css({zIndex:++jQuery.imageMagnifier.zIndexcounter, left:imageinfo.attrs.x, top:imageinfo.attrs.y, width:imageinfo.attrs.w, height:imageinfo.attrs.h, opacity:0, visibility:'visible'})
			.animate({opacity:1, left:imageinfo.newattrs.x, top:imageinfo.newattrs.y, width:imageinfo.newattrs.w, height:imageinfo.newattrs.h}, setting.duration,
			function(){ //функция обратки после изминений
				//нечего не добавляем		
			}) //закончили анимацию
		}) //закончили функции клика
		$clone.click(function(e){ //действие при клике по увеличеном изображении
			var $this=$(this)
			var imageinfo=jQuery.imageMagnifier.imgshells[$this.data('pos')]
			jQuery.imageMagnifier.refreshoffsets($(window), imageinfo.$target, imageinfo) //Обновляет позицыонирование для искаженного (увеличеного) и оригинала изображения
			$this.stop().animate({opacity:0, left:imageinfo.attrs.x, top:imageinfo.attrs.y, width:imageinfo.attrs.w, height:imageinfo.attrs.h},  setting.duration,
			function(){
				$this.hide()
				imageinfo.$target.css({opacity:1}) //Вспоминает оригинальное изображение
			}) //закончили эффекты
		}) //закончили функции клика
	}
};

jQuery.fn.imageMagnifier=function(options){
	var $=jQuery
	return this.each(function(){ //возращает объект jQuery
		var $imgref=$(this)
		if (this.tagName!="IMG")
			return true //переходит к следующемо соотвествующему элементу
		if (parseInt($imgref.css('width'))>0 && parseInt($imgref.css('height'))>0){ //если заданы конкретные width/height attrs определение
			jQuery.imageMagnifier.magnify($, $imgref, options)
		}
		else if (this.complete){ //сделано для IE (not firing image.onload)
			jQuery.imageMagnifier.magnify($, $imgref, options)
		}
		else{
			$(this).bind('load', function(){
				jQuery.imageMagnifier.magnify($, $imgref, options)
			})
		}
	})
};

//** Применяется следующее действие увеличить изображение с классом = "увеличить" и факультативно "Data-magnifyby" и "data-magnifyduration" ATTRS
//** Он также ищет завязки с Attr Rel = "увеличить [targetimageid]" и делает их togglers для этого изображения

jQuery(document).ready(function($){
	var $targets=$('.magnify')
	$targets.each(function(i){
		var $target=$(this)
		var options={}
		if ($target.attr('data-magnifyby'))
			options.magnifyby=parseFloat($target.attr('data-magnifyby'))
		if ($target.attr('data-magnifyduration'))
			options.duration=parseInt($target.attr('data-magnifyduration'))
		$target.imageMagnifier(options)
	})
	var $triggers=$('a[rel^="magnify["]')
	$triggers.each(function(i){
		var $trigger=$(this)
		var targetid=$trigger.attr('rel').match(/\[.+\]/)[0].replace(/[\[\]']/g, '') //разбираем 'id' для rel='magnify[id]'
		$trigger.data('magnifyimageid', targetid)
		$trigger.click(function(e){
			$('#'+$(this).data('magnifyimageid')).trigger('click.magnify')
			e.preventDefault()
		})
	})
})