var hBackImg = "include/map/images/BackImg.jpg";
var hBackImg_on = "include/map/images/BackImg_on.jpg";

var hForwardImg = "include/map/images/ForwardImg.jpg";
var hForwardImg_on = "include/map/images/ForwardImg_on.jpg";

/*
var pl = new Array(19);
for (var i=0; i < pl.length; i++)
	pl[i] = new Image();

pl[0].src = "include/map/images/id_on.gif";
pl[1].src = "include/map/images/up_on.gif";
pl[2].src = "include/map/images/left_on.gif";
pl[3].src = "include/map/images/right_on.gif";
pl[4].src = "include/map/images/down_on.gif";
pl[5].src = "include/map/images/map_on.gif";
pl[6].src = "include/map/images/pan_on.gif";
pl[7].src = "include/map/images/find_on.gif";
pl[8].src = "include/map/images/route_on.gif";
pl[9].src = "include/map/images/print_on.gif";
pl[10].src = "include/map/images/zoomfull_on.gif";
pl[11].src = "include/map/images/ZoomIn_on.gif";
pl[12].src = "include/map/images/zoomout_on.gif";
pl[13].src = "include/map/images/id.gif";
pl[14].src = "include/map/images/pan.gif";
pl[15].src = "include/map/images/zoomout.gif";
pl[16].src = "include/map/images/ZoomIn.gif";
pl[17].src = hBackImg_on;
pl[18].src = hForwardImg_on;*/

function setMode( mode)
{
	if( gMode == mode)
		return;

	//eval( "document.images['" + gMode + "'].src = 'include/map/images/" + gMode + ".jpg'");
	//eval( "document.images['" + mode + "'].src = 'include/map/images/" + mode + "_on.jpg'");
	
	gMode = mode;
	
	setCursor( gMode);
	
	document.Form.Mode.value = mode;
}

function doMap( act)
{
	var Form = document.Form;
	
	var X = iWidth;
	var Y = iHeight;
	
	var T = parseFloat( Form.T.value);
	var B = parseFloat( Form.B.value);
	var L = parseFloat( Form.L.value);
	var R = parseFloat( Form.R.value);

	var stepY = Math.abs(T - B)/Y;
    var stepX = Math.abs(R - L)/X;
	
	if( act == 'left')
	{
		L = L - stepX * X/2;
		R = R - stepX * X/2;
	}
	
	if( act == 'right')
	{

		L = L + stepX * X/2;
		R = R + stepX * X/2;
	}
	
	if( act == 'up')
	{

		T = T + stepY * Y/2;
		B = B + stepY * Y/2;
	}

	if( act == 'down')
	{

		T = T - stepY * Y/2;
		B = B - stepY * Y/2;
	}
	

	if( act == 'zoomfull')
	{
		T = initT;
		L = initL;
		B = initB;
		R = initR;
	}
	
		
	var ext = new Extent( T, L, B, R);
	
	ext = normExt( ext);

	Form.T.value = ext.T;
	Form.L.value = ext.L;
	Form.B.value = ext.B;
	Form.R.value = ext.R;

	setMapImgSrc( ext.T, ext.L, ext.B, ext.R);
}

function setCursor( mode)
{
	if( document.layers)
		return;
	var mapStyle = document.images['mapimg'].style;
	if( mode == "ZoomIn" || mode == "zoomout")
		mapStyle.cursor = "crosshair";
	else if( mode == "pan")
		mapStyle.cursor = "hand";
	else
		mapStyle.cursor = "default";
			
}

function setMapImgSrc( T, L, B, R)
{
	var d = new Date();
	var millis = d.getTime();

	var oldSrc = document.images['mapimg'].src;
	var newSrc = oldSrc;
		
	var Vars = new Array();
	Vars[0] = new Var( T, "T");
	Vars[1] = new Var( L, "L");
	Vars[2] = new Var( B, "B");
	Vars[3] = new Var( R, "R");
	Vars[4] = new Var( millis, "TM");
	
	for( i = 0; i < Vars.length; i++)
	{
		newSrc = replaceVal( newSrc, Vars[i].name, Vars[i].val);
	}
	
	document.images['mapimg'].src = newSrc;
	
	addShot( newSrc);
}

function Var(val, name)
{
	this.val = val;
	this.name = name;
}

function replaceVal( URL, name, val)//!!!incorrect
{
	var nPos = URL.indexOf( "&"+name+"=") + ("&"+name+"=").length;

	var sRes = URL.substring( 0, nPos) + val;
	URL = URL.substr( nPos);
	return sRes += URL.substr( URL.indexOf( "&"));
}


function Extent(T, L, B, R)
{
	this.T = T;
	this.L = L;
	this.B = B;
	this.R = R;			
}

function normExt( ext)
{
	var iRatio = iWidth/iHeight;

	var eX = ext.R - ext.L;
	var eY = ext.T - ext.B;
	var D;
		
	cX = ext.R - eX/2; //center coordinates
	cY = ext.T - eY/2;
	
	if( Math.abs(iRatio - ((ext.R-ext.L)/(ext.T-ext.B))) > 0.0001)
	{
		if( eX < eY || eX < (eY * iRatio))
		{
			D = (eY * iRatio - eX) / 2;
			ext.L = ext.L - D;
			ext.R = ext.R + D;
		}
		else
		{
			D = (eX/iRatio - eY)/2
			ext.T = ext.T + D;
			ext.B = ext.B - D;
		}
		
	}
	
	var minStepX = 0.0002817;
	var minStepY = 0.0002815;
	var maxStepX = 17.466;
	var maxStepY = 17.452;

	eX = ext.R - ext.L;
	eY = ext.T - ext.B;
				
	if( eX/iWidth < minStepX || eY/iHeight < minStepY)
	{
		ext.L = cX - (minStepX * iWidth)/2;
		ext.R = cX + (minStepX * iWidth)/2;
		
		ext.T = cY + (minStepY * iHeight)/2;
		ext.B = cY - (minStepY * iHeight)/2;
	}
	
	if( eX/iWidth > maxStepX || eY/iHeight > maxStepY)
	{
		ext.L = cX - (maxStepX * iWidth)/2;
		ext.R = cX + (maxStepX * iWidth)/2;
		
		ext.T = cY + (maxStepY * iHeight)/2;
		ext.B = cY - (maxStepY * iHeight)/2;
	}

	
	return ext;
}

function addShot( imgSrc)
{
	if( currentShot == MAXSHOTS-1)
	{
		for( var i=0; i < MAXSHOTS-1; i++)
		{
			mapHistory[i] = mapHistory[i+1];
		}
		
		mapHistory[MAXSHOTS-1] = imgSrc;
	}
	else
	{
		mapHistory[++currentShot] = imgSrc;
		
		if( currentShot+1 < mapHistory.length)
		{
			for( var i = currentShot+1; i < mapHistory.length; i++)
				delete mapHistory[i];
				
			mapHistory.length = currentShot+1;
		}
	}
	
	if( mapHistory.length >= 2 && currentShot != 0)
		backAvailable( true)
	else
		backAvailable( false)
		
	if( mapHistory.length >= 2 && currentShot != mapHistory.length-1)
		forwardAvailable(true);
	else
		forwardAvailable(false);
}

function shotBack()
{
	if( isBackAvailable)
	{
		document.images['mapimg'].src = mapHistory[--currentShot];
		setCoordsFromImg( document.images['mapimg'].src);
			
		forwardAvailable(true);
		
		if( currentShot == 0)
			backAvailable( false);
	}
}

function shotForward()
{
	if( isForwardAvailable)
	{
		document.images['mapimg'].src = mapHistory[++currentShot];
		setCoordsFromImg( document.images['mapimg'].src);
		
		backAvailable(true);
		
		if( currentShot == mapHistory.length - 1)
			forwardAvailable(false);
	}
}

function forwardAvailable( flag)
{
	isForwardAvailable = flag;
	
	/*if( flag)
		document.images['hForward'].src = hForwardImg_on;
	else
		document.images['hForward'].src = hForwardImg;*/
}

function backAvailable( flag)
{
	isBackAvailable = flag;
	
	/*if( flag)
		document.images['hBack'].src = hBackImg_on;
	else
		document.images['hBack'].src = hBackImg;*/
}

function setCoordsFromImg( URL)
{
	var Form = document.Form;
	
	Form.T.value = getValFromURL(URL, "T");
	Form.L.value = getValFromURL(URL, "L");
	Form.B.value = getValFromURL(URL, "B");
	Form.R.value = getValFromURL(URL, "R");
}

function getValFromURL( URL, name)
{
	var nPos;
	URL = URL.substr( URL.indexOf( "?")+1);
	
	if( URL.substring( 0, (name+"=").length) != (name+"="))
	{
		nPos = URL.indexOf( "&"+name+"=") + ("&"+name+"=").length;
		URL = URL.substr( nPos);
	}
	else
	{
		URL = URL.substr( (name+"=").length);
	}
	
	nPos = URL.indexOf( "&");
	
	if( nPos == -1)
		return unescape( URL);
	else
		return unescape( URL.substring(0, nPos));
}

