/**
 * Initialize namespaces.
 */
if (typeof Deckbox == "undefined") Deckbox = {};
Deckbox.utils = Deckbox.utils || {};

Deckbox.utils.DeckParser = {
    game: 'mtg',
    
    initialize: function(game, postElement, postClass) {
        this.game = game;

        var posts = document.getElementsByTagName(postElement); 
        for (var i = 0; i < posts.length; i++ ) {
            if (posts[i].className && (posts[i].className.indexOf(postClass) > -1)) this.parsePost(posts[i]);
        }   
    },
    
    
    initializeLF: function() {
        this.initialize('mtg', 'div', 'post_body');
    },

   
    parsePost: function(element) {
        var self = this;
        this.parseTag(element, 'deck', function(text) { return self.parseDeck(text); });
        this.parseTag(element, 'card', function(text) { return self.linkify(text); });
    },
    
    parseTag: function(element, tag, callback) {
        var html = element.innerHTML, begin, end, result = "";
        
        // Work from the end so that a hanging beginning tag screws up less.
        while(-1 != (begin = html.toLowerCase().lastIndexOf('[' + tag + ']'))) {
            if (-1 == (end = html.toLowerCase().indexOf('[/' + tag + ']', begin))) break;
            
            /* We add 2 / 3 to tag length to account for '[', and '/]'. */
            var innerText = html.substring(begin + tag.length + 2, end), replacement = callback(innerText);
            result = replacement + html.substring(end + tag.length + 3) + result;

            html = html.substring(0, begin);
        }
    
        element.innerHTML = html + result;
    },
    
    parseDeck: function(html) {
        var lines = html.split(/<[bB][rR] ?\/?>/), result = '';
        for (var i = 0; i < lines.length; i++) {
            var line = lines[i];
            line = line.replace(/^\s*/, "").replace(/(&nbsp;)*/, "").replace(/\s*$/, "");

            if (line.toLowerCase().indexOf("sideboard") == 0 || line.toLowerCase().indexOf("maindeck") == 0 || line.match( /^\s*(\/\/.*)?\s*$/ )) continue;
            
            var count = 1;
            
            // ignore extra info for lists from apprentice
            line = line.replace(/^SB: /, "").replace(/\[.*?\]/, "" );

            if (/^\d+x?\s+/.test(line)) {
                var name = line.replace(/^\d+\s*(x\s+)?/, "");
                count = parseInt(line.substr(0, line.length - name.length));
                line = name;
            }
            
            lines[i] = count + ' ' + this.linkify(line);
        }
        
        return lines.join('<br/>');
    },
    
    linkify: function(name) {
        return '<a href="http://bdd.magic-ardennes.com/fiche_nom.php?nom=' + name + '" target="_blank">' + name + '</a>';
    }
}

