var BrowserDetect = {
    init: function () {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
            || this.searchVersion(navigator.appVersion)
            || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i=0;i<data.length;i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
    },
    dataBrowser: [
        {
            string: navigator.userAgent,
            subString: "Chrome",
            identity: "Chrome"
        },
        {   string: navigator.userAgent,
            subString: "OmniWeb",
            versionSearch: "OmniWeb/",
            identity: "OmniWeb"
        },
        {
            string: navigator.vendor,
            subString: "Apple",
            identity: "Safari",
            versionSearch: "Version"
        },
        {
            prop: window.opera,
            identity: "Opera"
        },
        {
            string: navigator.vendor,
            subString: "iCab",
            identity: "iCab"
        },
        {
            string: navigator.vendor,
            subString: "KDE",
            identity: "Konqueror"
        },
        {
            string: navigator.userAgent,
            subString: "Firefox",
            identity: "Firefox"
        },
        {
            string: navigator.vendor,
            subString: "Camino",
            identity: "Camino"
        },
        {       // for newer Netscapes (6+)
            string: navigator.userAgent,
            subString: "Netscape",
            identity: "Netscape"
        },
        {
            string: navigator.userAgent,
            subString: "MSIE",
            identity: "Explorer",
            versionSearch: "MSIE"
        },
        {
            string: navigator.userAgent,
            subString: "Gecko",
            identity: "Mozilla",
            versionSearch: "rv"
        },
        {       // for older Netscapes (4-)
            string: navigator.userAgent,
            subString: "Mozilla",
            identity: "Netscape",
            versionSearch: "Mozilla"
        }
    ],
    dataOS : [
        {
            string: navigator.platform,
            subString: "Win",
            identity: "Windows"
        },
        {
            string: navigator.platform,
            subString: "Mac",
            identity: "Mac"
        },
        {
               string: navigator.userAgent,
               subString: "iPhone",
               identity: "iPhone/iPod"
        },
        {
            string: navigator.platform,
            subString: "Linux",
            identity: "Linux"
        }
    ]

};
BrowserDetect.init();

var os = BrowserDetect.OS.toLowerCase(), 
    browser = BrowserDetect.browser.toLowerCase(), 
    version = BrowserDetect.version;

var ultima = function(){
    return {
        init: function(){
            this.slideshow();
            this.onglets_produit();
            this.categories_hover_animation();
            this.form_submit();
            this.slideshow_produit();
        }
        , convert: function(str) {
            /* 
                conversion markdown des tags pour italic et strong 
                
                utilisé dans les alt du slideshow.

                *foo* = <i>foo</i>

                **foo** = <strong>foo</strong>
            */
            var tempStr = str;
            while(tempStr.indexOf("**") !== -1) {
                var firstPos = tempStr.indexOf("**");
                var nextPos = tempStr.indexOf("**",firstPos + 2);
                if(nextPos !== -1) {
                    var innerTxt = tempStr.substring(firstPos + 2,nextPos);
                    var strongified = '<strong>' + innerTxt + '</strong>';
                    tempStr = tempStr.substring(0,firstPos) + strongified + tempStr.substring(nextPos + 2,tempStr.length);
                //get rid of unclosed '**'
                } else {
                    tempStr = tempStr.replace('**','');
                }
            }
             while(tempStr.indexOf("*") !== -1) {
                var firstPos = tempStr.indexOf("*");
                var nextPos = tempStr.indexOf("*",firstPos + 1);
                if(nextPos !== -1) {
                    var innerTxt = tempStr.substring(firstPos + 1,nextPos);
                    var italicized = '<i>' + innerTxt + '</i>';
                    tempStr = tempStr.substring(0,firstPos) + italicized + tempStr.substring(nextPos + 2,tempStr.length);
                //get rid of unclosed '*'
                } else {
                    tempStr = tempStr.replace('*','');
                }
            }
            return tempStr;
        }
        , slideshow: function(){
            /*
                Le slideshow en dessous du menu principal
            */
            function pagerFactory(idx, slide) {
                // var thumb_src = slide.src.replace(".jpg", "-thumb.jpg");
                return '<li><a href="#">'+(idx+1)+'</a></li>';
            };   

            var slide_obj   = $(".slideshow.active"), 
                bulle       = slide_obj.children(".pager").children(".bulle"),
                imgs        = slide_obj.children(".imgs"),
                cycle_dict  = {
                    fx:      'fade'
                    , timeout:  4000
                    , pager: '.slideshow.active .pager ul'
                    , pagerAnchorBuilder: pagerFactory
                    , speedIn:  1000
                    , speedOut: 500
                    , delay: -100
                    , prev: ".slideshow .prev"
                    , next: ".slideshow .next"
                };

            if ( slide_obj.children(".description").length > 0 ) {
                var description = slide_obj.children(".description");

                cycle_dict["before"] = function(currSlideElement, nextSlideElement, options, forwardFlag) {
                    description.children("p").fadeOut(500);
                };
                cycle_dict["after"] = function(currSlideElement, nextSlideElement, options, forwardFlag) {
                    description.children("p").html(ultima.convert(this.alt)).fadeIn(500);
                };
            }

            imgs.cycle(cycle_dict);    

            /* bulle avec contenu qui slide à l'horizontal */
            /*
                * remplir le div.bulle avec les thumbnails des images dans .imgs
                * lors du survol d'un lien, positionner la bonne image dans la zone visible
                  et faire le slide lorsqu'on survole un autre lien de pagination.
            */
            $.each(imgs.children("img"), function(){
                var thumb_src = this.src.replace(".jpg", "-thumb.jpg");
                bulle.children(".imgs-thumb").children(".infinite").append(
                    "<img src='" + thumb_src + "' />"
                );
            });
            var infinite = slide_obj.children(".pager").children(".bulle").children(".imgs-thumb").children(".infinite");
            $(".slideshow.active .pager ul").hover(
                function(){
                    bulle.animate({opacity:1},200);
                }
                , function(){
                    bulle.animate({opacity:0},200);   
                }
            );
            var last_index = 0;
            $(".slideshow.active .pager ul li a").hover(
                function(){
                    var index   = $(this).parent().index()
                        , move  = 20
                        , left  = -98
                        , img_width = 171
                        , il = 0
                    ;
                    /* faire bouger la bulle de gauche à droite */
                    left += index*move;
                    bulle.animate({"left":left}, 200);

                    /* faire slider les images de gauche à droite */
                    il -= index*img_width;    
                    infinite.animate({"left": il}, 200);
                },
                function(){}
            );
        }
        , slideshow_produit : function(){
            /* 
                slideshow dans la page d'un produit 
            */
            function pagerFactory(idx, slide) {
                var thumb_src = slide.src.replace("-grande.jpg", "-thumb.jpg");
                return '<li><a href="#" title="'+(idx+1)+'"><img src="' + thumb_src + '" /></a></li>';
            }; 

            var slide_obj   = $("#img-slider"), 
                imgs        = slide_obj.children(".imgs").children(".imgs-wrap"),
                cycle_dict  = {
                    fx:      'fade'
                    , timeout:  0
                    , pager: '#img-slider .pager ul'
                    , pagerAnchorBuilder: pagerFactory
                    , speedIn:  500
                    , speedOut: 100
                    , delay: -100
                    , prev: "#img-slider .prev"
                    , next: "#img-slider .next"
                };
            imgs.cycle(cycle_dict);
        }
        , onglets_produit : function(){
            /* 
                sous-menu de la fiche d'un produit 
            */
            var $menu_onglet    = $(".produit .body .sous-menu a"),
                $menu_onglet_li = $(".produit .body .sous-menu li"),
                $onglets        = $(".produit .body .onglets .onglet");

            $menu_onglet.click(function(){
                var $a = $(this),
                    current_cls = $a.attr("class"),
                    current_href = $a.attr("href");

                $menu_onglet_li.removeClass("active");
                $a.parent().addClass("active");

                $onglets.fadeOut(50).load(current_href).fadeIn(100);

                return false;
            })
        }
        , categories_hover_animation : function(){
            /*
                animation du menu des catégories
            */

            var speed = 100;
            
            if (browser != "explorer") {
                $("ul.categories li:not(.active)").hover(
                    function(){
                        $(this).animate({marginTop:"-=10px"}, speed);
                    }
                    , function(){
                        $(this).animate({marginTop:"0"}, speed);
                    }
                );        
            }
            
        }
        , form_submit : function(){
            var $form = $(".content form");

            $("form a.submit").click(function(){
                $form.submit();

                return false;
            });
        }
    }
}();

$(function(){
    $("body").addClass(os + " " + browser + " " + browser + version);
    ultima.init(); 
});
