window.att_debug = 1;
window.clearTemplate = "home";

/* Basic page functions */
function clear(homeTemplate) {
    $("#pagestack").empty();
    pushPage(homeTemplate ? homeTemplate : window.clearTemplate, {});
    $("#backbutton").fadeOut(500);
    $("#startoverbutton").fadeOut(500);
}

function pushPage(templateName, pageInfo) {
    var page = createInstanceOfTemplate(templateName);
    $("#pagestack > div:last").css('display', 'none');
    $("#pagestack").append(page);
    $(page).hide();
    $(page).fadeIn(500);
    setupPage(page, pageInfo);
    if ($("#pagestack > div").length == 2) {
        $("#backbutton").fadeIn(500);
        $("#startoverbutton").fadeIn(500);
    }
}

function swapPage(templateName, pageInfo) {
    var newpage = createInstanceOfTemplate(templateName);
    var oldpage = $("#pagestack > div:last");
    oldpage.attr("fadingout", "1");
    oldpage.fadeOut(100, function() {
        oldpage.detach();
    });
    $("#pagestack").append(newpage);
    setupPage(newpage, pageInfo);
}

function popPage() {
    var page = $("#pagestack > div:last");
    page.attr("fadingout", "1");
    page.fadeOut(500, function() {
        page.detach();
    });
    $("#pagestack > div[fadingout!='1']:last").css('display', 'block');
    if ($("#pagestack > div").length == 2) {
        $("#backbutton").fadeOut(500);
        $("#startoverbutton").fadeOut(500);
    }
}

function block(cancelFunc) {
    window.blockCancelFunc = function() {
        if (cancelFunc) cancelFunc();
        blockClear();
    }
    $("#blocker").css("display", "block");
    scrollTo(0,0);
}

function blockClear() {
    $("#blocker").css("display", "none");
}

function apiMethod(path, params, completionFunc, cancelFunc) {
    var wrappedCompFunc = function (data, textStatus, jqXHR) {
        blockClear();
        if (window.att_debug) console.log(data);
        if (completionFunc) completionFunc(data, textStatus, jqXHR);
    }
    var xhr = $.post(path, params, wrappedCompFunc);
    var wrappedCancelFunc = function() {
        blockClear();
        if (window.att_debug) console.log(xhr);
        if (cancelFunc) cancelFunc(xhr);
        else completionFunc(false, textStatus, jqXHR);
    }
    if (window.att_debug) {
        console.log("Posting to " + path);
        console.log(params);
    }
    xhr.error(wrappedCancelFunc);
    block(cancelFunc);
    return xhr;
}

function dialog (title, message, clearFunc, timeout) {
    window.dialogClearFunc = function() {
        if (clearFunc) clearFunc();
        dialogClear();
    };
    $("#dialog_title").text(title);
    $("#dialog_text").text(message);
    $("#dialog").css("display", "block");
    $("#dialog").fadeIn(500);
    scrollTo(0,0);
    if (timeout) {
        setTimeout(window.dialogClearFunc, timeout);
        $("#dialog button").css('display', 'inline');
//        $("#dialog button").css('display', 'none');
    }
    else {
        $("#dialog button").css('display', 'inline');
    }
}

function dialogClear() {
    var dialog = $("#dialog");
    dialog.fadeOut(500, function() {
        dialog.css("display", "none");
    });
}

/* Page support functions */
function setupPage(page, pageInfo) {
    $('*', page).trigger("onshow", [page, pageInfo]);
    if (!page.showfunc) page.showfunc = page.get()[0].showfunc;
    if (page.showfunc) {
        page.showfunc(pageInfo, page);
        page.get()[0].showfunc = page.showfunc;
    }
    $('input:first', page).focus();
//    $("button", page).bind("touchmove", cancelDefault);
//    $("button", page).bind("touchend", simClick);
}

function createInstanceOfTemplate(templateName) {
    window.lastCreatedPage = $("#templates #template_" + templateName).clone();
    return window.lastCreatedPage;
}

/* Control interaction */
function backButtonPressed() {
    popPage();
}
function startOverButtonPressed() {
    clear();
}

function loadMemberList(loop) {
    $.getJSON("api/get_membernames.php", null, function (data, textStatus, jqXHR) {
        if (data.members) {
            window.membernames = data.members;
        }
        else {
            if (data.error == 'Invalid kiosk session') {
                clear('kiosk_init');
                return;
            }
        }
        if (loop) setTimeout("loadMemberList(true)", 30000);
    });
}

/* Startup actions */
$(document).ready(function() {
    //Prevent default touch scrolling on certain elements    
    window.cancelDefault = function(event) {
        event.preventDefault();
    };
    window.simClick = function (event) {
        $(this).click();
    }
    window.eventFocus = function (event) {
        $(this).focus();
    }
    $("button").bind("touchmove", cancelDefault);
    $("button").bind("touchstart", simClick);

    //Clear the template stack
    window.clear("kiosk_init");

    //Grab the basic enums
    $.getJSON("api/get_enums.php", null, function (data, textStatus, jqXHR) {
        //Data contains bunch of enums from the database
        window.enums = data;
    });
    
    blockClear();
    dialogClear();
    
});

/* Member library */
function membersMatching(words) {
    var matches = [];
    var memberDoesMatch = function (member, matcher) {
        if (member.first_name && member.first_name.match(matcher)) return true;
            else if (member.last_name && member.last_name.match(matcher)) return true;
            else if (member.phone_last4 && member.phone_last4.match(matcher)) return true;
//                  else if (member.email_user && member.email_user.match(matcher)) return true;
        return false;
    }
    if (words && words.length) {
        for (var i = 0; i < words.length; i++) {
            words[i] = new RegExp("\\b" + words[i], "gi");
        }
        for (var i = 0; i < window.membernames.length; i++) {
            var member = window.membernames[i];
            var nummatches = 0;
            for (var j = 0; j < words.length; j++) {
                if (memberDoesMatch(member, words[j])) nummatches++;
            }
            if (nummatches == words.length) matches.push(member);
            if (matches.length >= 10) break;
        }
    }
    return matches;
}
