(function ($) {

    jQuery.extend(jQuery.fn,
            {
                changeQuantityInput: function (options) {
                    /*  Plug-in jQuery "changeQuantityInput"
										Permet d'ajouter un un + et un - à coté d'un champ input
										
										Exemple :
										$("#gshpBasketQuantityInput").changeQuantityInput();
																
										Pamarètres possibles :
										inputSelectType : En cliquant dans l'input, séléctionner le texte ou non                                        (Boolean)
										bgImage : Chemin de l'image du + et -                                                                           					(String)
										Constitution de l'image :   - Partie haut/gauche = + à l'état OUT
										- Partie bas/gauche = - à l'état OUT
										Si rollover :   - Partie haut/droite = + à l'état OVER
										- Partie bas/droite = - à l'état OVER

										bgImageWidth : Largeur de l'image                                                                               				(Integer)
										bgImageHeight : Hauteur de l'image                                                                             				(Integer)
										hasRollover : Rollover ou non. Si oui, l'aperçu à l'état over doit être à droite de l'état out.         (Boolean)
										verticalPos : Décalage le l'image par rapport au bas et haut de l'input                                         	(Integer)
										horizontalPos : Décalage le l'image par rapport à la gauche de l'input                                          	(Integer)
										cursorBt : Curseur utilisé                                                                                      						(String)
										addBtText : Texte à faire apparaitre dans la balise title, bouton +                                             	(String)
										removeBtText : Texte à faire apparaitre dans la balise title, bouton -                                          	(String)
										nbArticle : lot																										(Integer)
										*/

                    // Paramètres par défaut
                    var defaults =
                    {
                        'focusText': false,
                        'bgImage': "quantityInput.gif",
                        'bgImageWidth': 28,
                        'bgImageHeight': 14,
                        'hasRollover': false,
                        'verticalPos': 0,
                        'horizontalPos': -20,
                        'cursorBt': "pointer",
                        'addBtText': "Ajouter un article",
                        'removeBtText': "Supprimer un article",
                        'nbArticle': 1
                    };

                    // Fusion de defaults et options
                    var params = $.extend(defaults, options);
                    var cBgImageWidth = (params.hasRollover ? parseInt(params.bgImageWidth) / 2 : parseInt(params.bgImageWidth));
                    var cBgImageHeight = (params.hasRollover ? parseInt(params.bgImageHeight) / 2 : parseInt(params.bgImageHeight));
                    $(this).val(params.nbArticle);

                    return this.each(function () {
                        var cInput = this;

                        var moreLink = $("<a />").attr("Title", params.addBtText).css({
                            "background-image": "url('" + params.bgImage + "')",
                            "background-position": "0 0",
                            "position": "absolute",
                            "top": params.verticalPos + "px",
                            "right": params.horizontalPos + "px",
                            "float": "left",
                            "width": cBgImageWidth + "px",
                            "height": cBgImageHeight + "px",
                            "cursor": params.cursorBt
                        }).mouseover(function () {
                            if (params.hasRollover) $(this).css("background-position", "100% 0");
                        }).mouseout(function () {
                            if (params.hasRollover) $(this).css("background-position", "0 0");
                        }).click(function () {
                            cVal = parseInt($(cInput).val()) + params.nbArticle;
                            $(cInput).val(cVal);
                        }).append(function () {
                            return $("<span />").text(params.addBtText).hide();
                        });

                        var lessLink = $("<a />").attr("Title", params.removeBtText).css({
                            "background-image": "url('" + params.bgImage + "')",
                            "background-position": "0 100%",
                            "position": "absolute",
                            "bottom": params.verticalPos,
                            "right": params.horizontalPos + "px",
                            "float": "left",
                            "width": cBgImageWidth + "px",
                            "height": cBgImageHeight + "px",
                            "cursor": params.cursorBt
                        }).mouseover(function () {
                            if (params.hasRollover) $(this).css("background-position", "100% 100%");
                        }).mouseout(function () {
                            if (params.hasRollover) $(this).css("background-position", "0 100%");
                        }).click(function () {
                            if (parseInt($(cInput).val()) > params.nbArticle) {
                                cVal = parseInt($(cInput).val()) - params.nbArticle;
                                $(cInput).val(cVal);
                            }
                        }).append(function () {
                            return $("<span />").text(params.removeBtText).hide();
                        });

                        var newBlock = $("<div />").css({
                            "position": "relative",
                            "float": "left"
                        });

                        $(this).wrapAll(newBlock).click(function () {
                            if (params.focusText) $(this).select();
                        });

                        $(moreLink).insertAfter(this);
                        $(lessLink).insertAfter(this);


                    });
                },
                lightTitle: function (options) {

                    /*  Plug-in jQuery "lightTitle"
										Permet de faire apparaitre l'attribut TITLE (ou le contenu du span enfant) d'un lien sous forme d'une info bulle.
										
										Pamarètres possibles :
										spanTitle : Utilise le texte du lien en tant que lightTitle (Boolean)                                               (String)

										*/

                    // Paramètres par défaut
                    var defaults =
                    {
                        'spanTitle': false
                    };

                    // Fusion de defaults et options
                    var params = $.extend(defaults, options);

                    return this.each(function () {
                        $(this); // A suivre ...
                    });
                },
                busSrcReplace: function (options) {

                    /*  Plug-in jQuery "busImgReplace"
										Permet de remplacer une image par une autre
											
										Exemple : $(".imageCliquable").busSrcReplace();
											
										Utilisation : Si l'image cible n'a pas de zoom, pas d'obligation. Par défaut l'image cliquable ira se loger à la place de  l'image ayant l'id "productMainPicture"
										Si l'image cible a un zoom, l'image cliquable doit avoir un lien autour avec la classe "busSrcReplace" et le lien contenant l'adresse de l'image la plus grande.
											
										Pamarètres possibles :
										targetId = Permet de changer l'id cible																		(String)
										event = Choix de l'activation (click, mouseover, ....). Voir les évenements Jquery					(String)
										hasOpacity = Transparence de l'image cliquable sélectionnée 											(Boolean)
										lvlOpacity = Niveau de transparence 																		(Double)
										speed = Vitesse de mise en transparence (high ou slow)													(String)
										*/

                    // Paramètres par défaut
                    var defaults =
										{
										    'targetId': "productMainPicture",
										    'event': "click",
										    'hasOpacity': true,
										    'lvlOpacity': 0.7,
										    'speed': 'high'
										};

                    // Fusion de defaults et options
                    var params = $.extend(defaults, options);

                    $(".busSrcReplace").click(function () { return false });

                    if (params.hasOpacity == true) {
                        this.mouseover(function () {
                            $(this).fadeTo(params.speed, params.lvlOpacity);
                        });
                        this.mouseout(function () {
                            if ($(this).hasClass("busSrcReplace_selected")) { } else { $(this).fadeTo(params.speed, 1); }
                        });
                    }
                    return this.bind(params.event, function () {

                        $("img.busSrcReplace_selected").removeClass("busSrcReplace_selected").fadeTo(params.speed, 1);
                        $(this).addClass("busSrcReplace_selected");
                        if (params.hasOpacity == true) {
                            $(this).fadeTo(params.speed, params.lvlOpacity);
                        }

                        var cSrc = String($(this).attr("src")), tSrc = String($("#" + params.targetId).attr("src"));
                        var cSrcArray = [], tcSrcArray = [];
                        var srcId = "", targetWidth = "", targetHeight = "";

                        if (cSrc.indexOf("/t_") > -1) {
                            cSrcArray = cSrc.split("/");
                            srcId = cSrcArray[2];
                        } else if (cSrc.indexOf("imageProvider.") > -1) {
                            cSrcArray = cSrc.split("=");
                            srcId = cSrcArray[1].split("&")[0];
                        } else {
                            $("#" + params.targetId).attr("src", cSrc);
                        }

                        if (srcId != "") {

                            if (tSrc.indexOf("/t_") > -1) {
                                tcSrcArray = tSrc.split("/");
                                targetWidth = tcSrcArray[3].split("_")[1];
                                targetHeight = tcSrcArray[3].split("_")[2].split(".")[0];
                            } else if (tSrc.indexOf("imageProvider.") > -1) {
                                tcSrcArray = tSrc.split("=");
                                targetWidth = tcSrcArray[2].split("&")[0];
                                targetHeight = tcSrcArray[3];
                            }

                            if (targetWidth != "" && targetHeight != "") {
                                newImgPart1 = "./imageProvider.aspx?private_image=" + srcId;
                                newImg = $("<img />").attr("src", newImgPart1 + "&ew=" + targetWidth + "&eh=" + targetHeight);
                                $(newImg).insertBefore($("#" + params.targetId)).hide();
                                $("#" + params.targetId).remove();
                                $(newImg).fadeIn("slow").attr("id", "productMainPicture");

                                if ($(".busSrcReplaceZoom").length > 0) {
                                    $(".busSrcReplaceZoom").attr("href", $(this).parent().attr("href"));
                                }
                            }
                        }

                    });
                }
            });
})(jQuery);

