function svForm(form) {
  rows = document.getElementById("rows").value;
  rxndata = document.getElementById("title").value + "^";
  for (i=0; i<=(rows); i++) {
    r = i*7;
    rgntid = "rgnt" + i;
    mwid = "mw" + i;
    denid = "den" + i;
    gramid = "gram" + i;
    mlid = "ml" + i;
    mmolid = "mmol" + i;
    eqid = "eq" + i;
    rxndata = rxndata + document.getElementById(rgntid).value + "^";
    rxndata = rxndata + document.getElementById(mwid).value + "^";
    rxndata = rxndata + document.getElementById(denid).value + "^";
    rxndata = rxndata + document.getElementById(gramid).value + "^";
    rxndata = rxndata + document.getElementById(mlid).value + "^";
    rxndata = rxndata + document.getElementById(mmolid).value + "^"; 
    rxndata = rxndata + document.getElementById(eqid).value + "^";
  }
  return rxndata;
}

function wrtForm(form) {
  rows = document.getElementById("rows").value;
  if ( Get_Cookie( 'rxn' ) ) {
    rxndatacookie = Get_Cookie('rxn');
    rxndata = rxndatacookie.split('^');
    document.getElementById("title").value = rxndata[0];
    for (i=0; i<=(rows); i++) {
      r = i*7+1;
      rgntid = "rgnt" + i;
      mwid = "mw" + i;
      denid = "den" + i;
      gramid = "gram" + i;
      mlid = "ml" + i;
      mmolid = "mmol" + i;
      eqid = "eq" + i;
      if (rxndata[r]) document.getElementById(rgntid).value = rxndata[r];
      if (rxndata[r+1]) document.getElementById(mwid).value = rxndata[r+1];
      if (rxndata[r+2]) document.getElementById(denid).value = rxndata[r+2];
      if (rxndata[r+3]) document.getElementById(gramid).value = rxndata[r+3];
      if (rxndata[r+4]) document.getElementById(mlid).value = rxndata[r+4];
      if (rxndata[r+5]) document.getElementById(mmolid).value = rxndata[r+5];
      if (rxndata[r+6]) document.getElementById(eqid).value = rxndata[r+6];
    }
  }
}

function amtCalc(form) {
  rows = document.getElementById("rows").value;
  den = null;
  for (i=1; i<=rows; i++) {
    rgntid = "rgnt" + i;
    mwid = "mw" + i;
    denid = "den" + i;
    gramid = "gram" + i;
    mlid = "ml" + i;
    mmolid = "mmol" + i;
    eqid = "eq" + i;
    mw = document.getElementById(mwid).value;
    den = document.getElementById(denid).value;
    gram = document.getElementById(gramid).value;
    eq = document.getElementById(eqid).value;
    if (i == 1) {
      mmol = gram/mw*1000;
      mmol1 = mmol;
    } else {
      mmol = mmol1 * eq;
      gram = mmol * mw/1000;
    }
    if (den > 0) {
      ml = gram/den;
      document.getElementById(mlid).value = rnd(ml);
    } else {
      // ml becomes a string
      ml = " ";
      document.getElementById(mlid).value = ml;
    }
  if (gram > 0 && mmol > 0) {
    document.getElementById(gramid).value = rnd(gram);
    document.getElementById(mmolid).value = rnd(mmol);
  }
  //saveRxn(form);   //Don't do this.  A lot of things break.
  }
}
	
function rnd(val) {
  if (val > 1) {
    newVal = (Math.round(val*100))/100;
  } else {
    newVal = (Math.round(val*1000))/1000;
  }
  return newVal;
}
	
function clr(form, i) {
  rgntid = "rgnt" + i;
  mwid = "mw" + i;
  denid = "den" + i;
  gramid = "gram" + i;
  mlid = "ml" + i;
  mmolid = "mmol" + i;
  eqid = "eq" + i;
  //alert(rgntid + " " + mwid + " " + denid +  " " + gramid + " " + i);
  document.getElementById(rgntid).value = null;
  document.getElementById(mwid).value = null;
  document.getElementById(denid).value = null;
  document.getElementById(gramid).value = null;
  document.getElementById(mlid).value = null;
  document.getElementById(mmolid).value = null;
  if (i!=1)
    document.getElementById(eqid).value = null;
}
	  
function clrAll(form) {
  //saveRxn(form);
  document.JME.reset();
  document.getElementById("title").value = null;
  rows = document.getElementById("rows").value;
  form.exp.value = "";
  //alert(rows);
  for (i=1; i<=rows; i++) {
    clr(form, i);
  }
}

function clrCookies(form) {
  Delete_Cookie('wholerxn', '/', '');
  Delete_Cookie('rxn', '/', '');
  Delete_Cookie('jme', '/', '');
  Delete_Cookie('rows', '/', '');
  Delete_Cookie('shared', '/', '');
  Delete_Cookie('PHPSESID', '/', '');
}

function Set_Cookie( name, value, expires, path, domain, secure ) {
  // set time, it's in milliseconds
  var today = new Date();
  today.setTime( today.getTime() );
  
  /*
  if the expires variable is set, make the correct
  expires time, the current script below will set
  it for x number of days, to make it for hours,
  delete * 24, for minutes, delete * 60 * 24
  */
  if ( expires ) {
    expires = expires * 1000 * 60 * 60;
  }
  var expires_date = new Date( today.getTime() + (expires) );
  
  document.cookie = name + "=" +escape( value ) +
  ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
  ( ( path ) ? ";path=" + path : "" ) +
  ( ( domain ) ? ";domain=" + domain : "" ) +
  ( ( secure ) ? ";secure" : "" );
}

// this fixes an issue with the old method, ambiguous values
// with this test document.cookie.indexOf( name + "=" );
function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ ) {
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name ) {
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 ) {
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found ) {
		return null;
	}
}

// this deletes the cookie when called
function Delete_Cookie( name, path, domain ) {
if ( Get_Cookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function getSmiles() {
  var smiles = document.JME.smiles();
  //alert (smiles);
  document.getElementById("smiles").value = smiles;
}

// These things keep JME structures around on reload

function saveJMECookie() {
  var jme = document.JME.jmeFile();
  document.cookie = "jme="+jme+";expires=Thu, 31 Dec 2020 00:00:00 GMT; path=/";
  //alert("jme="+jme);
}

function readJMECookie() {
  var editor = document.JME;
  //if (editor.smiles().length > 0) return; // editing already started
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf("jme=") == 0) {
      var jme = c.substring(4,c.length);
      //alert("jme="+jme);
      editor.readMolecule(jme);
      return;
    }
  }
}

function saveRxn(form) {
  var jme = document.JME.jmeFile();
  var rows = document.getElementById("rows").value;
  var rxndatacookie = svForm(form);  //title on front
  var exp = form.exp.value;
  var wholerxn = jme + "^" + rows + "^" + rxndatacookie + exp;
  setCookie( 'wholerxn', wholerxn, 5);
  setCookie( 'shared', form.shared.checked, 5);
  //alert (Get_Cookie('shared'));
  return wholerxn;
}

function writeRxn() {
//   reaction stored as jme^rows^(title^rxndatacookie)^exp
  if ( Get_Cookie( 'wholerxn' ) ) {
    wholerxn = Get_Cookie('wholerxn');
    //wholerxn = wholerxn.replace(/\+/g, " ");
    rxndata = wholerxn.split('^');
    jme = rxndata[0];       // jme is stored first
    document.JME.readMolecule(jme);  //  restore jme
    rows = rxndata[1];
    setCookie('rows', rows, 5);
    document.getElementById("rows").value = rows;
    title = rxndata[2];
    document.getElementById("title").value = title;
    offset = 3;
    for (i=0; i<=(rows); i++) {
      r = i*7 + offset;
      rgntid = "rgnt" + i;
      mwid = "mw" + i;
      denid = "den" + i;
      gramid = "gram" + i;
      mlid = "ml" + i;
      mmolid = "mmol" + i;
      eqid = "eq" + i;
      if (rxndata[r]) document.getElementById(rgntid).value = rxndata[r];
      if (rxndata[r+1]) document.getElementById(mwid).value = rxndata[r+1];
      if (rxndata[r+2]) document.getElementById(denid).value = rxndata[r+2];
      if (rxndata[r+3]) document.getElementById(gramid).value = rxndata[r+3];
      if (rxndata[r+4]) document.getElementById(mlid).value = rxndata[r+4];
      if (rxndata[r+5]) document.getElementById(mmolid).value = rxndata[r+5];
      if (rxndata[r+6]) document.getElementById(eqid).value = rxndata[r+6];
    }
    exp = rxndata[rows*7+offset+7];
    document.getElementById('exp').value = exp;
  }
}

// make sure to put the cookie name in quotes
function setCookie(c_name,value,expiredays) {
  var exdate=new Date();
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie=c_name+ "=" +escape(value)+
  ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function changeRows(form) {
  var rows = document.getElementById("rows").value;
  setCookie('rows', rows, 5);
  //alert(rows + " rows");
  //test = saveRxn(form);
  //alert (test);

}
