﻿// Variables output by code
var MAWSc_TablesShown = 1;     // Tables of words to show
// var MAWSc_HiddenJsonId;     // Id of the hidden control to pass JSON back and forth

window.addEvent('domready', function() {

    // Debug - ensure we get the variables we need from the server
    Fn_EnsureDefined(typeof MAWSc_HiddenJsonId, "No MAWSc_HiddenJsonId!");

    // Add preview updates
    $$('.updatePreview').addEvent('keyup', function(event) {
        MAWSc_UpdatePreview();
    });
    $('divRegenerate').addEvent('click', function(event) {
        MAWSc_UpdatePreview();
    });


    MAWSc_SetupHelpExpanders();

    // Load data passed in as json
    MAWSc_LoadData();

    // Show the correct number of words
    MAWSc_ShowWordTables(true);

    // Get our first preview
    MAWSc_UpdatePreview();

    // Hide loading box
    $('divLoadingBox').setStyle('display', 'none');

});

function MAWSc_SetupHelpExpanders() {

    // Help expanders
    var helpExpanders = $$('.helpExpander');
    helpExpanders.each(function(helpExpander, i) {
        if (helpExpander.hasChild) {

            var children = helpExpander.getChildren();

            var helpExpanderLink = children[0];
            var helpExpanderContent = children[1];

            // Hide our explaination
            helpExpanderContent.setStyle('display', 'none');

            // Add our close link
            var closeLink = new Element('div', {
                'class': 'fakeLink',
                'html': 'Ok'
            });

            new Element('br').inject(helpExpanderContent);
            new Element('br').inject(helpExpanderContent);
            closeLink.inject(helpExpanderContent);

            // Wire events
            helpExpanderLink.addEvent('click', function(event) {
                helpExpanderContent.setStyle('display', '');
            });

            closeLink.addEvent('click', function(event) {
                helpExpanderContent.setStyle('display', 'none');
            });
        }
    });
}

// Show or hide a table of words
function MAWSc_ShowWordTable(tableNum, doShow) {
    if (doShow) {
        $('wordTable' + tableNum).setStyle('display', 'none');
    }
    else {
        $('wordTable' + tableNum).setStyle('display', '');
    }
}

function MAWSc_ShowWordTables(firstTime) {

    MAWSc_ShowWordTable(2, MAWSc_TablesShown < 2);
    MAWSc_ShowWordTable(3, MAWSc_TablesShown < 3);
    MAWSc_ShowWordTable(4, MAWSc_TablesShown < 4);
    MAWSc_ShowWordTable(5, MAWSc_TablesShown < 5);

    if (MAWSc_TablesShown >= 5) {
        $('divAddMoreWords').setStyle('display', 'none');
        $('divWordLimit').setStyle('display', '');
    }
    else {
        $('divAddMoreWords').setStyle('display', '');
        $('divWordLimit').setStyle('display', 'none');
    }

    if (firstTime) {

        $('divAddMoreWords').addEvent('click', function(event) {
            MAWSc_TablesShown++;
            MAWSc_ShowWordTables(false);
        });

    }
}

// Timer to call our ajax so that we buffer changes together
var MAWSc_UpdateTimerDelay = 500;
var MAWSc_UpdateTimer = -1;
var MAWSc_Data;

// Queue an update (delay so there isn't too many requests)
function MAWSc_UpdatePreview() {

    $('divPreviewUpdating').setStyle('display', '');

    // Save our data as json
    MAWSc_Data = new Object();
    MAWSc_Data["json"] = MAWSc_GetJson();

    if (-1 != MAWSc_UpdateTimer) { clearTimeout(MAWSc_UpdateTimer); }
    MAWSc_UpdateTimer = setTimeout('MAWSc_UpdatePreview_Go();', MAWSc_UpdateTimerDelay);
}

// Ok, send out our update request
function MAWSc_UpdatePreview_Go() {

    var ajax = new Request({

        url: "/PageServ/Serv_WordScramble.aspx",
        method: 'post',

        data: MAWSc_Data,

        onSuccess: function(txt) {
            $('divPreviewUpdating').setStyle('display', 'none');
            $('divPreviewContent').set('html', txt);
        },

        onFailure: function() {
            $('divPreviewContent').set('text', 'Sorry - the preview failed. Please try again in a minute.');
        }


    }).send();
}

// Get the JSON representation of all of the data for this list
function MAWSc_GetJson() {
    var dataObj = new Object();

    dataObj["HeaderWords"] = Fn_CleanPreJson($('textHeaderWords').value);
    dataObj["HeaderClues"] = Fn_CleanPreJson($('textHeaderClues').value);
    dataObj["Title"] = Fn_CleanPreJson($('textTitle').value);
    dataObj["Desc"] = Fn_CleanPreJson($('textDesc').value);

    // Get all of our words and clues
    var words = new Array();
    var clues = new Array();
    for (var i = 0; i < 50; i++) {
        words[i] = Fn_CleanPreJson($('textWord' + i).value);
        clues[i] = Fn_CleanPreJson($('textClue' + i).value);
    }
    dataObj["Words"] = words;
    dataObj["Clues"] = clues;

    // Convert object to Json
    var json = Fn_ToJson(dataObj);

    // Save to our hidden control
    $(MAWSc_HiddenJsonId).value = json;

    //alert($(MAWSc_HiddenJsonId).value);

    return json;
}

function MAWSc_LoadData() {

    var json = $(MAWSc_HiddenJsonId).value;

    //alert(json);    

    if (json == "" || json == "X") { return; }

    var dataObj = eval("(" + json + ")");  //JSON.parse(json);

    $('textHeaderWords').value = Fn_XNull(dataObj["HeaderWords"]);
    $('textHeaderClues').value = Fn_XNull(dataObj["HeaderClues"]);
    $('textTitle').value = Fn_XNull(dataObj["Title"]);
    $('textDesc').value = Fn_XNull(dataObj["Desc"]);

    //alert(Fn_XNull(dataObj["Words"][0]));

    var lastNonEmpty = 0;
    for (var i = 0; i < 50; i++) {

        var word = Fn_XNull(dataObj["Words"][i]);
        var clue = Fn_XNull(dataObj["Clues"][i]);

        if (Fn_IsNotEmptyString(word)) { lastNonEmpty = i + 1; }
        if (Fn_IsNotEmptyString(clue)) { lastNonEmpty = i + 1; }

        $('textWord' + i).value = word;
        $('textClue' + i).value = clue;
    }

    // How many tables should we show?
    MAWSc_TablesShown = lastNonEmpty / 10 + 1;

    //alert(lastNonEmpty);
}

