﻿// Utility routines for rwardell.com
var paneOpen = "" // global for portfolio tracking

// ----> portfolio functions
function openInfo (divName) {
	var childDiv = document.getElementById(divName);
	if (paneOpen != '')
		{ closeInfo(paneOpen); };
	childDiv.className = "portfolioExpand";
	paneOpen = divName;
}
function closeInfo (divName) {
	var childDiv = document.getElementById(divName);
	childDiv.className = "portfolioCollapse";
	paneOpen = "";
}
// ----> projects functions
var codeLoaded = false;

function toggleBlocks (iFrame, codeDiv, codePath) { //toggle between iframe and div 

		document.getElementById('DataFrame').style.display = iFrame;
		document.getElementById('httprequest').style.display = codeDiv;
		if (codeDiv == 'block' && codeLoaded == false) {
			getFlatFile(codePath,'httprequest');
			codeLoaded = true;
			}
}

// -----> open and position a small window 
function exWinOpen (exURL) { 
  var valwin=window.open(exURL, "valwin", "menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,width=700,height=700");
  valwin.moveTo(60,110);
}
// -----------------------------------------------------------------------------------------------
// -----> reformats 'flat' chemical formulas to canonical form, e.g.:
//			Na6Ca(CO3)(AlSiO4)6·2H2O 				(Cancrinite)
//			(Ca,Na)2-3(Mg,Fe,Al)5Si8Al2O22(OH)2		(Horneblende)
//			Fe0.8-1.0S								(Pyrrhotite)
// note: does not parse for valances
// Author: rwardell.com 2009

function chemFormat (dataId, reformatId) {
	var chemForm = '';
	var chemResult = '';
	var inSub = false;
	var inHydro = false;
	var cursor = 0;
	var target ='';
	
	chemForm = document.getElementById(dataId).innerHTML;	// the flat formula
	for (cursor=0;cursor<(chemForm.length);cursor++)
	{
		if (!isNaN(target = chemForm.charAt(cursor))) {target = 'digit';}
		switch (target) {  			//watch breaks if changing the order of case statements!
			case  ('digit'):
				if (inSub == false && inHydro == false) {
					chemResult = chemResult + '<sub>';
					inSub = true;
				}
			case ' ':
			case '.':
			case '-':
				chemResult = chemResult + chemForm.charAt(cursor)
				break;
			case '·':							// character 183 = %B7
				inHydro = true;
				if (inSub) {
					chemResult = chemResult + '</sub>'
					inSub = false;
				}
				chemResult = chemResult + chemForm.charAt(cursor)
				break;
			default:
				if (inHydro) {			// first non-numeric resets inHydro
					inHydro = false
				}
				if (inSub) {
					chemResult = chemResult + '</sub>'
					inSub = false;
				}
				chemResult = chemResult + chemForm.charAt(cursor)
			}
		}
	document.getElementById(reformatId).innerHTML = chemResult; // insert the formatted chemical formula
}
// -----------------------------------------------------------------------------------------------
// retrieve a flat file from the server using XMLHttpRequest
var xmlhttp
var targetDiv

function getFlatFile(path, divId)
{
	targetDiv = divId;
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null)
	  {
	  alert ('Your browser does not support AJAX!');
	  return;
	  }
	var url=path;  //  <----  relative path to file on server
	xmlhttp.onreadystatechange=stateChanged;
	xmlhttp.open('GET',url,true);
	xmlhttp.setRequestHeader('Content-Type','text/plain');
	xmlhttp.send(null);
}


// -----------------------------------------------------------------------------------------------
// -----> AJAX code to access mineral database XML

function getMineral(name)
{
	targetDiv = 'mindata'
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
var url="ajax/retrievemin.aspx";  //  <----  server module
url=url+"?q="+name;
url=url+"&sid="+Math.random();
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById(targetDiv).innerHTML=xmlhttp.responseText;	// <--response placed in div named here
}
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}
