/**
 * Получает стиль элемента
 * @param {DOMElement} obj элемент стиль которого нужно получить
 * @param {String} style CSS-свойство, которое надо получить
 * @return {String}
 */
function getStyle(obj, style)
{
    // DOM 2
    if(document.defaultView)
        return document.defaultView.getComputedStyle(obj, null)[style];
    // IE
    else if (obj.currentStyle)
        return obj.currentStyle[style]; 
}


/**
 * Получает ширину клиентской области браузера
 * @return {Number}
 */
function getClientWidth() 
{
    return sizeFilterResults (
        window.innerWidth ? window.innerWidth : 0, 
        document.documentElement ? document.documentElement.clientWidth : 0, 
        document.body ? document.body.clientWidth : 0
    );
}


/**
 * Получает высоту клиентской области браузера
 * @return {Number}
 */
function getClientHeight() 
{
    return sizeFilterResults (
        window.innerHeight ? window.innerHeight : 0, 
        document.documentElement ? document.documentElement.clientHeight : 0, 
        document.body ? document.body.clientHeight : 0
    );
}


/**
 * Получает расстояние прокрученное (отскроленное) расстояние от верха страницы
 * @return {Number}
 */
function getScrollTop() 
{
    return sizeFilterResults(
        window.pageYOffset ? window.pageYOffset : 0, 
        document.documentElement ? document.documentElement.scrollTop : 0, 
        document.body ? document.body.scrollTop : 0	);
}


/**
 * Фильтрует размеры клиентской области на предмет соотвествия разным браузерам
 * @param {} n_win
 * @param {} n_docel
 * @param {} n_body
 * @return {}
 */
function sizeFilterResults(n_win, n_docel, n_body) 
{
    var n_result = n_win ? n_win : 0;
    if (n_docel && (!n_result || (n_result > n_docel)))
        n_result = n_docel;
    return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}


/**
 * Позиционирует блок посередине страницы
 * @param {String} id айдишник элемента
*/
function setBlockPosition(id)
{
    var top, left;
    var block = document.getElementById(id);
    
    left = Math.round( (client.width - blockSizes.width) / 2 ) ;
    top  = Math.round( (client.height - blockSizes.height) / 2 ) + getScrollTop();

    block.style.left = left+'px';
    block.style.top = top+'px';
}


/**
 * Обёртка для удобства вызова позиционирования блока одной строкой, вызывается на window.onload
 * @param {String} id айдишник блока, который нужно отпозиционировать посередине
*/
function absolutizeBlock(id)
{
    var block = document.getElementById(id);

	client = {
		width:  parseInt(getClientWidth()),
		height: parseInt(getClientHeight()),
		top: parseInt(getScrollTop())
	};
	
	blockSizes = {
		width:  parseInt(getStyle(block, 'width')),
		height: parseInt(getStyle(block, 'height'))
	};
	
    setBlockPosition(id);
	window.onscroll = function() { setBlockPosition(id) };
}