
function browserSupportsOjaySelectStyling() {
    var browserName = navigator.appName;
    var browserVer = parseInt(navigator.appVersion);
    if ((browserName == 'Microsoft Internet Explorer') && (browserVer == 4)) {// do not tyle SELECT because of IE rendering bug
        return false;
    }
    return true;
}
function browserSupportsWebKit() {
    var agent = navigator.userAgent.toLowerCase();
    var success = ((agent.indexOf('applewebkit') != -1));
    return success;
}
function browserSupportsIPad() {
    //IPad user agent		:Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10
    //var isiPad = navigator.userAgent.match(/iPad/i) != null;
    //return isiPad;
}
function browserSupportsIPhone() {
    //IPhone user agent     :Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C25 Safari/419.3
}

/**
 * Setup code to be run once the DOM is ready to accept input.
 */
Ojay.onDOMReady(function() {

    /**
    * Forms styling.
    */
    Ojay('input[type=checkbox]').forEach(function(input) { new Ojay.Forms.Checkbox(input) });

    Ojay('select').forEach(function(input) {

        var applyOjayStylingFlag = true;
        var submitFormOnChange = false;

        var browserName = navigator.appName;
        var browserVer = parseInt(navigator.appVersion);
        if ((browserName == 'Microsoft Internet Explorer') && (browserVer == 4)) {// do not tyle SELECT because of IE rendering bug
            applyOjayStylingFlag = false;
        }

        if (input.hasClass('product-list-sort')) {                                // we want Ojay styling in this control
            applyOjayStylingFlag = true;
            submitFormOnChange = true;
        }

        if (applyOjayStylingFlag) {                                                 // if there is a special instruction not to apply to Ojay we adhere to it
            if (input.hasClass('no-css')) {
                applyOjayStylingFlag = false;
            }
        }

        if (!applyOjayStylingFlag) return;

        var select = new Ojay.Forms.Select(input);

        if (submitFormOnChange) {
            select.on('change', function(select) {
                input.ancestors('form').node.submit();
            });
        }
    });

    var radios = Ojay('input[type=radio]').reduce(function(map, radio) {
        var name = radio.node.name;
        map[name] = map[name] || [];
        map[name].push(radio.node);
        return map;
    }, {});

    for (var name in radios) {
        new Ojay.Forms.RadioButtons(radios[name]);
    }

    /**
    * Tabbed carousels.
    */
    Ojay('.tabbed-carousel').forEach(function(t) {
        var n = [3, 4, 5].filter(function(n) {
            return t.hasClass('carousel-' + n);
        })[0];

        var tc = new TabbedCarousel(t, (typeof n == 'number') ? { columns: n} : {});
    });

    /**
    * Main home page promo area.
    */


    (function() {
        var wrapper = Ojay('#home_promo');
        if (wrapper.length < 1) return;

        wrapper.setStyle({ display: 'block' });

        var promo = new TabbedPromotion(wrapper,
      { position: 'bottom', animateSpeed: 0.5 });

        var panels = [promo.wrapper.children('.tabbed'),
                  wrapper.siblings().at(0)];
        var bottom = panels.reduce(function(min, panel) {
            return Math.min(min, panel.getBottom());
        }, Infinity);
        panels.forEach(function(panel) {
            var region = panel.getRegion();
            if (region.bottom == bottom) return;
            panel.setStyle({ height: (region.getHeight() + bottom - region.bottom) - 1 + 'px' });
        });
    })();


    /**
    * Generic tabbed content areas.
    */
    Ojay('.tabbed-generic, .tabbed-promos').forEach(function(t) {
        var tabs = new Tabbed(t.descendants('.tab'));
    });

    /**
    * Tabbed headers.
    */
    Ojay('.tabbed-header').forEach(function(t) {
        var theader = new Tabbed(t.descendants('.tab'));
        var theight = theader.tabs[0]._wrapper.getHeight();
        theader.tabs.forEach(function(tab, i) {
            tab._wrapper.setStyle({ height: theight + 'px', overflow: 'hidden' });
            if (i > 0)
                tab._wrapper.descendants('.tab-content').setStyle({ overflow: 'auto' });
        });
    });



    /**
    * Small image gallery for the item page. Switches between large images based
    * on which thumbnail link is clicked.
    */
    (function() {
        var galleries = Ojay('.item-photos');
        if (galleries.length < 1) return;

        galleries.forEach(function(gallery) {
            var main = gallery.descendants('.main-image img').at(0);
            var links = gallery.descendants('.thumbnails a.image-link');

            links.filter(function(link) {
                return link.node.href == main.node.src;
            }).at(0).addClass('current');

            links.on('click', function(link, ev) {
                ev.stopDefault();
                if (link.hasClass('current')) return;
                links.removeClass('current');
                link.addClass('current');
                main.animate({ opacity: { to: 0} }, 0.2, {
                    after: function() {
                        main.set({ src: link.node.href });
                    }
                }).animate({ opacity: { to: 1} }, 0.2);
            });
        });
    })();

    (function() {
        Ojay('.custom-carousel-region').forEach(function(region) {
            region.descendants('.carousel-item').forEach(function(item) {
                var sourceHolder = item.descendants('.source-holder').at(0); { if ((sourceHolder == null) || (sourceHolder.length < 1)) { return; } }
                var placeHolder = item.descendants('.place-holder').at(0); { if ((placeHolder == null) || (placeHolder.length < 1)) { return; } }
                var html = sourceHolder.node.innerHTML;
                sourceHolder.node.innerHTML = '';
                placeHolder.node.innerHTML = html;
            });
        });
    })();

});



