﻿function showDetail(sender, name) {
	if (sender.down) {
		hideDetail(sender, name);
		return;
	}
	var elem = pxDOM.byId(name);
	var table = getTable(elem);
		
	var h = getFullHeight(table);
	slideDown(elem, h);
	
	sender.firstChild.nodeValue = "Свернуть";
	sender.down = true;
};

function getTable(elem) {
	if (elem.childNodes.length > 1)	return elem.childNodes[1];
	return elem.childNodes[0];	
}

function hideDetail(sender, name) {
	var elem = pxDOM.byId(name);
	var table = getTable(elem);
	var h = getFullHeight(table);	
	slideUp(elem, h);
	sender.firstChild.nodeValue = "Подробнее";
	sender.down = null;
}

function getStyle(elem, name) {
	if (elem.style[name]) return elem.style[name];
	if (elem.currentStyle) return  elem.currentStyle[name];
	
	if (document.defaultView && document.defaultView.getComputedStyle) {
		name = name.replace('/[A-Z])/g', "-$1");
		name = name.toLowerCase();
		var s = document.defaultView.getComputedStyle(elem, "");
		return s && s.getPropertyValue(name);
	}
	
	return null;
};

function getHeight(elem) {
	return parseInt( getStyle(elem, "height") );
};

function getFullHeight(elem) {
	if ( getStyle( elem, "display" ) != "none") {
//		alert(getStyle( elem, "display" ) );
		return elem.offsetHeight || getHeight(elem);
	}
	
	var old = resetCSS( elem, {
		display: "",
		visibility: "hidden",
		position: "absolute"	
	} );
	
	var h = elem.clientHeight || getHeight(elem);
	restoreCSS( elem, old );
	return h;
};

function resetCSS(elem, prop) {
	var old = {};
	for (var i in prop) {
		old[i] = elem.style[i];
		elem.style[i] = prop[i];
	}
	
	return old;
};

function restoreCSS(elem, prop) {
	for (var i in prop) {
		elem.style[i] = prop[i];
	}	
};

function slideDown(elem, hValue) {

	elem.style.height = "1px";
	elem.style.display = "";
//	var h = getFullHeight(elem);
	
	for( var i = 0; i <= 100; i += 2) {
		(function() {
			var pos = i;
			setTimeout( function() {
				elem.style.height = ((pos / 100) * hValue) + "px";
			}, (pos + 1) * 10);
		} )();
	}
}

function slideUp(elem, hValue) {
	for( var i = 0; i <= 100; i += 2) {
		(function() {
			var pos = i;
			setTimeout( function() {
				if ((hValue - ((pos / 100) * hValue) ) > 0) 
					elem.style.height = (hValue - ((pos / 100) * hValue) ) + "px";
				else
					elem.style.height = "1px";
			}, (pos + 1) * 10);
		} )();
	}

}