﻿$(document).ready(function() {
    $("#signUpDialog").dialog({
        autoOpen: false,
        draggable: false,
        resizable: false,
        onOpen: function() {
            clearFields();
            clearErrorFields();
        }
    });
    $("#successSubmissionDialog").dialog({
        autoOpen: false,
        draggable: false,
        resizable: false, 
        close: function(evt, ui) {
            __doPostBack();
        }
    });
    $("#alreadyReservedDialog").dialog({ autoOpen: false, draggable: false, resizable: false });

    $("#content_loading div").ajaxSend(function(evt, request, settings) {
        $(this).fadeIn('normal');
    });

    $("#content_loading div").ajaxStop(function() {
        $(this).fadeOut('normal');
    });
});

function openSignUpPopUp(signUpData) {
    $("#span_id").val(signUpData.spanId);
    $("#start_date").val(signUpData.startDate);
    $("#start_time").html(signUpData.startTime);
    $("#end_time").html(signUpData.endTime);

    $("#signUpDialog").dialog("open");
}

function submitReservation(formData) {
    clearErrorFields();

    var validationResults = validate(formData);

    if (validationResults.length == 0)
        checkForReservations(formData);
    else
        showErrorFields(validationResults);
}

function checkForReservations(formData) {
    $.ajax({
        type: "POST",
		async: false,
        url: "/sandiegosymposium/asktheexperts.aspx/CheckForReservations",
        data: "{'email': '" + formData.email + "', 'spanId': '" + formData.span_id + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            var keyValuePairs = msg.d.split("&");

            var reserved = "false";
            var startDate = "";
            var startTime = "";
            var endTime = "";

            var values = new Array();
            $.each(keyValuePairs, function(i, item) {
                var pair = item.split("=");

                if (pair[0].indexOf("start_date") > -1)
                    startDate = pair[1];
                else if (pair[0].indexOf("start_time") > -1)
                    startTime = pair[1];
                else if (pair[0].indexOf("end_time") > -1)
                    endTime = pair[1];
                else if (pair[0].indexOf("reserved") > -1)
                    reserved = pair[1];
            });

            if (reserved == "true")
                showAlreadyReservedPopup(startDate, startTime, endTime);
            else
                reserveSession(formData);
        }
    });
}

function showAlreadyReservedPopup(startDate, startTime, endTime) {
    $("#reserved_startdate").html(startDate);
    $("#reserved_starttime").html(startTime);
    $("#reserved_endtime").html(endTime);

    $("#signUpDialog").dialog("close");
    $("#alreadyReservedDialog").dialog("open");

    clearErrorFields();
    clearFields();
}

function showErrorFields(validationResults) {
    for (var i = 0; i < validationResults.length; i++) {
        var errorControlId = "#" + validationResults[i].control_id + "_error";
        var errorSpan = $(errorControlId);
        errorSpan.css("color", "red");
        errorSpan.css("paddingLeft", "10px");
        errorSpan.html(validationResults[i].message);
    }
}

function reserveSession(formData) {
    var registrantInformation = {}    
    for (var property in formData) {
        if (property == "span_id")
            continue;

        var newObjectProperty = property.replace("_", "");
        registrantInformation[newObjectProperty] = formData[property];
    }

    var dataTransferObject = { 'sessionBlockID': formData.span_id, 'registrantInfo': registrantInformation };

    $.ajax({
        type: "POST",
        url: "/sandiegosymposium/asktheexperts.aspx/SendReservationRequest",
        data: JSON.stringify(dataTransferObject),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function(msg) {
            $("#submission_startdate").html(formData.start_date);
            $("#submission_starttime").html(formData.start_time);
            $("#submission_endtime").html(formData.end_time);

            $("#signUpDialog").dialog("close");
            $("#successSubmissionDialog").dialog("open");

            clearErrorFields();
            clearFields();
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            $.ajax({
                type: "POST",
                url: "/sandiegosymposium/asktheexperts.aspx/ReportError",
                data: "{'status': '" + textStatus + "', 'error': " + errorThrown + "}",
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            });
        }
    });
}

function clearFields() {
    $("#span_id").val("");
    $("#start_date").val("");
    $("#start_time").html("");
    $("#end_time").html("");
    $("#name").val("");
    $("#company").val("");
    $("#title").val("");
    $("#phone").val("");
    $("#email").val("");
    $("#topics").val("");
}

function clearErrorFields() {
    $("#name_error").html("");
    $("#company_error").html("");
    $("#title_error").html("");
    $("#phone_error").html("");
    $("#email_error").html("");
    $("#topics_error").html("");
}

function isNullOrEmpty(stringData) {
    if (stringData == null)
        return true;

    if (stringData.length == 0)
        return true;

    return false;
}

function validate(formData) {
    var validationErrors = new Array();

    if (isNullOrEmpty(formData.name))
        validationErrors.push(createRequiredFieldErrorObject("name"));

    if (isNullOrEmpty(formData.company))
        validationErrors.push(createRequiredFieldErrorObject("company"));

    if (isNullOrEmpty(formData.title))
        validationErrors.push(createRequiredFieldErrorObject("title"));

    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (isNullOrEmpty(formData.email))
        validationErrors.push(createRequiredFieldErrorObject("email"));
    else if (filter.test(formData.email) == false)
        validationErrors.push(createValidationErrorObject("(Incorrect format)", "email"));

    if (isNullOrEmpty(formData.phone))
        validationErrors.push(createRequiredFieldErrorObject("phone"));

    if (isNullOrEmpty(formData.topics))
        validationErrors.push(createRequiredFieldErrorObject("topics"));

    return validationErrors;
}

function createRequiredFieldErrorObject(control) {
    return createValidationErrorObject("(Required)", control);
}

function createValidationErrorObject(msg, control) {
    return { statusCode: false, message: msg, control_id: control };
}