var zoomfx_ua = 'msie';
var W = navigator.userAgent.toLowerCase();
if (W.indexOf("opera") != -1) {
    zoomfx_ua = 'opera'
} else if (W.indexOf("msie") != -1) {
    zoomfx_ua = 'msie'
} else if (W.indexOf("mozilla") != -1) {
    zoomfx_ua = 'gecko'
}
var zoomfx_zooms = new Array();
function _el(id) {
    return document.getElementById(id)
};
function view_ia() {
    return false
};
function zoomfx_addEventListener(obj, event, listener) {
    if (zoomfx_ua == 'gecko' || zoomfx_ua == 'opera') {
        obj.addEventListener(event, listener, false)
    } else if (zoomfx_ua == 'msie') {
        obj.attachEvent("on" + event, listener)
    }
};
function zoomfx_removeEventListener(obj, event, listener) {
    if (zoomfx_ua == 'gecko' || zoomfx_ua == 'opera') {
        obj.removeEventListener(event, listener, false)
    } else if (zoomfx_ua == 'msie') {
        obj.detachEvent("on" + event, listener)
    }
};
function zoomfx_createMethodReference(object, methodName) {
    var args = arguments;
    return function() {
        object[methodName].apply(object, arguments, "")
    }
};
function zoomfx(smallImageContId, smallImageId, bigImageContId, bigImageId, conf) {
    this.recalculating = false;
    this.smallImageCont = _el(smallImageContId);
    this.smallImage = _el(smallImageId);
    this.bigImageCont = _el(bigImageContId);
    this.bigImage = _el(bigImageId);
    this.pup = 0;
    this.conf = conf;
    if (!this.conf["title"]) {
        this.conf["title"] = ""
    }
    this.bigImageSizeX = 0;
    this.bigImageSizeY = 0;
    this.smallImageSizeX = 0;
    this.smallImageSizeY = 0;
    this.popupSizeX = 20;
    this.popupSizey = 20;
    this.positionX = 0;
    this.positionY = 0;
    this.baseuri = '';
    this.safariOnLoadStarted = false;
    zoomfx_zooms.push(this);
    this.checkcoords_ref = zoomfx_createMethodReference(this, "checkcoords")
};
zoomfx.prototype.stopZoom = function() {
    zoomfx_removeEventListener(window.document, "mousemove", this.checkcoords_ref)
};
zoomfx.prototype.checkcoords = function(e) {
    var y = 0;
    var x = 0;
    if (zoomfx_ua == 'msie') {
        y = e.clientY;
        x = e.clientX;
        if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
            y = e.clientY + document.body.scrollTop;
            x = e.clientX + document.body.scrollLeft
        } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
            y = e.clientY + document.documentElement.scrollTop;
            x = e.clientX + document.documentElement.scrollLeft
        }
    } else {
        y = e.clientY;
        x = e.clientX;
        if (W.indexOf("safari") == -1) {
            y += window.pageYOffset;
            x += window.pageXOffset
        }
    }
    smallY = smallX = 0;
    var tag = this.smallImage;
    while (tag.tagName != "BODY" && tag.tagName != "HTML") {
        smallY += tag.offsetTop;
        smallX += tag.offsetLeft;
        tag = tag.offsetParent
    }
    if (x > parseInt(smallX + this.smallImageSizeX)) {
        this.hiderect();
        return false
    }
    if (x < parseInt(smallX)) {
        this.hiderect();
        return false
    }
    if (y > parseInt(smallY + this.smallImageSizeY)) {
        this.hiderect();
        return false
    }
    if (y < parseInt(smallY)) {
        this.hiderect();
        return false
    }
    return true
};
zoomfx.prototype.mousedown = function(e) {
    if (zoomfx_ua == 'gecko') {
        e.cancelBubble = true;
        e.preventDefault();
        e.stopPropagation()
    } else if (zoomfx_ua == 'msie' || zoomfx_ua == 'opera') {
        window.event.cancelBubble = true
    }
    this.smallImageCont.style.cursor = 'move'
};
zoomfx.prototype.mouseup = function(e) {
    if (zoomfx_ua == 'gecko') {
        e.cancelBubble = true;
        e.preventDefault();
        e.stopPropagation()
    } else if (zoomfx_ua == 'msie' || zoomfx_ua == 'opera') {
        window.event.cancelBubble = true
    }
    this.smallImageCont.style.cursor = 'default'
};
zoomfx.prototype.mousemove = function(e) {
    if (zoomfx_ua == 'gecko') {
        e.cancelBubble = true;
        e.preventDefault();
        e.stopPropagation()
    } else if (zoomfx_ua == 'msie' || zoomfx_ua == 'opera') {
        window.event.cancelBubble = true
    }
    for (i = 0; i < zoomfx_zooms.length; i++) {
        if (zoomfx_zooms[i] != this) {
            zoomfx_zooms[i].checkcoords(e)
        }
    }
    if (this.conf && this.conf["drag"] == true) {
        if (this.smallImageCont.style.cursor != 'move') {
            return
        }
    }
    if (this.recalculating) {
        return
    }
    if (!this.checkcoords(e)) {
        return
    }
    this.recalculating = true;
    var smallImg = this.smallImage;
    var smallX = 0;
    var smallY = 0;
    if (zoomfx_ua == 'gecko' || zoomfx_ua == 'opera') {
        var tag = smallImg;
        while (tag.tagName != "BODY" && tag.tagName != "HTML") {
            smallY += tag.offsetTop;
            smallX += tag.offsetLeft;
            tag = tag.offsetParent
        }
    }
    if (zoomfx_ua == 'msie') {
        this.positionX = event.x - this.smallImage.offsetLeft;
        var scrollTop = 0;
        this.positionY = event.y + scrollTop
    } else {
        this.positionX = e.clientX - smallX;
        this.positionY = e.clientY - smallY;
        if (W.indexOf("safari") == -1) {
            this.positionX += window.pageXOffset;
            this.positionY += window.pageYOffset
        }
    }
    if ((this.positionX + this.popupSizeX / 2) >= this.smallImageSizeX) {
        this.positionX = this.smallImageSizeX - this.popupSizeX / 2
    }
    if ((this.positionY + this.popupSizeY / 2) >= this.smallImageSizeY) {
        this.positionY = this.smallImageSizeY - this.popupSizeY / 2
    }
    if ((this.positionX - this.popupSizeX / 2) <= 0) {
        this.positionX = this.popupSizeX / 2
    }
    if ((this.positionY - this.popupSizeY / 2) <= 0) {
        this.positionY = this.popupSizeY / 2
    }
    setTimeout(zoomfx_createMethodReference(this, "showrect"), 10)
};
zoomfx.prototype.showrect = function() {
    this.pup.style.left = (this.positionX - this.popupSizeX / 2) + 'px';
    this.pup.style.top = (this.positionY - this.popupSizeY / 2) + 'px';
    this.pup.style.visibility = "visible";
    perX = parseInt(this.pup.style.left) * (this.bigImageSizeX / this.smallImageSizeX);
    perY = parseInt(this.pup.style.top) * (this.bigImageSizeY / this.smallImageSizeY);
    this.bigImage.style.left = ( - perX) + 'px';
    this.bigImage.style.top = ( - perY) + 'px';
    this.bigImageCont.style.display = 'block';
    this.bigImageCont.style.visibility = 'visible';
    this.bigImage.style.display = 'block';
    this.bigImage.style.visibility = 'visible';
    this.recalculating = false
};
zoomfx.prototype.hiderect = function() {
    if (this.conf && this.conf["imagesetoninit"] == true) return;
    this.pup.style.visibility = "hidden";
    this.bigImageCont.style.display = 'none';
    this.bigImageCont.style.visibility = 'visible'
};
zoomfx.prototype.initPopup = function() {
    this.pup = document.createElement("DIV");
    this.pup.className = 'zoomfxwindow';
    this.popupSizeX = (parseInt(this.bigImageCont.style.width) - 3) / (this.bigImageSizeX / this.smallImageSizeX);
    if (this.conf && this.conf["title"] != "") {
        this.popupSizeY = (parseInt(this.bigImageCont.style.height) - 3 - 19) / (this.bigImageSizeY / this.smallImageSizeY)
    } else {
        this.popupSizeY = (parseInt(this.bigImageCont.style.height) - 3) / (this.bigImageSizeY / this.smallImageSizeY)
    }
    this.pup.style.width = this.popupSizeX + 'px';
    this.pup.style.height = this.popupSizeY + 'px';
    this.smallImageCont.appendChild(this.pup);
    this.smallImageCont.unselectable = "on";
    this.smallImageCont.style.MozUserSelect = "none";
    this.smallImageCont.onselectstart = view_ia;
    this.smallImageCont.oncontextmenu = view_ia
};
zoomfx.prototype.initBigContainer = function() {
    var bigimgsrc = this.bigImage.src;
    while (this.bigImageCont.firstChild) {
        this.bigImageCont.removeChild(this.bigImageCont.firstChild)
    }
    if (zoomfx_ua == 'msie') {
        var f = document.createElement("IFRAME");
        f.style.left = '0px';
        f.style.top = '0px';
        f.style.position = 'absolute';
        f.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
        f.style.width = this.bigImageCont.style.width;
        f.style.height = this.bigImageCont.style.height;
        f.frameBorder = 0;
        this.bigImageCont.appendChild(f)
    }
    if (this.conf && this.conf["title"] != "") {
        var f = document.createElement("DIV");
        f.className = 'zoomfxtitle';
        f.innerHTML = this.conf["title"];
        this.bigImageCont.appendChild(f)
    }
    var dc = document;
    var dcl = dc.location;
    var dclh = dcl.href;
    var f = document.createElement("IMG");
    var ar1 = document.createElement("DIV");
    ar1.style.overflow = "hidden";
    this.bigImageCont.appendChild(ar1);
    this.bigImage = document.createElement("IMG");
    this.bigImage.src = bigimgsrc;
    this.bigImage.style.position = 'relative';
    ar1.appendChild(this.bigImage)
};
zoomfx.prototype.initZoom = function() {
    if (W.indexOf("safari") != -1) {
        if (!this.safariOnLoadStarted) {
            zoomfx_addEventListener(this.bigImage, "load", zoomfx_createMethodReference(this, "initZoom"));
            this.safariOnLoadStarted = true;
            return
        }
    } else {
        if (!this.bigImage.complete || !this.smallImage.complete) {
            setTimeout(zoomfx_createMethodReference(this, "initZoom"), 100);
            return
        }
    }
    this.bigImageSizeX = this.bigImage.width;
    this.bigImageSizeY = this.bigImage.height;
    this.smallImageSizeX = this.smallImage.width;
    this.smallImageSizeY = this.smallImage.height;
    if (this.bigImageSizeX == 0 || this.bigImageSizeY == 0 || this.smallImageSizeX == 0 || this.smallImageSizeY == 0) {
        this.bigImage.src += '?' + Math.random();
        this.smallImage.src += '?' + Math.random();
        setTimeout(zoomfx_createMethodReference(this, "initZoom"), 100);
        return
    }
    this.smallImageCont.style.width = this.smallImage.width + 'px';
    this.smallImageCont.style.height = this.smallImage.height + 'px';
    this.initBigContainer();
    this.initPopup();
    zoomfx_addEventListener(window.document, "mousemove", this.checkcoords_ref);
    zoomfx_addEventListener(this.smallImageCont, "mousemove", zoomfx_createMethodReference(this, "mousemove"));
    if (this.conf && this.conf["drag"] == true) {
        zoomfx_addEventListener(this.smallImageCont, "mousedown", zoomfx_createMethodReference(this, "mousedown"));
        zoomfx_addEventListener(this.smallImageCont, "mouseup", zoomfx_createMethodReference(this, "mouseup"));
        this.positionX = this.smallImageSizeX / 2;
        this.positionY = this.smallImageSizeY / 2;
        this.showrect()
    }
};
