var ListOrder = {
        serializeList : function(list) {
                var items = list.getElementsByTagName("li")
                var array = new Array()
                for (var i = 0, n = items.length; i < n; i++) {
                // controle perso
                    nomid=items[i].id;
                    //alert (nomid + " | " + nomid.substring(0,6) );
                    if (nomid.substring(0,6)=="module")
                        {
                        var item = items[i]

                        array.push(ListOrder._identifier(item))
                        }
                }
                return array.join('|')
        },

        inspectListOrder : function(id) {
                alert(ListOrder.serializeList(document.getElementById(id)))
        },

        restoreListOrder : function(listID) {
                var list = document.getElementById(listID)
                if (list == null) return

                var cookie = Cookies.get("list-" + listID)
                if (!cookie) return;

                var IDs = cookie.split('|')
                var items = ListOrder._itemsByID(list)

                for (var i = 0, n = IDs.length; i < n; i++) {
                        var itemID = IDs[i]
                        if (itemID in items) {
                                var item = items[itemID]
                                list.removeChild(item)
                                list.insertBefore(item, null)
                        }
                }
        },

        saveListOrder : function(listId) {
                var list = document.getElementById(listID)
                if (list == null) return

                Cookies.set("list-" + listId, ListOrder.serializeList(list), 365)

        },

        _identifier : function(item) {
                var trim = ListOrder.trim
                var identifier

                identifier = trim(item.getAttribute("id"))
                if (identifier != null && identifier.length > 0) return identifier;

                identifier = trim(item.getAttribute("itemID"))
                if (identifier != null && identifier.length > 0) return identifier;

                // FIXME: strip out special chars or make this an MD5 hash or something
                return trim(item.innerHTML)
        },

        _itemsByID : function(list) {
                var elm = new Array()
                var items = list.getElementsByTagName('li')
                for (var i = 0, n = items.length; i < n; i++) {
                        var item = items[i]
                        elm[ListOrder._identifier(item)] = item
                }
                return elm
        },

        trim : function(text) {
                if (text == null) return null
                return text.replace(/^(\s+)?(.*\S)(\s+)?$/, '$2')
        }
}
