var lens = {};
var zoomImg = {};
var zoomDiv = {};
var prevImg = {};
lens.width = 50;
lens.height = 50;

function initZoom(e)
{
        zoomDiv.e = $('zoomDiv');
        zoomImg.e = zoomDiv.e.down('img');
        zoomImg.width = zoomImg.e.getDimensions().width;
        zoomImg.height = zoomImg.e.getDimensions().height;
        if(zoomImg.width > 500 || zoomImg.height > 400)
        {
                lens.e = Builder.node('div', {style: 'width: ' + lens.width + 'px; height: ' + lens.height + 'px; margin: -' + lens.height/2 + 'px 0 0 -' + lens.width/2 + 'px; position: absolute;border: 1px solid #000; background: #FF0;top:50%;left:50%;'});
                lens.e.setOpacity(0.5);
                e.appendChild(lens.e);
                zoomImg.e.setStyle({left:'-50%', top: '-50%'});
                prevImg.e = e.down('img');
                prevImg.offset = prevImg.e.positionedOffset();
                prevImg.width = prevImg.e.getDimensions().width;
                prevImg.height = prevImg.e.getDimensions().height;
                e.setStyle({width: prevImg.width + 'px', height: prevImg.height + 'px'});
                e.observe('mousemove', mooveZoom);
        }
        else
        {
                zoomImg.e.setStyle({left:0, top: 0});    
        }
}
function mooveZoom(event){
        var e = event.currentTarget ? event.currentTarget : event.target;
        while(e.className != 'zoomarea')
        {
            e = e.parentNode;
        }

        var zoomarea = {};
        zoomarea.e = e;
        zoomarea.offset = zoomarea.e.cumulativeOffset();
        
        lens.left = Event.pointerX(event) - zoomarea.offset.left - (lens.width/2);
        lens.top = Event.pointerY(event) - zoomarea.offset.top - (lens.height/2);
        
        if(lens.left < prevImg.offset.left)
        {
                lens.left = prevImg.offset.left;
        }
        else if(lens.left + lens.width > prevImg.offset.left + prevImg.width)
        {
                lens.left = prevImg.offset.left + prevImg.width - lens.width;
        }
        
        if(lens.top < prevImg.offset.top)
        {
                lens.top = prevImg.offset.top;
        }
        else if(lens.top + lens.width > prevImg.offset.top + prevImg.height)
        {
                lens.top = prevImg.offset.top + prevImg.height - lens.height;
        }
        
        lens.e.setStyle({margin: 0, left:lens.left + 'px', top:lens.top + 'px'});
        zoomImg.width = zoomImg.e.getWidth();
        zoomImg.height = zoomImg.e.getHeight();
        
        zoomImg.left = -1 * (zoomImg.width / prevImg.width) * (Math.floor(lens.left) - prevImg.offset.left);
        zoomImg.top = -1 * (zoomImg.height / prevImg.height) * (lens.top - prevImg.offset.top);
        
        if(zoomImg.left < zoomDiv.width - zoomImg.width)
        {
                zoomImg.left = zoomDiv.width - zoomImg.width;
        }
        if(zoomImg.top < zoomDiv.height - zoomImg.height)
        {
                zoomImg.top = zoomDiv.height - zoomImg.height;
        }
        zoomImg.e.setStyle({left: zoomImg.left + 'px', top: zoomImg.top + 'px'});
};
