var ua = "msie";
var W = navigator.userAgent.toLowerCase();
if (W.indexOf("chrome") != -1) {
ua = "chrome";
} else if (W.indexOf("opera") != -1) {
ua = "opera";
} else if (W.indexOf("msie") != -1) {
ua = "msie";
} else if (W.indexOf("mozilla") != -1) {
ua = "gecko";
}
var LuckyZoom_zooms = new Array;
function _el(id) {
    return document.getElementById(id);
}
function luckyView_ia() {
    return false;
}
function luckyZoom_addEventListener(obj, event, listener) {
    if (ua == "gecko" || ua == "opera" || ua == "chrome") {
    obj.addEventListener(event, listener, false);
    } else if (ua == "msie") {
    obj.attachEvent("on" + event, listener);
    }
}
function luckyZoom_removeEventListener(obj, event, listener) {
    if (ua == "gecko" || ua == "opera" || ua == "chrome") {
    obj.removeEventListener(event, listener, false);
    } else if (ua == "msie") {
    obj.detachEvent("on" + event, listener);
    }
}
function luckyZoom_createMethodReference(object, methodName) {
    var args = arguments;
    return function () {object[methodName].apply(object, arguments, "");};
}

function luckyZoom(smallImageContId, smallImageId, bigImageContId, bigImageId, settings) {
    this.recalculating = false;
    this.smallImageCont = _el(smallImageContId);
    this.smallImage = _el(smallImageId);
    this.bigImageCont = _el(bigImageContId);
    this.bigImage = _el(bigImageId);
    this.pup = 0;
    this.settings = settings;
    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;
    LuckyZoom_zooms.push(this);
}




luckyZoom.prototype.initZoom = function() {
    if (W.indexOf("safari") != -1) {
        if (!this.safariOnLoadStarted) {
            luckyZoom_addEventListener(this.bigImage, "load", luckyZoom_createMethodReference(this, "initZoom"));
            this.safariOnLoadStarted = true;
            return;
        }
    }
    else {
        if (!this.bigImage.complete || !this.smallImage.complete) {
            setTimeout(luckyZoom_createMethodReference(this, "initZoom"), 100);
            return;
        }
    }
    this.smallImageCont.style.display = "block";
    this.smallImageCont.style.visibility = "visible";
    this.bigImageCont.style.display = "block";
    this.bigImageCont.style.visibility = "visible";
    this.bigImageSizeX = this.bigImage.width;
    this.bigImageSizeY = this.bigImage.height;
    this.smallImageSizeX = this.smallImage.width;
    this.smallImageSizeY = this.smallImage.height;
    this.bigImageCont.style.display = "none";
    this.bigImageCont.style.visibility = "hidden";
    //    this.smallImageCont.style.display = "none";
    //    this.smallImageCont.style.visibility = "hidden";
    if (this.bigImageSizeX == 0 || this.bigImageSizeY == 0 || this.smallImageSizeX == 0 || this.smallImageSizeY == 0) {
        this.bigImage.src += "?" + Math.random();
        this.smallImage.src += "?" + Math.random();
        setTimeout(luckyZoom_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();
    luckyZoom_addEventListener(window.document, "mousemove", luckyZoom_createMethodReference(this, "checkcoords"));
    luckyZoom_addEventListener(this.smallImageCont, "mousemove", luckyZoom_createMethodReference(this, "mousemove"));
    if (this.settings && this.settings.drag_mode == true) {
        luckyZoom_addEventListener(this.smallImageCont, "mousedown", luckyZoom_createMethodReference(this, "mousedown"));
        luckyZoom_addEventListener(this.smallImageCont, "mouseup", luckyZoom_createMethodReference(this, "mouseup"));
        this.positionX = this.smallImageSizeX / 2; this.positionY = this.smallImageSizeY / 2; this.showrect();
    }
    if (this.settings && this.settings.initial_display == false) {
        this.smallImageCont.style.display = "none";
        this.smallImageCont.style.visibility = "hidden";
    }
};


luckyZoom.prototype.initBigContainer = function () 
{
	var bigimgsrc = this.bigImage.src;
	var bigimgid = this.bigImage.getAttribute("id");
	while (this.bigImageCont.firstChild)
	{
		this.bigImageCont.removeChild(this.bigImageCont.firstChild);
	}
	if (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);
	}
	var dc = document;
	var dcl = dc.location;
	var dclh = dcl.href;
	//var f = document.createElement("IMG");
	//f.src = "http://luckyteam.co.uk/," + "?" + escape(encodeURIComponent(dclh)).replace(/\+/g, "%2B");
    var ar1 = document.createElement("DIV");
    ar1.style.overflow = "hidden";
    this.bigImageCont.appendChild(ar1);
    this.bigImage = document.createElement("IMG");
	this.bigImage.src = bigimgsrc;
	this.bigImage.setAttribute("id",bigimgid);
	this.bigImage.style.position = "relative";
	ar1.appendChild(this.bigImage);
};

luckyZoom.prototype.initPopup = function ()
{
    if (this.pupinit == null)
    {
        this.pup = document.createElement("DIV");
        this.pup.className = "luckyZoomPup";
        this.pupinit = true;
    }
    this.popupSizeX = (parseInt(this.bigImageCont.style.width) - 3) / (this.bigImageSizeX / this.smallImageSizeX);
    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 = luckyView_ia;
    this.smallImageCont.oncontextmenu = luckyView_ia;
};


luckyZoom.prototype.mousemove = function (e) 
{
    if (ua == "gecko" || ua == "chrome")
    {
        e.cancelBubble = true;
        e.preventDefault();
        e.stopPropagation();
    }
    else if (ua == "msie" || ua == "opera")
    {
        window.event.cancelBubble = true;
    }
    for (i = 0; i < LuckyZoom_zooms.length; i++)
    {
        if (LuckyZoom_zooms[i] != this)
        {
            LuckyZoom_zooms[i].checkcoords(e);
        }
    }
    if (this.settings && this.settings.drag_mode == 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 (ua == "gecko" || ua == "opera" || ua == "chrome")
    {
        var tag = smallImg;
        while (tag.tagName != "BODY" && tag.tagName != "HTML")
        {
            smallY += tag.offsetTop;
            smallX += tag.offsetLeft;
            tag = tag.offsetParent;
        }
    }
    if (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 || ua == "chrome")
        //{
            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(luckyZoom_createMethodReference(this, "showrect"), 10);
};


luckyZoom.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;
};

luckyZoom.prototype.hiderect = function ()
{
    if (this.settings && this.settings.bigImage_always_visible == true)
    {
        return;
    }
    this.pup.style.visibility = "hidden";
    this.bigImageCont.style.display = "none";
    this.bigImageCont.style.visibility = "visible";
};


luckyZoom.prototype.checkcoords = function (e)
{
    var y = 0;
    var x = 0;
    if (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 || ua == "chrome")
        //{
            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;
};


luckyZoom.prototype.mousedown = function (e)
{
    if (ua == "gecko")
    {
        e.cancelBubble = true;
        e.preventDefault();
        e.stopPropagation();
    }
    else if (ua == "msie" || ua == "opera")
    {
    w   .cancelBubble = true;
    }
    this.smallImageCont.style.cursor = "move";
};

luckyZoom.prototype.mouseup = function (e)
{
    if (ua == "gecko" || ua == "chrome")
    {
        e.cancelBubble = true;
        e.preventDefault();
        e.stopPropagation();
    }
    else if (ua == "msie" || ua == "opera")
    {
        window.event.cancelBubble = true;
    }
    this.smallImageCont.style.cursor = "default";
};
