function resizeRss() {
	var frame=document.getElementById("rssreader");
	var height=frame.contentWindow.document.body.scrollHeight+20;
	frame.style.height=height+"px";
}

function resizeVote() {
	var frame=document.getElementById("vote");
	var height=frame.contentWindow.document.body.scrollHeight;
	frame.style.height=height+"px";
}

function resizeCommentBox() {
    frame = document.getElementById("frmComments");
    var height = frame.contentWindow.document.body.scrollHeight;
    if (height < 50) height = 50;
    frame.style.height = height + "px";
}

var glossaryMode="popup"; //"popup" or "inline" or "hidden"
function setGlossaryMode(newMode, parentID) {
	if(newMode!=glossaryMode) {
		if(newMode=="popup") {
			if(glossaryMode=="inline") glossesDeinline(parentID);
			if(glossaryMode=="hidden") glossesUnhide(parentID);
			glossesAttachEvents(parentID);
		}
		else if(newMode=="inline") {
			if(glossaryMode=="popup") glossesDetachEvents(parentID);
			if(glossaryMode=="hidden") glossesUnhide(parentID);
			glossesInline(parentID);
		}
		else if(newMode=="hidden") {
			if(glossaryMode=="inline") glossesDeinline(parentID);
			if(glossaryMode=="popup") glossesDetachEvents(parentID);
			glossesHide(parentID);
		}
		glossaryMode=newMode;
		cookieMaker.createCookie("glossaryMode", glossaryMode, 40);
	}
}

function glossesHide(parentID) {
	var glosses=MbmUtils.getElementsByClassName("gloss", "span", document.getElementById(parentID));
	for(var i=0; i<glosses.length; i++) {
		var gloss=glosses[i];
		MbmUtils.addClassName(gloss, "glossHidden");
		gloss.setAttribute("xtitle", gloss.getAttribute("title"));
		gloss.setAttribute("title", "");
	}
}

function glossesUnhide(parentID) {
	var glosses=MbmUtils.getElementsByClassName("gloss", "span", document.getElementById(parentID));
	for(var i=0; i<glosses.length; i++) {
		var gloss=glosses[i];
		MbmUtils.removeClassName(gloss, "glossHidden");
		gloss.setAttribute("title", gloss.getAttribute("xtitle"));
		gloss.setAttribute("xtitle", "");
	}
}

function glossesAttachEvents(parentID) {
	var glosses=MbmUtils.getElementsByClassName("gloss", "span", document.getElementById(parentID));
	for(var i=0; i<glosses.length; i++) {
		var gloss=glosses[i];
		gloss.onmouseover=function(){MbmUtils.addClassName(this, "glossHover");};
		gloss.onmouseout=function(){MbmUtils.removeClassName(this, "glossHover");};
	}
	if(glosses.length==0 && document.getElementById("butGlossary")) document.getElementById("butGlossary").style.display="none";
}

function glossesDetachEvents(parentID) {
	var glosses=MbmUtils.getElementsByClassName("gloss", "span", document.getElementById(parentID));
	for(var i=0; i<glosses.length; i++) {
		var gloss=glosses[i];
		gloss.onmouseover=null;
		gloss.onmouseout=null;
	}
}

function glossesInline(parentID) {
	var glosses=MbmUtils.getElementsByClassName("gloss", "span", document.getElementById(parentID));
	for(var i=0; i<glosses.length; i++) {
		var gloss=glosses[i];
		var suffix=document.createElement("span");
		suffix.innerHTML="&nbsp;("+gloss.getAttribute("title")+")";
		suffix.className="suffix";
		gloss.appendChild(suffix);
		gloss.setAttribute("xtitle", gloss.getAttribute("title"));
		gloss.setAttribute("title", "");
	}
}

function glossesDeinline(parentID) {
	var glosses=MbmUtils.getElementsByClassName("gloss", "span", document.getElementById(parentID));
	for(var i=0; i<glosses.length; i++) {
		var gloss=glosses[i];
		
		var toremove=new Array();
		for(var ii=0; ii<gloss.childNodes.length; ii++) {
			var child=gloss.childNodes[ii];
			if(child.nodeName.toLowerCase()=="span" && child.className=="suffix") toremove.push(child);
		}
		for(var ii=0; ii<toremove.length; ii++) gloss.removeChild(toremove[ii]);
		
		gloss.setAttribute("title", gloss.getAttribute("xtitle"));
		gloss.setAttribute("xtitle", "");
	}
}

function dropdown(butID, dropID) {
	var but=document.getElementById(butID);
	var drop=document.getElementById(dropID);
	if(drop.style.display=="block") {
		dropup();
	} else {
		dropup();
		MbmUtils.addClassName(but, "buttonOn");
		drop.style.display="block";
	}
}

function dropup() {
	var buttons=MbmUtils.getElementsByClassName("button", "a", document.getElementById("articletools"));
	for(var i=0; i<buttons.length; i++) MbmUtils.removeClassName(buttons[i], "buttonOn");
	var dropdowns=MbmUtils.getElementsByClassName("dropdown", "div", document.getElementById("dropdowns"));
	for(var i=0; i<dropdowns.length; i++) dropdowns[i].style.display="none";
}



//Wrapper object for my utilities:
var MbmUtils = new Object();

//Adds a classname to the element, NOT overwriting any other classnames already in there:
MbmUtils.addClassName = function(element, className) {
    if (element) {
        if (element.className == '') element.className = className;
        else element.className += ' ' + className;
    }
};

//Removes a classname from an element, keeping any other classnames untouched:
MbmUtils.removeClassName = function(element, className) {
    if (element && element.className) {
        var newClassNames = '';
        var classNames = element.className.split(' ');
        for (var i = 0; i < classNames.length; i++) {
            if (classNames[i] != className) {
                if (newClassNames != '') newClassNames += ' ';
                newClassNames += classNames[i];
            }
        }
        element.className = newClassNames;
    }
};

//getElementsByClassName
/*
Developed by Robert Nyman, http://www.robertnyman.com
Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
MbmUtils.getElementsByClassName = function(className, tag, elm) {
    if (document.getElementsByClassName) {
        getElementsByClassName = function(className, tag, elm) {
            elm = elm || document;
            var elements = elm.getElementsByClassName(className),
				nodeName = (tag) ? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
            for (var i = 0, il = elements.length; i < il; i += 1) {
                current = elements[i];
                if (!nodeName || nodeName.test(current.nodeName)) {
                    returnElements.push(current);
                }
            }
            return returnElements;
        };
    }
    else if (document.evaluate) {
        getElementsByClassName = function(className, tag, elm) {
            tag = tag || "*";
            elm = elm || document;
            var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
            for (var j = 0, jl = classes.length; j < jl; j += 1) {
                classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
            }
            try {
                elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
            }
            catch (e) {
                elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
            }
            while ((node = elements.iterateNext())) {
                returnElements.push(node);
            }
            return returnElements;
        };
    }
    else {
        getElementsByClassName = function(className, tag, elm) {
            tag = tag || "*";
            elm = elm || document;
            var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
            for (var k = 0, kl = classes.length; k < kl; k += 1) {
                classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
            }
            for (var l = 0, ll = elements.length; l < ll; l += 1) {
                current = elements[l];
                match = false;
                for (var m = 0, ml = classesToCheck.length; m < ml; m += 1) {
                    match = classesToCheck[m].test(current.className);
                    if (!match) {
                        break;
                    }
                }
                if (match) {
                    returnElements.push(current);
                }
            }
            return returnElements;
        };
    }
    return getElementsByClassName(className, tag, elm);
};

//-------------------------------------------
//-------------------------------------------

//Object for working with cookies, by Peter-Paul Koch,
//stolen from the article on style switching at http://www.alistapart.com/articles/alternate/
var cookieMaker=new Object();

cookieMaker.createCookie=function(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
};

cookieMaker.readCookie=function(name) {
	var nameEQ = name + "=";
	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(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
};

//-------------------------------------------
//-------------------------------------------
