﻿var currentPage = "page_Home";
var rightPageId = "#ctl00_rightContentPlaceHolder_rightPage";
var member = false;
var doValidationOnSubmit = true;
var childNameRequired = false;

// this is a going to hold a list of dates that have events on them
// it's initialized in the ready function and used by the event table.
var eventDates;


/* stepcarousel function */

function closeDetailPanel(panelId)
{
    jQuery("#" + panelId).fadeOut(300);
}


$(document).ready(function()
{
    if ($("#ctl00_leftContentPlaceHolder_belt div").length > 0)
    {
        stepcarousel.setupAfterReady({
            galleryid: 'mygallery', //id of carousel DIV
            beltclass: 'belt', //class of inner "belt" DIV containing all the panel DIVs
            panelclass: 'panel', //class of panel DIVs each holding content
            autostep: { enable: true, moveby: 1, pause: 1000 },
            panelbehavior: { speed: 500, wraparound: true, persist: true },
            defaultbuttons: { enable: false, moveby: 1, leftnav: ['http://i34.tinypic.com/317e0s5.gif', -5, 80], rightnav: ['http://i38.tinypic.com/33o7di8.gif', -20, 80] },
            statusvars: ['statusA', 'statusB', 'statusC'], //register 3 variables that contain current panel (start), current panel (last), and total panels
            contenttype: ['inline'], //content setting ['inline'] or ['ajax', 'path_to_external_file']
            onpanelclick: function(target)
            {
                var detail_id = "ctl00_leftContentPlaceHolder_detail_" + target.id;
                var detailPanel = jQuery("#" + detail_id);
                detailPanel.dialog({ modal: true, autoOpen: false, closeHTML: '', containerId: 'modalFormContainer', width: '600px', height: 'auto', title: detailPanel.attr("title") });
                $("#" + detail_id + " img").eq(0).focus();
                detailPanel.dialog("open");

                return false;
            }
        });

        // Do this because firefox was incorrectly calculating the last panel.
        // Also if we set this value to the number of panels, rather than stepcarousel's
        // value (which sets the value to the panel that, when in the 0 position, will
        // show the last panel) we see the final book walk across the ticker instead of just 
        // appearing.
        stepcarousel.configholder.mygallery.lastvisiblepanel = $(".panel").length - 1;
    }
    /* end of stepcarousel */

    $.getJSON('Ajax/AjaxHandler.ashx?get=eventsForMonth',
    function(data)
    {
        if (data && data.Success)
        {
            eventDates = data.Data;
        }
    });

    $("#ctl00_leftContentPlaceHolder_tableOfContents a[href='#']").add("#page_Login").add($("#ctl00_socialNetworkLinks a[href='#']")).click(menuItemClick);

    setFormSubmit();

    // now add the click event to any icons in the toc.
    $("#ctl00_leftContentPlaceHolder_tableOfContents a[href='#']").each(function()
    {
        var linkId = "#" + $(this).attr("id");
        var iconId = linkId + "_icon";

        $(iconId).click(function() { $(linkId).click(); });
    });

    // and to the hardcoded buttons across the top of the right hand page
    $("#btnHome").click(goHome);
    $("#btnAbout").click(function() { $("#ctl00_leftContentPlaceHolder_page_About").click(); });
    $("#btnToday").click(function() { $("#ctl00_leftContentPlaceHolder_page_Today").click(); });
    $("#btnJoin").click(function() { $("#ctl00_leftContentPlaceHolder_page_Register").click(); });
    $("#btnCheckout").click(function() { $("#ctl00_leftContentPlaceHolder_page_Checkout").click(); });

    // and make the cursor change on mouseover for thetop buttons
    $("#btnHome").add("#btnAbout").add("#btnToday").add("#btnJoin").add("#btnCheckout").add("#page_Login").addClass("liveContent");

    $.getJSON('Ajax/AjaxHandler.ashx?get=signonStatus',
    function(data)
    {
        if (data.Success)
        {
            $("#page_Login").css("display", "none");
            $("#aSignout").css("display", "inline");
            $("#greeting").text(data.Data.greeting);
            $("#greeting").css("display", "inline");
            member = true;
        }
    });

    // fix positioning on  non-IE browsers
    if (jQuery.support["cssFloat"])
    {
        // not ie - we need to reposition some things.
        $("#rightPageArea").removeClass("rightPageArea");
        $("#rightPageArea").addClass("rightPageArea-notIE");

    }

    if ($("[childrenRequired]").length > 0)
    {
        childNameRequired = true;
    }

    setDatePickers();
    setCommonEvents();
    //setNetworking();
    $(window).resize(setNetworking);
    $(document).queue(setNetworking);

});

function setNetworking()
{
    var networking = $("#ctl00_socialNetworkLinks");
    if (!networking || $("#ctl00_socialNetworkLinks a").length == 0)
    {
        return;
    }

    // work out the position for the social links
    var pos = $("#MainContent").offset();
    var width = $("#MainContent").width();
    var left = pos.left + width + 5;

    //alert(pos.left + " : " + width);
    
    networking.css({ top: pos.top + 2, left: left + "px", position: "absolute" });
    networking.show();
    
}

function orderItem(quantityId, scheduleKey, dayKey, timeKey, itemType, orderButton)
{
    var quantity = $("#" + quantityId).val();
    if (quantity == null || quantity == "" || quantity == "0")
    {
        alert("Enter the quantity you wish to purchase");
        return;
    }

    var orderDetails = scheduleKey + "," + dayKey + "," + timeKey + "," + quantity;

    $.getJSON('Ajax/AjaxHandler.ashx?get=orderItem&orderDetails=' + orderDetails + '&itemType=' + itemType,
    function(data)
    {
        if (data.Success)
        {
            var values = data.Data[0].split(',');
            if (values.length == 5)
            {
                $("#qtyAvailable")[0].innerText = values[4];
                orderButton.data("item").QUANTITY_AVAILABLE = values[4];
            }
            alert("Thank you, the item has been added to your shopping cart");
        }
        else
        {
            alert("The item was not added to your shopping cart: " + data.Message);
        }
    });
}

function orderItems(orderScheduleTable, itemType)
{
    var tableid = "#ctl00_leftContentPlaceHolder_" + orderScheduleTable;
    var orderDetails = "";
    var tableRows = $(tableid + " tr").each(function()
    {
        if ($(this).attr("scheduleKey") && $(this).find("input").val() > 0)
        {
            if (orderDetails != "")
            {
                orderDetails += ":";
            }

            orderDetails += $(this).attr("scheduleKey") + "," + $(this).attr("daysKey") + "," + $(this).attr("dayTimesKey") + "," +$(this).find("input").val();
        }
    });

    if (orderDetails == "")
    {
        alert("Please make your order selections");
        return;
    }

    $.getJSON('Ajax/AjaxHandler.ashx?get=orderItem&orderDetails=' + orderDetails + '&itemType=' + itemType,
    function(data)
    {
        if (data.Success)
        {
            // data should be the same as the orderDetails with the remaining number of places added after the purchase.
             
            alert("Thank you, the item has been added to your shopping cart");
        }
        else
        {
            alert("The item was not added to your shopping cart: " + data.Message);
        }
    });
}
function signout()
{
    $("#page_Login").css("display", "inline");
    $("#aSignout").css("display", "none");
    $("#greeting").css("display", "none");
    $("#greeting").text("");
    member = false;

    $.getJSON('Ajax/AjaxHandler.ashx?get=signout',
    function(data)
    {
        $("#btnHome").click();
    });

}
function getTitlePos()
{
    return $("#rightTitlePos").position();
}

// handler for the click events on the toc menu and navigation icons.
function menuItemClick(e)
{
    var target = $("#" + e.currentTarget.id);
    var pageName = target.attr("name");

    if (pageName == currentPage)
    {
        return;
    }

    if (pageName == "page_Today")
    {
        setupToday();
        return;
    }

    var params = "&page=" + pageName;
    $.getJSON('Ajax/AjaxHandler.ashx?get=page' + params,
    function(data)
    {
        if (data)
        {
            if (!data.Success)
            {
                // display the message but don't update the page
                alert(data.Message);
                return;
            }

            setupPage(data);

            if (pageName == "page_Join")
            {
                setupScheduleTables(data);
            }


        }
        else
        {
            alert("A server error occured, please try again later");
        }

    });
}

// sets up the home page
function goHome(e)
{
    if (currentPage == "page_Home")
    {
        return;
    }

    showToc(true);

    $.getJSON('Ajax/AjaxHandler.ashx?get=page&page=page_Home',
    function(data)
    {
        if (data)
        {
            if (!data.Success)
            {
                alert(data.Message);
                return;
            }

            $(rightPageId).empty();
            $("#pageTitle").text("Home");
            if (data.RightPage != "")
            {
                $(rightPageId).append(data.RightPage);
            }

            currentPage = "page_Home";
        }
        else
        {
            alert("A server error occured, please try again later");
        }
    });
}

// initializes the 'Today at BookBums' page
function setupToday()
{
    var rightPage = $(rightPageId);
    showToc(true);

    rightPage.empty();
    $("#pageTitle").text("Today at Book Bums");
    rightPage.append('<div id="calendarDiv"></div>');
    $("#calendarDiv").append('<div id="defaultInlineDatepicker" style="font-size:0.7em;text-align:center"></div>');
    if ($("#defaultInlineDatepicker").onSelect == null)
    {
        $("#defaultInlineDatepicker").datepicker({ onSelect: dateSelected, onChangeMonthYear: yearMonthChanged, beforeShowDay: showDay});
    }
    
    rightPage.append("<p>Today is <span id=\"currentDate\">" + $("#defaultInlineDatepicker").datepicker('getDate').format("mm/dd/yyyy") + "</span></p>");
    dateSelected($("#defaultInlineDatepicker").datepicker('getDate').format("mm/dd/yyyy"), $("#defaultInlineDatepicker"));
    rightPage.append("<hr />");
    currentPage = "page_today";

}
function setupPage(data)
{
    // if we have controls for the left panel, hide the TOC otherwise show it
    if (data.LeftPage != "")
    {
        showToc(false);
        $("#leftPage").empty();
        $("#leftPage").append(data.LeftPage);
    }
    else
    {
        showToc(true);
    }

    if (data.RightPage != "")
    {
        $(rightPageId).empty();
        $(rightPageId).append(data.RightPage);
    }

    if (data.PageTitle && (data.LeftPage == null || data.LeftPage == ""))
    {
        // only show the title if we are shoing the TOC, otherwise assume the right page is a continuation
        // of the left. 
        $("#pageTitle").text(data.PageTitle);
    }
    else
    {
        $("#pageTitle").text("");
    }

    if (data.RequiresChildName)
    {
        childNameRequired = true;
    }
    else
    {
        childNameRequired = false;
    }

    setCommonEvents();
    setDatePickers();
    setFormSubmit()

    // so we know where we are in the navigation
    currentPage = data.PageName;
}

function setupScheduleTables(data)
{
    var category = "";
    var rows = data.Data;
    $(rightPageId).empty();

    var thisDiv = "";
    var idStem = "";
    var thisTable = "";
    var rowDay = "";
    var thisRow;
    var cellCounter = 0;

    var dataRow = true;
    var myClass = "";
    var rowCounter = 0;
    for (var x = 0; x < data.Data.length; x++)
    {
        if (rows[x].PRODUCT_CATEGORY_KEY != category)
        {
            idStem = "schedule_" + rows[x].PRODUCT_CATEGORY_KEY;
            rowDay = "";
            category = rows[x].PRODUCT_CATEGORY_KEY;
            $(rightPageId).append("<div id='" + idStem + "' class='scheduleDiv'></div>");
            thisDiv = $("#" + idStem);
            thisDiv.append("<p class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all'><span tab='"+ idStem + "_table" + "' class='openClose'>+</span>&nbsp;" + rows[x].PRODUCT_CATEGORY + "</p>");
            thisDiv.append("<table id='" + idStem + "_table' class='scheduleTable' ></table>");
            thisTable = $("#" + idStem + "_table");
        }

        var day = getDayOfWeek(rows[x].DAY_OF_WEEK_KEY);
        if (dataRow)
        {
            myClass = "dataRow";
        }
        else
        {
            myClass = "altDataRow";
        }
        
        rowDay = day;
        thisTable.append("<tr class='" + myClass + "' id='" + thisTable.attr("id") + rowCounter.toString() + "'></tr>");
        thisRow = $("#" + thisTable.attr("id") + rowCounter.toString());
        thisRow.append("<td class='scheduleCell liveContent'>" + rows[x].OfferDescription + "</td>");
        thisTable.append("<tr class='" + myClass + "' id='" + thisTable.attr("id") + rowCounter.toString() + "_2'></tr>");
        var thisRow2 = $("#" + thisTable.attr("id") + rowCounter.toString() + "_2");
        thisRow2.append("<td class='scheduleCell liveContent'>" + rows[x].PRODUCT_SHORT_NAME + "</td>");

        dataRow = !dataRow;
        
        //thisRow.append("<td id='cell_" + cellCounter++ + "' class='scheduleCell liveContent'>" + rows[x].TimePeriod + "</td>");
//        thisRow.append("<td id='cell_" + cellCounter++ + "' class='scheduleCell liveContent'>" + rows[x].PRODUCT_SHORT_NAME + "</td>");
        $(thisRow.selector + " .liveContent").data("item", rows[x]);
        $(thisRow2.selector + " .liveContent").data("item", rows[x]);
        
       rowCounter++;
    }
    $(".openClose").each(function() { $(this).data('state', 'closed') });
    $(".openClose").click(function(event)
    {
        var state = $(this).data('state');
        var table = $("#" + $(this).attr('tab'));

        if (state == 'closed')
        {
            $(this).data('state', 'open');
            $(this).text("-");
            table.fadeIn(300);
        }
        else
        {
            $(this).data('state', 'closed');
            $(this).text("+");
            table.fadeOut(300);
        }

        event.stopPropagation();
    });
    $(".scheduleCell").click(function()
    {
        var popup = $("#modalPopup");
        popup.empty();
        var item = $(this).data('item');

        var expireDate = "";
        if (item.PRODUCT_EXPIRE_DATE)
        {
            expireDate = item.PRODUCT_EXPIRE_DATE.toString().dateFromJSON().format('mm/dd/yyyy') + " " + item.EndTime;
        }

        popup.append("<fieldset id='bookIt' />")
        $("#bookIt").append("<legend>Book this event</legend>");
        $("#bookIt").append("<table id='bookingTable' ></table>");

        $("#bookingTable").append("<tr><td class='eventDetailTitle'>Quantity:</td><td><input type='text' id='txtEventQuantity' value='1'/></td><td><img src='images/buttons/addtoCartbb.png' id='btnBookEvent' style='border-style:none'/></td></tr>");
        //$("#bookIt").append("<img src='images/buttons/addtoCartbb.png' id='btnBookEvent' style='border-style:none'/>");
        $("#btnBookEvent").data('item', item);
        $("#btnBookEvent").click(function()
        {
            var item = $(this).data('item');
            orderItem("txtEventQuantity", item.PRODUCT_SCHEDULE_KEY, item.SCHEDULE_DAY_KEY, item.SCHEDULE_DAY_TIME_KEY, item.PRODUCT_TYPE, $(this));
            return false;
        });
        
        popup.append("<table id='eventDetailTable'></table>");
        // $("#eventDetailTable").append("<tr class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all'><td colspan='2'>" + item.PRODUCT_SHORT_NAME + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Description:</td><td style='height:70px;overflow:auto'>" + item.PRODUCT_LONG_DESC + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Schedule:</td><td>" + item.OfferDescription + "</td></tr>");

        //$("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Description:</td><td style='height:70px;overflow:auto'>" + item.OFFER_DATE + "</td></tr>");

//        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Starts:</td><td>" + item.PRODUCT_START_DATE.toString().dateFromJSON().format('mm/dd/yyyy') + " " + item.StartTime + "</td></tr>");
//        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Ends:</td><td>" + expireDate + "</td></tr>");

        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Location:</td><td>" + item.EVENT_LOCATION + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Address:</td><td>" + item.LOCATION_ADDRESS + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>City: </td><td>" + item.CITY + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>State: </td><td>" + item.STATE_NAME + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Contact: </td><td>" + item.EVENT_CONTACT_INFORMATION + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Guest Speaker: </td><td>" + item.GUEST_SPEAKER + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Special Instructions: </td><td>" + item.SPECIAL_INSTRUCTIONS + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Facilitator: </td><td>" + item.FACILITATOR_NAME + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Places Available: </td><td id='qtyAvailable'>" + item.QUANTITY_AVAILABLE + "</td></tr>");
        $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Price: </td><td>" + item.UnitPrice + "</td></tr>");


//        popup.append("<fieldset id='bookIt' />")
//        $("#bookIt").append("<legend>Book this event</legend>");
//        $("#bookIt").append("<table id='bookingTable' ></table>");

//        $("#bookingTable").append("<tr><td class='eventDetailTitle'>Quantity:</td><td><input type='text' id='txtEventQuantity' value='1'/></td><td><img src='images/buttons/addtoCartbb.png' id='btnBookEvent' style='border-style:none'/></td></tr>");
//        //$("#bookIt").append("<img src='images/buttons/addtoCartbb.png' id='btnBookEvent' style='border-style:none'/>");
//        $("#btnBookEvent").data('item', item);
//        $("#btnBookEvent").click(function()
//        {
//            var item = $(this).data('item');
//            orderItem("txtEventQuantity", item.PRODUCT_MASTER_KEY, item.PRODUCT_TYPE);
//            return false;
//        });

        popup.dialog({ modal: true, autoOpen: false, closeHTML: '', containerId: 'modalFormContainer', width: '700px', height: 'auto' });
        popup.dialog("option", "title", item.PRODUCT_SHORT_NAME);
        popup.dialog("open");


    });
}
function getDayOfWeek(dayKey)
{
    switch (dayKey)
    {
        case 1:
            return "Monday";
        case 2:
            return "Tuesday";
        case 3:
            return "Wednesday";
        case 4:
            return "Thursday";
        case 5:
            return "Friday";
        case 6:
            return "Saturday";
        case 7:
            return "Sunday";
        default:
            return "";
    }
}
function setFormSubmit()
{
    $("#bbForm").ajaxForm(
        {
            dataType: 'json',
            url: 'Ajax/AjaxHandler.ashx?get=submitForm',
            clearForm: false,        // clear all form fields after successful submit 
            resetForm: false,        // reset the form after successful submit
            beforeSubmit: beforeSubmit,  // pre-submit callback
            success: afterSubmit  // post-submit callback
        });
}

function setPaymentType(type, validateOnSubmit, paymentReferenceName, cardName)
{
    if (validateOnSubmit != null && validateOnSubmit == false)
    {
        doValidationOnSubmit = false;
    }

    if (cardName)
    {
        $("#lblCardname").text(cardName);
    }
    else
    {
        $("#lblCardname").text("");
    }

    if (paymentReferenceName != "Card")
    {
        $("#txtCardNumber").data("watermark", "Payment Reference");
        $("#txtCardNumber").val("Payment Reference");
        $("#txtCardNumber").attr("title", "The Check number, PO number or Receipt No etc");
        $("#txtSecurityNumber").hide();
        $("#expiresLabel").hide();
        $("#cardDate").hide();
    }
    else
    {
        $("#txtCardNumber").data("watermark", "Card Number");
        $("#txtCardNumber").val("Card Number");
        $("#expiresLabel").show();
        $("#txtSecurityNumber").show();
        $("#cardDate").show();
    }


    $("#txtPaymentType").val(type);
}

function setCommonEvents()
{
    $(".watermark").each(function() { $(this).data("watermark", $(this).val()); });
    $(".watermark").focus(function()
    {
        $(this).removeClass('watermark');
        if ($(this).val() == $(this).data('watermark'))
        {
            $(this).val("");
        }
    });

    $(".watermark").blur(function()
    {
        if ($(this).val() == "")
        {
            $(this).val($(this).data('watermark'));
            $(this).addClass('watermark')
        }
    });

    $(".deleteItem").click(function()
    {
        if ($(this).attr("checked", "checked") && confirm("Delete this item?"))
        {
            $.getJSON('Ajax/AjaxHandler.ashx?get=removeItem&itemKey=' + $(this).val(),
            function(data)
            {
                if (data.Success)
                {
                    // so the checkeout page will refresh
                    currentPage = "";
                    $("#btnCheckout").click();
                }
                else
                {
                    alert(data.Message);
                }
            });
        }
    });

    $("#lnkForgotPW").bind('click', function()
    {
        var email = $("#txtEmail");
        if (email != null)
        {
            if (email.val() == "" || email.val() == email.data('watermark'))
            {
                alert("Please enter your email address");
                return;
            }

            $(this).unbind("click");
            $.getJSON('Ajax/AjaxHandler.ashx?get=forgotPassword&email=' + email.val(),
            function(data)
            {
                if (data.Success)
                {
                    alert("An email containing instructions for resetting your password has been sent to your registered email address.");
                    $("#btnHome").click();
                }
                else
                {
                    alert(data.Message);
                }
            });


        }
    });

    $("#bbForm [id^='page_']").click(menuItemClick);
}

function setDatePickers()
{
    $("#bbForm [picker='DateTime']").each(function() { $(this).datepicker({ duration: '', constrainInput: false, showTime: true, changeMonth: true, changeYear: true, yearRange: '-18:+0', maxDate: +0, showOn: 'both', buttonImage: 'styles/calendar.png', buttonImageOnly: true }); });
    $("#bbForm [picker='Date']").each(function() { $(this).datepicker({ duration: '', constrainInput: false, showTime: false, changeMonth: true, changeYear: true, yearRange: '-18:+0', maxDate: +0, showOn: 'both', buttonImage: 'styles/calendar.png', buttonImageOnly: true }); });
    $("#bbForm [picker='Time']").each(function() { $(this).kmTimepicker({ timeFormat: 'hh:ii a', showOn: 'both', buttonImage: 'styles/calendar.png', buttonImageOnly: true }); });
}

function submitForm()
{
    $('#bbForm').trigger('submit');
}

function beforeSubmit(formData, jqForm, options)
{
    var ok = true;

    if (doValidationOnSubmit)
    {
        var message = "";
        $(".required:visible").each(function()
        {
            if ($(this).val() == "" || $(this).val() == $(this).data("watermark"))
            {
                message = message + "\n" + " - Enter a value for " + $(this).data("watermark");
                ok = false;
            }
        });

        $(".watermark:visible").each(function()
        {
            if ($(this).hasClass("required"))
            {
                return;
            }
            
            if ($(this).val() == $(this).data("watermark"))
            {
                $(this).val("");
            }
        });

        if (childNameRequired && $("[id^='txtChildName_']").length > 0)
        {
            if ($("[id^='txtChildName_']").eq(0).val() == "")
            {
                message += "\nFor this event you must enter at least one attending child";
                ok = false;
            }
        }

        $("[id^='txtChildName_']").each(function()
        {
            if ($(this).val() != "")
            {
                var qual = $(this).attr("id").substring(12);
                if ($("#txtChildDoB"+qual).val() == "")
                {
                    message += "\nFor each attending child you must enter both the name and DOB"; 
                    ok = false;
                }
            }
        });

        if ($("#ddStates").val() == '0')
        {
            message = message + "\n" + " - Select a State";
            ok = false;
        }

        if ($("#txtPaymentType").length > 0 && $("#txtPaymentType").val() == "")
        {
            message = message + "\n" + " - Select a Payment Type";
            ok = false;         
        }
    }
    else
    {
        // reset for next time!
        doValidationOnSubmit = true;
    }

    if (!ok)
    {
        alert("Please fix the folowing error(s) and try again " + message);
    }

    $("#rightPageArea").css("cursor", "wait");

    return ok;
}

function afterSubmit(data, statusText)
{
    $("#rightPageArea").css("cursor", "default");

    if (data.Success)
    {
        if (currentPage == "page_Login" || currentPage == "page_Register")
        {
            $("#page_Login").css("display", "none");
            $("#aSignout").css("display", "inline");
            $("#greeting").text(data.Data.greeting);
            $("#greeting").css("display", "inline");
            member = true;

            if (data.Data.requiresReset)
            {
                var popup = $("#modalPopup");
                popup.empty();

                popup.append('<table id="resetTable"></table>');
                $("#resetTable").append("<tr class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all'><td colspan='2'>Please reset your password.</td></tr>");
                $("#resetTable").append("<tr><td>New Password:</td><td><input id='newPassword' type='text'/></td></tr>");
                $("#resetTable").append("<tr><td>Confirm New Password:</td><td><input id='confirmNewPassword' type='text'/></td></tr>");
                $("#resetTable").append("<tr><td> </td><td><input id='btnSubmitNewPassword' type='button' value='submit'/></td></tr>");

                $("#btnSubmitNewPassword").click(function()
                {
                    var pw = $("#newPassword").val();
                    var pw2 = $("#confirmNewPassword").val();

                    if (pw == "" || pw2 == "")
                    {
                        alert("Please enter the same value for 'New Password' and 'Confirm New Password'");
                        return;
                    }

                    $.getJSON('Ajax/AjaxHandler.ashx?get=changeLogonData&pw1=' + pw + '&pw2=' + pw2,
                        function(data)
                        {
                            if (data.Success)
                            {
                                alert("Thank you, your password has been changed");
                                $.modal.close();
                                $("#btnHome").click();
                            }
                            else
                            {
                                alert(data.Message);
                            }
                        });
                    });
                
                popup.modal({ closeHTML: '', containerId: 'modalFormContainer' });
                return;
            }
        }
        
        

        if (data.RightPage != null && data.RightPage != "")
        {
            setupPage(data);
            return;
        }

        currentPage = "";
        $("#btnHome").click();
        return;
    }

    alert(data.Message);
    if (data.RightPage)
    {
        setupPage(data);
    }
}

// event handler for date picker on the 'Today ...' page, fires when the user changes the selected date
function dateSelected(date, picker)
{
    $.getJSON('Ajax/AjaxHandler.ashx?get=todaysEvents&date=' + date,
    function(data)
    {
        $("#noEvents").remove();
        //        $("#eventTable").remove();
        //        $("#dateHeader").remove();
        $("#eventTableContainer").remove();

        if (data && data.length > 0)
        {
            $(rightPageId).append('<div id="eventTableContainer" style="position:absolute;overflow:auto;height:203px"></div>');
            $("#eventTableContainer").append("<span id='dateHeader' class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all' >Events for " + date + "</span>");

            //            $("#eventTableContainer").append('<table id="eventTable" style="table-layout:auto;"></table>');
            //            $("#eventTable").append("<tr class='ui-datepicker-header ui-widget-header ui-corner-all'><td>Duration</td><td>Event Title</td></tr>");
            var dataRow = true;
            var myClass = "";
            var category = ""
            var thisDiv = "";
            var thisTable = "";
            for (var x = 0; x < data.length; x++)
            {
                if (data[x].PRODUCT_CATEGORY_KEY != category)
                {
                    idStem = "today_" + data[x].PRODUCT_CATEGORY_KEY;
                    category = data[x].PRODUCT_CATEGORY_KEY;
                    $("#eventTableContainer").append("<div id='" + idStem + "' class='scheduleDiv'></div>");
                    thisDiv = $("#" + idStem);
                    thisDiv.append("<p class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all'><span tab='" + idStem + "_table" + "' class='openClose'>+</span>&nbsp;" + data[x].PRODUCT_CATEGORY + "</p>");
                    thisDiv.append("<table id='" + idStem + "_table' class='scheduleTable' ></table>");
                    thisTable = $("#" + idStem + "_table");
                    dataRow = true;
                }

                if (dataRow) { myClass = "dataRow"; } else { myClass = "altDataRow"; }
                thisTable.append("<tr class='" + myClass + "'><td>" + data[x].TimePeriod + "</td><td id='evt_" + x + "' class='liveContent'>" + data[x].PRODUCT_SHORT_NAME + "</td></tr>");
                dataRow = !dataRow;
                $("#evt_" + x).click(function(event)
                {
                    var popup = $("#modalPopup");
                    popup.empty();
                    var item = $(this).data('item');
                    var expireDate = "";

                    if (item.PRODUCT_EXPIRE_DATE)
                    {
                        expireDate = item.PRODUCT_EXPIRE_DATE.toString().dateFromJSON().format('mm/dd/yyyy') + " " + item.EndTime;
                    }

                    popup.append("<fieldset id='bookIt' />")
                    $("#bookIt").append("<legend>Book this event</legend>");
                    $("#bookIt").append("<span class='eventDetailTitle'>Quantity&nbsp;<input type='text' id='txtEventQuantity' value='1'/></span>");
                    $("#bookIt").append("<img src='images/buttons/addtoCartbb.png' id='btnBookEvent' style='border-style:none'/>");
                    $("#btnBookEvent").data('item', item);
                    $("#btnBookEvent").click(function()
                    {
                        var item = $(this).data('item');

                        orderItem("txtEventQuantity", item.PRODUCT_SCHEDULE_KEY, item.SCHEDULE_DAY_KEY, item.SCHEDULE_DAY_TIME_KEY, item.PRODUCT_TYPE, $(this));
                        return false;
                    });

                    popup.append("<table id='eventDetailTable'></table>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Description:</td><td style='height:70px;overflow:auto'>" + item.PRODUCT_LONG_DESC + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Schedule:</td><td>" + item.OfferDescription  + "</td></tr>");
//                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Event Ends:</td><td>" + expireDate + "</td></tr>");

                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Location:</td><td>" + item.EVENT_LOCATION + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle' >Address:</td><td>" + item.LOCATION_ADDRESS + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>City: </td><td>" + item.CITY_NAME + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>State: </td><td>" + item.STATE_ABBREVIATION + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Contact: </td><td>" + item.EVENT_CONTACT_INFORMATION + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Guest Speaker: </td><td>" + item.GUEST_SPEAKER + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Special Instructions: </td><td>" + item.SPECIAL_INSTRUCTIONS + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Facilitator: </td><td>" + item.FACILITATOR_NAME + "</td></tr>");
                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Places Available: </td><td id='qtyAvailable'>" + item.QUANTITY_AVAILABLE + "</td></tr>");

                    $("#eventDetailTable").append("<tr><td class='eventDetailTitle'>Price: </td><td>" + item.UnitPrice + "</td></tr>");

                    popup.dialog({ modal: true, autoOpen: false, closeHTML: '', containerId: 'modalFormContainer', width: '700px', height: 'auto' });
                    popup.dialog("option", "title", item.PRODUCT_SHORT_NAME);
                    

                    $("#txtEventQuantity").blur();
                    $("#eventDetailTable tr").eq(0).scrollTop(0);
                    popup.dialog("open");
                });

                $("#evt_" + x).data('item', data[x]);
                var width = $("#eventTable tr td").eq(0).width();
                //$("#eventTable tr").eq(0).before("<tr class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all'><td style='width:"+width+"'>Duration</td><td>EventTitle</td></tr>");
                //$("#eventTable").append("<tr class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all'><td>Duration</td><td>EventTitle</td></tr>");

            }

            $(".openClose").each(function() { $(this).data('state', 'closed') });
            $(".openClose").click(function()
            {
                var state = $(this).data('state');
                var table = $("#" + $(this).attr('tab'));

                if (state == 'closed')
                {
                    $(this).data('state', 'open');
                    $(this).text("-");
                    table.fadeIn(300);
                }
                else
                {
                    $(this).data('state', 'closed');
                    $(this).text("+");
                    table.fadeOut(300);
                }

                return false;
            });
        }
        else
        {
            $(rightPageId).append("<p id='noEvents'>No events found for " + date + "</p>");
        }
    });
}

function showDay(date)
{
    // called by the event calendar for each day as it adds it to the calendar.
    // If there are any events on the that day, we return a stylesheet class that higlights the day.
    if (!eventDates)
    {
        return [true];
    }
    
    var formattedDate = date.format("yyyy/mm/dd");
    for (var x = 0; x < eventDates.length; x++)
    {
        if (eventDates[x] == formattedDate)
        {
            return [true, "dayHasEvents"];
        }
    }

    return [true];    
}

function yearMonthChanged(year, month, inst)
{
    $("#noEvents").remove();
//    $("#eventTable").remove();
//    $("#dateHeader").remove();
    $("#eventTableContainer").remove();

}

// shows or hides the TOC page in the left hand panel
function showToc(showToc)
{
    if (showToc)
    {
        $("#leftPage").empty();
        $("#leftPage").css("display", "none");
        $("#toc").css("display", "block");
    }
    else
    {
        $("#leftPage").css("display", "block");
        $("#toc").css("display", "none");
    }
}
function submitReview(reviewTextId, itemKey, itemType, emailId)
{
    var reviewText = $("#" + reviewTextId).val();
    if (reviewText == null || reviewText == "")
    {
        alert("Please enter your review");
        return;
    }

    var email = $("#ctl00_leftContentPlaceHolder_" + emailId).val();
    if (email == null || email == "" || email == $("#" + emailId).data('watermark'))
    {
        alert("Please enter your email address");
        return;
    }

    var params = "&itemKey=" + itemKey + "&itemType=" + itemType + "&text=" + reviewText + "&email=" + email;

    $.getJSON('Ajax/AjaxHandler.ashx?get=submitReview' + params,
    function(data)
    {
        if (data.Success)
        {
            alert("Thank you, your review has been saved");
        }
        else
        {
            alert(data.Message);
        }
    });
}
function addRow(tableName)
{
    var table = $("#" + tableName);
    if (table && table.length > 0)
    {
        var count = table.find("tr").length;
        count = count++;
        
        if (table.attr("id") == "childTable")
        {
            table.append("<tr><td><input type='text' id='txtChildName_" + count.toString() + "' name='txtChildName_" + count.toString() + "' /></td><td><input type='text' id='txtChildDob_" + count.toString() + "' name='txtChildDob_" + count.toString() + "' /></td></tr>");
        }

        if (table.attr("id") == "contactTable")
        {
            table.append("<tr><td><input type='text' id='txtContactNum_" + count.toString() + "' name='txtContactNum_" + count.toString() + "' /></td><td><select type='text' id='ddlContactType_" + count.toString() + "' name='ddlContactType_" + count.toString() + "' /></td></tr>");

            var newSelect = $("#ddlContactType_" + count.toString());
            var originalSelect = $("#ddlContactType_1");
            if (newSelect && originalSelect)
            {
                newSelect.append(originalSelect.html());
                newSelect.val("0");
            }
        }
    }

}

// convenient json date override
// any date prior to 1/1/1970 will have a '-' before the number of milliseconds -
// so we need to allow for it
String.prototype.dateFromJSON = function()
{
    return eval(this.replace(/\/Date\((-?\d+)\)\//gi, "new Date($1)"));
};