// Helpers for the search landing page combo box contents

var searchCombos = function() {

    var __PRODTYPES= "#productType";
    var __COLLECTIONS= "#collection";
    var __INDOOR= "#isIndoor";
    var __OUTDOOR= "#isOutdoor";

    var _currentProdType;
    var _currentCollection;

    var _srcid;
    var _isIndoor;
    var _isOutdoor;
    
    // -----------------------------------------------------------

    // ENTRY POINT
    var populateCombos= function(src) {
        document.body.style.cursor = "wait";
        _srcid= '#' + src.id;

        _currentProdType= $(__PRODTYPES).val();
        _currentCollection= $(__COLLECTIONS).val();

        // If combo A is altered, combo B's constraints should be ignored.
        // UNLESS combo A's default ("All") is selected.
        var prodtype =   (_srcid != __COLLECTIONS || !_currentCollection.length)
                ? escape($(__PRODTYPES).val()) : '';
        var collection = (_srcid != __PRODTYPES || !_currentProdType.length)
                ? escape($(__COLLECTIONS).val()) : '';

        _isIndoor= ($(__INDOOR + ":checked").val() == "true") ? '1' : '';
        _isOutdoor= ($(__OUTDOOR + ":checked").val() == "true") ? '1' : '';
        
        var url= '/search/get_search_json.mcg?productType=' + prodtype
               + '&collection=' + collection
               + '&isIndoor=' + _isIndoor
               + '&isOutdoor=' + _isOutdoor;

        $.getScript (url, loadJsonCallback);
    };


    // -----------------------------------------------------------

    var loadJsonCallback = function() {

        var prodtypes= jsonsearch.prodtypes;
        var collections= jsonsearch.collections;

        var selected;

        // If we got no results (e.g. outdoor constraint checked for kitchen collections),
        // reset combos, but keep indoor/outdoor settings, and don't select current element
        if (prodtypes.length == 0 || collections.length == 0) {
            var url= '/search/get_search_json.mcg?productType='
                   + '&collection=' 
                   + '&isIndoor=' + _isIndoor
                   + '&isOutdoor=' + _isOutdoor;

            _srcid='recurse';
            $.getScript (url, loadJsonCallback);
            return;
        }


        if (_srcid != __PRODTYPES || !_currentProdType.length) {
            $(__PRODTYPES).html('<option value="">All Types</option>');
            for (var i=0, arrayLen=prodtypes.length; i<arrayLen; i++) {
                selected= (_srcid != 'recurse' && (_currentProdType == prodtypes[i].replace(/&amp;/, "&")))
                        ? 'selected="selected"'
                        : '';

                $(__PRODTYPES).append('<option value="' + prodtypes[i] + '" '
                        + selected
                        + '>' + prodtypes[i] + '</option>');
            }
        }

        if (_srcid != __COLLECTIONS || !_currentCollection.length) {
            $(__COLLECTIONS).html('<option value="">All Collections</option>');
            for (var i=0, arrayLen=jsonsearch.collections.length; i<arrayLen; i++) {
                selected= (_srcid != 'recurse' && (_currentCollection == collections[i].replace(/&amp;/, "&")))
                        ? 'selected="selected"'
                        : '';

                $(__COLLECTIONS).append('<option value="' + collections[i] + '" '
                        + selected
                        + '>' + collections[i] + '</option>');
            }
        }
        document.body.style.cursor = "default";
    };

    // declare public methods and members
    return {
        populateCombos : populateCombos
    };

}();
