/**
 * Zoom Class for images
 *
 * Integra Internet Management
 * @author Frank Habermann <habermann@2im.de>
 * @date 20080804
 * @version 1.0.1
 */

Zoom = {
    elementId: '',
    elementZoomId: '',

    mouseX: 0,
    mouseY: 0,

    dx: 0,
    dy: 0,

    zoomFactor: 1.9,

    fact: 0,
    opp: 60,

    me: function(elementId, zoomFactor) {
        this.elementId = elementId;
        if(zoomFactor != undefined) this.zoomFactor = zoomFactor;
        else this.zoomFactor = 1.6;

        this.init();
        this.show();
    },

    init: function() {
        this.elementZoomId = this.elementId + '_ZOOM';
        this.createZoomElement();
    },

    getMousePosition: function(e) {
        if (document.all){
            Zoom.mouseX=event.x;
            Zoom.mouseY=event.y;
            Zoom.dx=window.document.body.scrollLeft;
            Zoom.dy=window.document.body.scrollTop;
        }
        else{
            Zoom.mouseX=e.pageX;
            Zoom.mouseY=e.pageY;
        }
    },

    show: function() {
        // get position of original img element
        var pos = this.getElementPosition(document.getElementById(this.elementId));
        var top = pos.y;
        var left = pos.x;

        // calculate
        x=this.mouseX - left;
        y=this.mouseY - top;

        x1=-this.opp+(x+this.dx) * this.fact;	//left
        y1=-this.opp+(y+this.dy) * this.fact;	//top
        x2=+this.opp+(x+this.dx) * this.fact;	//right
        y2=+this.opp+(y+this.dy) * this.fact;	//bottom

        document.getElementById(this.elementZoomId).style.display = "block";
        document.getElementById(this.elementZoomId).style.left=(x+this.dx)*(1-this.fact)+left;
        document.getElementById(this.elementZoomId).style.top=(y+this.dy)*(1-this.fact)+top;
        document.getElementById(this.elementZoomId).style.clip="rect(" +y1 +"px," +x2 +"px," +y2 +"px,"	+x1 +"px)";
    },

    hide: function() {
        document.getElementById(this.elementZoomId).style.display = 'none';
    },

    createZoomElement: function() {
        if(document.getElementById(this.elementZoomId) == null) {
            // create element as child element of parentelement of the normal img element
            zoomElement = document.createElement('img');
            zoomElement.id = this.elementZoomId;
            originalElement = document.getElementById(this.elementId);
            document.body.appendChild(zoomElement);
            

            // hide element
            zoomElement.style.display = 'block';
            zoomElement.style.position = 'absolute';
            zoomElement.style.zindex = 999;
            zoomElement.style.overflow = 'hidden';
            originalElement.style.zindex = 50;

            // add attributes
            zoomElement.src = originalElement.src;
            zoomElement.width = parseInt(originalElement.width) * parseFloat(this.zoomFactor);
            zoomElement.height = parseInt(originalElement.height) * parseFloat(this.zoomFactor);
            zoomElement.onclick = originalElement.onclick;

            zoomElement.onmouseover = function() { Zoom.show() };
            zoomElement.onmousemove = function() { Zoom.show() };
            zoomElement.onmouseout = function() { Zoom.hide() };

            this.fact = parseInt(document.getElementById(this.elementZoomId).width) / parseInt(document.getElementById(this.elementId).width);
            zoomElement.style.display = 'none';
        }
    },

    getElementPosition: function (element) {
        var pos = { y: 0, x: 0 };
        var i = 0;

        if(element)
        {
            
            var elem=element;
            var border = originalElement.style.border.split(" ");
            for(x=0;x<border.length;x++){
                sub = border[x];
                if(sub.search(/.px/) != -1) {
                    var addoffset = sub.replace('px','');
                    break;
                }
            }
             while(elem && typeof element.offsetParent != "undefined" && typeof element.offsetLeft == "number")
             {
                    //alert(elem.offsetLeft);
                    if(element.currentStyle) {
                        if(element.currentStyle.position!='relative') {
                            pos.y += elem.offsetTop;
                            pos.x += elem.offsetLeft;
                        }
                    } else {
                        pos.y += elem.offsetTop;
                        pos.x += elem.offsetLeft;
                    }

                elem = elem.offsetParent;
             }
        }
        return pos;
    }
};

function handleMove (ev) {
  if (!ev)
    ev = window.event;
  var mausposition = ev.pageX ? ev.pageX : ev.clientX;

}


// catch mousemove event
if (document.addEventListener) { document.addEventListener("mousemove", handleMove, true);
} else { document.body.onmousemove = handleMove; }



// track mousemove
document.onmousemove=Zoom.getMousePosition;
