function ToggleVisible( elemId ) {
    var elem = document.getElementById( elemId );
    if ( elem ) {
        var isVisible = elem.style.display == 'none'; 
        elem.style.display = isVisible ? '' : 'none';
        setCookie( "vis_" + elemId, isVisible, 7 );
    }
};

function ShrinkExpand( elemId, shrink ) {
    var shrinkedElem = document.getElementById( elemId + '_shrinked');
    var expandedElem = document.getElementById( elemId + '_expanded');
    var expandedHdrElem = document.getElementById( elemId + '_expandedHdr');
    if ( !shrink && shrinkedElem ) {
        shrinkedElem.style.display = 'none';
    }
    if ( expandedElem ) {
        expandedElem.style.display = !shrink ? '' : 'none';
    }
    if ( expandedHdrElem ) {
        expandedHdrElem.style.display = !shrink ? '' : 'none';
    }
    if ( shrink && shrinkedElem ) {
        shrinkedElem.style.display = '';
    }
    setCookie( "vis_" + elemId, !shrink, 7 );
};

function Shrink( elemId ) {
    ShrinkExpand( elemId, true );
};

function Expand( elemId ) {
    ShrinkExpand( elemId, false );
};

// Cookie handling
function setCookie( sName, sValue, nDays ) {
	var expires = "";
	if ( nDays ) {
		var d = new Date();
		d.setTime( d.getTime() + nDays * 24 * 60 * 60 * 1000 );
		expires = "; expires=" + d.toGMTString();
	}

	document.cookie = sName + "=" + sValue + expires + "; path=/";
};

function getCookie(sName) {
	var re = new RegExp( "(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)" );
	var res = re.exec( document.cookie );
	return res != null ? res[3] : null;
};

function removeCookie( name ) {
	setCookie( name, "", -1 );
};

/* Jmol functions */
function createJmolApplet( pdbUrl, backColor, initScript ) {
	jmolInitialize( "./jmol" );
	
	jmolApplet( appletSize,
		"load \"" + pdbUrl + "\"; " +
		"background [" + toJmolColor( backColor ) + "]; " +
		initScript );
}

function toJmolColor( hexColor )
{
	var c1 = parseInt(String(hexColor).slice(0,2),16);
	var c2 = parseInt(String(hexColor).slice(2,4),16);
	var c3 = parseInt(String(hexColor).slice(4,6),16);
	return "" + c1 + "," + c2 + "," + c3;
}

function SetMoleculeGroupColor(elem, color) {
	var tmpl = new String(group_template[elem]);
	if (!tmpl.length) return;
	tmpl += "color [" + toJmolColor( color ) + "];select *;";
	jmolScript(tmpl);
}
function ResizeJmol(size){
	var d = _jmolGetApplet();
	alert( d );
	appletSize = size;
	jmolSetDocument( null );
	placeJmolApplet();
}
function getJmolSelectExpr( clause ) {
	return clause != "" ? "select " + clause : "";
}
function PutSpacefillMenu( select_clause, big )
{
	var select_expr = getJmolSelectExpr( select_clause );
	jmolSetMenuCssClass('inp');
	jmolMenu([
		[ select_expr + "; spacefill  off", "spacefill off", ""],
		[ select_expr + "; spacefill   0%", "spacefill 0%",  ""],
		[ select_expr + "; spacefill  10%", "spacefill 10%", big ? "" : "selected" ],
		[ select_expr + "; spacefill  20%", "spacefill 20%", ""],
		[ select_expr + "; spacefill  30%", "spacefill 30%", ""],
		[ select_expr + "; spacefill  40%", "spacefill 40%", ""],
		[ select_expr + "; spacefill  50%", "spacefill 50%", ""],
		[ select_expr + "; spacefill  60%", "spacefill 60%", ""],
		[ select_expr + "; spacefill  70%", "spacefill 70%", ""],
		[ select_expr + "; spacefill  80%", "spacefill 80%", ""],
		[ select_expr + "; spacefill  90%", "spacefill 90%", ""],
		[ select_expr + "; spacefill  100%", "spacefill 100%", big ? "selected" : "" ]
	]);
}
function PutWireframeMenu( select_clause, wireframe )
{
	var select_expr = getJmolSelectExpr( select_clause );
	jmolSetMenuCssClass('inp');
	jmolMenu([
		[ select_expr + "; wireframe  off", "wireframe off", wireframe ? "" : "selected" ],
		[ select_expr + "; wireframe 0.05", "wireframe 0.05", ""],
		[ select_expr + "; wireframe  0.1", "wireframe 0.10", wireframe ? "selected" : "" ],
		[ select_expr + "; wireframe  0.2", "wireframe 0.20", ""],
		[ select_expr + "; wireframe  0.3", "wireframe 0.30", ""],
		[ select_expr + "; wireframe  0.4", "wireframe 0.40", ""],
		[ select_expr + "; wireframe  0.5", "wireframe 0.50", ""],
		[ select_expr + "; wireframe  0.6", "wireframe 0.60", ""],
		[ select_expr + "; wireframe  0.7", "wireframe 0.70", ""],
		[ select_expr + "; wireframe  0.8", "wireframe 0.80", ""],
		[ select_expr + "; wireframe  0.9", "wireframe 0.90", ""],
		[ select_expr + "; wireframe  1.0", "wireframe 1.00", "" ]
	]);
}
