// Stupid Mozilla/NS7 work around
var clearbuttonuse = 0;

var miniwidth = mainimagewidth >> 2;
var miniheight = mainimageheight >> 2;

var q;

var mouseoverpreviewid = -1;

var zoomdata = new Array(numimagesets);
var zoomfreezedata = new Array(numimagesets);
var zoompositiondata = new Array(numimagesets);
var imagecodecdata = new Array(numimagesets);

onloadlist += 'Doom9ZoomInitialize();';
Event_AddHandler('mousemove', 'Doom9MouseTester();');
Event_AddHandler('mouseup', 'Doom9ZoomClick();');


function Doom9MouseTester() {
	var curposx, curposy;
	var imageid = mouseoverpreviewid;

	if (imageid != -1) {
		// Only check if we're zoomed in
		if (zoomdata[imageid] > 1 && !zoomfreezedata[imageid]) {
			curposx = zoompositiondata[imageid][4];
			curposy = zoompositiondata[imageid][5];

			if (mousex >= curposx && mousex < curposx + miniwidth && mousey >= curposy && mousey < curposy + miniwidth) {
				// Move this zoom region
				Doom9MoveZoomRegion(imageid, mousex - curposx, mousey - curposy);
			}
		}
	}

	return true;
}



function Doom9MoveZoomRegion(imageid, newposx, newposy) {
	var curhighlightwid = Math.floor(miniwidth / zoomdata[imageid])
	var curhighlighthei = Math.floor(miniheight / zoomdata[imageid]);
	var newposx, newposy, bigimagex, bigimagey;

	newposx -= (curhighlightwid >> 1);
	newposy -= (curhighlighthei >> 1);

	if (newposx < 0)
		newposx = 0;
	else if (newposx + curhighlightwid > miniwidth)
		newposx = miniwidth - curhighlightwid;

	if (newposy < 0)
		newposy = 0;
	else if (newposy + curhighlighthei > miniheight)
		newposy = miniheight - curhighlighthei;

	if (zoompositiondata[imageid][0] != newposx || zoompositiondata[imageid][1] != newposy) {
		zoompositiondata[imageid][0] = newposx;
		zoompositiondata[imageid][1] = newposy;

		bigimagex = (newposx << 2) * zoomdata[imageid];
		bigimagey = (newposy << 2) * zoomdata[imageid];

		if (bigimagex < 0)
			bigimagex = 0;
		else if (bigimagex + mainimagewidth > mainimagewidth * zoomdata[imageid])
			bigimagex = (mainimagewidth * zoomdata[imageid]) - mainimagewidth;

		if (bigimagey < 0)
			bigimagey = 0;
		else if (bigimagey + mainimageheight > mainimageheight * zoomdata[imageid])
			bigimagey = (mainimageheight * zoomdata[imageid]) - mainimageheight;

		MeMSOObjectMove('swapimage' + imageid + 'highlight', zoompositiondata[imageid][4] + newposx - 1, zoompositiondata[imageid][5] + newposy - 1);
		MeMSOObjectMove('swapimage' + imageid + 'div', -bigimagex, -bigimagey);
	}
}



function Doom9ZoomClick() {
	var newzoomval;
	var imageid = mouseoverpreviewid;

	if (clearbuttonuse)
		return true;

	if (mouseb < 2) {
		clearbuttonuse = 1;
		setTimeout('clearbuttonuse = 0;', 100);
		if (imageid != -1) {
			// Freeze/UnFreeze
			zoomfreezedata[imageid] ^= 1;

			if (zoomfreezedata[imageid] == 0)
				Doom9MouseTester();
		}
	}

	return true;
}



function Doom9ZoomInitialize() {
	var curcontent = '';
	var q, p, curpos, curpos2;

	for (q = 0; q < numimagesets; q++) {
		curcontent = '';
		for (p = 0; p < codeclist.length; p++) {
			if (p)
				curcontent += '<br />';
			if (p == 0)
				curcontent += codeclist[p];
			else
				curcontent += '<a href="javascript: SwapImageChange(' + q + ', ' + p + ');" class="SelectCodecToView">' +
					codeclist[p] + '</a>';

			MeMSOObjectUpdate('swapimage' + q + 'codeclist', curcontent);
		}

		curcontent = '<span class="CodecTitle">' + codeclist[0] + '</span><br />' + imagedata[q][0][1];
		MeMSOObjectUpdate('swapimage' + q + 'content', curcontent);

		curpos = MeMSOObjectGetPosition('swapimage' + q + 'position');
		curpos2 = MeMSOObjectGetPosition('swapimage' + q + 'preview');
		if (InIE && !InOpera) {
			MeMSOObjectMove('swapimage' + q + 'outerdiv', curpos.x + 1, curpos.y + 1);
			MeMSOObjectMove('swapimage' + q + 'highlight', curpos2.x, curpos2.y);
			zoompositiondata[q] = new Array(0, 0, curpos.x + 1, curpos.y + 1, curpos2.x + 1, curpos2.y + 1);
			MeMSOObjectSetClipping('swapimage' + q + 'outerdiv', 0, 0, mainimagewidth, mainimageheight);

		} else {
			MeMSOObjectMove('swapimage' + q + 'outerdiv', curpos.x, curpos.y);
			MeMSOObjectMove('swapimage' + q + 'highlight', curpos2.x - 1, curpos2.y - 1);
			zoompositiondata[q] = new Array(0, 0, curpos.x, curpos.y, curpos2.x, curpos2.y);
			MeMSOObjectSetClipping('swapimage' + q + 'outerdiv', 0, 0, mainimagewidth, mainimageheight);
		}

		imagecodecdata[q] = 0;
		zoomfreezedata[q] = 0;
		SetSwapImageZoomLevel(q, 1);
	}
}



function SetSwapImageZoomLevel(imageid, zoominval) {
	var curimageurl = imagerootdir + imagedata[imageid][imagecodecdata[imageid]][0];
	var q;

	MeMSOObjectSetSize('swapimage' + imageid, mainimagewidth * zoominval, mainimageheight * zoominval);

	// Fix the position of the zoom region
	var zoomnewposx = 0, zoomnewposy = 0;
	var curhighlightwid = Math.floor(miniwidth / zoomdata[imageid]);
	var curhighlighthei = Math.floor(miniheight / zoomdata[imageid]);
	zoomnewposx = zoompositiondata[imageid][0] + (curhighlightwid >> 1);
	zoomnewposy = zoompositiondata[imageid][1] + (curhighlighthei >> 1);

	zoomdata[imageid] = zoominval;
	SetupHighlightRegion(imageid, zoominval);
	Doom9MoveZoomRegion(imageid, zoomnewposx, zoomnewposy);
}



function SetZoomIn(imageid, zoominval) {
	if (pageloaded) {
		zoominval = nullwrap(zoominval, C_NUM);
		if (zoominval < 1)
			zoominval = 1;
		else if (zoominval > 6)
			zoominval = 6;

		if (zoomdata[imageid] != zoominval) {
			SetSwapImageZoomLevel(imageid, zoominval);
		}
	}
}



function SwapClickZoomType(imageid, newval) {
	newzoomval = newval ? (zoomdata[imageid] - 1) : (zoomdata[imageid] + 1);
	SetZoomIn(imageid, newzoomval);
}



function SwapImageChange(imageid, codecval) {
	var curcontent;
	var curimageurl;

	if (pageloaded) {
		curimageurl = imagerootdir + imagedata[imageid][codecval][0];
		eval('document.swapimage' + imageid + '.src = "' + imagespacer + '";');
		eval('document.swapimage' + imageid + '.src = "' + curimageurl + '";');
		eval('document.swapimage' + imageid + 'preview.src = "' + curimageurl + '";');

		curcontent = '';
		for (q = 0; q < codeclist.length; q++) {
			if (q)
				curcontent += '<br />';
			if (q == codecval)
				curcontent += codeclist[q];
			else
				curcontent += '<a href="javascript: SwapImageChange(' + imageid + ', ' + q + ');" class="SelectCodecToView">' +
					codeclist[q] + '</a>';

			MeMSOObjectUpdate('swapimage' + imageid + 'codeclist', curcontent);
		}

		curcontent = '<span class="CodecTitle">' + codeclist[codecval] + '</span><br />' + imagedata[imageid][codecval][1];
		MeMSOObjectUpdate('swapimage' + imageid + 'content', curcontent);	

		// Reset all object positions
		ResetObjectPositions();
	}
}



function ResetObjectPositions() {
	var q;
	var curpos, curpos2;

	if (pageloaded) {
		for (q = 0; q < numimagesets; q++) {
			curpos = MeMSOObjectGetPosition('swapimage' + q + 'position');
			curpos2 = MeMSOObjectGetPosition('swapimage' + q + 'preview');
			if (InIE && !InOpera) {
				MeMSOObjectMove('swapimage' + q + 'outerdiv', curpos.x + 1, curpos.y + 1);
				MeMSOObjectMove('swapimage' + q + 'highlight', curpos2.x + zoompositiondata[q][0], curpos2.y + zoompositiondata[q][1]);
				zoompositiondata[q][2] = curpos.x + 1;
				zoompositiondata[q][3] = curpos.y + 1;
				zoompositiondata[q][4] = curpos2.x + 1;
				zoompositiondata[q][5] = curpos2.y + 1;

			} else {
				MeMSOObjectMove('swapimage' + q + 'outerdiv', curpos.x, curpos.y);
				MeMSOObjectMove('swapimage' + q + 'highlight', curpos2.x + zoompositiondata[q][0] - 1, curpos2.y + zoompositiondata[q][1] - 1);
				zoompositiondata[q][2] = curpos.x;
				zoompositiondata[q][3] = curpos.y;
				zoompositiondata[q][4] = curpos2.x;
				zoompositiondata[q][5] = curpos2.y;

			}
		}
	}
}



function SetupHighlightRegion(imageid, zoominval) {
	var curcontent = '';
	var curwidth = Math.floor(miniwidth / zoominval), curheight = Math.floor(miniheight / zoominval);

	curcontent = '<table border="0" cellspacing="0" cellpadding="0" width="' + curwidth + '">\n' +
		'<tr>\n' +
		'<td style="border-width: 3px; border-style: solid; border-color: #FFFF00;">' +
			'<img src="' + imagespacer + '" width="' + curwidth + '" height="' + curheight + '"' +
			' onmouseover="mouseoverpreviewid = ' + imageid + ';" onmouseout="mouseoverpreviewid = -1;"' +
			' border="0" alt="" /></td>\n' +
		'</tr>\n' +
		'</table>';
	MeMSOObjectUpdate('swapimage' + imageid + 'highlight', curcontent);
}


function GenerateImageTable(imageid) {
	var curcontent = '';
	var curimageurl = imagerootdir + imagedata[imageid][0][0];

	curcontent = '<table border="0" cellspacing="0" cellpadding="0" width="820">\n' +
		'<tr>\n' +
		'<td width="' + mainimagewidth + '"><img src="' + imagespacer + '" width="' + mainimagewidth + '" height="1" alt="" /></td>\n' +
		'<td width="8"><img src="' + imagespacer + '" width="8" height="1" alt="" /></td>\n' +
		'<td width="' + (812 - mainimagewidth) + '"><img src="' + imagespacer + '" width="' + (812 - mainimagewidth) + '" height="1" alt="" /></td>\n' +
		'</tr>\n' +
		'<tr valign="top">\n' +
		'<td><table border="0" cellspacing="0" cellpadding="0" width="' + mainimagewidth + '">\n' +
		'<tr>\n' +
		'<td class="MainImageRegion">' +
			'<img src="' + imagespacer + '" width="' + mainimagewidth + '" height="' + mainimageheight + '" border="0"' +
			' name="swapimage' + imageid + 'position" id="swapimage' + imageid + 'position" alt="" />' +
		'</td>\n' +
		'</tr>\n' +
		'</table></td>\n' +
		'<td><img src="' + imagespacer + '" width="1" height="1" alt="" /></td>\n' +
		'<td align="center" class="SelectCodecToView"><b>\n'+
			'Seleziona un Codec:\n' +
			'<div id="swapimage' + imageid + 'codeclist">&nbsp;</div><br />\n' +
				'<img src="' + curimageurl + '" width="' + miniwidth + '" height="' + miniheight + '"' +
				' style="border-width: 1px; border-style: solid; border-color: #000000;"' +
				' onmouseover="mouseoverpreviewid = ' + imageid + ';" onmouseout="mouseoverpreviewid = -1;"' +
				' name="swapimage' + imageid + 'preview" id="swapimage' + imageid + 'preview" alt="" />' +
			'<br /><img src="' + imagespacer + '" width="1" height="12" alt="" /><br />\n' +
			'<a href="javascript: SwapClickZoomType(' + imageid + ', 0);">' +
				'<img src="' + imagespecialsdir + 'zoom.gif" width="20" height="20" border="0"' +
				' name="swapimage' + imageid + 'zoominbutton" id="swapimage' + imageid + 'zoominbutton" alt="" /></a>' +
			'<img src="' + imagespacer + '" width="16" height="1" alt="" />' +
			'<a href="javascript: SwapClickZoomType(' + imageid + ', 1);">' +
				'<img src="' + imagespecialsdir + 'zoomout.gif" width="20" height="20" border="0"' +
				' name="swapimage' + imageid + 'zoomoutbutton" id="swapimage' + imageid + 'zoomoutbutton" alt="" /></a>' +
		'</b></td>\n' +
		'</tr>\n' +
		'<tr><td colspan="3"><img src="' + imagespacer + '" width="1" height="8" alt="" /></td></tr>\n' +
		'<tr>\n' +
		'<td id="swapimage' + imageid + 'content" colspan="3" class="ZoomerDescriptionText">&nbsp;</td>\n' +
		'</tr>\n' +
		'</table>' +
		'</td>\n' +
		'</tr>\n' +
		'</table><br />\n' +
		'<div id="swapimage' + imageid + 'outerdiv"' +
			' style="position: absolute; z-index: 4; left: -2000px; top: -2000px; visibility: visible;' +
				' width: ' + mainimagewidth + 'px; height: ' + mainimageheight + 'px; overflow: hidden;">' +
			'<div id="swapimage' + imageid + 'div" style="position: relative; z-index: 4; left: 0px; top: 0px; visibility: visible;">' +
				'<img src="' + curimageurl + '" width="' + mainimagewidth + '" height="' + mainimageheight + '"' +
				' name="swapimage' + imageid + '" id="swapimage' + imageid + '" alt="" />' +
			'</div>' +
		'</div>\n' +
		'<div id="swapimage' + imageid + 'highlight" style="position: absolute; z-index: 5; left: -2000px; top: -2000px; visibility: visible;">&nbsp</div>';
	document.write(curcontent);
}

