/*
 * $Revision: 1.6 $
 * $Date: 2010/07/30 16:07:29 $
 */

/******************************************************************************/
var GScc = new GoStats_Custom_Calendar();

/******************************************************************************/
function GoStats_Custom_Calendar ()
{
    this.stage = 0;

    /*
     * 0 - not use
     * 1 - ready to select start date
     * 2 - ready to select end date
     * 3 - ready to submit
     */

    this.setStage1 = function ()
    {
        $('.calendar_date').removeClass('cc_hidden')
                           .removeClass('cc_ready')
                           .removeClass('cc_selected');
        $('#start_date').addClass('cci_selected').val('');
        $('#end_date').removeClass('cci_selected').val('');
        $('#cc_show_stats').attr('disabled', 'disabled');

        this.stage = 1;
    }

    this.setStage2 = function (date)
    {
        var flag = false;

        $('.calendar_date').each(function (i, elem)
        {
            if (flag || ($(elem).attr('id') == 'cc_date_' + date))
                flag = true;

            $(elem).addClass(flag ? 'cc_ready' : 'cc_hidden');
        });

        $('#start_date').removeClass('cci_selected').val(date);
        $('#end_date').addClass('cci_selected');

        this.stage = 2;
    }

    this.setStage3 = function (date)
    {
        $('.cc_ready').each(function (i, elem)
        {
            $(elem).removeClass('cc_ready').addClass('cc_selected');
            if ($(elem).attr('id') == 'cc_date_' + date)
                return false;
        });

        $('.cc_ready').removeClass('cc_ready').addClass('cc_hidden');
        $('#end_date').removeClass('cci_selected').val(date);
        $('#cc_show_stats').removeAttr('disabled');

        this.stage = 3;
    }
}

/******************************************************************************/
function XDate()
{
    this.year  = 0;
    this.month = 0;
    this.day   = 0;

    if (XDate.arguments.length)
    {
        /*
         * constructor
         */

        this.year  = XDate.arguments[0].substr(0, 4) - 0;
        this.month = XDate.arguments[0].substr(4, 2) - 1;
        this.day   = XDate.arguments[0].substr(6, 2) - 0;
    }

    this.monthIncrement = function ()
    {
        this.month++;

        if (this.month == 12)
        {
            this.month = 0;
            this.year++;
        }
    }

    this.monthDecrement = function ()
    {
        this.month--;

        if (this.month == -1)
        {
            this.month = 11;
            this.year--;
        }
    }

    this.getDaysInMonth = function ()
    {
        switch (this.month)
        {
            case  0: return 31; break;
            case  2: return 31; break;
            case  3: return 30; break;
            case  4: return 31; break;
            case  5: return 30; break;
            case  6: return 31; break;
            case  7: return 31; break;
            case  8: return 30; break;
            case  9: return 31; break;
            case 10: return 30; break;
            case 11: return 31; break;
            case  1: 
                return ((this.year % 4 == 0) && (this.year % 100 != 0) ||
                        (this.year % 400 == 0)) ? 29 : 28;
                break;
            default : return 0;
        }
    }

    this.monthLessThan = function (date)
    {
        return this.year < date.year || 
               this.year == date.year && this.month < date.month;
    }

    this.getDayOfWeek = function ()
    {
        var date = new Date (this.year, this.month, this.day);
        var day  = date.getDay();

        if (--day == -1)
            day = 6;

        return day;
    }
}

/******************************************************************************/
function Calendar_months_show ()
{
    $('#calendar_month').hide();
    $('#calendar_months').show();
}

/******************************************************************************/
function Calendar_months_hide ()
{
    $('#calendar_months').hide();
    $('#calendar_month').show();
}

/******************************************************************************/
function Calendar_years_show ()
{
    $('#calendar_year').hide();
    $('#calendar_years').show();
}

/******************************************************************************/
function Calendar_years_hide ()
{
    $('#calendar_years').hide();
    $('#calendar_year').show();
}

/******************************************************************************/
function init_Calendar ()
{
    $('#calendar_month').bind('mouseenter', Calendar_months_show);
    $('#calendar_year').bind('mouseenter', Calendar_years_show);
    $('#calendar_months').bind('mouseleave', Calendar_months_hide);
    $('#calendar_years').bind('mouseleave', Calendar_years_hide);
}

/******************************************************************************/
function init_custom_Calendar (date)
{
    var current = new XDate(date);
    var i       = new XDate(date);
    var j       = 0;
    var content = '';

    i.monthDecrement();
    i.monthDecrement();
    
    for (i.day = 1; i.monthLessThan(current); i.monthIncrement())
    {
        content += '<table class="cc_table"><tbody>';
        content += '<tr><th colspan="7">';
        content += $('#calendar_month_' + (i.month + 1)).find('a').html();
        content += ' ' + i.year;
        content += '</th></tr><tr>';

        var len = i.getDaysInMonth();
        var day = i.getDayOfWeek();
        var k   = day - 1;

        for (j = 0; j < day; j++)
            content += '<td></td>';

        for (j = 1; j <= len; j++)
        {
            k++;

            if (k == 7)
            {
                k = 0;
                content += '</tr><tr>';
            }

            content += '<td id="cc_date_' + j + '.' + (i.month + 1) + '.' +
                       i.year + '" class="calendar_date">' + j + '</td>';
        }

        for (j = k; j < 7; j++)
            content += '<td></td>';

        content += '</tr></tbody></table>';
    }

    content += '<table class="cc_table"><tbody><tr><th colspan="7">';
    content += $('#calendar_month_' + (current.month + 1)).find('a').html();
    content += ' ' + current.year;
    content += '</th></tr><tr>';

    var len = current.getDaysInMonth();
    var day = i.getDayOfWeek();
    var k   = day - 1;

    for (j = 0; j < day; j++)
        content += '<td></td>';

    for (j = 1; j <= current.day; j++)
    {
        k++;

        if (k == 7)
        {
            k = 0;
            content += '</tr><tr>';
        }

        content += '<td id="cc_date_' + j + '.' + (current.month + 1) + '.' +
                   current.year + '" class="calendar_date">' + j + '</td>';
    }

    for (j = current.day + 1; j <= len; j++)
    {
        k++;

        if (k == 7)
        {
            k = 0;
            content += '</tr><tr>';
        }

        content += '<td class="cc_disabled">' + j + '</td>';
    }

    for (j = k; j < 7; j++)
        content += '<td></td>';

    content += '</tr></tbody></table>';

    $('#cc_container').html(content);

    $('td[id].calendar_date').bind('click', cc_click);
    $('.calendar_date > a').bind('click', cc_click);

    GScc.stage = 1;

    $('#start_date').addClass('cci_selected');

    $('#link_custom_calendar').toggle(
        function ()
        {
            $('#calendar_regular').hide();
            $('#calendar_custom').show();
        },
        function ()
        {
            $('#calendar_custom').hide();
            $('#calendar_regular').show();
        }
    );
}

/******************************************************************************/
function reset_custom_Calendar ()
{
    GScc.setStage1();
}

/******************************************************************************/
function submit_custom_Calendar ()
{
    var date1 = get_GoStats_date_format ($('#start_date').val());
    var date2 = get_GoStats_date_format ($('#end_date').val());

    if (date1 * date2 == 0)
        return false;

    $('#cc_date').val(date1 + '-' + date2);

    $('#start_date').attr('disabled', 'disabled');
    $('#end_date').attr('disabled', 'disabled');

    return true;
}

/******************************************************************************/
function cc_click ()
{
    var date = $(this).attr('id');
    date = date.substr(8, date.length);

    if (GScc.stage == 1)
    {
        GScc.setStage2(date);
    }
    else if (GScc.stage == 2)
    {
        if (!$(this).hasClass('cc_ready'))
            return false;

        GScc.setStage3(date);
    }
    else if (GScc.stage == 3)
    {
        GScc.setStage1();
        GScc.setStage2(date);
    }
    else
    {
        return false;
    }
}

/******************************************************************************/
function get_GoStats_date_format (date)
{
    if (!date.length)
        return 0;

    var xdate = date.split('.', 3);

    return parseInt(xdate[2]) * 10000 +
           parseInt(xdate[1]) * 100 +
           parseInt(xdate[0]);
}

/******************************************************************************/
function show_Trend_Chart ()
{
    var src;

    if ($(':checked').length >= 3)
    {
        $(':checkbox:not(:checked)').attr('disabled', 'disabled');
    }
    else
    {
        $('input:disabled').removeAttr('disabled');
    }

    if ($(':checked').length)
    {
        if (!$('input:checked').length)
            return false;

        src = '/trend_chart.png?id=' + trend_account_id +
                           '&table=' + trend_table_name +
                            '&date=' + trend_date;

        $('input:checked').each(function (i, elem)
        {
            src += '&field' + i + '=' + $(elem).val();
        });

        var img = document.getElementById('trend_chart_png');
        img.style.width  = '400px';
        img.style.height = '300px';
        img.src = src;
    }
    else
    {
        var img = document.getElementById('trend_chart_png');
        img.style.width  = '0px';
        img.style.height = '0px';
        img.src = 'http://cdn.gsstatic.com/img/spacer.gif';
    }
}

