var setupShadowbox = function() {
    //Shadowbox.clearCache();
    var links = [];
    $('.zoom-icon').each(function(index, domEl) {
        links.push(domEl);
    });
    Shadowbox.setup(links, {gallery:'details'});
}

// ---------------------------------------
//                          commons
// ---------------------------------------

$(document).ready(function() {
    // http://harrybailey.com/2008/11/disabling-select-options-in-internet-explorer/
    $.fn.extend({
        optionDisable:function() {
            var ths = $(this);
            if (ths.attr('tagName').toLowerCase() == 'option') {
                ths.before($('<optgroup>&nbsp;</optgroup>').css({color:'#ccc','background-color':'white',height:'14px'}).attr({id:ths.attr('value'),label:ths.text()})).remove();
            }
            return ths;
        },
        optionEnable:function() {
            var ths = $(this);
            var tag = ths.attr('tagName').toLowerCase();
            if (tag == 'option') {
                ths.removeAttr('disabled');
            }
            else if (tag == 'optgroup') {
                ths.before($('<option />').attr({value:ths.attr('id')}).text(ths.attr('label'))).remove();
            }
            return ths;
        }
    });
});

Array.prototype.subArray = function(start, end) {
    var a = [];
    for (var i = start; i < end; i++) {
        a.push(this[i]);
    }
    return a;
}


// ---------------------------------------
//                          detail tabs
// ---------------------------------------

var DetailTabs = function(showStocks, url, defaultImg, defaultArticleId) {

    var handleTabClick = function(ev, id) {
        $('#detail-tabs .tab-on').removeClass('tab-on');
        $('#details-tab-content > div').hide();
        var target = $(ev.target).hasClass('tab-off') ? $(ev.target) : $(ev.target).parents('.tab-off:first');
        target.addClass('tab-on');
        $('#tab-' + id + '-content').show();
    }

    $('#tab-info').click(function(ev) {
        handleTabClick(ev, 'info');
    });
    $('#tab-info').trigger('click');

    if (showStocks) {
        $('#tab-variants').click(function(ev) {
            handleTabClick(ev, 'variants');
        });
    }
    if (url != null) {
        $('#tab-config').click(function(ev) {
            handleTabClick(ev, 'config');
        });
        $.getJSON(url, function(jo) {
            new Configurator(jo.oxvarname.split('|'), jo.variants, defaultImg, defaultArticleId);
        });
    }

}

// ---------------------------------------
//                          configurator
// ---------------------------------------

var Variant = function(conf) {
    this.id = conf.id;
    this.price = conf.oxprice;
    this.onStock = conf.onStock;
    this.pic1 = conf.oxpic1;
    this.zoom1 = conf.oxzoom1;
    this.varselects = conf.oxvarselect.split('|');
}


var Box = function(configurator, selectTag, selectObj, optionValues, index) {

    this.prevBox = null;
    this.nextBox = null;

    selectTag.bind('change', {box:this}, function(ev) {
        ev.data.box.afterSelect(true);
    });

    this.getSelectedValue = function() {
        var value = '';
        for (var i = 0; i < selectObj.length; i++) {
            if (selectObj.options[i].selected == true) {
                value = selectObj.options[i].value;
            }
        }
        return(value);
    }

    this.getValuePath = function() {
        if (this.prevBox != null) {
            return (this.prevBox.getValuePath() + '|' + this.getSelectedValue());
        } else {
            return (this.getSelectedValue());
        }
    }

    this.select = function(value, auto) {
        for (var i = 0; i < selectObj.length; i++) {
            var opt = selectObj.options[i];
            opt.selected = opt.value == value;
        }
        this.afterSelect(auto);
    }

    this.afterSelect = function(auto) {
        if (this.nextBox != null) {
            this.nextBox.update();
            if (auto) {
                this.nextBox.autoSelect();
            }
        } else {
            configurator.displaySelection();
        }
    }

    this.autoSelect = function() {
        if (selectObj.selectedIndex == -1) {
            selectObj.options[0].selected = true;
        }
        if (this.nextBox != null) {
            this.nextBox.update();
            this.nextBox.autoSelect();
        } else {
            configurator.displaySelection();
        }
    }

    this.update = function() {
        var key = this.prevBox == null ? '' : this.prevBox.getValuePath();
        var variants = configurator.get(key);
        var availValues = [];
        jQuery.each(variants, function(i) {
            if ($.inArray(variants[i].varselects[index], availValues) == -1) {
                availValues.push(variants[i].varselects[index]);
            }
        });
        var opts = $(selectTag).children();
        for (var i = 0; i < opts.length; i++) {
            var opt = $(opts[i]);
            var tagName = opt.attr('tagName').toLowerCase();
            if (tagName == 'option') {
                if ($.inArray(opt.attr('value'), availValues) == -1) {
                    opt.optionDisable();
                }
            }
            else {
                if ($.inArray(opt.attr('label'), availValues) != -1) {
                    opt.optionEnable();
                }
            }
        }
    }

}


var Configurator = function(varNames, variants, defaultImg, defaultArticleId) {

    var boxes = [];
    var defaultVariant = null;
    var map = {};

    var build = function() {
        var form = '<form name="configuratorForm" class="configuratorForm"><table>';
        $.each(varNames,
            function(index) {
                form += '<tr><td style="padding:3px 8px 3px 0;">' + this + ': </td><td><select style="width:220px;" name="sel' + index + '"></select></td></tr>';
            }
            );
        form += '</table></form>';
        $('#tab-config-content .to-basket').before(form);

        var allOptionValues = [];
        for (var j = 0; j < varNames.length; j++) {
            allOptionValues[j] = [];
        }

        //var firstVariant = null;
        for (var i = 0; i < variants.length; i++) {
            var variant = new Variant(variants[i]);
            add(variant);
            //            if (i == 0) {
            //                firstVariant = variant;
            //            }

            for (var j = 0; j < varNames.length; j++) {
                var value = variant.varselects[j];
                if ($.inArray(value, allOptionValues[j]) == -1) {
                    allOptionValues[j].push(value);
                }
            }
            if (variant.id == defaultArticleId) {
                defaultVariant = variant;
            }
        }

        var prevBox = null;

        for (var i = 0; i < varNames.length; i++) {
            var selectTag = $('#tab-config-content select:eq(' + i + ')');
            var selectObj = document.configuratorForm.elements[i];
            var optionValues = allOptionValues[i];
            var box = new Box(this, selectTag, selectObj, optionValues, i);
            boxes[i] = box;
            box.prevBox = prevBox;
            if (prevBox != null) {
                prevBox.nextBox = box;
            }
            prevBox = box;
            for (var j = 0; j < optionValues.length; j++) {
                var value = optionValues[j];
                $('<option value="' + value + '">' + value + '</option>').appendTo(selectTag);
            }
        }

        //        if (defaultVariant == null) {
        //            defaultVariant = firstVariant;
        //        }
        selectVariant(defaultVariant);
    }

    var selectVariant = function(variant) {
        for (var i = 0; i < boxes.length; i++) {
            boxes[i].select(variant.varselects[i], false);
        }
    }

    this.displaySelection = function() {
        var valuePath = boxes[boxes.length - 1].getValuePath();
        var variant = this.get(valuePath)[0];
        $('#tab-config-content input[name="aid"]').attr('value', variant.id);
        $('#tab-config-content input[name="anid"]').attr('value', variant.id);
        var variantValues = '';
        for (var i = 0; i < variant.varselects.length; i++) {
            variantValues += '<span class="fwbold">' + varNames[i] + '</span>: ' + variant.varselects[i] + '<br>';
        }
        $('#tab-config-content .to-basket .variant-values').html(variantValues);
        var formattedPrice = '' + variant.price;
        if (formattedPrice.length > 3) {
            formattedPrice = formattedPrice.substr(0, formattedPrice.length - 3) + '.' +
                             formattedPrice.substring(formattedPrice.length - 3);
        }
        $('#tab-config-content .to-basket .price').html(formattedPrice + ',00 &euro;*');
        if (variant.onStock) {
            $('#tab-config-content .to-basket .stock-info').html('<span class="stock-now">' +
                (lang == 0 ? 'sofort lieferbar' : 'in stock') + '</span>');
        }
        else {
            $('#tab-config-content .to-basket .stock-info').html('<span class="stock-later">' +
                (lang == 0 ? 'lieferbar in 2-6 Wochen' : 'available within 2-6 weeks') + '</span>');
        }
        $('#tab-config-content .rebate').html(formatPrice(variant.price * 0.97) + " &euro;*");
        $('#tab-config-content .save').html(formatPrice(variant.price * 0.03) + " &euro;");
        $('#tab-config-content .to-basket').hide();
        $('#tab-config-content .to-basket').fadeIn();

        displayFinancing(variant.price);

        // pics
        var iconSrc, thumbSrc, zoomSrc;
        if (variant.pic1 != "") {
            iconSrc = rootUrl + 'out/pictures/1/' + variant.pic1.substring(0, variant.pic1.length - 4) + '_ico.jpg';
            thumbSrc = rootUrl + 'out/pictures/1/' + variant.pic1;
            zoomSrc = rootUrl + 'out/pictures/z1/' + variant.zoom1;
        }
        else {
            iconSrc = defaultImg.iconSrc;
            thumbSrc = defaultImg.thumbSrc;
            zoomSrc = defaultImg.zoomSrc;
        }
        $('#zoom-link-1 img').attr('src', iconSrc);
        document.getElementById('details-article-image').src = thumbSrc;
        $('#zoom-link-1').attr('href', zoomSrc);
        $('#zoom-link-1').attr('onMouseOver', 'document.getElementById("details-article-image").src="' + thumbSrc +
                                              '";return false;');
        window.setTimeout('setupShadowbox()', 10);
    }

    var add = function(variant) {
        for (var i = 0; i <= variant.varselects.length; i++) {
            var key = variant.varselects.subArray(0, i).join('|');
            if (map[key] == undefined) {
                map[key] = [];
            }
            map[key].push(variant);
        }
        //        if (variant.onStock) {
        //            if (defaultVariant == null) {
        //                defaultVariant = variant;
        //            }
        //        }
    }

    this.get = function(valuePath) {
        return map[valuePath];
    }

    build.call(this);

};

var formatPrice = function(price) {
    var f = "" + Math.round(price * 100);
    if (f.length > 5) {
        f = f.substr(0, f.length - 5) + "." + f.substring(f.length - 5, f.length);
    }
    return f.substring(0, f.length - 2) + "," + f.substring(f.length - 2, f.length);
};

var displayFinancing = function(price) {
    // Financing
    if (lang == 0 && price >= 179) {
        var minRate;
        if (price >= 510) {
            minRate = price * 0.02944930;
        } else if (price >= 350) {
            minRate = price * 0.04292026;
        } else {
            minRate = price * 0.08418604;
        }
        minRate = formatPrice(minRate);
        var f = '<em>Finanzierung ab ' + minRate + ' &euro; mtl. (nur in Deutschland)</em>';
        f += '<div class="financing-content"><br>Für den gewählten Artikel können wir Ihnen z. B. folgende ';
        f += 'Finanzierungsmöglichkeiten anbieten (andere Laufzeiten möglich, bei mtl. Rate von mind. 15 &euro;):<br>';
        f += 'Kaufpreis: ' + formatPrice(price) + " &euro;";
        f += '<div align="center">';
        f += '<table id="financing-conditions-table" cellspacing="0" cellpadding="2" border="0">';
        f += '<tr>';
        f += '<td class="h">Laufzeit<br>(in Monaten)</td>';
        f += '<td class="h">Monatliche<br>Rate</td>';
        f += '<td class="h">Gebundener<br>jährl. Sollzinssatz<br>zzgl. Bearbeitungsentgelt</td>';
        f += '<td class="h">Effektiver<br>Jahreszins</td>';
        f += '</tr>';
        f += '<tr class="bright-row">';
        f += '<td>12</td>';
        f += '<td>' + formatPrice(price * 0.08418604) + ' &euro;</td>';
        f += '<td>1,88 %</td>';
        f += '<td>1,9 %</td>';
        f += '</tr>';
        if (price >= 350) {
            f += '<tr class="dark-row">';
            f += '<td>24</td>';
            f += '<td>' + formatPrice(price * 0.04292026) + ' &euro;</td>';
            f += '<td>2,86 %</td>';
            f += '<td>2,9 %</td>';
            f += '</tr>';
        }
        if (price >= 510) {
            f += '<tr class="bright-row">';
            f += '<td>36</td>';
            f += '<td>' + formatPrice(price * 0.02944930) + ' &euro;</td>';
            f += '<td>3,83 %</td>';
            f += '<td>3,9 %</td>';
            f += '</tr>';
        }
        f += '</table>';
        f += '</div>';
        f += '</div>';
        f += '<br>';

        $(".financing").html(f);
        $(".financing em").click(function() {
            $(this).toggleClass("opened");
            $(this).next().toggle("slow");
        });
    } else {
        $(".financing").html("");
    }


    //
//                                                <div id="financing-conditions">
//                                                    <div id="financing-conditions-box">
//                                                        <div id="financing-conditions-border">
//                                                            <div id="financing-conditions-content">
//                                                                Für den Artikel [{$articleTitle}]
//                                                                [{if $defaultArticle->oxvarnames|@count > 0}]
//                                                                    ([{foreach name=vv from=$defaultArticle->oxvarnames item="varname" key="index"}]<span class="fwbold">[{$varname}]</span>: [{$defaultArticle->oxvarselects[$index]}][{if !$smarty.foreach.vv.last}], [{/if}][{/foreach}])
//                                                                [{/if}]
//                                                                können wir Ihnen z. B. folgende Finanzierungsmöglichkeiten anbieten (andere Laufzeiten möglich, bei mtl. Rate von mind. 15 [{$currency->sign}]):<br>
//                                                                Kaufpreis: [{$defaultArticle->oxprice|priceformat}] [{$currency->sign}]
//                                                                <div align="center">
//                                                                    <table id="financing-conditions-table" cellspacing="0" cellpadding="2" border="0">
//                                                                        <tr>
//                                                                            <td class="h">Laufzeit<br>(in Monaten)</td>
//                                                                            <td class="h">Monatliche<br>Rate</td>
//                                                                            <td class="h">Gebundener<br>jährl. Sollzinssatz<br>zzgl. Bearbeitungsentgelt</td>
//                                                                            <td class="h">Effektiver<br>Jahreszins</td>
//                                                                        </tr>
//                                                                        <tr class="bright-row">
//                                                                            <td>12</td>
//                                                                            <td>[{$unformattedPrice*0.08418604|number_format:2:",":"." }] [{$currency->sign}]</td>
//                                                                            <td>1,88 %</td>
//                                                                            <td>1,9 %</td>
//                                                                        </tr>
//                                                                        [{if $unformattedPrice >= 350}]
//                                                                            <tr class="dark-row">
//                                                                                <td>24</td>
//                                                                                <td>[{$unformattedPrice*0.04292026|number_format:2:",":"." }] [{$currency->sign}]</td>
//                                                                                <td>2,86 %</td>
//                                                                                <td>2,9 %</td>
//                                                                            </tr>
//                                                                        [{/if}]
//                                                                        [{if $unformattedPrice >= 510}]
//                                                                            <tr class="bright-row">
//                                                                                <td>36</td>
//                                                                                <td>[{$unformattedPrice*0.02944930|number_format:2:",":"." }] [{$currency->sign}]</td>
//                                                                                <td>3,83 %</td>
//                                                                                <td>3,9 %</td>
//                                                                            </tr>
//                                                                        [{/if}]
//                                                                    </table>
//                                                                </div>
//                                                            </div>
//                                                        </div>
//                                                    </div>
//                                                </div>


//                                                [{capture name="lfInlineScripts"}]
//                                                    [{$smarty.capture.lfInlineScripts}]
//                                                    $(document).ready(function(){
//                                                        $("#financing-conditions-trigger").hover(
//                                                            function(){$("#financing-conditions").show();},
//                                                            function(){$("#financing-conditions").hide();}
//                                                        );
//                                                    });
//                                                [{/capture}]
//



};

$(document).ready(function() {
    $(".on-stock em").click(function() {
        $(this).toggleClass("opened");
        $(this).next().toggle("slow");
    });
});
