/* zoom any image
 * widget by IonDen
 * v 1.5.3
 * 02.03.2010
 * rev. 21
 * depends on jQuery 1.4
 * UTF-8
 */

$(document).ready(function(){
    var zoomUrl;
    var zoomWidth = 0;
    var zoomHeight = 0;
    var zoomShow = false;
    var zoomX = 0;
    var zoomY = 0;
    var zoomXcurrent = 0;
    var zoomYcurrent = 0;
    var zoomLeft = 0;
    var zoomTop = 0;
    var zoomScrollTop = 0;
    var zoomScreenWidth = 0;
	var zoomScreenHeight = 0;
    var zoomWait;
	var zoomText;
	var ratio = 0;
	var zoomGo = false;
    
    $(document).bind("mousemove",function(e){
        zoomX = e.pageX;
        zoomY = e.pageY;
    });
    
    $("a.zoom").click(function(event) {
        event.preventDefault();
        if(zoomShow === false) {
			$(this).blur();
        } else {
            zoomHide();
        };
		
		zoomShow = true;
		zoomUrl = $(this).attr("href");
		$("body").append('<div id="zoomLoading">загрузка</div><div id="zooming"><img src="' + zoomUrl + '" /><div id="zoomClose"><b>&bull;</b><span>x</span></div></div>');
		zoomScrollTop = $(window).scrollTop();
		zoomScreenWidth = $("body").innerWidth();
		zoomScreenHeight = $(window).height();
		zoomXcurrent = zoomX;
		zoomYcurrent = zoomY;
		$("#zoomLoading").css("left", zoomXcurrent - 24).css("top", zoomYcurrent - 25);
		$("#zooming").css("left", zoomXcurrent).css("top", zoomYcurrent);
		zoomText = $(this).attr("title");
		zoom();
    });
    
    function zoom() {
        zoomWait = setInterval(zoomWaiting, 100);
		$("#zooming").click(function() {
			zoomHide();
		});
		$("#zoomClose").click(function() {
			zoomHide();
		});
		if($.browser.opera) {
			$("#zooming > img").ready(function() {
				zoomGo = true;
			});
		} else {
			$("#zooming > img").load(function() {
				zoomGo = true;
			});
		}
    };
	
	$(window).keydown(function(event) {
		if(event.keyCode == '27') {
			event.preventDefault();
			zoomHide();
		}
	});
    
    function zoomHide() {
		$("#zooming").stop();
        zoomShow = false;
		zoomGo = false;
		zoomWidth = 0;
		zoomHeight = 0;
		zoomLeft = 0;
		zoomTop = 0;
        $("#zoomLoading").remove();
        $("#zooming").remove();
		$("#zoomBord").remove();
		$("#zoomTxt").remove();
    };
	
    function zoomWaiting() {
        if(zoomHeight === 0 || zoomHeight === null || zoomGo === false) {
            zoomWidth = $("#zooming > img").width();
            zoomHeight = $("#zooming > img").height();
        } else {
			ratio = zoomWidth / zoomHeight;

			if(zoomWidth > zoomScreenWidth - 100 && zoomHeight < zoomScreenHeight - 100) {
				zoomWidth = zoomScreenWidth - 100;
				zoomHeight = Math.round(zoomWidth / ratio);
			} else if(zoomWidth < zoomScreenWidth - 100 && zoomHeight > zoomScreenHeight - 100) {
				zoomHeight = zoomScreenHeight - 100;
				zoomWidth = Math.round(zoomHeight * ratio);
			} else if(zoomHeight > zoomScreenHeight - 100 && zoomWidth > zoomScreenWidth - 100) {
				zoomHeight = zoomScreenHeight - 100;
				zoomWidth = Math.round(zoomHeight * ratio);
			}

			clearInterval(zoomWait);
			zoomGo = false;
			showZoom();
        };
    };
    
    function showZoom() {
        zoomLeft = zoomXcurrent - Math.round(zoomWidth / 2) - 5;
        if(zoomLeft < 15) {zoomLeft = 15};
        if(zoomLeft + zoomWidth > zoomScreenWidth - 13) {zoomLeft = zoomScreenWidth - zoomWidth - 13};
        zoomTop = zoomYcurrent - Math.round(zoomHeight / 2) - 5;
		if(zoomTop > zoomScrollTop + zoomScreenHeight - zoomHeight - 13) {zoomTop = zoomScrollTop + zoomScreenHeight - zoomHeight - 13};
        if(zoomTop < zoomScrollTop + 15) {zoomTop = zoomScrollTop + 15};
		
		$("#zooming img").css("width", "100%").css("height", "100%");

        $("#zooming").animate({
            width:zoomWidth,
            height:zoomHeight,
            left:zoomLeft,
            top:zoomTop
        }, 400, setBord);
    };
	
	function setBord() {
		$("#zooming").css("overflow","visible").css("left",zoomLeft - 4).css("top",zoomTop - 4);
		$("#zooming img").css("border","4px solid #FFF").css("box-shadow","0 0 10px #000").css("-moz-box-shadow","0 0 10px #000").css("-webkit-box-shadow","0 0 10px #000");
		if(zoomText !== "") {
			$("body").append('<div id="zoomTxt"><div>' + zoomText + '</div></div>');
			$("#zoomTxt").css("left", zoomLeft - 4).css("top", zoomTop + zoomHeight - 0 + 8).css("width", zoomWidth + 8).css("box-shadow","0 0 10px #000").css("-moz-box-shadow","0 0 10px #000").css("-webkit-box-shadow","0 0 10px #000");
		}
	};
});
