/*  ******Functions included in iipimage_functions:******
 *
 * changeContrast ( direction, image )
 * clickPosition ()
 * cs2array  (str, sep)
 * details2vars  (which, string)
 * getNewPosition  (nw, nh)
 * getSize ()
 * get_crop ()
 * get_vars  (string)
 * imChange (string, which, no)
 * leftString (fullString, subString, hm)
 * my_DragFunc ()
 * my_DropFunc ()
 * my_PickFunc ()
 * my_ResizeFunc ()
 * openHelpPU (thing)
 * openInfoPU ()
 * openDiyPU ()
 * openPyrPU (object_code, which)
 * positionZone ()
 * refreshFont ( id, data, cls, oc )
 * refreshZone ()
 * resizeOuterTo (w,h)
 * rgn2vars  (string)
 * rightString (fullString, subString)
 * scrollDown ()
 * scrollLeft ()
 * scrollRight ()
 * scrollTo_a ( x, y )
 * scrollTo_local  ( x, y )
 * scrollUp ()
 * swap_image  (tag, dir, path, id)
 * viewer_thumbsize  (maxw, maxh, x, y)
 * whereAmI (who,wch)
 * zoomIn ()
 * zoomOut ()
 * zoom_con ()
 *
 */


function changeContrast( direction, image )
	{
	if (image == 1)
		{
		if (direction == 'add')
			{contrast_1b = contrast_1b + con_adjust_1;}
		else if (direction == 'sub')
			{contrast_1b = contrast_1b - con_adjust_1;}
		else 
			{contrast_1b = contrast_1a}
		}
	else 
		{
		if ((compare == 1) && (no_ims > 1))
			{
			if (direction == 'add')
				{contrast_2b = contrast_2b + con_adjust_2;}
			else if (direction == 'sub')
				{contrast_2b = contrast_2b - con_adjust_2;}
			else 
				{contrast_2b = contrast_2a}
			}
		}


	f1a = document.im_select.im_details_1.value;
 
	file_1 = leftString(f1a, ",");
	fif_1 = 'FIF=' + image_path + file_1 + qua;
	path = server + 'FIF=' + image_path + file_1;
  	cnt_1 = "CNT=" + contrast_1b;
	dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
	
	if ( (compare == 1) && (no_ims > 1) )
		{
		f2a = document.im_select.im_details_2.value;
		file_2 = leftString(f2a, ",");	
		fif_2 = 'FIF=' + image_path + file_2 + qua;
		path2 = server + 'FIF=' + image_path + file_2;
		cnt_2 = "CNT=" + contrast_2b;
		dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);
		}
	}

	
	
	
function clickPosition(){
	if (zone_test)
		{zone_test = false;}
	else
		{
		xpos = dd.e.x - start_x - (dd.elements.zone.w/2);
		if( (min_x-xpos) < dd.elements.zone.w ) xpos = min_x - dd.elements.zone.w;
		if( xpos < 0 ) xpos = 0;

		ypos = dd.e.y - start_y - (dd.elements.zone.h/2);
		if( (min_y-ypos) < dd.elements.zone.h ) ypos = min_y - dd.elements.zone.h;
		if( ypos < 0 ) ypos = 0;

		scrollTo_a( xpos+start_x, ypos+start_y );
	 	positionZone();
		}
	}
	
	



function cs2array (str, sep)
	{
	if (sep)
		{}
	else
		{var sep = ",";}
		
	var narr = new Array();	
	var no = 0;
	
	while ( leftString(str, sep))
		{
		narr[no] = leftString(str, sep)
		str = rightString(str, sep);
		no++;
		}
	
	narr[no] = str; 
	
	return (narr);
	}



function details2vars (which, string)
	{
	
	/* 
	 * Example string:
	 * testcanvas_vis.pyr.tif,8,3,8036,7154,visible 
	 */
	 
	var st_arr = cs2array (string);
	
	if (which == 1)
		{
		file_1 	= st_arr[0];
		bit_1 	= st_arr[1];
		band_1 	= st_arr[2];
		title_1	= st_arr[5];
		
		if (bit_1 == 8)
			{con_1s = 1;
			 contrast_1a = 1;
			 contrast_1b = 1;
			 con_adjust_1 = 0.1;}
		else
			{con_1s = 0.004;
			 contrast_1a = 0.004;
			 contrast_1b = 0.004;
			 con_adjust_1 = 0.0005;}
		}
	else
		{
		file_2 	= st_arr[0];
		bit_2 	= st_arr[1];
		band_2 	= st_arr[2];
		title_2	= st_arr[5];
		
		if (bit_2 == 8)
			{con_2s = 1;
			 contrast_2a = 1;
			 contrast_2b = 1;
			 con_adjust_2 = 0.1;}
		else
			{con_2s = 0.004;
			 contrast_2a = 0.004;
			 contrast_2b = 0.004;
			 con_adjust_2 = 0.0005;}
		}
	
	max_x 	= st_arr[3];
	max_y	= st_arr[4];
	
	}
	
	



function getNewPosition (nw, nh)
	{
	var x = 0, y = 0, h=0, w=0; // default values
	var out = getSize();

	w = out["myWidth"];
	h = out["myHeight"];
	x = out["myLeft"];
	y = out["myTop"];
		
	var nxy = new Array();
	nxy[0] = x + (w/2) - (nw/2);
	nxy[1] = y + (h/4);

	return (nxy);
	}
	
	
	
function getSize() 
	{
	var out= new Array();
  
	if( typeof( window.innerWidth ) == 'number' ) {
    	//Non-IE
	    out["myWidth"] = window.innerWidth;
    	out["myHeight"] = window.innerHeight;
	    out["myLeft"] = window.screenX;
    	out["myTop"] = window.screenY;
		} 
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    	//IE 6+ in 'standards compliant mode'
	    out["myWidth"] = document.documentElement.clientWidth;
	    out["myHeight"] = document.documentElement.clientHeight;
	    out["myLeft"] = window.screenLeft;
    	out["myTop"] = window.screenTop;
	  	} 
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    	//IE 4 compatible
	    out["myWidth"] = document.body.clientWidth;
    	out["myHeight"] = document.body.clientHeight;
	    out["myLeft"] = window.screenLeft;
    	out["myTop"] = window.screenTop;
		}
			
 	return (out);
	}
	
	
function get_crop()
	{

	var blend = "false";
	var frac1;
	var frac2;

	var string = 'object_code='+document.im_select.object_code.value +
		'&details_1='+document.im_select.im_details_1.value +
		'&' + rgn +
		'&con_1='+contrast_1b+
		'&con_1s='+contrast_1a;
	
	if ((no_ims > 1) && (compare == 1))
		{
		string = string +
			'&details_2='+document.im_select.im_details_2.value +
			'&con_2='+contrast_2b+
			'&con_2s='+contrast_2a;
	
		blend = "true";
		frac1 = 1 - frac;
		frac2 = frac;
		}
	
	string = string +
		'&frac2='+frac2+
		'&frac1='+frac1+
		'&blend='+blend;

	var xy = getNewPosition (600, 470);

	//removed: '&ref_page='+document.URL+
  	var aWindow = window.open('select_crop.html?object_code='+string, 'SelectCrop',
	'alwaysRaised=yes,scrollbars=yes,menubar=no,resizable=yes,modal=yes,toolbar=no,left='+xy[0]+',top='+xy[1]+',width=600, height=470');
	}	

	
	
function get_vars (string)
	{
	/* Convert all $_GET info into javascript variables */
	
	if (string)
		{var var_string = string;}
	else
		{var var_string = cs2array (document.URL, '?');}
		
	var vars = cs2array (var_string[1], '&');

	for (x=0; x<(vars.length); x++)
		{if (vars[x])
			{var temp = cs2array (vars[x], '=');
			//alert(temp[0] + '=\'' + temp[1] + '\'');
			eval(temp[0] + '=\'' + temp[1] + '\'');}}
	
	/* ************************************************ */
	}
	
	
	
function imChange(string, which, no) 
	{
	
	//Additional code used in the conservation dossier version of the viewer.
	if (document.getElementById( 'dossim' ))
		{im_no = no;
		refreshFont( 'dossim', 'Image '+no+' of ' +no_ims, 'info');}

	//Reset iipimage variable for the correct image.
	if (which == 1)
		{
		details2vars (1, string)
		document.im_select.im_title_1.value = title_1;

		fif_1 = 'FIF=' + image_path + file_1 + qua;
		path_1 = server + 'FIF=' + image_path + file_1;
	
		cnt = "CNT=" + contrast_1a;
		cnt_1 = "CNT=" + contrast_1b;
		
		nv.swapImage( server + fif_1 + '&' + sds + '&' + cnt + '&WID=' + min_x + '&CVT=jpeg');
		dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
		refreshFont( 'im1', 'Displaying the ' + title_1 + ' image', 'info');
		}
	else
		{ 
		details2vars (2, string)
		document.im_select.im_title_2.value = title_2;

		fif_2 = 'FIF=' + image_path + file_2 + qua;
		path_2 = server + 'FIF=' + image_path + file_2;	
		cnt_2 = "CNT=" + contrast_2b;
		dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);
		refreshFont( 'im2', ' blended with the ' + title_2 + ' image ', 'info');
		}
}



function leftString(fullString, subString, hm) 
	{
	/*
 	* the following script was taken from:
 	* http://www.breakingpar.com/bkp/home.nsf/0/87256B14007C5C6A87256B33007C4E78
 	*/
   	if (fullString.indexOf(subString) == -1) 
		{return "";} 
	else {return (fullString.substring(0, fullString.indexOf(subString)));}
	}

	
	
function my_DragFunc()
	{
	if (dd.obj.name == "dragcover")
    	{}
	if (dd.obj.name == "target")
    	{}
  	if (dd.obj.name == 'thumb')//Object can only be named 'thumb' if there is 2 images.
    	{
    	}
  	if (dd.obj.name == 'zone')
   		{
		zn.maxoffr = nv.w - zn.w;
   		zn.maxoffb = nv.h - zn.h;
   		}   
	if (dd.obj.name == 'crop')
   		{update_values();}

	var re = /[mark_]{5}/;
	if (dd.obj.name.match(re))
   		{
		var cm_id = dd.obj.name.substring(5, 7);
 		if (cm_id == om_id)
			{}
		else
			{select_mark( cm_id );}
			
		var m = dd.obj.name;
	
   		dd.elements[m].maxw = theImage.w + theImage.x - dd.elements[m].x;
   		dd.elements[m].maxh = theImage.h + theImage.y - dd.elements[m].y;
   		dd.elements[m].maxoffr = theImage.w - dd.elements[m].w;
   		dd.elements[m].maxoffb = theImage.h - dd.elements[m].h;
		}
	}





function my_DropFunc()
	{ 

	if (dd.obj.name == "dragcover")
    	{
		dc.resizeTo( t1.w,t1.h );	
		dc.moveTo(t1.x, t1.y);	
  		dc.setZ(dd.elements.vbuttons.z - 1);
		dc.setCursor( 'crosshair' );
		wert = 1;	
  		var tx = t1.x;
  		var ty = t1.y;
  
  		var zx = dd.elements.zone.x;
  		var zy = dd.elements.zone.y;
  
  		var zw = dd.elements.zone.w;
  		var zh = dd.elements.zone.h;
		
		if ((dd.e.x - tx) < 0)
			{var tdf_x = 0;}
		else if ((dd.e.x - tx) < tw_temp)
			{var tdf_x = (dd.e.x - tx);}
		else
			{var tdf_x = tw_temp;}
			
		if ((dd.e.y - ty) < 0)
			{var tdf_y = 0;}
		else if ((dd.e.y - ty) < th_temp)
			{var tdf_y = (dd.e.y - ty);}
		else
			{var tdf_y = th_temp;}
			
		var delta_x = tds_x - tdf_x;
		var delta_y = tds_y - tdf_y;
		
		scrollTo_a( delta_x, delta_y );
  		positionZone();

		if ( (compare == 1) && (no_ims > 1) ) 
			{t2.moveTo(t1.x, t1.y);}
		}	
		
	//Repositions display detail in zoomable viewer  
	if (dd.obj.name == 'zone')
    	{ 
		zone_test = true;
		scrollTo_local( dd.obj.x, dd.obj.y );
		 }

	if ((dd.obj.name == 'thumb') && (compare == 1) && (no_ims > 1))
    	{	
		var no = parseInt(dd.elements.thumb.x - dd.elements.thumb.defx);
		frac = no/50;
		dd.elements.target2.setOpacity(frac);
		t2.moveTo(t1.x, t1.y); }

	if ((dd.obj.name == 'track') && (compare == 1) && (no_ims > 1))
    	{	
		dd.elements.thumb.moveTo((dd.e.x - (dd.elements.thumb.w/2)), dd.elements.thumb.y);
		var no = parseInt(dd.elements.thumb.x - dd.elements.thumb.defx);
		frac = no/100;
		dd.elements.target2.setOpacity(frac);
		t2.moveTo(t1.x, t1.y); 
		//debug_code ( dd.e.x );
		}
		
	var re = /[mark_]{5}/;
	if (dd.obj.name.match(re))
   		{changedetails ();}
	}



function my_PickFunc()
{
	if (dd.obj.name == 'zone')
   		{
		zn.maxw = nv.w + nv.x - zn.x;
   		zn.maxh = nv.h + nv.y - zn.y;
   		zn.maxoffr = nv.w - zn.w;
   		zn.maxoffb = nv.h - zn.h;
		}
		
	if (dd.obj.name == "dragcover")
    	{
  		dc.setCursor( 'move' );
		tds_x = dd.e.x - dd.elements.target.x;
		tds_y = dd.e.y - dd.elements.target.y;
		}
}



function my_ResizeFunc()
{
if (dd.obj.name == 'zone')
   {
   zone_resized = 1;
   
   zn.maxw = nv.w + nv.x - zn.x;
   zn.maxh = nv.h + nv.y - zn.y;
   zn.maxoffr = nv.w - zn.w;
   zn.maxoffb = nv.h - zn.h;
   }
   
if (dd.obj.name == 'crop')
   {update_values();}

var re = /[mark_]{5}/;
if (dd.obj.name.match(re))
	{
    	var number = dd.obj.name.substring(5, 7);	
		var m = dd.obj.name;
		
   		dd.elements[m].maxw = theImage.w + theImage.x - dd.elements[m].x;
   		dd.elements[m].maxh = theImage.h + theImage.y - dd.elements[m].y;
   		dd.elements[m].maxoffr = theImage.w - dd.elements[m].w;
   		dd.elements[m].maxoffb = theImage.h - dd.elements[m].h;
	}
}	
	
	
function openHelpPU(thing)
	{	
	var xy = getNewPosition (800, 560);
	var txt = '?ref_page='+thing
  	var aWindow = window.open('help.html'+txt, 'Help', 'alwaysRaised=yes,scrollbars=yes,menubar=no,resizable=yes,toolbar=no,left='+xy[0]+',top='+xy[1]+',width=800,height=550');
	}	
	
	
function openInfoPU()
	{	
	var xy = getNewPosition (800, 550);
  	var aWindow = window.open('information.html', 'Info', 'alwaysRaised=yes,scrollbars=yes,menubar=no,resizable=yes,toolbar=no,left='+xy[0]+',top='+xy[1]+',width=800,height=550');
	}	
	
	
function openDiyPU()
	{	
	var xy = getNewPosition (800, 550);
  	var aWindow = window.open('diy.html', 'diy', 'alwaysRaised=yes,scrollbars=yes,menubar=no,resizable=yes,toolbar=no,left='+xy[0]+',top='+xy[1]+',width=800,height=550');
	}
	
	
	
function openPyrPU(object_code, which)
	{
	var cp = paintings[painting];
	var txt = '';

	for (x=1; x<(cp.length); x++)
		{txt = txt +'&details_'+x+'='+cp[x];}

	var xy = getNewPosition (600, 470);
  	var aWindow = window.open('select_pyr.html?which='+which+'&painting='+painting + txt, 
		'SelectPyr', 'alwaysRaised=yes,scrollbars=yes,menubar=no,resizable=yes,modal=yes,toolbar=no,left='+xy[0]+',top='+xy[1]+',width=600, height=470');
}





function positionZone()
	{
	//alert (rgn_x + ' : ' + rgn_y + ' : ' + rgn_w + ' : ' + rgn_h + ' : ' + wid + ' : ' + hei);
  pleft = (rgn_x/wid) * (min_x);
  if( pleft > min_x ) pleft = min_x;
  if( pleft < 0 ) pleft = 0;

  ptop = (rgn_y/hei) * (min_y);
  if( ptop > min_y ) ptop = min_y;
  if( ptop < 0 ) ptop = 0;

  width = (rgn_w/wid) * (min_x);
  if( pleft+width > min_x ) width = min_x - pleft;

  height = (rgn_h/hei) * (min_y);
  if( height+ptop > min_y ) height = min_y - ptop;

  if( width < min_x ) xfit = 0;
  else xfit = 1;
  if( height < min_y ) yfit = 0;
  else yfit = 1;

  //alert (dd.elements.navigation.x + ' : ' + pleft + ' : ' + dd.elements.navigation.y + ' : ' + ptop + ' : ' + dd.elements.zone.x + ' : ' + dd.elements.zone.y);
  if ((width >= min_x) || (height >= min_y))
	{
	zoomIn();
	}
  else
	{ 
  	dd.elements.zone.resizeTo( width, height );
  	dd.elements.zone.maximizeZ();
  	dd.elements.zone.moveTo( dd.elements.navigation.x + pleft, dd.elements.navigation.y + ptop );
	}
}




function refreshFont( id, data, cls, oc ) 
	{
	var thing = document.getElementById(id);  

	while (thing.hasChildNodes()) { // remove content
		thing.removeChild(thing.lastChild);}
	
	var	nfnt = document.createElement('font');

	if (cls)
		{nfnt['className'] = cls;}
	if (oc)
		{thing['onclick'] = oc;}

	var ntxt = document.createTextNode( data );
	thing.appendChild(nfnt);
	nfnt.appendChild(ntxt);
	}
	




function refreshZone()
	{
	wid = min_x*2;
	hei = min_y*2;
	tw_temp = target_w;
	th_temp = target_h;
	rgn_w = target_w;
	rgn_h = target_h;
	zn.resizeTo(min_x, min_y);
	scrollTo_local( nv.x, nv.y );
    xfit = yfit = 1;
    zoomIn();
	}
	


function resizeOuterTo(w,h) 
	{
	if (parseInt(navigator.appVersion)>3) 
		{
		//alert (navigator.appName);
	   	if (navigator.appName=="Netscape") 
			{
		    top.outerWidth=w;
		    top.outerHeight=h;
			self.resizeTo(w,h);
		   }
	    else 
			{
			top.resizeTo(w,h);
			}
	 	}
	}
	
	

function rgn2vars (string)
	{
	
	/* 
	 * Example string:
	 * 0.03807864609258337,0.12258876153201007,0.9238427078148332,0.7548224769359799 
	 */
	 
	var st_arr = cs2array (string);
	
	xfr = st_arr[0];
	yfr = st_arr[1];
	wfr = st_arr[2];
	hfr = st_arr[3];
	}

	
function rightString(fullString, subString) 
	{
	/*
 	* the following script was taken from:
 	* http://www.breakingpar.com/bkp/home.nsf/0/87256B14007C5C6A87256B33007C4E78
 	*/
   	if (fullString.indexOf(subString) == -1) 
		{return "";} 
	else {return (fullString.substring(fullString.indexOf(subString)+subString.length, fullString.length));}
	}



function scrollDown(){
  if( rgn_y < hei - rgn_h ){
    rgn_y = rgn_y + (rgn_h/2);
    if( rgn_y > hei - rgn_h ) rgn_y = hei - rgn_h;
    rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + ',' +
      (rgn_w/wid) + ',' + (rgn_h/hei);
    cvt = 'WID=' + wid + '&CVT=jpeg';
    dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
	if ( (compare == 1) && (no_ims > 1) )
		{dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);}
    positionZone();
  }
}





function scrollLeftb(){
  if( rgn_x > 0 ){
    rgn_x = rgn_x - (rgn_w/2);
    if( rgn_x < 0 ) rgn_x = 0;
    rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + ',' +
      (rgn_w/wid) + ',' + (rgn_h/hei);
    cvt = 'WID=' + wid + '&CVT=jpeg';
    //cnt = "CNT=" + contrast;
    dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
	if ( (compare == 1) && (no_ims > 1) )
		{dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);}
    positionZone();
  }
}




function scrollRight(){
  if( rgn_x < wid - rgn_w ){
    rgn_x = rgn_x + (rgn_w/2);
    if( rgn_x > wid - rgn_w ) rgn_x = wid - rgn_w;
    rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + ',' +
      (rgn_w/wid) + ',' + (rgn_h/hei);
    cvt = 'WID=' + wid + '&CVT=jpeg';
    //cnt = "CNT=" + contrast;
    dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
	if ( (compare == 1) && (no_ims > 1) )
		{dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);}
    positionZone();
  }
}


/* 
 * Calling this script "scrollTo" results in IE calling it on 
 * its own at times.
 */
function scrollTo_a( x, y ){

  if (wert)
  	{rgn_x = rgn_x + x;
  	 rgn_y = rgn_y + y;
  	 wert = 0;}
  else
  	{rgn_x = ((x-start_x) * wid / min_x);  
  	 rgn_y = ((y-start_y) * hei / min_y);}
	
  if( rgn_x < 0 ) rgn_x = 0;
  if( (rgn_x + tw_temp) > wid ) rgn_x = wid - tw_temp;
  if( rgn_y < 0 ) rgn_y = 0;
  if( (rgn_y + th_temp) > hei ) rgn_y = hei - th_temp;
  rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + ',' +
    (rgn_w/wid) + ',' + (rgn_h/hei);
  cvt = 'WID=' + wid + '&CVT=jpeg';
  dd.elements.zone.setCursor( 'wait' );
  dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
	if ( (compare == 1) && (no_ims > 1) )
		{dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);}
  dd.elements.zone.setCursor( 'move' );
}



	
	
	
function scrollTo_local ( x, y ){
	/* Calling this script "scrollTo" results in it being called when a 
 	 * held down mouse goes off the screen this might be new to the newer version 
 	 * of wz_dragdrop.
 	 */
  if ( zone_resized )
  	{
	var zt_r = target_w/zn.w;
	var nw = target_w;
	var nh = zn.h * zt_r;
	
	if (nh > target_h)
		{
		zt_r = target_h/zn.h;
		nw = zt_r * zn.w;
		nh = target_h;
		}
		
	wid = nw/(zn.w/nv.w);
	hei = nh/(zn.h/nv.h);
	
	tw_temp = nw;
	th_temp = nh;
  	
	rgn_x = ((x-start_x) * wid / min_x);
  	if( rgn_x < 0 ) rgn_x = 0;
  
  	rgn_y = ((y-start_y) * hei / min_y);
  	if( rgn_y < 0 ) rgn_y = 0;
  	
	rgn_h = nh;
  	rgn_w = nw;
	zone_resized = 0;
	}
  else
  	{
  	rgn_x = ((x-start_x) * wid / min_x);
  	if( rgn_x < 0 ) rgn_x = 0;
  
  	rgn_y = ((y-start_y) * hei / min_y);
  	if( rgn_y < 0 ) rgn_y = 0;
	}
  
  var nxpos = tf.x + (tf.w - rgn_w)/2;
  var nypos = tf.y + (tf.h - rgn_h)/2;
  
  dd.elements.target.resizeTo( rgn_w, rgn_h);
  dd.elements.target.moveTo( nxpos, nypos); 
  
	if ( (compare == 1) && (no_ims > 1) )
		{dd.elements.target2.resizeTo( rgn_w, rgn_h);
		 dd.elements.target2.moveTo( nxpos, nypos); }  
  
  rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + ',' +
    (rgn_w/wid) + ',' + (rgn_h/hei);
	
  cvt = 'WID=' + wid + '&CVT=jpeg';

  dd.elements.zone.setCursor( 'wait' );
  dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
	if ( (compare == 1) && (no_ims > 1) )
		{dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);}
  dd.elements.zone.setCursor( 'move' );
}





function scrollUp(){
  if( rgn_y > 0 ){
    rgn_y = rgn_y - (rgn_h/2);
    if( rgn_x < 0 ) rgn_y = 0;
    rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + ',' +
      (rgn_w/wid) + ',' + (rgn_h/hei);
    cvt = 'WID=' + wid + '&CVT=jpeg';
    //cnt = "CNT=" + contrast;
    dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);
	if ( (compare == 1) && (no_ims > 1) )
		{dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);}
    positionZone();
  }
}



function swap_image (tag, dir, path, id)
	{document.getElementById(id).src = path + tag + '_' + dir + '.png';}
	
 


function viewer_thumbsize (maxw, maxh, x, y)
	{
	/*
 	 * Find the best size of thumbnail to fit within a given space.
	 */
	var tx = x;
	var ty = y;

	while( tx > maxw ){
		tx = (tx / 2);
		ty = (ty / 2);
		}

	while( ty > maxh ){
		tx = (tx / 2);
		ty = (ty / 2);
		}
		
	var min = new Array(); 
	min['x'] = (tx);
	min['y'] = (ty); 

	return (min);
	}



function whereAmI(who,wch){
	var L=0, R=0;
	var pa=who;
	while(pa.parentNode){
		L+= ( pa.offsetLeft)? pa.offsetLeft: 0;
		R+= (pa.offsetTop)?  pa.offsetTop: 0;	

		if(pa==document.body || wch===false)break;
		pa= pa.parentNode;
		
	}
	var A=[L,R];
	return(wch===1 || wch=== 2)?  A[wch]: A;
}





function zoomIn()
	{
	if( (wid <= (max_x/2)) && (hei <= (max_y/2)) )
		{
  		wid = wid * 2;
	    hei = hei * 2;

    	if( xfit == 1 )
			{rgn_x = wid/2 - (rgn_w/2);}
	    else if( wid > rgn_w ) 
			{rgn_x = 2*rgn_x + rgn_w/2};

	    if( rgn_x > wid ) 
			{rgn_x = wid - rgn_w;}
	    if( rgn_x < 0 ) 
			{rgn_x = 0;}

	    if( yfit == 1 )
			{rgn_y = hei/2 - (rgn_h/2);}
	    else if( hei > rgn_h ) 
			{rgn_y = rgn_y*2 + rgn_h/2;}

    	if( rgn_y > hei ) 
			{rgn_y = hei - rgn_h;}
		if( rgn_y < 0 ) 
			{rgn_y = 0;}

	    rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + ',' + (rgn_w/wid) + ',' + (rgn_h/hei);
		cvt = 'WID=' + wid + '&CVT=jpeg';
		cnt_1 = "CNT=" + contrast_1b;
	    dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + cnt_1 + '&' + rgn +  '&' + cvt);

		if ( (compare == 1) && (no_ims > 1) ) 
			{cnt_2 = "CNT=" + contrast_2b;
    	
		dd.elements.target2.swapImage(server + fif_2 + '&' + sds + '&' + cnt_2 + '&' + rgn +  '&' + cvt);}
	    positionZone();
  		}
	}





function zoomOut()
	{
	if( (wid > target_w) || (hei > target_h) )
		{
	    wid = wid / 2;
	    hei = hei / 2;

    	rgn_x = rgn_x/2 - (rgn_w/4);
	
		if( rgn_x + rgn_w > wid ) 
			{rgn_x = wid - rgn_w;}

	    if( rgn_x < 0 )
			{
    		xfit=1;
    		rgn_x = 0;
    		}
    	else 
			{xfit = 0;}

    	rgn_y = rgn_y/2 - (rgn_h/4);
   
		if( rgn_y + rgn_h > hei ) 
			{rgn_y = hei - rgn_h;}

	    if( rgn_y < 0 )
			{
	        yfit=1;
   	 	    rgn_y = 0;
    		}
	    else yfit = 0;

    	rgn = 'RGN=' + (rgn_x/wid) + ',' + (rgn_y/hei) + 
			  ',' + (rgn_w/wid) + ',' + (rgn_h/hei);
	    cvt = 'WID=' + wid + '&CVT=jpeg';

    	dd.elements.target.swapImage(server + fif_1 + '&' + sds + '&' + 
			cnt_1 + '&' + rgn +  '&' + cvt);
	
		if ( (compare == 1) && (no_ims > 1) )
			{dd.elements.target2.swapImage(server + fif_2 + '&' + sds + 
				'&' + cnt_2 + '&' + rgn +  '&' + cvt);}

    	positionZone();
		}
	}
	
	
	
	
function zoom_con() 
	{
	clickPosition();

	if (dd.e.modifKey)
		{zoomOut();}
	else
		{zoomIn();}
	}
	
	
	
	
function zoom_con_b() 
	{
	wert = 1;	
	var tx = dd.elements.target.x;
	var ty = dd.elements.target.y;	
	
	var delta_x = dd.e.x - tx - (target_w/2);
	var delta_y = dd.e.y - ty - (target_h/2);
	scrollTo_a( delta_x, delta_y );
	positionZone();	
	
	if (dd.e.modifKey)
		{zoomOut();}
	else
		{zoomIn();}
	}







