/* Copyright 2006 LuckyTeam.co.uk. To use this code on your own site, visit http://luckyteam.co.uk */

function frescaZoom(smallImageContId, smallImageId, bigImageContId, bigImageId){

	this.recalculating = false;

	this.smallImageCont = _el(smallImageContId);
	this.smallImage = _el(smallImageId);
	this.bigImageCont = _el(bigImageContId);
	this.bigImage = _el(bigImageId);
	this.pup = 0;

	this.bigImageSizeX = 0;
	this.bigImageSizeY = 0;
	this.smallImageSizeX = 0;
	this.smallImageSizeY = 0;
	this.popupSizeX = 0;
	this.popupSizey = 0;
	this.positionX = 0;
	this.positionY = 0;

	this.baseuri = '';
};

frescaZoom.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 + window.pageYOffset;
		x = e.clientX + window.pageXOffset;
	}

	
	if(x > parseInt(this.smallImageCont.offsetLeft + this.smallImageSizeX)){
		this.hiderect();
		return false;
	}
	if(x < parseInt(this.smallImageCont.offsetLeft) ){
		this.hiderect();
		return false;
	}
	if(y > parseInt(this.smallImageCont.offsetTop + this.smallImageSizeY)){
		this.hiderect();
		return false;
	}
	if(y < parseInt(this.smallImageCont.offsetTop) ){
		this.hiderect();
		return false;
	}
	return true;
};

frescaZoom.prototype.mousemove = function (e) {
	if(ua == 'gecko')
	{
		e.cancelBubble=true;
		e.preventDefault();
		e.stopPropagation();
	}
	else if (ua == 'msie' || ua == 'opera')
	{
		window.event.cancelBubble = true;
	}

	if(this.recalculating){
		return;
	}
	this.recalculating = true;

	var smallImg = this.smallImage;
	var smallX = 0;
	var smallY = 0;

	if(ua == 'gecko' || ua == 'opera')
	{
		var tag = smallImg;
		while (tag.tagName!="BODY")
		{
			smallY+=tag.offsetTop;
			smallX+=tag.offsetLeft;
			tag=tag.offsetParent;
		}
	}

	if(ua == 'msie'){
		this.positionX = event.x + document.body.scrollLeft;
		this.positionY = event.y + document.body.scrollTop;
	} else {
		this.positionX = e.clientX - smallX;
		this.positionY = e.clientY - smallY;
	}

	/* check borders */
	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;
	}

	theValue = "" + this.positionX;
	
	/*if (theValue.indexOf(".") != -1)
	{ 
		this.recalculating = false;
		this.hiderect();
		return;
	}*/

	setTimeout(createMethodReference(this, "showrect"), 10);
};

frescaZoom.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.recalculating = false;

};

frescaZoom.prototype.hiderect = function () {
	this.pup.style.visibility = "hidden";
	this.bigImageCont.style.display = 'none';
	this.bigImageCont.style.visibility = 'visible';
};

frescaZoom.prototype.initPopup = function () {
	this.pup = document.createElement("DIV");
	this.pup.className = 'frescaZoomPup';
	this.popupSizeX = (parseInt(this.bigImageCont.style.width) - 3)/(this.bigImageSizeX/this.smallImageSizeX);
	this.popupSizeY = (parseInt(this.bigImageCont.style.height) - 19 - 3)/(this.bigImageSizeY/this.smallImageSizeY);
	this.pup.style.width = this.popupSizeX + 'px';
	this.pup.style.height = this.popupSizeY + 'px';

	this.smallImageCont.appendChild(this.pup);
};

frescaZoom.prototype.initBigContainer = function () {
	var bigimgsrc = this.bigImage.src;

	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 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);
};

frescaZoom.prototype.initZoom = function () {
	var elements = document.getElementsByTagName('script');
	for (var i=0; i<elements.length; i++) {
		if (elements[i].src && (elements[i].src.indexOf("frescaZoom.js") != -1 || elements[i].src.indexOf("packed.js") != -1)) {
			var src = elements[i].src;

			srcMode = (src.indexOf('_src') != -1) ? '_src' : '';
			src = src.substring(0, src.lastIndexOf('/'));

			this.baseuri = src;
			break;
		}
	}

	this.bigImageSizeX = this.bigImage.width-3;
	this.bigImageSizeY = this.bigImage.height-22;
	this.smallImageSizeX = this.smallImage.width;
	this.smallImageSizeY = this.smallImage.height;
	this.initBigContainer();
	this.initPopup();


	myAddEventListener(window.document, "mousemove", createMethodReference(this, "checkcoords"));
	myAddEventListener(this.smallImageCont, "mousemove", createMethodReference(this, "mousemove"));
};
