// /branding/cookies.js must be loaded before this file.

// Un-trap us from framesets
//if (window.top != window)
//	window.top.location = window.location;

// Toggle display between none/block, saving the current state in a cookie.
// With no remembered state, set to block.
function kadabra (zap) {
	if (document.getElementById) {
		var abra = document.getElementById(zap).style;
		var alakazam = document.getElementById("icon-" + zap);
		if (abra.display != "none") {
			abra.display = "none";
			alakazam.childNodes[0].nodeValue = "(+)";
			SetCookie ("menu-state-" + zap, "none", null, "/");
		} else {
			abra.display = "block";
			alakazam.childNodes[0].nodeValue = "(-)";
			SetCookie ("menu-state-" + zap, "block", null, "/");
		}
		return false;
	} else {
		return true;
	}
}

// Set a specific display state, unless one has already been set explicitly.
function setDefaultState (zap, state) {
	if (document.getElementById) {
		var abra = document.getElementById (zap).style;
		if (!abra.display) {
			abra.display = state;
		}
		/* Always set the default text since it overrides the "(+/-)"
		 * used when JavaScript is disabled.
		 */
		var alakazam = document.getElementById("icon-" + zap);
		if (state == "none") {
			alakazam.childNodes[0].nodeValue = "(+)";
		} else {
			alakazam.childNodes[0].nodeValue = "(-)";
		}
		return false;
	} else {
		return true;
	}
}



/*
 * Written by Jonathan Snook, http://www.snook.ca/jonathan
 * Add-ons by Robert Nyman, http://www.robertnyman.com
 */
function getElementsByClassName (oElm, strTagName, strClassName) {
    var arrElements = (strTagName == "*" && oElm.all)
		      ? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace (/\-/g, "\\-");
    var oRegExp = new RegExp ("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for (var i=0; i<arrElements.length; i++) {
        oElement = arrElements[i];      
        if(oRegExp.test (oElement.className)) {
            arrReturnElements.push (oElement);
        }   
    }
    return (arrReturnElements)
}

// Load menu display state from cookies.
function rememberMenuStates () {
	var unchanged = true;
	var colm = getElementsByClassName (document, "ul", "collapsible-menu");
	for (var i=0; i<colm.length; i++) {
		var elem = colm[i];
		var state = GetCookie ("menu-state-" + elem.id);
		if (state && elem.display != state) {
			var alakazam = document.getElementById("icon-"
							       + elem.id);
			elem.style.display = state;
			if (state == "none") {
				alakazam.childNodes[0].nodeValue = "(+)";
			} else {
				alakazam.childNodes[0].nodeValue = "(-)";
			}
			unchanged = false;
		}
	}
	return unchanged;
}



function setFormAction (url)
{
	var sf = document.getElementById ('wikinav_search_form');
	if (sf.action != url) {
		sf.action = url;
	}
	return true;
}



// Return the version and diffversion input children of object.
function historyRadios (parent) {
	var inputs = parent.getElementsByTagName ('input');
	var radios = [];
	for (var i = 0; i < inputs.length; i++) {
		if (inputs[i].name == "version"
		    || inputs[i].name == "diffversion")
			radios[radios.length] = inputs[i];
	}
	return radios;
}

// check selection and tweak visibility/class onclick
function diffcheck ()
{
	var vli = false; // the li where the version radio is checked
	var dli = false; // the li where the diffversion radio is checked
	var hf = document.getElementById ('historyform');

	if (!hf) return true;

	var lis = hf.getElementsByTagName ('li');
	for (i=0; i< lis.length; i++)
	{
		var inputs = historyRadios (lis[i]);
		if (inputs[1] && inputs[0])
		{
			if (inputs[1].checked
			    || inputs[0].checked)
			{
				// this row has a checked radio button
				if (inputs[1].checked
				    && inputs[0].checked
				    && inputs[0].value == inputs[1].value)
					// If a browser isn't vanishing
					// unselectable radios correctly, try
					// and abort when the user clicks one.
					return false;
				if (vli && inputs[0].checked)
					// it's the second checked version
					return false;
				else if (dli && inputs[1].checked)
					// it's the second checked diffversion
					return false;

				if (!dli)
					inputs[0].style.visibility = 'hidden';
				if (inputs[0].checked)
					vli = lis[i];
				else
					dli = lis[i];
				if (vli)
					inputs[1].style.visibility = 'hidden';

				lis[i].className = "selected";
			}
			else
			{
				// no radio is checked in this row
				if (!dli)
					inputs[0].style.visibility = 'hidden';
				else
					inputs[0].style.visibility = 'visible';
				if (vli)
					inputs[1].style.visibility = 'hidden';
				else
					inputs[1].style.visibility = 'visible';
				lis[i].className = "";
			}
		}
	}
	return true;
}


function histFormInit ()
{
	var hf = document.getElementById ('historyform');
	if (!hf) return;

	// Get the list of changes.
	var lis = hf.getElementsByTagName ('li');
	if (lis.length < 2) return;

	// Walk the list of changes, watching for checks and setting onclick.
	var vli = false;
	var dli = false;
	for (var i = 0; i < lis.length; i++)
	{
		var inputs = historyRadios (lis[i]);
		if (inputs[0] && inputs[1])
		{
			inputs[0].onclick = diffcheck;
			inputs[1].onclick = diffcheck;
			if (inputs[0].checked)
				vli = true;
			if (inputs[1].checked)
				dli = true;
		}
	}
	if (!vli || !dli)
	{
		var inputs;
		inputs = historyRadios (lis[0]);
		if (inputs[0] && inputs[1])
		{
			inputs[1].checked = true;
		}
		inputs = historyRadios (lis[1]);
		if (inputs[0] && inputs[1])
		{
			inputs[0].checked = true;
		}
	}

	diffcheck();
}



function goBack()
  {
  window.history.back()
  }



YAHOO.util.Event.onDOMReady (rememberMenuStates);
YAHOO.util.Event.onDOMReady (histFormInit);
