$(document).ready(function () {

    $('body').addClass('js');
    $('input#hasjs').val('yes');

    // general tmp variables
    var tmp, i, $item;

    // links with rel=nwindow goes to a new window
    $('a[rel="new-window"]').attr('target', '_blank');
    // prevent default behaviour when clicking dummy link
    $('a[href="#"]').click(function (e) { return false; });

    // frequently used functions definition
    var overFn = function () { $(this).addClass('over'); };
    var outFn = function () { $(this).removeClass('over'); };
    var clickFn = function () { window.location = $(this).find('a').attr('href'); };

    // tabs
    var $tabs = null, selected = 0;
    $('div.tabs').each(function () {
        $tabs = $(this);
        $tabs.data('selected', selected);
        // prepare table
        tmp = $('<table cellspacing="0" cellpadding="0" border="0" class="captions">');
        var $captions = $('<tr>').appendTo(tmp.prependTo($tabs).wrap('<div style="position:relative;">'));
        $tabs.find('div.tab').each(function () {
            $item = $(this);
            i = (($item.index() - 1) === selected);
            tmp = $item.children('div.tab-title:first');
            $('<td' + (i ? ' class="over"' : '')  + '>').append(tmp).appendTo($captions).hover();
            if (!i)
                $item.hide();
        });
        $tabs.find('div.tab:eq(' + selected + ') td.tab-block:eq(' + selected + ')').addClass('over');
        var activateTab = function () {
            $tabs = $(this).parents('div.tabs');
            i = $tabs.data('selected');
            if (i !== $(this).index()) {
                $tabs.find('table.captions tr td:eq(' + i + ')').removeClass('over');
                $tabs.find('div.tab:eq(' + i + ')').hide();
                $tabs.find('div.tab:eq(' + i + ') td.tab-block:eq(' + i + ')').removeClass('over');
                $(this).addClass('over');
                i = $(this).index();
                $tabs.find('div.tab:eq(' + i + ')').show();
                $tabs.find('div.tab:eq(' + i + ') td.tab-block:eq(' + i + ')').addClass('over');
                $tabs.data('selected', i);
            }
        };
        tmp = $tabs.hasClass('click') ? 'click' : 'mouseover';
        $captions.find('td').bind(tmp, activateTab).first().css('background-position', '0px top').end().last().css({});
    }).show();

    // collapsible
    $('div.collapsible').each(function () {
        $item = $(this);
        $item.find('h2:first').toggle(function() {
            $(this).nextAll('div.body').show().end().children('span').removeClass('collapsed').addClass('expanded');
        }, function () {
            $(this).nextAll('div.body').hide().end().children('span').removeClass('expanded').addClass('collapsed');
        }).children('span').addClass('collapsed');
    });

    // highlight news items
    $('div.news div.item').hover(overFn, outFn);
    // highlight jobs items
    $('table.jobs tr').addClass('enabled').click(clickFn).hover(overFn, outFn);
    // make in page ads active
    $('table.sworks tr').addClass('enabled').click(clickFn);

    // search
    var defaultSearchValue = 'Site Search';
    tmp = function () {
        $item = $(this);
        $item = $item.attr('id') === 'search' ? $item : $item.prev('#search');
        if ($item.val() === defaultSearchValue)
            $item.val('').removeClass('unused');
    }
    $('#search[value=' + defaultSearchValue + ']').addClass('unused').focus(tmp).next('input[class=submit]').click(tmp);

    // hide news archive
    var visibleYears = 4;
    tmp = window.location.href.match(/\/news\/(\d+)/);
    var last = $('div.navbar a.news').next('ul').find('li:nth-child(' + (++visibleYears) + ')');
    if (!tmp || last.nextAll().text().indexOf(tmp[1]) == -1) {
        $item = $('<li><a href="#"><span>more ...</span></a></li>');
        last.nextAll().hide().end().after($item);
        $item.click(function (e) { $(this).hide().nextAll().show(); return false; });
    }

});
