/* zoom any image
 * widget by IonDen
 * v 1.0
 * 15.01.2010
 * rev. 15
 * depends on jQuery 1.4
 */

$(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;

    $(document).bind("mousemove",function(e){
        zoomX = e.pageX;
        zoomY = e.pageY;
    });

    $("a.zoom").click(function(event) {
        event.preventDefault();
        if(zoomShow === false) {
            $(this).focus();
            zoomShow = true;
            zoomUrl = $(this).attr("href");
            $("body").append('<div id="zoomLoading">загрузка</div><div id="zooming"></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);
            zoom();
        } else {
            $(this).blur();
            zoomHide();
        };
    });

    $("a.zoom").blur(function() {
        zoomHide();
    });

    function zoom() {
        $("#zooming").html("<img src='" + zoomUrl + "' />");
        zoomWait = setInterval(zoomWaiting, 100);
    };

    function zoomHide() {
        zoomShow = false;
        $("#zoomLoading").remove();
        $("#zooming").remove();
		$("#zoomBord").remove();
		zoomWidth = 0;
		zoomHeight = 0;
    };

    function zoomWaiting() {
        if(zoomWidth === 0) {
            zoomWidth = $("#zooming img").width();
            zoomHeight = $("#zooming img").height();
        } else {
            clearInterval(zoomWait);
            showZoom();
        };
    };

    function showZoom() {
        zoomLeft = zoomXcurrent - Math.round(zoomWidth / 2) - 5;
        if(zoomLeft < 5) {zoomLeft = 5};
        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 + 5) {zoomTop = zoomScrollTop + 5};

		$("#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");
	};
});
