/*
 * $Revision: 1.4 $
 * $Date: 2010/07/30 16:07:32 $
 */

/******************************************************************************/
function group_expand()
{
    var key, val;

    for (key in group.groups)
        for (val in group.groups[key].sub_rows)
            group.groups[key].sub_rows[val].className = 'item';
}

/******************************************************************************/
function group_collapse()
{
    var key, val;

    for (key in group.groups)
        for (val in group.groups[key].sub_rows)
            group.groups[key].sub_rows[val].className = 'hidden';
}

/******************************************************************************/
function group_map_browser(str)
{
    var pair = str.split(' ', 2);

    return [pair[0], str];
}

/******************************************************************************/
function group_map_os(str)
{
    if (str.match(/^Mac/))
        return ['Macintosh', str];

    var pair = str.split(' ', 2);

    return [pair[0], str];
}

/******************************************************************************/
function group_map_referrers(str)
{
    var pair = str.split('/', 2);

    return [pair[0], str];
}

/******************************************************************************/
function group_init ()
{
    if (typeof trend_date != 'undefined')
    {
        if (trend_date.length == 8)
            group_init_without_trend ();
        else
            group_init_with_trend ();
    }
    else
    {
        group_init_without_trend ();
    }
}

/******************************************************************************/
function group_init_with_trend ()
{
    var map;

    switch (group.pagename)
    {
        case 'browsers':

            map = group_map_browser;
            break;

        case 'os':

            map = group_map_os;
            break;

        case 'referrers':

            map = group_map_referrers;
            break;
    }

    var table = document.getElementById('collapsable-stats');

    table.className = 'hidden';

    var header_tr = document.createElement('tr');
    header_tr.className = 'header';
    header_tr.appendChild(document.createElement('td'));

    var td = document.createElement('td');
    td.innerHTML = $(table).find('td:first').html()
    header_tr.appendChild(td);
    td = document.createElement('td');
    td.innerHTML = $(table).find('tr:first td:last').html();
    td.setAttribute('colspan', 3);
    header_tr.appendChild(td);

    $(table).find('tr:first').remove();

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);
    tbody.appendChild(header_tr);

    $(table).find('tr.item').each(
        function ()
        {
            var td = $(this).find('td');

            var pair = map($(td[0]).html());
            var count = parseInt($(td[1]).html());

            var key = pair[0];

            if (!group.groups[key])
            {
                group.groups[key] = new Object();
                group.groups[key].count = 0;
                group.groups[key].values = new Array();
                group.groups[key].sub_rows = new Array();
            }

            var value = new Object();

            value.value = pair[1];
            value.count = count;

            group.groups[key].count += count;
            group.groups[key].values.push(value);

            $(this).remove();
        }
    );

    /*
     * Here we need to sort grouped stats
     */

    group.groups.sort(
        function(a, b)
        {
            return b.count - a.count;
        }
    );

    var i=0;

    for (key in group.groups)
    {
        group.groups[key].values.sort(
            function(a, b)
            {
                return b.count - a.count;
            }
        );

        var percents = group.groups[key].count / group.total * 100.0;
        percents = Math.round(percents * 100) / 100;

        var tr = document.createElement('tr');
        tr.className = 'groupleader';

        var td = document.createElement('td');
/*
        var input = document.createElement('input');
        input.type = 'checkbox';
        if (i < 3) input.checked = 'checked';
        else input.disabled = 'disabled';
        input.className = 'groupleader';
        input.name = 'cc_checkbox';
        input.value = key;
        td.appendChild(input);
        input = document.createElement('input');
        input.type = 'hidden';
        input.value = group.groups[key].count;
        td.appendChild(input);
*/
        tr.appendChild(td);
        
        td = document.createElement('td');
        td.innerHTML = key;
        tr.appendChild(td);

        td = document.createElement('td');
        td.className = 'count';
        td.innerHTML = group.groups[key].count;
        tr.appendChild(td);

        var img = document.createElement('img');
        img.src = 'http://cdn.gsstatic.com/img/spacer.gif';
        img.style.borderWidth = '0px';
        img.style.height = '10px';
        img.style.width = percents * 2 + 'px';

        var span = document.createElement('span');
        span.className = 'chart_line';
        span.style.width = percents * 2 + 'px';
        span.appendChild(img);

        td = document.createElement('td');
        td.className = 'chart_line';
        td.appendChild(span);
        tr.appendChild(td);

        td = document.createElement('td');
        td.className = 'percents';
        td.innerHTML = percents + '%';
        tr.appendChild(td);

        group.groups[key].collapsed_row = tbody.appendChild(tr);

        for (val in group.groups[key].values)
        {
            percents = group.groups[key].values[val].count / group.total * 100.0;
            percents = Math.round(percents * 100) / 100;

            tr = document.createElement('tr');
            tr.className = 'item';

            td = document.createElement('td');
            var input = document.createElement('input');
            input.type = 'checkbox';

            if (i++ < 3)
                input.checked = 'checked';
            else
                input.disabled = 'disabled';

            input.className = 'item';
            input.name = 'gs_checkbox';
            input.value = group.groups[key].values[val].value;
            td.appendChild(input);
            input = document.createElement('input');
            input.type = 'hidden';
            input.value = group.groups[key].values[val].count;
            td.appendChild(input);
            tr.appendChild(td);
        
            td = document.createElement('td');
            td.className = 'indent';
            td.innerHTML = group.groups[key].values[val].value;
            tr.appendChild(td);

            td = document.createElement('td');
            td.className = 'count';
            td.innerHTML = group.groups[key].values[val].count;
            tr.appendChild(td);

            img = document.createElement('img');
            img.src = 'http://cdn.gsstatic.com/img/spacer.gif';
            img.style.borderWidth = '0px';
            img.style.height = '10px';
            img.style.width = percents * 2 + 'px';

            span = document.createElement('span');
            span.className = 'chart_line';
            span.style.width = percents * 2 + 'px';
            span.appendChild(img);

            td = document.createElement('td');
            td.className = 'chart_line';
            td.appendChild(span);
            tr.appendChild(td);

            td = document.createElement('td');
            td.className = 'percents';
            td.innerHTML = percents + '%';
            tr.appendChild(td);

            group.groups[key].sub_rows.push(tbody.appendChild(tr));
        }
    }

    $('#expand_collapse_link').show();

    $('#expand-collapse-link').toggle(
        function ()
        {
            group_expand();
            $('#expand-collapse-link').html(group.link_collapse);
        },
        function ()
        {
            group_collapse();
            $('#expand-collapse-link').html(group.link_expand);
        }
    );

    $(table).find('tbody:first').remove();
    $(table).find(":checkbox").change(show_Trend_Chart);

    group_collapse();

    var img = document.createElement('img');
    img.style.borderWidth = '0px';
    img.style.height = '300px';
    img.style.width  = '400px';
    img.setAttribute('id', 'trend_chart_png');

    var div = document.getElementById('trend_chart');
    div.appendChild(img);

    show_Trend_Chart ();

    table.className = 'common_stats';
}

/******************************************************************************/
function group_init_without_trend ()
{
    var map;

    switch (group.pagename)
    {
        case 'browsers':

            map = group_map_browser;
            break;

        case 'os':

            map = group_map_os;
            break;

        case 'referrers':

            map = group_map_referrers;
            break;
    }

    var table = document.getElementById('collapsable-stats');
    table.className = 'hidden';

    var header_tr = document.createElement('tr');
    header_tr.className = 'header';

    var td = document.createElement('td');
    td.innerHTML = $(table).find('td:first').html();
    header_tr.appendChild(td);
    td = document.createElement('td');
    td.innerHTML = $(table).find('tr:first td:last').html();
    td.setAttribute('colspan', 3);
    header_tr.appendChild(td);

    $(table).find('tr:first').remove();

    var tbody = document.createElement('tbody');
    table.appendChild(tbody);
    tbody.appendChild(header_tr);

    $(table).find('tr.item').each(
        function ()
        {
            var td = $(this).find('td');

            var pair = map($(td[0]).html());
            var count = parseInt($(td[1]).html());

            var key = pair[0];

            if (!group.groups[key])
            {
                group.groups[key] = new Object();
                group.groups[key].count = 0;
                group.groups[key].values = new Array();
                group.groups[key].sub_rows = new Array();
            }

            var value = new Object();

            value.value = pair[1];
            value.count = count;

            group.groups[key].count += count;
            group.groups[key].values.push(value);

            $(this).remove();
        }
    );

    /*
     * Here we need to sort grouped stats
     */

    group.groups.sort(
        function(a, b)
        {
            return b.count - a.count;
        }
    );

    var i=0;

    for (key in group.groups)
    {
        group.groups[key].values.sort(
            function(a, b)
            {
                return b.count - a.count;
            }
        );

        var percents = group.groups[key].count / group.total * 100.0;
        percents = Math.round(percents * 100) / 100;

        var tr = document.createElement('tr');
        tr.className = 'groupleader';

        var td = document.createElement('td');
        td.innerHTML = key;
        tr.appendChild(td);

        td = document.createElement('td');
        td.className = 'count';
        td.innerHTML = group.groups[key].count;
        tr.appendChild(td);

        var img = document.createElement('img');
        img.src = 'http://cdn.gsstatic.com/img/spacer.gif';
        img.style.borderWidth = '0px';
        img.style.height = '10px';
        img.style.width = percents * 2 + 'px';

        var span = document.createElement('span');
        span.className = 'chart_line';
        span.style.width = percents * 2 + 'px';
        span.appendChild(img);

        td = document.createElement('td');
        td.className = 'chart_line';
        td.appendChild(span);
        tr.appendChild(td);

        td = document.createElement('td');
        td.className = 'percents';
        td.innerHTML = percents + '%';
        tr.appendChild(td);

        group.groups[key].collapsed_row = tbody.appendChild(tr);

        for (val in group.groups[key].values)
        {
            percents = group.groups[key].values[val].count / group.total * 100.0;
            percents = Math.round(percents * 100) / 100;

            tr = document.createElement('tr');
            tr.className = 'item';

            td = document.createElement('td');
            td.className = 'indent';
            td.innerHTML = group.groups[key].values[val].value;
            tr.appendChild(td);

            td = document.createElement('td');
            td.className = 'count';
            td.innerHTML = group.groups[key].values[val].count;
            tr.appendChild(td);

            img = document.createElement('img');
            img.src = 'http://cdn.gsstatic.com/img/spacer.gif';
            img.style.borderWidth = '0px';
            img.style.height = '10px';
            img.style.width = percents * 2 + 'px';

            span = document.createElement('span');
            span.className = 'chart_line';
            span.style.width = percents * 2 + 'px';
            span.appendChild(img);

            td = document.createElement('td');
            td.className = 'chart_line';
            td.appendChild(span);
            tr.appendChild(td);

            td = document.createElement('td');
            td.className = 'percents';
            td.innerHTML = percents + '%';
            tr.appendChild(td);

            group.groups[key].sub_rows.push(tbody.appendChild(tr));
        }

        i++;
    }

    $('#expand_collapse_link').show();

    $('#expand-collapse-link').toggle(
        function ()
        {
            group_expand();
            $('#expand-collapse-link').html(group.link_collapse);
        },
        function ()
        {
            group_collapse();
            $('#expand-collapse-link').html(group.link_expand);
        }
    );

    $(table).find('tbody:first').remove();

    group_collapse();

    table.className = 'common_stats';
}

