if (!actions) var actions = new Object();

actions['tooltip'] = function($parent){$('.tooltip, .optiBtn', $parent).tooltip({showURL: false})};
actions['linkSelector'] = function($parent){$('.linkSelector', $parent).attr('name', '').change(function()
{
    var href = getOptionHref(this);
    if (href)
    {
        // Собираем данные с формы и отправляем их гетом
        var $form = $(this).parents('form:first');
        if ($form[0])
        {
            $form[0].action = href;
            //print_r($('input:submit', $form));
            $('input:submit', $form).click();
            /*
            var params = collectParams($form);
            var getRow = toGetRow(params);
            if (getRow) href += '?'+getRow;
            */
        }
        else window.location = href;
    }
});};
/*
actions['clickBestOffers'] = function($parent)
{
    $('.best-offers li', $parent).each(function(){
        $li = $(this);
        $a = $li.find('a');
        $li.click(function(){window.location = $a[0].href;});
    });
};
*/

/*
 *  .setLoading() - заблокировать объект
 *  .setLoading(false) - разблокировать объект
 *
 *  Тени хранятся в массиве waitsAr, ключи массива - в attr объекта, к которому привязываем (this)
 */
var $waitBlock;
var waitsAr = new Array();
$.fn.setLoading = function (open)
{
    if (open!==false) open = true;

    var $wait;
    var waitId = this.attr('waitId');
    if (waitsAr[waitId]) $wait = waitsAr[waitId];
    if (open)
    {
        /* если нет тени - создаём её */
        if (!$wait)
        {
            /* если нет базового блока тени - создаём его */
            if (!$waitBlock)
            {
                var waitBlock = '<div id="wait" style="z-index:999999999;display:none;position:absolute;background-color:#ffffff;"></div>';
                $('body:first').append(waitBlock);
                $waitBlock = $('div#wait').css({opacity:0.5});
            }

            /* клонируем базовую тень */
            $wait = $waitBlock.clone().appendTo('body');
            if (!waitId) waitId = waitsAr.length + 1;
            /* добавляем в кэш */
            waitsAr[waitId] = $wait;
            /* добавляем идентификатор в базовый объект */
            this.attr('waitId', waitId);
        }
        /*
        var position = this.position();
        $wait.css({top:position.top, left:position.left, height:this.height(), width:this.width()});
        */
        var position = getElementPosition(this[0]);
        $wait.css({top:position.top, left:position.left, height:position.height, width:position.width});
        $wait.stop().fadeIn();
    } else {
        $wait.stop().fadeOut();
    }
    return this;
}

/*
 * Возвращает объект с абсолютной позицией элемента (.left, .top, .width, .height)
 */
function getElementPosition(elem)
{
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;
    var l = 0;
    var t = 0;

    while (elem){
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }

    return {"left":l, "top":t, "width": w, "height":h};
}

function getOptionHref(select)
{
    var option = select[select.options.selectedIndex];
    var href = $(option).attr('href');
    return href;
}

function doActions($parent)
{
    if (!$parent) $parent = $(document);
    //print_r(actions);
    for(var i in actions)
    {
        actions[i]($parent);
    }
}

$(document).ready(function(){
    doActions();
});

$.fn.doActions = function()
{
    doActions($(this));
    return this;
}

function toGetRow(obj)
{
    var row = '';
    for (i in obj)
    {
        if (i)
        {
            if (row) row += '&';
            row += i + '=' + obj[i];
        }
    }
    return row;
}

/*
 * Возвращает объект с парами name=>value из $block
 */
function collectParams($block)
{
    var params = new Object;
    $('input, select, textarea', $block).each(function(){
        if (this.type != 'checkbox' || this.checked) params[this.name] = this.value;
    });
    return params;
}

var printCounter = 0;
function print_r(el, counter)
{
    if (printCounter >= counter) return false;
    printCounter++;
    var str = '';
    for (var i in el) str += i + ': '+el[i]+'; \n';
    //$('body').append('<div>'+str+'</div>');
    if (str) alert(str);
    else alert(el);
    return true;
}