var $J = jQuery.noConflict();
var BoatCover = {
    webService : '../modperl/wbsrvcs/bcover_srvc.cgi',
    landing : {
        activeTray : null,
        activePanel : null,
        init : function() {
            $J('#js_warning').remove();
            $J('.shop_by, .tray, .panes').show();
            this.setActions();
            $J('.cust_serv').hide();
            BoatCover.flash.init();
            this.dropDowns.init();
        },
        setActions : function() {
            $J('h2 a').attr('href', window.location.pathname).click(function() {
                if (BoatCover.restoreResults.previousResults) {
                    BoatCover.restoreResults.eraseResults();
                }
            });
            $J('.tray .lnk_type_help').mousedown(function() {
                var tab = 2;
                var step = $J('#by_type_panel .step_1');
                var tray = $J(this).parent().parent('.tray');
                BoatCover.landing.closeTray(tray);
                BoatCover.panels.init(tab, step);
            });
            $J('.tray select').change(function() {
                if (this.value != '') {
                    $J('.lnk_type_help_container').show();
                    BoatCover.panels.selections(this);
                }
            });
        },
        dropDowns : {
            init : function() {
                if (!this.actionsSet) {this.setActions();}
                this.disable();
                this.byYearMakeModel.init();
                this.byManufacturer.init();
                this.byBoatType.init();
            },
            edit : function(e, panel) {
                if (BoatCover.restoreResults.previousResults) {
                    BoatCover.restoreResults.eraseResults();
                }
                if (!panel) {
                    panel = $J(this).parent().parent().prev();
                }
                BoatCover.landing.dropDowns.disable(panel.find('input'));
                if (panel.next().css('marginTop') != '30px') {
                        panel.next().css({'borderTop': '1px solid #B7C4D2', 'marginTop': '30px'}, BoatCover.panels.openPanel(panel, panel.prev('p').fadeIn('fast')));
                }
                else {
                    panel.next().css({'borderTop': 'none', 'marginTop': '0'}, BoatCover.panels.closePanel(panel, panel.prev('p').fadeOut('fast')));
                }
            },
            editManu : function() {
                if (BoatCover.restoreResults.previousResults) {
                    BoatCover.restoreResults.eraseResults();
                }
                $J('#model_year_table tbody, #manu_table tbody').empty();
                BoatCover.landing.dropDowns.byManufacturer.sModel = false;
                BoatCover.landing.dropDowns.byManufacturer.results = false;
                BoatCover.landing.dropDowns.byManufacturer.init();
                var panel = $J('#by_manu_panel .results, #by_manu_panel .step_2');
                var panel2 = $J('#by_manu_panel .step_1, #by_manu_panel .step_1 .actions');
                $J('#by_manu_panel .step_2 .results').css({'borderTop': 'none', 'marginTop': '0'}, BoatCover.panels.closePanel(panel, BoatCover.panels.openPanel(panel2)));
            },
            disable : function(elm) {
                if (!elm) {
                    $J(".actions li select, .actions li input").not('#year2, #manufacturer2, #type2').attr('disabled','disabled');
                    $J(".actions li input").fadeTo('fast',0.5);
                }
                else {
                    elm.each(function() {
                        this.disabled = true;
                        switch (this.id) {
                            case 'btn_show_covers_year' :
                            case 'btn_show_models' :
                            case 'btn_show_covers' :
                                $J(this).fadeTo('fast',0.5);
                                break;
                        }
                    });
                }
            },
            byYearMakeModel : {
                sYear: false,
                sMake: false,
                sModel: false,
                results: false,
                getYear: true,
                getMake: false,
                getModel: false,
                init : function() {
                    var dD = BoatCover.landing.dropDowns;
                    var year = this.sYear;
                    var make = this.sMake;
                    var model = this.sModel;
                    if (model) {
                        $J('#btn_show_covers_year').fadeTo('fast',1).get(0).disabled = false;
                        this.results = {
                            'r':'getCoversByYearMakeModel',
                            'year':year,
                            'make':make,
                            'model':model
                        };
                    }
                    if (make) {
                        $J('#model').get(0).disabled = false;
                    }
                    if (year) {
                        $J('#make').get(0).disabled = false;
                    }
                    if (this.getYear) {
                        dD.getOptions(
                            $J('#year_make_model, #year2'),
                            false,
                            {
                                'r':'getYearList'
                            },
                            true,
                            'years_list'
                        );
                        this.getYear = false;
                    }
                    if (this.getMake) {
                        dD.getOptions(
                            $J('#make'),
                            false,
                            {
                                'r':'getMakesByYear',
                                'year':year
                            },
                            true,
                            'makes_list'
                        );
                        this.getMake = false;
                    }
                    if (this.getModel) {
                        dD.getOptions(
                            $J('#model'),
                            false,
                            {
                                'r':'getModelsByYearMake',
                                'year':year,
                                'make':make
                            },
                            true,
                            'models_list'
                        );
                        this.getModel = false;
                    }
                }
            },
            byManufacturer : {
                getManu: true,
                sManu: false,
                sModel: false,
                results: false,
                init : function(auto) {
                    var dD = BoatCover.landing.dropDowns;
                    var manu = this.sManu;
                    if (manu) {
                        $J('#btn_show_models').fadeTo('fast',1).get(0).disabled = false;
                        this.results = {
                            'r':'getModelsYearsByMake',
                            'make':manu
                        };
                        if (auto) {
                            var results = $J('#by_manu_panel .step_1 .results');
                            BoatCover.panels.showResults.init(results, {"id":"btn_show_models"});
                        }
                    }
                    if (this.getManu) {
                        dD.getOptions(
                            $J('#manufacturer, #manufacturer2'),
                            false,
                            {
                                'r':'getManufacturers'
                            },
                            true,
                            'manufacturer_list'
                        );
                        this.getManu = false;
                    }
                }
            },
            byBoatType : {
                sType: false,
                sLength: false,
                sBeam: false,
                results: false,
                getType: true,
                getLength: false,
                getBeam: false,
                init : function() {
                    var dD = BoatCover.landing.dropDowns;
                    var length = this.sLength;
                    var beam = this.sBeam;
                    var type = this.sType;
                    if (beam) {
                        $J('#btn_show_covers').fadeTo('fast',1).get(0).disabled = false;
                        this.results = {
                            'r':'getCoversByStyleMaxLengthBeam',
                            'style':type,
                            'maxlength':length,
                            'beam':beam
                        };
                    }
                    if (length) {
                        $J('#beam').get(0).disabled = false;
                    }
                    if (type) {
                        $J('#max_length').get(0).disabled = false;
                    }
                    if (this.getType) {
                        dD.getOptions(
                            $J('#type, #type2'),
                            false,
                            {
                                'r':'getStyleList'
                            },
                            true,
                            'styles_list'
                        );
                        this.getType = false;
                    }
                    if (this.getLength) {
                        dD.getOptions(
                            $J('#max_length'),
                            false,
                            {
                                'r':'getMaxLengthsByStyle',
                                'style':type
                            },
                            true,
                            'maxLengths_list'
                        );
                        this.getLength = false;
                    }
                    if (this.getBeam) {
                        dD.getOptions(
                            $J('#beam'),
                            false,
                            {
                                'r':'getBeamsByStyleMaxLength',
                                'style':type,
                                'maxlength':length
                            },
                            true,
                            'beams_list'
                        );
                        this.getBeam = false;
                    }
                }
            },
            getOptions : function(elm, url, params, isJSON, state) {
                var options = {
                    dataType: '',
                    url: '',
                    success: function(data, textStatus) {
                        var newOptions = '';
                        for (var i=0; i<data[state].length; i++) {
                            var value = data[state][i].value;
                            var label = data[state][i].label;
                            if (value.match(/'/)) {
                               var newVal = value.split("'");
                               value = newVal[0] + "\\'" + newVal[1];
                            }
                            var id = value.replace(/&#39;|&quot;|&amp;|\W/g,'');
                            newOptions += '<option id="'+id+'" value="'+value+'">'+label+'</option>'+"\n";
                        }
                        elm.children().remove('option:not(:first-child)');
                        elm.append(newOptions);
                        if (BoatCover.restoreResults.selectPreviousResults) {
                            var select = elm.attr('id');
                            BoatCover.restoreResults.selectOptions(select);
                        }
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
//                        console.log('XMLHttpRequest: '+XMLHttpRequest);
//                        console.log('textStatus: '+textStatus);
//                        console.log('errorThrown: '+errorThrown);
                    }
                };
                options.url = url ? url : BoatCover.webService;
                options.dataType = isJSON ? 'json' : 'html';
                if (isJSON && params) {
                    params.json = 'true' ;
                }
                if (params) {
                    options.data = params;
                }
                $J.ajax(options);
            },
            setActions : function() {
                $J('#year_make_model, #year2').change(function() {
                    if (this.value != '') {
                        BoatCover.landing.dropDowns.clearSelections($J('#make, #model'));
                        BoatCover.landing.dropDowns.byYearMakeModel.sYear = this.value;
                        BoatCover.landing.dropDowns.byYearMakeModel.getMake = true;
                        BoatCover.landing.dropDowns.byYearMakeModel.init();
                    }
                });
                $J('#make').change(function() {
                     if (this.value != '') {
                        BoatCover.landing.dropDowns.clearSelections($J('#model'));
                        BoatCover.landing.dropDowns.byYearMakeModel.sMake = this.value;
                        BoatCover.landing.dropDowns.byYearMakeModel.getModel = true;
                        BoatCover.landing.dropDowns.byYearMakeModel.init();
                    }
                });
                $J('#model').change(function() {
                     if (this.value != '') {
                        BoatCover.landing.dropDowns.clearSelections($J('#btn_show_covers_year'));
                        BoatCover.landing.dropDowns.byYearMakeModel.sModel = this.value;
                        BoatCover.landing.dropDowns.byYearMakeModel.init();
                    }
                });
                 $J('#manufacturer, #manufacturer2').change(function() {
                    if (this.value != '') {
                        BoatCover.landing.dropDowns.byManufacturer.sManu = this.value;

                    }
                    if (this.id == 'manufacturer') {
                        BoatCover.landing.dropDowns.byManufacturer.init(true);
                    }
                    else {
                        BoatCover.landing.dropDowns.byManufacturer.init();
                    }

                });
                $J('#type, #type2').change(function() {
                    if (this.value != '') {
                        BoatCover.landing.dropDowns.clearSelections($J('#max_length, #beam'));
                        BoatCover.landing.dropDowns.byBoatType.sType = this.value;
                        BoatCover.landing.dropDowns.byBoatType.getLength = true;
                        BoatCover.flash.closeFlash();
                        BoatCover.landing.dropDowns.byBoatType.init();
                    }
                });
                $J('#max_length').change(function() {
                     if (this.value != '') {
                        BoatCover.landing.dropDowns.clearSelections($J('#beam'));
                        BoatCover.landing.dropDowns.byBoatType.sLength = this.value;
                        BoatCover.landing.dropDowns.byBoatType.getBeam = true;
                        BoatCover.landing.dropDowns.byBoatType.init();
                    }
                });
                $J('#beam').change(function() {
                     if (this.value != '') {
                        BoatCover.landing.dropDowns.clearSelections($J('#btn_show_covers'));
                        BoatCover.landing.dropDowns.byBoatType.sBeam = this.value;
                        BoatCover.landing.dropDowns.byBoatType.init();
                    }
                });
                $J('.step_2 .lnk_type_help').mousedown(function() {
                    var tab = 2;
                    var step = $J('#by_type_panel .step_1');
                    BoatCover.panels.init(tab, step);
                    $J(this).fadeOut('slow');
                });
                $J('#btn_show_covers_year, #btn_show_models, #btn_show_covers').click(function() {
                    var panel = $J(this).parent().parent('.actions');
                    var results = panel.next();
                    if (this.id != 'btn_show_models') {
                        BoatCover.panels.closePanel(panel, panel.prev('p').hide());
                    }
                    BoatCover.panels.showResults.init(results, this);
                });
                $J('.btn_edit').toggle(BoatCover.landing.dropDowns.edit, BoatCover.landing.dropDowns.edit);
                $J('.btn_edit_manu').click(BoatCover.landing.dropDowns.editManu);
                BoatCover.landing.dropDowns.actionsSet = true;
            },
            actionsSet : false,
            clearSelections : function(elm, all, current) {
                if (!current) {
                    current = '#by_year_panel .actions';
                }
                if (!all) {
                    all = false;
                }
                elm.each(function () {
                    this.selectedIndex = 0;
                });
                var panels = $J('.results').css({'borderTop': 'none', 'marginTop': '0'});
                if (all) {
                    BoatCover.landing.dropDowns.byYearMakeModel.sYear = false;
                    BoatCover.landing.dropDowns.byYearMakeModel.sMake = false;
                    BoatCover.landing.dropDowns.byYearMakeModel.sModel = false;
                    BoatCover.landing.dropDowns.byManufacturer.sManu = false;
                    BoatCover.landing.dropDowns.byBoatType.sType = false;
                    BoatCover.landing.dropDowns.byBoatType.sLength = false;
                    BoatCover.landing.dropDowns.byBoatType.sBeam = false;
                    BoatCover.landing.dropDowns.byYearMakeModel.getYear = true;
                    BoatCover.landing.dropDowns.byYearMakeModel.getMake = false;
                    BoatCover.landing.dropDowns.byYearMakeModel.getModel = false;
                    BoatCover.landing.dropDowns.byManufacturer.getManu = true;
                    BoatCover.landing.dropDowns.byBoatType.getType = true;
                    BoatCover.landing.dropDowns.byBoatType.getLength = false;
                    BoatCover.landing.dropDowns.byBoatType.getBeam = false;
                    BoatCover.landing.dropDowns.init();
                }
                else {
                    elm.each(function () {
                        var init;
                        switch (this.id) {
                            case 'make' :
                                BoatCover.landing.dropDowns.byYearMakeModel.sMake = false;
                                BoatCover.landing.dropDowns.disable($J('#model, #btn_show_covers_year'));
                                BoatCover.landing.dropDowns.byYearMakeModel.sModel = false;
                                init = BoatCover.landing.dropDowns.byYearMakeModel.init;
                                break;
                            case 'model' :
                                BoatCover.landing.dropDowns.byYearMakeModel.sModel = false;
                                init = BoatCover.landing.dropDowns.byYearMakeModel.init;
                                break;
                            case 'btn_show_covers_year' :
                                init = BoatCover.landing.dropDowns.byYearMakeModel.init;
                                break;
                            case 'max_length' :
                                BoatCover.landing.dropDowns.byBoatType.sLength = false;
                                BoatCover.landing.dropDowns.byBoatType.sBeam = false;
                                BoatCover.landing.dropDowns.disable($J('#beam, #btn_show_covers'));
                                init = BoatCover.landing.dropDowns.byBoatType.init;
                                break;
                            case 'beam' :
                                BoatCover.landing.dropDowns.byBoatType.sBeam = false;
                                init = BoatCover.landing.dropDowns.byBoatType.init;
                                break;
                            case 'btn_show_covers' :
                                init = BoatCover.landing.dropDowns.byYearMakeModel.init;
                                break;
                            case 'manufacturer2' :
                                BoatCover.landing.dropDowns.byManufacturer.sManu = false;
                                BoatCover.landing.dropDowns.byManufacturer.sModel = false;
                                BoatCover.landing.dropDowns.disable($J('#btn_show_models'));
                                init = BoatCover.landing.dropDowns.byManufacturer.init;
                                break;
                        }
                        init();
                    });
                }
                BoatCover.panels.closePanel(panels);
                $J('.actions').show();
            }
        },
        openTray : function(tray) {
            var li = tray.parent();
            var active = BoatCover.landing.activeTray;
            if (active) {
                BoatCover.landing.closeTray(active);
            }
            if (li.hasClass('closed')) {
                li.removeClass('closed');
                tray.slideDown(100);
                BoatCover.landing.activeTray = tray;
            }
        },
        closeTray : function(tray) {
            var li = tray.parent();
            if (!li.hasClass('closed')) {
                tray.slideUp(100, function() {
                    li.addClass('closed');
                });
            }
        }
    },
    flash :  {
        config1 : {
            src: 'assets/flash/boatcover_type_help.swf',
            wmode: 'opaque'
        },
        config2 : {
            varXmlPath: 'assets/flash/xml/boats.xml',
            expressInstall: 'assets/scripts/expressInstall.swf'
        },
        init : function() {
            flashembed("type_help_flash", this.config1, this.config2);
        },
        closeFlash : function(typeValue) {
            var step = $J('#type_help_flash').parent('.step_1');
            BoatCover.panels.closePanel(step);
            $J('.step_2 .lnk_type_help').fadeIn('slow');
            if (typeValue) {
                $J('#type2 option').each(function() {
                    if (this.value == typeValue) {
                        var elm = $J(this).parent('select').get(0);
                        BoatCover.panels.selections(elm, typeValue);
                        $J('#type2').change();
                        BoatCover.landing.dropDowns.byBoatType.init();
                    }
                });
            }
        }
    },
    tabs : {
        init : function(tab) {
            if (!tab) { tab = 0; }
            this.config = {
                current:'current',
                effect:'fade',
                initialIndex:tab,
                api:true
            };
            this.api = $J("ul.shop_by").tabs("div.panes > div", this.config).onBeforeClick(this.tabClick);
            if (!this.tabsSet) {
                var li = $J('.shop_by li').get(tab);
                $J(li).addClass('current');
                this.tabsSet = true;
            }
            $J("ul.shop_by li h3 a").mousedown(function(e) {
                var li = $J(this).parents('li');
                var id = li.attr('id');
                var elm = $J('#' + id + '_panel .actions');
                var results = elm.next('.results').css("display");
                if ($J(this).hasClass('current') && results != 'none' && id != 'by_manu') {
                    BoatCover.landing.dropDowns.edit(e, elm);
                }
                else if ($J(this).hasClass('current') && results != 'none') {
                    BoatCover.landing.dropDowns.editManu(e, elm);
                }
            });
        },
        tabClick : function(e) {
            var element = e.originalTarget || e.srcElement;
            var li = $J(element).parents('li');
            var ie6 = false;
            if (!li.hasClass('current')) {
                $J('.shop_by > li.current').removeClass('current');
                var panel = li.attr('id');
                var stepNum = (panel == 'by_type') ? '.step_2' : '.step_1';
                var step = $J('#'+panel+'_panel '+stepNum);
                li.addClass('current');
                step.fadeIn('normal');
                step.children('.actions').fadeIn('normal');
                BoatCover.flash.closeFlash();
                if ($J.browser.msie && $J.browser.version=="6.0") {
                    ie6 = true;
                }
                if (!ie6) {
                    BoatCover.landing.dropDowns.clearSelections($J('.actions select'), true);
                }
                BoatCover.panels.closePanel($J('.results'));
                $J('.lnk_type_help_container').fadeIn('fast');
                $J('#model_year_table tbody, .product_table tbody').html('');
                if (BoatCover.restoreResults.previousResults) {
                    BoatCover.restoreResults.eraseResults();
                }
            }
        },
        tabsSet : false
    },
    panels : {
        activePanel : null,
        openTimer : null,
        closeTimer : null,
        init : function(tab, step) {
            BoatCover.tabs.init(tab);
            this.changeState(step);
        },
        changeState : function(step) {
            $J('.tray, .tray select').remove();
            $J('#container').addClass('panel');
            $J('#boatcover .boat_cover_selector').animate({marginTop: '12px'}, 'slow', function() {
                if (step) {
                    $J('.bg').fadeOut('slow', function() {
                        BoatCover.panels.openPanel(step);
                    });
                }
                else {
                    $J('.bg').fadeOut('slow');
                }
                $J('.cust_serv').fadeIn('slow');
            });
        },
        openPanel : function(panel) {
            panel.slideDown(500);
        },
        closePanel : function(panel) {
             panel.slideUp(500);
        },
        selections : function(elm, value, select) {
            var tab = 0, step = 0, auto = false;
            if (!value) {
                value = $J(elm).children('option:selected').val();
            }
            var route = elm.id;
            switch (route) {
                case 'year_make_model' :
                    tab = 0;
                    step = $J('#by_year_panel .step_1');
                    if (!select) {
                        select = $J('#year2 option[value='+value+']').get(0);
                        select.selected = true;
                    }
                    break;
                case 'manufacturer' :
                case 'manufacturer2' :
                    tab = 1;
                    step = $J('#by_manu_panel .step_1');
                    if (!select) {
                        select = $J('#manufacturer2 option[value='+value+']').get(0);
                        select.selected = true;
                        BoatCover.landing.dropDowns.byManufacturer.sManu = value;
                    }
                    auto = true;
                    break;
                case 'type' :
                case 'type2' :
                    tab = 2;
                    step = $J('#by_type_panel .step_2');
                    if (!select) {
                        select = $J('#type2 option[value='+value+']').get(0);
                        select.selected = true;
                    }
                    break;
            }
            BoatCover.panels.init(tab, step, auto);
        },
        showResults : {
            init : function(panel, btn) {
                this.panel = panel;
                var sort = false;
                var dD = BoatCover.landing.dropDowns;
                var yMM = dD.byYearMakeModel;
                var m = dD.byManufacturer;
                var bT = dD.byBoatType;
                this.options.url = BoatCover.webService;
                if (btn != null) {
                    this.btn = btn;
                }
                if ($J(this.btn).hasClass('covers_make_model')) {
                    this.btn.id = 'btn_show_covers_manu';
                }
                if (this.options.data.sortby) {
                    sort = this.options.data.sortby;
                }
                switch (this.btn.id) {
                    case 'btn_show_covers_year' :
                        this.options.data = yMM.results;
                        this.route = 'yMM';
                        this.selections = yMM.sMake+', '+yMM.sModel+', '+yMM.sYear;
                        break;
                    case 'btn_show_models' :
                        this.options.data = m.results;
                        this.route = 'm';
                        this.selections = m.sManu;
                        break;
                    case 'btn_show_covers_manu' :
                        this.options.data = m.results;
                        this.route = 'm2';
                        this.selections = m.sManu+', '+m.sModel+', '+m.sYear;
                        break;
                    case 'btn_show_covers' :
                        this.options.data = bT.results;
                        this.route = 'bT';
                        this.selections = bT.sType+', '+bT.sLength+' max length, '+bT.sBeam+' beam';
                        break;
                }
                this.options.data.json = 'true';
                if (sort) {
                    this.options.data.sortby = sort;
                }
                $J.ajax(this.options);
            },
            genManuResults : function(data) {
                var table = '';
                var selections = BoatCover.panels.showResults.selections.toLowerCase();
                var list = data.modelsyears_list;
                var heading = '<span>' + list.length + ' model(s) matching <span>' + selections.replace('\\', '') +'</span></span>';
                if (list.length) {
                    for (var i=0; i<list.length; i++) {
                        table += '<tr>';
                        if ((list[i].from_date != list[i].to_date) && (list[i].from_date != '' && list[i].to_date != '')) {
                            table += '<td><a href="#" rel="'+list[i].model+'" class="covers_make_model" rev="'+list[i].from_date+' - '+list[i].to_date+'">'+list[i].model+'</a></td>';
                            table += '<td>'+list[i].from_date+' - '+list[i].to_date+'</td>';
                        }
                        else {
                            table += '<td><a href="#" rel="'+list[i].model+'" class="covers_make_model" rev="'+list[i].to_date+'">'+list[i].model+'</a></td>';
                            table += '<td>'+list[i].to_date+'</td>';
                        }
                        table += '</tr>';
                    }
                }
                else {
                    table += '<tr><td colspan="2" style="font-weight:bold; text-align:center;">No Covers Match Your Selections</td></tr>';
                }
                $J('#model_year_heading').html(heading);
                $J('#model_year_table tbody').html(table);
                $J('.covers_make_model').click(function(e) {
                    e.preventDefault();
                    BoatCover.restoreResults.params = '';
                    BoatCover.restoreResults.params += 'sManu=' + BoatCover.landing.dropDowns.byManufacturer.sManu + '&';
                    BoatCover.restoreResults.params += 'sYear=' + this.rev + '&';
                    var make = BoatCover.landing.dropDowns.byManufacturer.sManu;
                    var model = BoatCover.landing.dropDowns.byManufacturer.sModel = this.rel;
                    var year  = BoatCover.landing.dropDowns.byManufacturer.sYear  = this.rev;
                    BoatCover.landing.dropDowns.byManufacturer.sYear = this.rev;
                    BoatCover.landing.dropDowns.byManufacturer.results = {
                        'r':'getCoversByModel',
                        'make':make,
                        'model':model,
                        'year':year
                    };
                    var panel = $J(this).parents('.step_1');
                    var results = $J('#by_manu_panel .step_2, #by_manu_panel .step_2 .results');
                    BoatCover.panels.closePanel(panel);
                    BoatCover.panels.showResults.init(results, this);
                });
                BoatCover.panels.openPanel(BoatCover.panels.showResults.panel);
            },
            genProductResults : function(data, route) {
                var table = '', elm = '', hdr = '', manu = false;
                switch (route) {
                    case 'yMM' :
                        elm = 'year_make_model_table';
                        hdr = 'year_make_model_heading';
                        break;
                    case 'm2' :
                        elm = 'manu_table';
                        hdr = 'manu_heading';
                        manu = true;
                        break;
                    case 'bT' :
                        elm = 'type_table';
                        hdr = 'type_heading';
                        break;
                }
                var params = '';
                if (BoatCover.restoreResults.params && manu) {
                    params += BoatCover.restoreResults.params;
                }
                var optionData = BoatCover.panels.showResults.options.data;
                var removeItem = optionData.r;
                var x = 1, length = 0;
                for (var l in optionData) {
                    length++;
                }
                for (var z in optionData) {
                    if (optionData[z] != removeItem) {
                        params += z +'='+ optionData[z];
                    }
                    else {
                        params += 'r2=' + removeItem;
                    }
                    if (x < length) {
                        params += '&';
                    }
                    x++;
                }
                var list = data.covers_list;
                var selections = BoatCover.panels.showResults.selections.toLowerCase();
                var heading = list.length + ' item(s) matching <span>' + selections.replace('\\', '') +'</span>';
                if (list.length) {
                    for (var i=0; i<list.length; i++) {
                        if (i === 0) {
                            table += '<tr class="first">';
                        }
                        else {
                            table += '<tr>';
                        }
                        table += '<td>';
                        if (list[i].cover_image != 'no_match') {
                            table += '<a href="/modperl/product/details.cgi?r=view&i='+list[i].item_num+'"><img src="'+list[i].cover_image+'" width="125" height="125" alt="'+list[i].wc_make+' '+list[i].wc_model+'" /></a>';
                        }
                        table += '<div>';
                        table += '<h5><a href="/modperl/product/details.cgi?r=view&i='+list[i].item_num+'">'+list[i].wc_make+' '+list[i].wc_model+ '</a></h5>';
                        table += '<p class="warrenty">'+list[i].bc_warranty+'</p>';
                        table += '<p class="status"><strong>'+list[i].stock_status+'</strong></p>';
                        table += '</div>';
                        table += '</td>';
                        table += '<td>'+list[i].bc_material_info+'</td>';
                        table += '<td>'+list[i].bc_fit+'</td>';
                        if (list[i].sale_price != '') {
                            table += '<td><span class="old_price">'+list[i].reg_price+'</span><br />';
                            table += '<strong class="red_message price_point">'+list[i].sale_price+'</strong></td>';
                        }
                        else {
                            table += '<td><strong class="price">'+list[i].reg_price+'</strong></td>';
                        }
                        table += '</tr>';
                    }
                }
                else {
                    table += '<tr><td colspan="4" style="font-weight:bold; text-align:center;">No Covers Match Your Selections</td></tr>';
                }
                $J('#'+elm+' tbody').html(table);
                $J('#'+hdr+' span').html(heading);
                BoatCover.panels.showResults.pagination.init(elm);
                BoatCover.panels.openPanel(BoatCover.panels.showResults.panel);
                if (BoatCover.restoreResults.previousResults && !BoatCover.restoreResults.selectPreviousResults) {
                    BoatCover.restoreResults.eraseResults();
                }
                $J.cookie('bcstResults', params);
            },
            options : {
                dataType: 'json',
                url: '',
                success: function(data) {
                    var route = BoatCover.panels.showResults.route;
                    if (route != 'm') {
                        BoatCover.panels.showResults.genProductResults(data, route);
                    }
                    else {
                        BoatCover.panels.showResults.genManuResults(data);
                    }
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
//                    console.log('XMLHttpRequest: '+XMLHttpRequest);
//                    console.log('textStatus: '+textStatus);
//                    console.log('errorThrown: '+errorThrown);
                },
                data: {}
            },
            setActions : function() {
                $J('#sort_by').change(function() {
                    var btn = $J(this).parents('.results').prev('.actions').children('li').children('input')[0];
                    BoatCover.panels.showResults.options.data.sortby = this.value;
                    BoatCover.panels.showResults.init(BoatCover.panels.showResults.panel, btn);
                });
            },
            route : '',
            pagination : {
                init : function(table) {
                    $J('#tablePagination select').each(function(i) {
                        BoatCover.panels.showResults.pagination.selected[i] = this.selectedIndex;
                    });
                    $J('#tablePagination').remove();
                    $J('#'+table).tablePagination(this.options);
                    $J('#tablePagination select').each(function(i) {
                        this.selectedIndex = BoatCover.panels.showResults.pagination.selected[i];
                    });
                    BoatCover.panels.showResults.setActions();
                },
                options : {
                    rowsPerPage : 8,
                    optionsForRows : [8,16,24]
                },
                selected : [0,0]
            }
        }
    },
    restoreResults : {
        eraseResults : function () {
            $J.cookie('bcstResults', null);
            this.previousResults = null;
            this.selectPreviousResults = false;
        },
        selectPreviousResults : false,
        previousResults : null,
        params : null,
        selectOptions : function(select) {
            var value = BoatCover.restoreResults.previousResults;
            if (value.r == 'getCoversByYearMakeModel' && select == 'year_make_model') {
                select = 'year2';
            }
            else if (value.r == 'getCoversByModel' && select == 'manufacturer') {
                select = select + '2';
            }
            else if (value.r == 'getCoversByStyleMaxLengthBeam' && select == 'type') {
                select = select + '2';
            }
            for (var i in value) {
                var option = value[i].replace(/&#39;|&quot;|&amp;|\W/g,'');
                var selector = "#"+select+" option#"+option;
                if ($J(selector).length > 0) {
                    var selected = $J(selector).get(0);
                    selected.selected = true;
                }
            }
        },
        init : function() {
            var cookie = $J.cookie('bcstResults').replace(/\s&\s/g, '!AND!');
            var param = cookie.split('&');
            var params = {};
            var results = {};
            var btn = {};
            var elm = {};
            var panel = null;
            var select = null;
            var removeItems = ['i','r','r2','unum','wc_pn'];
            this.selectPreviousResults = true;
            if (!BoatCover.restoreResults.params) {
                BoatCover.restoreResults.params = '';
            }
            $J.each(param, function(x,y){
                var temp = y.split('=');
                params[temp[0]] = temp[1];
            });
            for (var i in params) {
                if ($J.inArray(i, removeItems)== -1) {
                    var paramData = params[i] = params[i].replace('!AND!', ' & ');
                    results[i] = paramData;
                }
                if (params['r2'] == 'getCoversByModel') {
                    switch (i) {
                        case 'sManu' :
                            BoatCover.landing.dropDowns.byManufacturer.sManu = params[i];
                            BoatCover.restoreResults.params += 'sManu=' + params[i] + '&';
                            break;
                        case 'sYear' :
                            BoatCover.landing.dropDowns.byManufacturer.sYear = params[i];
                            BoatCover.restoreResults.params += 'sYear=' + params[i] + '&';
                            break;
                    }
                }
            }
            results['r'] = params['r2'];
            switch (results['r']) {
                case 'getCoversByYearMakeModel' :
                    BoatCover.landing.dropDowns.byYearMakeModel.sYear = results['year'];
                    BoatCover.landing.dropDowns.byYearMakeModel.sMake = results['make'];
                    BoatCover.landing.dropDowns.byYearMakeModel.sModel = results['model'];
                    BoatCover.landing.dropDowns.byYearMakeModel.getYear = true;
                    BoatCover.landing.dropDowns.byYearMakeModel.getMake = true;
                    BoatCover.landing.dropDowns.byYearMakeModel.getModel = true;
                    BoatCover.landing.dropDowns.byYearMakeModel.init();
                    panel = $J('#by_year_panel .results');
                    btn = {'id':'btn_show_covers_year'};
                    elm = {'id':'year_make_model'};
                    select = $J('#year2 option, #make option, #model option');
                    break;
                case 'getCoversByModel' :
                    BoatCover.landing.dropDowns.byManufacturer.results = {
                        'make':results['sManu'],
                        'year':results['sYear'],
                        'r':'getCoversByModel',
                        'model':results['model']
                    };
                    BoatCover.landing.dropDowns.byManufacturer.sModel = results['model'];
                    panel = $J('#by_manu_panel, #by_manu_panel .step_2, #by_manu_panel .step_2 .results');
                    btn = {'id':'btn_show_covers_manu'};
                    elm = {'id':'manufacturer2'};
                    select = $J('#manufacturer2 option');
                    $J('#btn_show_models').fadeTo('fast',1).get(0).disabled = false;
                    break;
                case 'getCoversByStyleMaxLengthBeam' :
                    BoatCover.landing.dropDowns.byBoatType.sLength = results['maxlength'];
                    BoatCover.landing.dropDowns.byBoatType.sBeam = results['beam'];
                    BoatCover.landing.dropDowns.byBoatType.sType = results['style'];
                    BoatCover.landing.dropDowns.byBoatType.getType = true;
                    BoatCover.landing.dropDowns.byBoatType.getLength = true;
                    BoatCover.landing.dropDowns.byBoatType.getBeam = true;
                    BoatCover.landing.dropDowns.byBoatType.init();
                    panel = $J('#by_type_panel .step_2 .results');
                    btn = {'id':'btn_show_covers'};
                    elm = {'id':'type2'};
                    select = $J('#type2 option, #max_length option, #beam option');
                    break;
            }
            this.previousResults = results;
            BoatCover.panels.selections(elm, results, select);
            BoatCover.panels.showResults.init(panel, btn);
        }
    }
};
$J(document).ready(function() {
    if ($J.cookie('bcstResults')) {
        BoatCover.restoreResults.init();
    }
});

