function delegate (target, method) {
	//var args = arguments.slice(2);
	return function () {
		method.apply(target);
	};
}

function initaccordion() {
	var divs = $("#accordion div");
	var oDiv;
	divs.css({display:"block"});
	var maxHeight = 0;
	for (var i=0;i<divs.length;++i) {
		if (divs[i].offsetHeight > maxHeight) maxHeight = divs[i].offsetHeight;
		oDiv = $(divs[i]);
		oDiv.prev().click(delegate(oDiv, function() {open(this);}));
		oDiv.css({display:"block", overflow:"hidden"});
		oDiv.hide();
		oDiv.bShown = false;
	}
}


function open(oDiv) {
	var divs = $("#accordion div");
	var oHeader;
	oHeader = oDiv.prev();
	if (oHeader.attr("class") != undefined) {
		oDiv.toggle(1000);
		oHeader.removeAttr("class");
		return;
	}
	var needSleep = false;
	for (var i=0;i<divs.length;++i) {
		var oDiv2 = $(divs[i]);
		if (oDiv2 != oDiv) {
			oHeader = oDiv2.prev();
			if (oHeader.attr("class") != undefined) {
				oDiv2.toggle(1000);

				oHeader.removeAttr("class");
				needSleep = true;
			}
		}
	}

	oDiv.toggle(1000);
	oHeader = oDiv.prev();
	if (oHeader.attr("class") == undefined) {
		oHeader.attr("class", "selected");
	} else {
		oHeader.removeAttr("class");
	}

	if (needSleep) {
		var delay = function() { open2(oDiv); };
		setTimeout(delay, 1000);
	} else {
		open2(oDiv);
	}
}

function open2(oDiv) {
	scrollToElement(oDiv.prev());
}

function scrollToElement(oScrollTo) {
	$('html,body').animate({scrollTop: oScrollTo.offset().top}, 1000);
}

$(document).ready(initaccordion);
