//================================================================
//	list_action.js
//
//	Created by Anber (anber.forWork@gmail.com) on 2008-03-27
//===============================================================
var activeGreenObj = null;
var bBusy = false;

function getParentByClassName(obj, className) {
	obj = $(obj);
	while (obj.hasClassName && !obj.hasClassName(className)) {
		obj = $(obj.parentNode);
	}
	return obj.hasClassName(className) ? obj : null;
}

function closeGreyBlock(greyObj) {
	var headerObj = (greyObj.getElementsByClassName('h1'))[0];
	greyObj.removeClassName('descr');
	greyObj.removeClassName('detail');
	headerObj.style.fontSize = '18px';
	headerObj.style.marginTop = '0';
}

function openGreyBlock(greyObj, greenObjHeight) {
	sAction = greenObjHeight ? 'detail' : 'descr';
	var headerObj = (greyObj.getElementsByClassName('h1'))[0];
	if (greyObj.hasClassName(sAction)) return;

	var curOpenObj = $(greyObj.parentNode).getElementsByClassName('detail')[0] || greyObj.parentNode.getElementsByClassName('descr')[0];
	if (curOpenObj && curOpenObj == greyObj) {
		fadeActiveGreenBlock();
		if (greenObjHeight) {
			curOpenObj.removeClassName('descr');
		} else {
			curOpenObj.removeClassName('detail');
		}
	} else if (curOpenObj) {
		fadeActiveGreenBlock();
		closeGreyBlock(curOpenObj);
	}

	greyObj.addClassName(sAction);
	headerObj.style.fontSize = '25px';
	headerObj.style.marginTop = '17px';
}

function fadeActiveGreenBlock() {
	if (activeGreenObj && activeGreenObj.obj) {
		activeGreenObj.obj.parentNode.removeClassName('selected');
		activeGreenObj.obj.style.backgroundColor = activeGreenObj.color;
	}
}

function closeBigGreenBlock() {
	var curOpenBigObj = activeGreenObj ? $('big_block_'+activeGreenObj.id) : null;;
	if (curOpenBigObj) {
		curOpenBigObj.style.height = curOpenBigObj.offsetHeight + 'px';
		curOpenBigObj.addClassName('blank');
		curOpenBigObj.style.display = 'block';
		curOpenBigObj.morph('height:0px;', {
			duration:animDuration1-0.1,
			afterFinish:function() {
				this.style.height = '';
				this.style.display = '';
				this.removeClassName('blank');
			}.bind(curOpenBigObj)
		});
		activeGreenObj.id = null;
	}
}

function openGreenBlock(greenObj) {
	var greyObj = getParentByClassName(greenObj, 'grey_block');

	if (greenObj.hasClassName('selected') && greyObj.hasClassName('detail')) {
		bBusy = false;
		return;
	}

	var curOpenObj = ($(greenObj.parentNode).getElementsByClassName('green_block selected'))[0];
	var contentObj = ($(greenObj).getElementsByClassName('content'))[0];
	var id = (greenObj.getElementsByClassName('green_link')[0].href.match(/#(.+)/))[1];
	var curOpenBigObj = greenObj.parentNode.getElementsByClassName('green_block big visible')[0];

	var startHeight = curOpenBigObj ? curOpenBigObj.getHeight() : 1;
	if (curOpenBigObj != (activeGreenObj ? $('big_block_'+activeGreenObj.id) : null)) {
		startHeight = 1;
	}

	openGreyBlock(greyObj, $('big_block_'+id).getHeight() - 38);
	if (activeGreenObj && activeGreenObj.id) {
		$('big_block_'+activeGreenObj.id).removeClassName('visible');
	}
	if (curOpenBigObj) {
		$(curOpenBigObj).removeClassName('visible');
	}
	$('big_block_'+id).addClassName('visible');

	fadeActiveGreenBlock();

	activeGreenObj = {obj: contentObj, color: contentObj.style.backgroundColor, id: id};
	contentObj.style.backgroundColor = greenObj.style.backgroundColor;
	greenObj.addClassName('selected');
}

function act(ev) {
	var trgObj = Event.element(ev);
	switch (trgObj.className) {
		case 'marker':
		case 'marker_text':
			var dlObj = $(trgObj.parentNode.parentNode);
			var ddObj = $(dlObj.getElementsByTagName('dd')[0]);
			if (dlObj.className == 'close') {
				dlObj.className = 'open';
			} else {
				dlObj.className = 'close';
			}
		break;
		case 'td':
		case 'td onhover':
		case 'green_link':
			bBusy = true;
			openGreenBlock(getParentByClassName(trgObj, 'green_block'));
		break;
		case 'close_button':
			bBusy = true;
			closeGreyBlock($(trgObj.parentNode));
		break;
		case 'h1':
			bBusy = true;
			openGreyBlock(getParentByClassName(trgObj, 'grey_block'), null);
		break;
		default:
			return true;
		break;
	}
	return false;
}