
	var TopDivName;
	var faderDirection = 0;
	var fadeValue = 0;
	var faderDirections = new Array();
	var fadeValues = new Array();

	function fnInitZoomVariables(_photo_w, _photo_h, _photo2_w, _photo2_h, _zoom_w, _zoom_h, _border, _smallPhotoDivName, _smallPhotoShadowDivName, _bigPhotoDivName, _flyBoxDivName, _flyBoxPhotoDivName, _zoomBoxDivName, _popupDivName, _objName) {

		var SettingsObject = new Object; 

		SettingsObject.photo_w = _photo_w;
		SettingsObject.photo_h = _photo_h;
		SettingsObject.photo2_w = _photo2_w;
		SettingsObject.photo2_h = _photo2_h;
		SettingsObject.zoom_w = _zoom_w;
		SettingsObject.zoom_h = _zoom_h;
		SettingsObject.border = _border;
		SettingsObject.ratio_x = _photo2_w / _photo_w;
		SettingsObject.ratio_y = _photo2_h / _photo_h;
		SettingsObject.fly_w = _zoom_w / SettingsObject.ratio_x - 1;
		SettingsObject.fly_h = _zoom_h / SettingsObject.ratio_y - 1;
		SettingsObject.smallPhotoDivName = _smallPhotoDivName;
		SettingsObject.smallPhotoShadowDivName = _smallPhotoShadowDivName;
		SettingsObject.bigPhotoDivName = _bigPhotoDivName;
		SettingsObject.flyBoxDivName = _flyBoxDivName;
		SettingsObject.flyBoxPhotoDivName = _flyBoxPhotoDivName;
		SettingsObject.zoomBoxDivName = _zoomBoxDivName;
		SettingsObject.popupDivName = _popupDivName;
		SettingsObject.objName = _objName;

		SettingsObject.smallPhotoOffset = {x:0, y:0};
		SettingsObject.bigPhotoOffset = {x:0, y:0};

		SettingsObject.popupOffset = {x:0, y:0};

		if (_popupDivName != '') {
			var popupDiv = document.getElementById(_popupDivName);
			if (popupDiv != null) {
				offsetPair = findPosMagnify(document.getElementById(_popupDivName));
				SettingsObject.popupOffset.x = offsetPair[0];
				SettingsObject.popupOffset.y = offsetPair[1];
			}
		}

		return SettingsObject;
	}          
	function fnAttachHandlers(iOrigWidth, iZoomWidth, ProdDetZoomSettings) {
	
		// These three handlers that use the 'event' object must be added differently in firefox
		if (navigator.appName.indexOf("Microsoft") != -1) { document.getElementById(ProdDetZoomSettings.smallPhotoShadowDivName).onmousemove = function() { fnTrackMouse(ProdDetZoomSettings, event); } }
		else { document.getElementById(ProdDetZoomSettings.smallPhotoShadowDivName).setAttribute("onmousemove", "fnTrackMouse(" + ProdDetZoomSettings.objName + ", event);"); }
		if (navigator.appName.indexOf("Microsoft") != -1) { document.getElementById(ProdDetZoomSettings.smallPhotoDivName).onmouseover = function() { if(zoomOn){fnCalculateZoomPos(ProdDetZoomSettings); fnStepOnOff(ProdDetZoomSettings, true); fnTrackMouse(ProdDetZoomSettings, event); }} }
		else { document.getElementById(ProdDetZoomSettings.smallPhotoDivName).setAttribute("onmouseover", "if(zoomOn){fnCalculateZoomPos(" + ProdDetZoomSettings.objName + "); fnStepOnOff(" + ProdDetZoomSettings.objName + ", zoomOn); fnTrackMouse(" + ProdDetZoomSettings.objName + ", event);}"); }
		if (navigator.appName.indexOf("Microsoft") != -1) { document.getElementById(ProdDetZoomSettings.flyBoxDivName).onmousemove = function() { fnTrackMouse(ProdDetZoomSettings, event); } }
		else { document.getElementById(ProdDetZoomSettings.flyBoxDivName).setAttribute("onmousemove", "fnTrackMouse(" + ProdDetZoomSettings.objName + ", event);"); }

		// When no 'event' object is passed to a handler, all browsers can add event handlers like so:
		document.getElementById(ProdDetZoomSettings.flyBoxDivName).onmouseout = function() { fnStepOnOff(ProdDetZoomSettings, false); }
		document.getElementById(ProdDetZoomSettings.flyBoxPhotoDivName).onmouseout = function() { fnStepOnOff(ProdDetZoomSettings, false); }
		document.getElementById(ProdDetZoomSettings.flyBoxPhotoDivName).style.width = iOrigWidth + "px";
		document.getElementById(ProdDetZoomSettings.flyBoxPhotoDivName).style.height = oImage.height + "px";
		document.getElementById(ProdDetZoomSettings.smallPhotoShadowDivName).style.width = iOrigWidth + "px";
		document.getElementById(ProdDetZoomSettings.smallPhotoShadowDivName).style.height = oImage.height + "px";
		document.getElementById(ProdDetZoomSettings.bigPhotoDivName).style.width = iZoomWidth + "px";
		document.getElementById(ProdDetZoomSettings.bigPhotoDivName).style.height = oImage_Magnify.height + "px";
		fnCalculateZoomPos(ProdDetZoomSettings);
	}
	
	function fnTrackMouse(setObj, evt) {
	
		if (setObj == null) {return;}
		max_x = setObj.photo_w + setObj.border - setObj.fly_w - setObj.border*2;
		max_y = setObj.photo_h + setObj.border - setObj.fly_h - setObj.border*2;

		min_x = setObj.border;
		min_y = setObj.border;

		max_x2 = setObj.zoom_w/1 - setObj.photo2_w;
		max_y2 = setObj.zoom_h/1 - setObj.photo2_h;
		min_x2 = 0;
		min_y2 = 0;

		var bigPhoto = document.getElementById(setObj.bigPhotoDivName);
		var flyDiv = document.getElementById(setObj.flyBoxDivName);
		var flyPhotoDiv = document.getElementById(setObj.flyBoxPhotoDivName);
		if (flyPhotoDiv != null) {
			var o = fPosition(evt);
			
			var smallPhoto = document.getElementById(setObj.smallPhotoDivName);
			
			real_x = o.x - setObj.smallPhotoOffset.x - setObj.popupOffset.x;
			real_y = o.y - setObj.smallPhotoOffset.y - setObj.popupOffset.y;
			
			x = real_x - setObj.fly_w/2;
			y = real_y - setObj.fly_h/2;


			if (x > max_x) {x = max_x;}
			if (y > max_y) {y = max_y;}
			if (x < min_x) {x = min_x;}
			if (y < min_y) {y = min_y;}
			
			x2 = 0 - (real_x) * setObj.ratio_x + (setObj.zoom_w)/2;
			y2 = 0 - (real_y) * setObj.ratio_y + (setObj.zoom_h)/2;
			
			if (x2 > min_x2) {x2 = min_x2;}
			if (y2 > min_y2) {y2 = min_y2;}
			if (x2 < max_x2) {x2 = max_x2;}
			if (y2 < max_y2) {y2 = max_y2;}

            bigPhoto.style.left = x2 + 'px';
			bigPhoto.style.top = y2 + 'px';	
			flyDiv.style.left = setObj.smallPhotoOffset.x - setObj.border + x + 'px';
			flyDiv.style.top = setObj.smallPhotoOffset.y - setObj.border + y + 'px';
			
			flyPhotoDiv.style.left = 0 - x + 'px';
			flyPhotoDiv.style.top = 0 - y + 'px';
		}
	}

	function fnStepOnOff(setObj, onoff) {
		if (setObj == null) {return;}
		var intObj = document.getElementById("MiddleWrap");
		if (onoff == true) {			
			document.getElementById(setObj.smallPhotoShadowDivName).style.display = '';
			document.getElementById(setObj.flyBoxDivName).style.display = '';
			faderDirections[setObj.zoomBoxDivName] = 1;
			fSmoothShow(setObj.zoomBoxDivName, 25, 0, 1, 0, 0.1);	
			
            if (intObj && setObj.objName != '') {
                if (navigator.appName.indexOf("Microsoft") != -1) {
                    intObj.onmousemove = function() {return fDblCheckZoom(setObj, event);}
                } else { // Firefox, Opera, Safari etc.
                    intObj.setAttribute("onmousemove", "fDblCheckZoom(" + setObj.objName + ", event);");
                }
            }      
		} else {
			document.getElementById(setObj.smallPhotoShadowDivName).style.display = 'none';
			document.getElementById(setObj.flyBoxDivName).style.display = 'none';
			faderDirections[setObj.zoomBoxDivName] = -1;
			fSmoothShow(setObj.zoomBoxDivName, 25, 1, 0, 1, -0.1);
						
            if (intObj && setObj.objName != '') {
                if (navigator.appName.indexOf("Microsoft") != -1) {
                    intObj.onmousemove = "";
                }
                else { // Firefox, Opera, Safari etc.
                    intObj.setAttribute("onmousemove", "");
        		}
        	}
			
         }
    }

	function fSetFlySize(setObj) {
		if (setObj == null) {return;}
		var targetDiv = document.getElementById(setObj.flyBoxDivName);
		if (targetDiv != null) {
		    if (setObj.fly_w != NaN) {
    			targetDiv.style.width = Math.floor(setObj.fly_w) + 'px';
			} 
		    if (setObj.fly_h != NaN) {
    			targetDiv.style.height = Math.floor(setObj.fly_h) + 'px';
		    }
		}
	}
	
	function fDblCheckZoom(setObj, evt) {
		if (setObj == null) {return;}
		var flyDiv = document.getElementById(setObj.flyBoxDivName);
		var o = fPosition(evt);
		if ((flyDiv.style.display == '') && ((o.x < (setObj.smallPhotoOffset.x + setObj.popupOffset.x)) || (o.x > ((setObj.smallPhotoOffset.x + setObj.popupOffset.x) + setObj.photo_w)) || (o.y < (setObj.smallPhotoOffset.y + setObj.popupOffset.y)) || (o.y > ((setObj.smallPhotoOffset.y + setObj.popupOffset.y) + setObj.photo_h )))) {
			fnStepOnOff(setObj, false);
		}
	}


	function fnCalculateZoomPos(setObj) {
	
		if (setObj.popupDivName != '') {
			var popupDiv = document.getElementById(setObj.popupDivName);
			if (popupDiv != null) {
				offsetPair = findPosMagnify(document.getElementById(setObj.popupDivName));
				setObj.popupOffset.x = offsetPair[0];
				setObj.popupOffset.y = offsetPair[1];
			}
		}
		
		if (setObj == null) {return;}
		var imgplace = 	document.getElementById(setObj.smallPhotoDivName);
		var imgpos = findPosMagnify(imgplace);
		var detpos = findPosMagnify(imgplace);

		dx = parseInt(imgplace.style.width);
		detpos[0] = imgpos[0] + dx;

		var photoplace = document.getElementById(setObj.smallPhotoDivName);
		var photoplaceshadow = document.getElementById(setObj.smallPhotoShadowDivName);
		var zoombox = document.getElementById(setObj.zoomBoxDivName);

		photoplace.style.left = imgpos[0] - setObj.popupOffset.x + 'px';
		photoplace.style.top = imgpos[1] - setObj.popupOffset.y + 'px';
		photoplace.style.display = '';

		photoplaceshadow.style.left = imgpos[0] - setObj.popupOffset.x + 'px';
		photoplaceshadow.style.top = imgpos[1] - setObj.popupOffset.y + 'px';

		zoombox.style.left = detpos[0] - setObj.popupOffset.x + 'px';
		zoombox.style.top = detpos[1] - setObj.popupOffset.y + 'px';
		
		zoombox.style.width = setObj.zoom_w + 'px';
		zoombox.style.height = setObj.zoom_h + 'px';

		setObj.smallPhotoOffset.x = imgpos[0] - setObj.popupOffset.x;
		setObj.smallPhotoOffset.y = imgpos[1] - setObj.popupOffset.y;

		fSetFlySize(setObj);
	}

	function fnShowLargeColour(sender, colourImgSrc, rgbCode, colourCaption) {
		var colourDiv = document.getElementById("LgeColour");
		if (colourDiv != null) {
			var imgObj = document.getElementById("LgeImage");
			var clrBoxObj = document.getElementById("LgeColourBox");
			var captionObj = document.getElementById("LgeCaption");
			if ((imgObj != null) && (captionObj != null) && (clrBoxObj != null)) {
				clrBoxObj.style.display = 'none';
				imgObj.style.display = 'none';
				clrBoxObj.style.backgroundColor = colourDiv.style.backgroundColor;
				if (colourImgSrc != '') {
					if (imgObj.nodeName == 'IMG') {
						imgObj.src = colourImgSrc;
						imgObj.style.display = '';
					}
				}
				else if (rgbCode != '') {
					if (clrBoxObj.nodeName == 'DIV') {
						clrBoxObj.style.display = '';
						clrBoxObj.style.backgroundColor = rgbCode;
					}
				}
				if (captionObj.nodeName == 'SPAN') {
					captionObj.innerHTML = colourCaption;
				}
				var imgpos = findPosMagnify(sender);
				colourDiv.style.left = imgpos[0] - 2 + 'px';
				colourDiv.style.top = imgpos[1] - 5 - parseInt(colourDiv.style.height) + 'px';
				colourDiv.style.display = '';
			}
		}
	}
	
	function fnHideLargeColour() {
		var colourDiv = document.getElementById("LgeColour");
		if (colourDiv != null) {
			colourDiv.style.display = 'none';
		}
		else {
		}
	}

	function findPosMagnify(obj) {
		if (obj != null) {
			var curleft = curtop = 0;
			if (obj.offsetParent) {
				curleft = obj.offsetLeft
				curtop = obj.offsetTop
				while (obj = obj.offsetParent) {
					curleft += obj.offsetLeft
					curtop += obj.offsetTop
				}
			}

			//during popup mode these two lines help a bit....
			//curleft = curleft - 224;
			//curtop = curtop - 55;
			
			
			return [curleft, curtop];
		}
		else {
			return [0, 0];
		}
	}
	
	function fnSetOpacity(obj, value) {
		if (obj != null) {
			if (value < 0.001 ) {value = 0;}
			if (value > 0.999 ) {value = 1;}
			obj.style.filter = 'alpha(opacity=' + 100*value + ')';
			obj.style.MozOpacity = value;
			obj.style.opacity = value;
			if(value == 1)
			{
				obj.style.filter = null;
			}
		}
	}

	function fSmoothShow(divName, delay, min, max, cur, dx) {
		if (faderDirections[divName] * dx <= 0) {
			return;
		}
		var obj = document.getElementById(divName);
		if (obj != null) {

			if (cur > 0) {
				if ((obj.style.display == 'none') || (obj.style.visibility == 'hidden')) {
					obj.style.display = '';
					obj.style.visibility = 'visible';
				}
			}
			else if ((dx <= 0) && (cur <= 0 - dx)) {
				obj.style.display = 'none';
				fadeValues[divName] = 1;

				fnSetOpacity(obj, cur);
	//			fadeValues[divName] = fadeValues[divName];
				return;
			}
		
			if (((dx > 0) && (cur < max)) || ((dx < 0) && (cur > max))) {
				cur += dx;
				fnSetOpacity(obj, cur);
				fadeValues[divName] = cur;
				if (faderDirections[divName] * dx > 0) {
					setTimeout("fSmoothShow('" + divName + "', " + delay + ', ' + min +', ' + max + ', ' + cur + ', ' + dx + ')', delay);
				}
			}
		}
	}



	function fGetDivAbsPos(obj, curs) {
		var cursor = {x:0, y:0};
		if (obj != null) {
			if (curs == null) {
				curs = {x:0, y:0};
			}
			if (curs.x == NaN) {curs.x = 0;}
			if (curs.y == NaN) {curs.y = 0;}
			x1 = parseInt(obj.style.left);
			y1 = parseInt(obj.style.top);
			if (x1 == NaN) {x1 = 0;}
			if (y1 == NaN) {y1 = 0;}
			cursor.x = curs.x + x1;
			cursor.y = curs.y + y1;
			var parent = obj.parentNode;
			
			if ((parent != null) && (parent.id != '') && (parent.id != TopDivName)) {
			
				var parCurs = fGetDivAbsPos(parent, cursor);
				if (parCurs != null) {
					cursor = parCurs;
				}
			}
		}
		return cursor;

	}
	
	function fPosition(e) {
		e = e || window.event;
		var cursor = { x:0, y: 0 };
		if (e.pageX || e.pageY) {
			cursor.x = e.pageX;
			cursor.y = e.pageY;
		} else {
			var de = document.documentElement;
			var b = document.body;

			//alert("x clientX " + e.clientX + " descrollleft " + de.scrollLeft + " b.scrollleft " + b.scrollLeft + " de.clientLeft " + de.clientLeft);
			//alert("y clientY " + e.clientY + " descrollTop " + de.scrollTop + " b.scrollTop " + b.scrollTop + " de.clientTop " + de.clientTop);
			cursor.x = e.clientX + (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
			cursor.y = e.clientY + (de.scrollTop || b.scrollTop) - (de.clientTop || 0);   
		}
		return cursor;
	}
