/**
	Maxi : an inline Picture Magnifier for PmWiki
	Written by (c) Petko Yotov 2009

	This script is POSTCARDWARE, if you like it or use it,
	please send me a postcard. Details at
	http://galleries.accent.bg/Cookbook/Postcard

	This text is written for PmWiki; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published
	by the Free Software Foundation; either version 3 of the License, or
	(at your option) any later version. See pmwiki.php for full details
	and lack of warranty.

	Javascript support : Copyright 2009 Petko Yotov http://5ko.fr
*/

function MaxiListen(evnt, elem, func)
{
	if (elem.addEventListener)  // W3C DOM
		elem.addEventListener(evnt,func,false);
	else if (elem.attachEvent)
		return elem.attachEvent("on"+evnt, func);
	else elem["on"+evnt] = func;
}

function MaxiStart()
{
	var imgs = document.images;
	if(imgs.length>0 )
	{
		for(var i=0; i<imgs.length; i++)
		{
			if(imgs[i].className == "maxi")
			{
				var idx = MaxiIDX(imgs[i].id);
				if( typeof(MaxiData[idx]) == 'undefined' ) continue;
				imgs[i].style.background = "url(" + MaxiData[idx].U + ") top left no-repeat" ;
				MaxiListen( "mouseover", imgs[i], MaxiOver );
				MaxiListen( "mouseout",  imgs[i], MaxiOut  );
				MaxiListen( "mousemove", imgs[i], MaxiMove );
			}
		}
	}
}


function MaxiIDX(objid)
{
	return parseInt(objid.replace(/^maxi/, ''));
}

function MaxiInfo(idx)
{
	if( typeof(MaxiData[idx]) == 'undefined' ) return false;
	return MaxiData[idx];
}

function MaxiOver(e)
{
	if(typeof window.event!="undefined")e=window.event;
	var target = MaxiTarget(e);

	var origwidth = target.width;
	var origheight = target.height;
	target.src = EmptyDot;
	target.width = origwidth;
	target.height = origheight;
}

function MaxiTarget(e)
{
	if(typeof(e.target)!= 'undefined' ) return e.target;
	if(typeof(e.srcElement)!= 'undefined' ) return e.srcElement;
	return false;
}

function MaxiOut(e)
{
	if(typeof window.event!="undefined")e=window.event;
	var target = MaxiTarget(e);
	var info = MaxiInfo(MaxiIDX(target.id));
	target.src = info.u;
}


function MaxiX(e)
{
	if (typeof(e.layerX)!="undefined") return e.layerX -2;
	if (typeof(e.offsetX)!="undefined") return e.offsetX -2;
	return e.x - 1;
}

function MaxiY(e)
{
	if (typeof(e.layerY)!="undefined") return e.layerY-2;
	if (typeof(e.offsetY)!="undefined") return e.offsetY -2;
	return e.y - 1;
}

function MaxiMove(e)
{
	if(typeof window.event!="undefined")e=window.event;
	var x = MaxiX(e);
	var y = MaxiY(e);
	
	if(x%ActiveGrid>0 && y%ActiveGrid>0) return;
	var target = MaxiTarget(e);
	var info = MaxiInfo(MaxiIDX(target.id));
	var bpx = Math.round(info.zx*x);
	var bpy = Math.round(info.zy*y);
	target.style.backgroundPosition = bpx + "px " + bpy +"px";
}
if(typeof(ActiveGrid)== 'undefined' )var ActiveGrid = 4;
MaxiStart();
