function $el(id)
{
    return document.getElementById(id);
}

function $value(id)
{
    return $el(id).value;
}

function $setValue(id, value)
{
    $el(id).value = value;
}

function $submit(id)
{
    $el(id).submit();
}

function $setAddress(address, obj)
{
    if(!obj)
        obj = document;
    obj.location = address;
}

function $has(str, substr)
{
    return str.indexOf(substr) != -1;
}

function $opacity(el, percentValue)
{
    el.style.opacity = ""+(percentValue/100);
    el.style.MozOpacity = ""+(percentValue/100);
    el.style.filter = "alpha(opacity=" + percentValue + ")";
}

function $style(id, name, value)
{
    if(value != undefined)
        eval("$el('"+id+"').style."+name+"='"+value+"'");
    return eval("$el('"+id+"').style."+name);
}

var $maskDiv = null;
function $mask(message)
{
    var maskDivWidth = document.body.clientWidth;
    var maskDivHeight = document.body.clientHeight;
    if($maskDiv == null)
    {
        $maskDiv = document.createElement("div");
        $maskDiv.style.position = "absolute";
        //$maskDiv.style.left = "0";
        //$maskDiv.style.right = "0";
        //$maskDiv.style.top = "0";
        //$maskDiv.style.bottom = "0";
        $opacity($maskDiv, 40);
        $maskDiv.style.backgroundColor = "#eeeeee";
        $maskDiv.style.color = "#000000";
        $maskDiv.style.font = "bold 15px tahoma, arial, helvetica";
        //$maskDiv.style.paddingLeft = "45%";
        //$maskDiv.style.paddingTop = "40%";
        $maskDiv.style.margin = "0";

        var info = document.createElement("div");
        info.style.position = "absolute";
        info.style.top = maskDivHeight/2;
        info.style.left = maskDivWidth/3;

        var img = document.createElement("img");
        img.src = "../images/large-loading.gif";
        img.style.marginRight = "8px";
        img.style.float = "left";
        img.style.verticalAlign = "middle";
        info.appendChild(img);

        var mess = document.createElement("font");
        info.appendChild(mess);

        var breakImg = document.createElement("img");
        breakImg.src = "../images/x4.gif";
        //breakImg.style.width = "7px";
        //breakImg.style.height = "7px";
        breakImg.style.marginLeft = "5px";
        breakImg.style.verticalAlign = "top";
        breakImg.style.cursor = "pointer";
        $opacity(breakImg, 40);
        breakImg.onclick = function(){$unmask();};
        info.appendChild(breakImg);

        $maskDiv.appendChild(info);

        document.body.appendChild($maskDiv);
    }
    $changeMaskMessage(message);
    $maskDiv.style.zIndex = 10000000;
    $maskDiv.style.width = maskDivWidth;
    //document.body.style.overflow = "hidden";
    $maskDiv.style.height = maskDivHeight;
    $maskDiv.style.display = "";
}
function $unmask()
{
    if($maskDiv != null)
    {
        $maskDiv.style.display = "none";
        $maskDiv.style.zIndex = -10000000;
    }
}
function $changeMaskMessage(message)
{
    if($maskDiv != null)
    {
        $maskDiv.childNodes[0].childNodes[1].innerHTML = (message ? message : "") + "...";
    }
}

function $isMask()
{
    return $maskDiv.style.display == "";
}

function $Runner()
{
    this.runners = [];
    this.delayMillis = 1;
    this.status = 0;
    this.running = true;

    this.start =
        function()
        {
            this.running = false;
            this.status ++;
            this.run();
        }

    this.run =
        function()
        {
            if(this.runners.length != 0)
            {
                var runner = this.runners.shift();
                runner.run();
                if(this.delayMillis > 0)
                    setTimeout("$runner.run();", this.delayMillis);
                else
                    $runner.run();
            }
            else
            {
                this.running = true;
                this.status --;
            }
        }

    this.isRunning =
        function()
        {
            return this.running;
        }
    
    this.pushFirst =
        function(runner)
        {
            this.runners.unshift(runner);
        }

    this.pushLast =
        function(runner)
        {
            this.runners.push(runner);
        }
}
var $runner = new $Runner();

function $rand()
{
    return new Date().getTime();
}

/*scrool event*/
function $blockEvent(event)
{
    if (!event) event = window.event;
    if(event.stopPropagation) event.stopPropagation();
    else event.cancelBubble = true;
    if(event.preventDefault) event.preventDefault();
    else event.returnValue = false;
}

function $addScrollEvent(id, callback)
{
    // Инициализация обработчика колеса мыши, повесим его только на слой id
    var el = $el(id);
    function wheel(event){ $wheel(event, callback); }
    // Для Mozilla необходимо создать EventListener:
    if(el.addEventListener) el.addEventListener('DOMMouseScroll', wheel, false);
    // Для всех остальных браузеров подойдет вот такая инициализация:
    el.onmousewheel = wheel;

}

function $wheel(event, callback)
{
    // Переменная, в которой будем хранить сдвиг (кличество прокруток)
    var wheelDelta = 0;
    if(!event) event = window.event;
    if (event.wheelDelta)
    {
        // В IE и Opera при сдвиге колеса на один шаг event.wheelDelta принимает значение 120
        // Значения сдвига в этих двух браузерах совпадают по знаку.
        wheelDelta = event.wheelDelta/120;
    }
    else if (event.detail)
    {
        // В Mozilla, значение wheelDelta отличается по знаку от значения в IE.
        // Сдвиг колеса на один шаг соответствует значению 3 параметра event.detail
        wheelDelta = -event.detail/3;
    }
    // При скроллинге вверх wheelDelta > 0
    // При скролинге вниз - wheelDelta < 0
    if (wheelDelta)
        callback(wheelDelta, event);

    // Убиваем событие (чтобы страница не скроллилась)
    if (event.preventDefault)
        event.preventDefault();
    event.returnValue = false;
    $blockEvent(event);
}

