// Declare Deck Names
// New Decks
var NEW_DECK         = "NEW_DECK";
var FOURNIER_DECK    = "FOURNIER_DECK";

// Stacked Decks
var ARONSON_DECK     = "ARONSON_DECK";
var EIGHT_KINGS_DECK = "EIGHT_KINGS_DECK";
var JOYAL_DECK       = "JOYAL_DECK";
var NIKOLA_DECK      = "NIKOLA_DECK";
var OSTERLIND_DECK   = "OSTERLIND_DECK";
var RED_BLACK_DECK   = "RED_BLACK_DECK";
var REYMOND_DECK     = "REYMOND_DECK";
var SI_STEBBINS_DECK = "SI_STEBBINS_DECK";
var STAY_STACK_DECK  = "STAY_STACK_DECK";
var TAMARIZ_DECK     = "TAMARIZ_DECK";

// Custom Deck
var CUSTOM_DECK      = "CUSTOM_DECK";

// Declare Deck Orders
var FOURNIER_DECK_ORDER    = "as2s3s4s5s6s7s8s9stsjsqsksah2h3h4h5h6h7h8h9hthjhqhkhkdqdjdtd9d8d7d6d5d4d3d2dadkcqcjctc9c8c7c6c5c4c3c2cac";
var ARONSON_DECK_ORDER     = "jskc5c2h9sas3h6c8dacts5h2dkd7d8c3sad7s5sqdah8s3d7hqh5d7c4hkh4dtdjcjhtcjd4sth6h3c2s9hks6s4c8h9cqs6dqc2c9d";
var EIGHT_KINGS_DECK_ORDER = "8ckh3std2c7h9s5dqc4has6djc8hks3dtc2h7s9d5cqh4sad6cjh8skd3cth2s7d9c5hqs4dac6hjs8dkc3hts2d7c9h5sqd4cah6sjd";
var JOYAL_DECK_ORDER       = "jh6c6h4ctdad7c4h9c5dqhaskc7hts4sjs9hkd5s7s2cqcahth6s9s7dqd5hkh4d3c3htc9dqs3s3d2h8c2sjc2d8h8sksacjd5c8d6d";
var NIKOLA_DECK_ORDER      = "6d5ckcjh5s9d9sqh3ctcksah4djdkdkh2dqc9cth8d2cac7h7c4s7s9h8s6s6c2hasjs4c5htsadjc4h2s7dqs3h3s8ctd6h5d3dqd8h";
var OSTERLIND_DECK_ORDER   = "4htctdjsth9s6c2c7h3h8s4cjdksas3s7d5hqcac5sjhjcqd2d8c6skh2h6d3dts8d7c4s9d9c8h5dad6hah4dqsqhkc3c9h7s2s5ckd";
var RED_BLACK_DECK_ORDER   = "RED_BLACK";
var REYMOND_DECK_ORDER     = "REYMOND";
var SI_STEBBINS_DECK_ORDER = "ac4h7stdkc3h6s9dqc2h5s8djcah4s7dtckh3s6d9cqh2s5d8cjhas4d7cthks3d6c9hqs2d5c8hjsad4c7htskd3c6h9sqd2c5h8sjd";
var STAY_STACK_DECK_ORDER  = "4h4ctdjstcjh5s3d5h3c9dqs9cqh6s2d6h2c8dks8ckh7sad7hacas7dah7ckd8skc8h2s6d2h6cqd9sqc9h3s5d3h5cjdtsjcth4s4d";
var TAMARIZ_DECK_ORDER     = "4c2h7d3c4h6das5h9s2sqh3dqc8h6s5s9hkc2djh3s8s6htc5dkd2c3h8d5cksjd8ctskhjc7sthad4s7h4dac9cjsqd7cqstd6cah9d";

function setFaroDeck() {
    //alert(document.getElementById('deckChoice').value);
    switch (document.getElementById('deckChoice').value) {
    case ARONSON_DECK:
        importDeck(ARONSON_DECK_ORDER);
        break;
    case CUSTOM_DECK:
        customDeck();
        break;
    case JOYAL_DECK:
        importDeck(JOYAL_DECK_ORDER);
        break;
    case NIKOLA_DECK:
        importDeck(NIKOLA_DECK_ORDER);
        break;
    case SI_STEBBINS_DECK:
        importDeck(SI_STEBBINS_DECK_ORDER);
        break;
    case NEW_DECK:
        newDeck();
        break;
    case FOURNIER_DECK:
        importDeck(FOURNIER_DECK_ORDER);
        break;
    case EIGHT_KINGS_DECK:
        importDeck(EIGHT_KINGS_DECK_ORDER);
        break;
    case TAMARIZ_DECK:
        importDeck(TAMARIZ_DECK_ORDER);
        break;
    case OSTERLIND_DECK:
        importDeck(OSTERLIND_DECK_ORDER);
        break;
    case STAY_STACK_DECK:
        importDeck(STAY_STACK_DECK_ORDER);
        break;
    }
    displayFaroDeck();
}

function customDeck() {
    var oldDeckOrder = exportDeck();
    var deckOrder = prompt("Enter a deck order:","");
    if (!importDeck(deckOrder)) {
        importDeck(oldDeckOrder);
        alert("Error loading custom deck!");
    }
}

function importDeck(deckLayoutString){
    deckLayoutString = deckLayoutString.toLowerCase();
    var loadedDeck = new Array();
    success = true;
    if (deckLayoutString.length == 104) {
        for (i=0;i<deckLayoutString.length;i++) {
            v = deckLayoutString.charAt(i);
            if (v=='a' || v=='2' || v=='3' || v=='4' || v=='5' || v=='6' || v=='7' || v=='8' || v=='9' || v=='t' || v=='j' || v=='q' || v=='k') {
                switch (v) {
                case 'a':
                    v=1;
                    break;
                case 't':
                    v=10;
                    break;
                case 'j':
                    v=11;
                    break;
                case 'q':
                    v=12;
                    break;
                case 'k':
                    v=13;
                    break;
                }
                v = v - 1;
            } else {
                alert("Invalid Deck Layout at Character " + (i+1));
                success = false;
                break;
            }
            i++;
            s = deckLayoutString.charAt(i);
            if (s=='c' || s=='h' || s=='s' || s=='d') {
                switch (s) {
                case 'c':
                    s=CLUBS;
                    break;
                case 'h':
                    s=HEARTS;
                    break;
                case 'd':
                    s=DIAMONDS;
                    break;
                case 's':
                    s=SPADES;
                    break;
                }
            } else {
                alert("Invalid Deck Layout at Character " + (i+1));
                success = false;
                break;
            }
            loadedDeck[(i-1)/2] = (v*1)|(s*1);
        }
        if (success) {
            deck = loadedDeck;
        }
    } else {
        alert("Deck Layout String Must Be 104 Characters!  Yours is " + deckLayoutString.length);
        success = false;
    }
    return success;
}

function exportDeck(){
    var loadedDeck = "";
    for (i=0;i<deck.length;i++) {
        v = ((deck[i]*1) & (VALUE_MASK*1)) + 1;
        switch (v) {
        case 1:
            v="A";
            break;
        case 10:
            v="T";
            break;
        case 11:
            v="J";
            break;
        case 12:
            v="Q";
            break;
        case 13:
            v="K";
            break;
        }
        s = (deck[i]*1) & (SUIT_MASK*1);
        switch (s) {
        case CLUBS:
            s='C';
            break;
        case HEARTS:
            s='H';
            break;
        case DIAMONDS:
            s='D';
            break;
        case SPADES:
            s='S';
            break;
        }
        loadedDeck = loadedDeck + v + s;
    }
    return loadedDeck;
}


