// User Interface Functions for Oceanographic Atlas of the Pacific
// Handles creating/destroying map layer objects
// Mapping functions should probably be separate.  GUI functions should inform map objects.
//
// January 2004 - Russell Moffitt
//
// January 2007 - Russell Moffitt
// MOVING MOST LAYER OBJECT stuff to LayerLord.js.  Misc gui functions will remain here.

var layercount = {};

// Toggle basemap radio item, deselect other basemap items
function toggleBasemap (layerID) {
	// Note: does nothing if layer is already selected and checked
	var myradio = document.getElementsByName('basemapradio');
	var selected = false;
	for (var i = 0;i < myradio.length; i++) {
		var mylayer = document.getElementById(myradio[i].value);
		var selectlayer = document.getElementById(layerID);
		if (mylayer == selectlayer && selectlayer.className == "layeritem") {
			mylayer.className = "layeritem_selected";
			myradio[i].checked = true;
			selected = true;
		} else {
			mylayer.className = "layeritem";
			myradio[i].checked = false;
		}
	}
	// do something else to let the map know to change the layers
	//updateLayers();
	return false;
	return selected; // return true if the layer was selected
}

function toggleOverlay (layerID) {
	// toggles specific layer on and off 
	var mylayer = xGetElementById(layerID);
	// Get this layer's image element to populate the source
	var mylayerImg = xGetElementById(layerID + '_img');
	var layerLegend = xGetElementById(layerID + '_legend');
	
	var mycheck = xGetElementById(layerID+'_check');
	var holder = xGetElementById('theMap');

	holder.src = "";
	if (mycheck.checked) {
		mylayer.className = "layeritem_selected";
		mylayerImg.className = "show";
		xShow(layerLegend);
	} else {
		mylayer.className = "layeritem";
		mylayerImg.className = "noShow";
		xHide(layerLegend);
	}
	
	
	// do something else to let the map know to change the layer
	return true; // return true in all cases
}

// Expand or collapse layer category list
// Currently selected items are never hidden
function expander (categoryID, expandme) {
	var catlayer = document.getElementById(categoryID);
	var alink = document.getElementById(categoryID+'_expand');
	//var icon = document.getElementById(categoryID+'_expand_icon');
	var text = document.getElementById(categoryID+'_expand_text');
	if (catlayer.className == 'layercat' && !expandme) {
		catlayer.className = "layercat_collapsed";
		//icon.src = "images/icons/icon_collapsed.gif";
		alink.title = "expand (show all layers)";
		text.innerHTML = "Expand List";
	} else {
		catlayer.className = "layercat";
		//icon.src = "images/icons/icon_expanded.gif";
		alink.title = "collapse (hide inactive layers)";
		text.innerHTML = "Collapse List";
	}
	
}


function fadePage(blur) {
	if (blur) {
		xShow('screen');
	} else {
		xHide('screen');
	}
}

function showFrame(show, source) {
	if (show) {

		fadePage(true);
		xGetElementById('framewrap').style.display = 'block';		
		if (source) {
			xGetElementById('frameholder').src = "about:blank";
			xGetElementById('frameholder').style.background = '#EAEDE7';
			xGetElementById('frameholder').source = source;
		}
		//var myleft = xOffsetLeft('mapwrap');
		var myleft = xOffsetLeft('mapGUIContainer');
		var mytop = xOffsetTop('mapGUIContainer');
		sizeFrame('fit', 'fit');
		var myinnerheight = xHeight('frameholder');
		frameHeight(1);
		xLeft('framewrap', -xWidth('frameholder'));
		xTop('framewrap', 109);
		xShow('framewrap');
		xSlideTo('framewrap', myleft, mytop, 800);

		setTimeout("stretchFrameTo("+myinnerheight+", 800, 25, "+fadePage_end+");", 800);
		
	} else {		
		stretchFrameTo(1, 1000, 25, unfadePage_end);
	}
}

function fadePage_end() {
	// finish loading layer selection iframe content
	iframe = xGetElementById('frameholder');
	if (iframe.source) iframe.src = iframe.source;
}

function unfadePage_end () {
	//xGetElementById('frameholder').src = "about:blank";
	xHide('framewrap');
	xGetElementById('framewrap').style.display = 'none';
	fadePage(false);
}

function stretchFrameTo(finalheight, time, framerate, onstop) {
	var f = xGetElementById('framewrap');
	if (!xDef(framerate)) framerate = 25;
	if (!xDef(f.stretch)) f.stretch = {}; 
	f.stretch.yTarget = finalheight; f.stretch.slideTime = time;
	f.stretch.timeout = framerate; f.stretch.stop = false;
	f.stretch.onstop = onstop;
	f.stretch.yD = xHeight('frameholder'); // D = initial position
	f.stretch.yA = f.stretch.yTarget - f.stretch.yD; // A = distance
	f.stretch.B = Math.PI / (2 * f.stretch.slideTime); // B = period
	var d = new Date(); f.stretch.C = d.getTime();
	if (!f.stretch.moving) stretchFrame(f);
	
}

function stretchFrame(f) {
	if (!(f=xGetElementById(f))) return;
	var now, s, t, newY, newX;
	now = new Date();
	t = now.getTime() - f.stretch.C;
	if (f.stretch.stop) {
		f.stretch.moving = false;
		if (xDef(f.stretch.onstop)) f.stretch.onstop();
	} else if (t < f.stretch.slideTime) {
		setTimeout("stretchFrame('"+f.id+"')", f.stretch.timeout);
		s = Math.sin(f.stretch.B * t);
		newY = Math.round(f.stretch.yA * s + f.stretch.yD);
		frameHeight(newY);
		f.stretch.moving = true;
	} else {
		frameHeight(f.stretch.yTarget);
		f.stretch.moving = false;
		if (xDef(f.stretch.onstop)) f.stretch.onstop();
	}
}