
function getRequestInstance() {
	// Firefox, Safari...
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	}
	// Internet Explorer
	if (window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	// *snif*
	return null;
}

function setRuleDisplay(ruleName, displayValue) {
	for(i in document.styleSheets) {
		s = document.styleSheets[i]
		if (s.cssRules) { // Firefox, Safari
			for(j in s.cssRules) {
				if (s.cssRules[j].selectorText != ruleName) continue
				s.cssRules[j].style.display = displayValue
				return
			}
		} else if (s.rules) { // IE6
			for(j in s.rules) {
				if (s.rules[j].selectorText != ruleName) continue
				s.rules[j].style.display = displayValue
				return
			}
		}
	}
}

function updateDisplay(checkbox, style) {
	if (checkbox.checked) {
		setRuleDisplay('.' + style, 'block'); // IE6 dont like 'inherite' or 'table'
	} else {
		setRuleDisplay('.' + style, 'none');
	}
}

function updateNamespaceDisplay(checkbox, namespace) {
	if (checkbox.checked) {
		setRuleDisplay('.rcns-' + namespace, 'block');
	} else {
		setRuleDisplay('.rcns-' + namespace, 'none');
	}
}

namespaces = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 100, 101, 102, 103, 104, 105)
namespaceCheckbox = null;

/**
 * @param command in set('all', 'nothing', 'article', 'article+talk', 'meta')
 */
function updateGlobalNamespaceDisplay(command) {
	
	// checkbox id caching
	if (namespaceCheckbox == null) {
		namespaceCheckbox = Array();
		for (i in namespaces) {
			namespace = namespaces[i];
			namespaceCheckbox[i] = document.getElementById('checkNamespace' + namespace);
		}
		namespaceCheckbox['user'] = document.getElementById('checkContributorUser');
		namespaceCheckbox['bot'] = document.getElementById('checkContributorBot');
		namespaceCheckbox['ip'] = document.getElementById('checkContributorIP');
	}
	
	for (i in namespaces) {
		namespace = namespaces[i];
		id = namespaceCheckbox[i];
		mustBeDisplayed = false
		switch (command) {
			case 'all':          mustBeDisplayed = true; break;
			case 'nothing':      mustBeDisplayed = false; break;
			case 'article':      mustBeDisplayed = namespace == 0; break;
			case 'article+talk': mustBeDisplayed = namespace <= 1; break;
			case 'meta':         mustBeDisplayed = namespace > 1; break;
		}
		// need update
		if (mustBeDisplayed != id.checked) {
			id.checked = mustBeDisplayed;
			updateNamespaceDisplay(id, namespace);
		}
	}
	
}

// for enhanced RecentChanges
function toggleVisibility(_levelId, _otherId, _linkId) {
	var thisLevel = document.getElementById(_levelId);
	var otherLevel = document.getElementById(_otherId);
	var linkLevel = document.getElementById(_linkId);
	if (thisLevel.style.display == 'none') {
		thisLevel.style.display = 'block';
		otherLevel.style.display = 'none';
		linkLevel.style.display = 'inline';
	} else {
		thisLevel.style.display = 'none';
		otherLevel.style.display = 'inline';
		linkLevel.style.display = 'none';
	}
}
