function replaceExtChars(text) {

//    var textneu = text.replace(/&/, "&amp;");
//    textneu = textneu.replace(/</, "&lt;");
//    textneu = textneu.replace(/>/, "&gt;");
    //    return textneu;
    return text;
}

(function ($) {
    $.fn.groupReorderList = function (options) {
        // Options par defaut
        var defaults = { name: 'item' , emptyText:'Glisser les lignes ici', showPictures: false ,showTextBoxs: false, initialTextBoxValue: '' ,maxItems:0};

        var options = $.extend(defaults, options);

        this.each(function () {

         var _preventDefault = function (evt) { evt.preventDefault(); };
            $("[name='" + defaults.name + "Item']").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
            $("[name='" + defaults.name + "Cart'] ol li").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);

            $("[name='" + defaults.name + "Catalog']").accordion({autoHeight: false,collapsible: true, active:false});
            $("[name='" + defaults.name + "Catalog'] ul li").draggable({ appendTo: "body", helper: "clone" });
            $("[name='" + defaults.name + "Cart'] ol").droppable(
            {
                activeClass: "ui-state-default",
                hoverClass: "ui-state-hover",
                accept: "." + defaults.name + "Item",
                drop: function (event, ui) 
                {
                    if(defaults.maxItems ==0 || defaults.maxItems>$(this).find(".liItem").length)
                    {
                        $(this).find(".placeholder").remove();
                        var elt=null;
                        
                        var temp = "<li class='liItem'><input type='hidden' name='"+defaults.name+".ReorderId' value='" + ui.draggable.find('.value').text() + "'/><input type='hidden' name='"+defaults.name+".ReorderText' value='" + ui.draggable.find('.text').text() + "'/><input type='hidden' name='"+defaults.name+".ReorderUrl' value='" + ui.draggable.find('img').attr('src') + "'/>";
                        //temp += "<input type='hidden' name='"+defaults.name+".ReorderDesc' value='_" + replaceExtChars(ui.draggable.find('.desc').text()) + "'/>";

                        if(defaults.showPictures)
                        {
                            temp += "<img title=\""+ui.draggable.find('.text').text()+"\" src='"+ui.draggable.find('img').attr('src')+"' />";
                        }

                        if(defaults.showTextBoxs)
                        {
                            temp +="<input type='text' class='reorderTextBox' name='"+defaults.name+".ReorderQt' value='"+defaults.initialTextBoxValue+"'/> ";
                        }

                        temp += "<span>" + ui.draggable.find('.text').text() ;
                        //temp += " - " +  ui.draggable.find('.desc').html() ;
                        temp += "</span></li>";
                        
                        var elt = $(temp);

                        elt.appendTo(this);
                        elt.prepend('<span class="delete"></span>');
                        elt.find(".delete").click(function () 
                        {
                            setTimeout(function () 
                            {
                                elt.remove();
                                if ($("[name='" + defaults.name + "Cart'] ol li").size() == 0) 
                                {
                                    $('<li class="placeholder">'+defaults.emptyText+'</li>').appendTo($("[name='" + defaults.name + "Cart'] ol"));
                                }
                            }, 1);
                        });
                    }
                      else
                      {
                        alert('Vous ne pouvez ajouter que '+defaults.maxItems + ' ligne(s) maximum');
                      }
                }
            })
            .sortable({ items: "li:not(.placeholder)", sort: function () { $(this).removeClass("ui-state-default"); } });

            $("[name='" + defaults.name + "Catalog'] ul li").dblclick(function()
            {
             if(defaults.maxItems ==0 || defaults.maxItems>$("[name='" + defaults.name + "Cart'] ol").find(".liItem").length)
             {
                $("[name='" + defaults.name + "Cart'] ol").find(".placeholder").remove();
                                    
                var temp = "<li class='liItem'><input type='hidden' name='"+defaults.name+".ReorderId' value='" + $(this).find('.value').text() + "'/><input type='hidden' name='"+defaults.name+".ReorderText' value='" + $(this).find('.text').text() + "'/><input type='hidden' name='"+defaults.name+".ReorderUrl' value='" + $(this).find('img').attr('src') + "'/>";
                //temp+="<input type='hidden' name='"+defaults.name+".ReorderDesc' value='_" + replaceExtChars($(this).find('.desc').text()) + "'/>";

                if(defaults.showPictures)
                {
                    temp +="<img title=\""+$(this).find('.text').text() +"\" src='"+$(this).find('img').attr('src')+"' />";
                }

                if(defaults.showTextBoxs)
                {
                    temp +="<input type='text' class='reorderTextBox' name='"+defaults.name+".ReorderQt' value='"+defaults.initialTextBoxValue+"'/> ";
                }

                temp += "<span>" + $(this).find('.text').text() ;
                //temp+= " - " + $(this).find('.desc').text() ;
                temp+= "</span></li>";
                    
                   
                     
                var elt = $(temp);
                elt.appendTo($("[name='" + defaults.name + "Cart'] ol"));
                elt.prepend('<span class="delete"></span>');
                elt.find(".delete").click(function () {
                    setTimeout(function () {
                        elt.remove();
                        if ($("[name='" + defaults.name + "Cart'] ol li").size() == 0) {
                            $('<li class="placeholder">'+defaults.emptyText+'</li>').appendTo($("[name='" + defaults.name + "Cart'] ol"));
                        }
                    }, 1);
            });
              }
              else
              {
                alert('Vous ne pouvez ajouter que '+defaults.maxItems + ' ligne(s) maximum');
              }
            });

             
            $("[name='" + defaults.name + "Cart'] ol li").find('.delete').click(function () 
            { 
                var elt =$(this);
                    setTimeout(function () { 
                        elt.parent().remove();
                        if ($("[name='" + defaults.name + "Cart'] ol li").size() == 0) {$('<li class="placeholder">'+defaults.emptyText+'</li>').appendTo($("[name='" + defaults.name + "Cart'] ol"));}}, 1);
            });

            $("[name='"+defaults.name+"Search']").keyup(function (event) {
                var search_text = $("[name='"+defaults.name+"Search']").val();
                var rg = new RegExp(search_text, 'i');
                $("[name='" + defaults.name + "Catalog'] ul li .text").each(function () {
                    if ($.trim($(this).html()).search(rg) == -1) {
                        $(this).parent().css('display', 'none');
                        $(this).css('display', 'none');
                        $(this).next().css('display', 'none');
                        $(this).next().next().css('display', 'none');
                    }
                    else {
                        $(this).parent().css('display', '');
                        $(this).css('display', '');
                        $(this).next().css('display', '');
                        $(this).next().next().css('display', '');
                    }
                });
            });


            $("[name='"+defaults.name+"SearchClear'] .delete").click(function () {
            $("[name='"+defaults.name+"Search']").val('');

            $("[name='" + defaults.name + "Catalog'] ul li .text").each(function () {
                $(this).parent().css('display', '');
                $(this).css('display', '');
                $(this).next().css('display', '');
                $(this).next().next().css('display', '');
            });
        }); 
        });

        // On continue le chainage JQuery
        return this;
    };
})(jQuery);


