/* $RCSfile: Jmol.js,v $
* $Author: migueljmol $
* $Date: 2004/12/11 22:22:10 $
* $Revision: 1.28 $
*
* Copyright (C) 2004 The Jmol Development Team
*
* Contact: jmol-developers@lists.sf.net
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA.
*/
// for documentation see www.jmol.org/jslibrary
var undefined; // for IE 5 ... wherein undefined is undefined
////////////////////////////////////////////////////////////////
// Basic Scripting infrastruture
////////////////////////////////////////////////////////////////
function jmolInitialize(codebaseDirectory) {
if (_jmol.initialized) {
alert("jmolInitialize() should only be called *ONCE* within a page");
return;
}
if (! codebaseDirectory) {
alert("codebaseDirectory is a required parameter to jmolInitialize");
codebaseDirectory = ".";
}
if (codebaseDirectory.indexOf("http://") == 0 ||
codebaseDirectory.indexOf("https://") == 0)
alert("codebaseDirectory should be directory relative,\n" +
"not be an absolute URL : " + codebaseDirectory);
else if (codebaseDirectory.charAt(0) == '/')
alert("codebaseDirectory should be directory relative,\n" +
"not relative to the root of the web server : " + codebaseDirectory);
_jmolSetCodebase(codebaseDirectory);
_jmolOnloadResetForms();
_jmol.initialized = true;
}
function jmolSetAppletColor(boxbgcolor, boxfgcolor, progresscolor) {
_jmolInitCheck();
_jmol.boxbgcolor = boxbgcolor;
if (boxfgcolor)
_jmol.boxfgcolor = boxfgcolor
else if (boxbgcolor == "white" || boxbgcolor == "#FFFFFF")
_jmol.boxfgcolor = "black";
else
_jmol.boxfgcolor = "white";
if (progresscolor)
_jmol.progresscolor = progresscolor;
if (_jmol.debugAlert)
alert(" boxbgcolor=" + _jmol.boxbgcolor +
" boxfgcolor=" + _jmol.boxfgcolor +
" progresscolor=" + _jmol.progresscolor);
}
function jmolApplet(size, script, nameSuffix) {
_jmolInitCheck();
_jmolApplet(size, null, script, nameSuffix);
}
////////////////////////////////////////////////////////////////
// Basic controls
////////////////////////////////////////////////////////////////
function jmolButton(script, label, id) {
_jmolInitCheck();
var scriptIndex = _jmolAddScript(script);
if (label == undefined || label == null)
label = script.substring(0, 32);
if (id == undefined || id == null)
id = "jmolButton" + _jmol.buttonCount;
++_jmol.buttonCount;
var t = "";
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolCheckbox(scriptWhenChecked, scriptWhenUnchecked,
labelHtml, isChecked, id) {
_jmolInitCheck();
if (id == undefined || id == null)
id = "jmolCheckbox" + _jmol.checkboxCount;
++_jmol.checkboxCount;
if (scriptWhenChecked == undefined || scriptWhenChecked == null ||
scriptWhenUnchecked == undefined || scriptWhenUnchecked == null) {
alert("jmolCheckbox requires two scripts");
return;
}
if (labelHtml == undefined || labelHtml == null) {
alert("jmolCheckbox requires a label");
return;
}
var indexChecked = _jmolAddScript(scriptWhenChecked);
var indexUnchecked = _jmolAddScript(scriptWhenUnchecked);
var t = "" +
labelHtml;
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolRadioGroup(arrayOfRadioButtons, separatorHtml, groupName) {
_jmolInitCheck();
var type = typeof arrayOfRadioButtons;
if (type != "object" || type == null || ! arrayOfRadioButtons.length) {
alert("invalid arrayOfRadioButtons");
return;
}
if (separatorHtml == undefined || separatorHtml == null)
separatorHtml = " ";
var length = arrayOfRadioButtons.length;
var t = "";
jmolStartNewRadioGroup();
for (var i = 0; i < length; ++i) {
var radio = arrayOfRadioButtons[i];
type = typeof radio;
if (type == "object") {
t += _jmolRadio(radio[0], radio[1], radio[2], separatorHtml, groupName);
} else {
t += _jmolRadio(radio, null, null, separatorHtml, groupName);
}
}
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolLink(script, text, id) {
_jmolInitCheck();
if (id == undefined || id == null)
id = "jmolLink" + _jmol.linkCount;
++_jmol.linkCount;
var scriptIndex = _jmolAddScript(script);
var t = "" + text + "";
if (_jmol.debugAlert)
alert(t);
document.write(t);
}
function jmolMenu(arrayOfMenuItems, size, id) {
_jmolInitCheck();
if (id == undefined || id == null)
id = "jmolMenu" + _jmol.menuCount;
++_jmol.menuCount;
var type = typeof arrayOfMenuItems;
if (type != null && type == "object" && arrayOfMenuItems.length) {
var length = arrayOfMenuItems.length;
if (typeof size != "number" || size == 1)
size = null;
else if (size < 0)
size = length;
var sizeText = size ? " size='" + size + "' " : "";
var t = "