/*
*/
    var CLOUD = new Object();

    CLOUD['filters'] = new Object();

    CLOUD['filters']['pg']  = 1; // Default start page.
    CLOUD['filters']['sft'] = '';

    CLOUD['filters']['context']  = 'default';

    CLOUD.add_filter = function(filter)
    {

        // Ensure filter haven't been added already - shouldn't be possible.

        CLOUD['filters']['sft']= decodeURIComponent(CLOUD['filters']['sft']);
        var sft = CLOUD['filters']['sft'].split(",");

        var filter_exists = false;

        for(var i = 0; i < sft.length; i++)
        {
            if ( sft[i] == filter)
            {
                filter_exists = true;
                break;
            }
        }

        if ( filter_exists == false )
        {
            if (CLOUD['filters']['sft'])
            {
                CLOUD['filters']['sft'] += ","+filter;
            }
            else
            {
                CLOUD['filters']['sft'] = filter;
            }
        }

        CLOUD['filters']['sft']= encodeURIComponent(CLOUD['filters']['sft']);

        // Always restart on page 1 when applying a new filter.
        CLOUD['filters']['pg'] = 1;

        CLOUD.search();
    }

    CLOUD.clear_filters = function()
    {
        CLOUD['filters']['sft'] = '';
    }

    // get_top_value is used in conjunction with add_param to assign a numeric value to
    // the filter being added.  This allows us to control the order filters are displayed
    // in on the breadcrumb line.
    CLOUD.go_to_page = function(page_num, total_pages, direction, context, page_selector)
    {
        if (!page_num)
        {
            //var selected_index = document.getElementById('page_selector').selectedIndex;
            //page_num = document.getElementById('page_selector').options[selected_index].value;
            var selected_index = document.getElementById(page_selector).selectedIndex;
            page_num = document.getElementById(page_selector).options[selected_index].value;
        }

        // Ensure we've got valid numerics.
        var re = new RegExp( "^\\d+$" );
        if( !page_num.match(re) || !total_pages.match(re) )
        {
            alert("Invalid page value encountered for either page number or total pages!");
            return false;
        }

        if ( total_pages && ( direction == "next" || direction == "previous" ) )
        {
            if (direction == "next")
            {
                // Direction is 'next'
                page_num = parseInt(page_num) < parseInt(total_pages) ? ++page_num : total_pages;
            }
            else
            {
                // Direction must be 'previous'
                page_num = ( parseInt(page_num) - 1 ) < 1 ? 1 : --page_num;
            }

        }

        CLOUD['filters']['pg']      = page_num;
        CLOUD['filters']['context'] = context;
        CLOUD.search();

        return false;
    }

    CLOUD.remove_filter = function(filter_name)
    {
        // Remove array element indicated by order_value from CLOUD['params'] array.
        CLOUD['filters']['sft']= decodeURIComponent(CLOUD['filters']['sft']);
        var sft = CLOUD['filters']['sft'].split(",");
        var new_sft = new Array();

        //filter_name = encodeURIComponent(filter_name);

        for(var i = 0; i < sft.length; i++)
        {
            var filter_sft =  encodeURIComponent( sft[i] );

            if ( sft[i] != filter_name )
            //if ( filter_sft != filter_name )
            {
                new_sft.push(sft[i]);
                //new_sft.push(filter_sft);
            }
        }

        CLOUD['filters']['pg'] = 1;

        CLOUD['filters']['sft'] = new_sft.join(',');
        CLOUD['filters']['sft']= encodeURIComponent(CLOUD['filters']['sft']);
        
        CLOUD.search();

        return false;

    }

    CLOUD.search = function()
    {
        var uri = CLOUD['filters']['context'] == 'preview' ? '/search/preview/?' : '/search/?';
        var params = '';

        // Ensure keywords and categories are escaped.
        params += '&kw='+encodeURIComponent(CLOUD['filters']['kw']);
        params += '&sft='+encodeURIComponent(CLOUD['filters']['sft']);

        for (var key in CLOUD['filters'] )
        {

            //
            if (key == 'sft' || key == 'kw' )
            {
                continue;
            }

            if( params )
            {
                params += "&"+key+"="+CLOUD['filters'][key];
            }
            else
            {
                params = key+"="+CLOUD['filters'][key];
            }
        }

        var url = uri+params;

        window.location = url;

        return false;
    }

    CLOUD.set = function(key, value)
    {
        CLOUD['filters'][key] = value;
    }


    CLOUD.set_smart_prefix = function(smtpfx, od)
    {
        CLOUD['filters']['smtpfx'] = smtpfx;
        CLOUD['filters']['od']     = od;
        CLOUD.search();
    }


    // Just a humble debug function to display current parameter settings.
    CLOUD.show_params = function()
    {
        var params = "";

        for (var key in CLOUD['filters'] )
        {

            if( params )
            {
                params += "&"+key+"="+CLOUD['filters'][key];
            }
            else
            {
                params = key+"="+CLOUD['filters'][key];
            }
        }

        alert("CLOUD.show_params() #01 params=="+params);
    }

    CLOUD.shrink_filters = function(filter_name)
    {
        // Shrink/rebuild the CLOUD['sft'] string up to and including filter_name.
        var sft = CLOUD['filters']['sft'].split(",");

        //filter_name = encodeURIComponent(filter_name);

        var new_sft = new Array();
        var last  = false;
        for(var i = 0; i < sft.length && last == false; i++)
        {

            var filter_sft = encodeURIComponent(sft[i]);

            new_sft.push(sft[i]);
            //new_sft.push(filter_sft);
            
            if ( sft[i] == filter_name )
            //if ( filter_sft == filter_name )
            {
                last = true;
            }
        }
        
        CLOUD['filters']['sft'] = new_sft.join(',');
        
        CLOUD.search();

        return false;

    }
