/**
 * A script for: http://www.santaclaus-embassy.com/
 * Title: Functions
 * Author: Satoshi Soma
 * Description: n/a
 * Last update: 2011-11-15
 */

function showOverlay(target) {
	document.body.style.overflow = 'hidden';
	removeClass(target, 'hidden_overlay');
	addClass(target, 'overlay');
	setOpacity(target, 0.0);
	fade(target, 1.0, 0.1, function() {return;});
}

function hideOverlay(target) {
	document.body.style.overflow = 'auto';
	fade(target, 0.1, -0.1, function() {
		removeClass(target, 'overlay');
		addClass(target, 'hidden_overlay');
		return;
	});
}

function setOpacity(target, opacity) {
	if (opacity < 0) opacity = 0;
	else if (opacity > 1) opacity = 1;
	target.style.opacity = opacity;
	target.style.MozOpacity = opacity;
	target.style.filter = 'alpha(opacity = ' + (opacity * 100) + ')';
}

function fade(target, finOpacity, speed, onReturn) {
	clearTimeout(fade.thread);
	newOpacity = parseFloat(target.style.opacity) + speed;
	if ((speed < 0 && newOpacity < finOpacity) || (speed > 0 && newOpacity > finOpacity)) {
		setOpacity(target, finOpacity);
		return onReturn();
	}
	setOpacity(target, newOpacity);
	fade.thread = setTimeout(function() {fade(target, finOpacity, speed, onReturn)}, 50);
}

function remove(target) {
	var parent = target.parentNode;
	parent.removeChild(target);
}

function hasClass(aElem, aClass) {
	return aElem.className.match(new RegExp('(\\s|^)' + aClass + '(\\s|$)'));
}

function addClass(aElem, aClass) {
	if (this.hasClass(aElem, aClass)) return;
	aElem.className += " " + aClass;
}

function removeClass(aElem, aClass) {
	if (!hasClass(aElem, aClass)) return;
	var reg = new RegExp('(\\s|^)' + aClass + '(\\s|$)');
	aElem.className = aElem.className.replace(reg, ' ');
}

