﻿/* Updatable Variables */
var cookiePeriod = 7; // in days

/* Static Variables - DO NOT CHANGE */
var itemSplitter = "%";
var courseSplitter = "|";

var attendeeSplitter = "%";
var attendeeDetailSplitter = "|";

var scheduleSplitter = " - ";
var scheduleDateIndex = 0;
var scheduleLocationIndex = 1;

var courseCodeIndex = 0;
var courseIdIndex = 1;
var courseDateIndex = 2;
var courseLocationIndex = 3;
var courseSeatIndex = 4;
var courseAttendeeIndex = 5;

function addCourseToCart() {
    code = $('#CourseCode').val();
    id = ($('#ddlSchedules').val()) ? $('#ddlSchedules').val() : code;
    schedule = $("#ddlSchedules :selected").text();
    var scheduleDate = schedule.split(scheduleSplitter)[scheduleDateIndex];
    var scheduleLocation = schedule.split(scheduleSplitter)[scheduleLocationIndex];
    seats = $('#ddlSeats').val();
    if (id == "") {
        alert('Please select a date and location.');
        return;
    }
    var currentItems = readCookie("cart").split(courseSplitter);
    var newItems = "";
    var isInCart = false;
    for (var i = 0; i < currentItems.length; i++) {
        if (currentItems[i] != null) {
            var courseItems = currentItems[i].split(itemSplitter);
            var courseCode = courseItems[courseCodeIndex];
            var courseId = courseItems[courseIdIndex];
            var courseDate = courseItems[courseDateIndex];
            var courseLocation = courseItems[courseLocationIndex];
            var courseSeats = courseItems[courseSeatIndex];
            //var courseAttendee = courseItems[courseAttendeeIndex];
            if (courseId != "" && courseSeats != null) {
                if (courseId == id) {
                    isInCart = true;
                    courseSeats = (courseSeats * 1) + (seats * 1);
                }
                newItems = newItems + courseCode + itemSplitter +
                    courseId + itemSplitter +
                    courseDate + itemSplitter +
                    courseLocation + itemSplitter +
                    courseSeats + itemSplitter + 
                    ((i != currentItems.length - 1) ? courseSplitter : "");
            }
        }
    }

    if (!isInCart) {
        newItems = newItems + ((newItems == "") ? "" : courseSplitter) + code + itemSplitter +
            id + itemSplitter +
            scheduleDate + itemSplitter +
            scheduleLocation + itemSplitter +
            seats + itemSplitter + "";
    }
    eraseCookie("cart");
    createCookie("cart", newItems, cookiePeriod);
    //updateCartTotalSeat();
    //alert(seats + " seats added to your cart.");
    window.location = "/Cart";
}

function removeCourseFromCart(el) {
    if (confirm("Do you want to remove the item?")) {
        $(el).parent().parent().remove();
        updateCart();
        window.location = "/Cart";
    }
}

function updateCartTotalSeat() {
    var currentItems = readCookie("cart").split(courseSplitter);
    var totalSeats = 0;
    for (var i = 0; i < currentItems.length; i++) {
        if (currentItems[i] != null && currentItems[i].split(itemSplitter)[courseSeatIndex] != null) {
            totalSeats += (currentItems[i].split(itemSplitter)[courseSeatIndex]) * 1;
        }
    }
    $("#cartTotalSeat").text(totalSeats);
}

function updateCourseTotal(el) {
    var currentItems = readCookie("cart").split(courseSplitter);
    var cost = $(el).parents().find(".courseCost").html();
    var newSeat = el.value;
    $(el).parent().parent().find(".courseTotal").html((cost * newSeat).toFixed(2));
    updateCart();
}

function updateCart() {
    var schedules = $("#cart .courseSchedule");
    var bookingItems = "";
    var totalCost = 0;
    for (var i = 0; i < schedules.length; i++) {
        var courseCode = $("#cart tr:nth-child(" + (i + 4) + ") .courseCode").html();
        var courseCost = $("#cart tr:nth-child(" + (i + 4) + ") .courseCost").html();
        var courseId = $("#cart tr:nth-child(" + (i + 4) + ") .courseSchedule select").val();
        var courseSeats = $("#cart tr:nth-child(" + (i + 4) + ") .courseSeat select").val();
        var courseDate = $("#cart tr:nth-child(" + (i + 4) + ") .courseSchedule select :selected").text().split(scheduleSplitter)[scheduleDateIndex];
        var courseLocation = $("#cart tr:nth-child(" + (i + 4) + ") .courseSchedule select :selected").text().split(scheduleSplitter)[scheduleLocationIndex];
        bookingItems = bookingItems + courseCode + itemSplitter +
            courseId + itemSplitter +
            courseDate + itemSplitter +
            courseLocation + itemSplitter +
            courseSeats + itemSplitter + 
            ((i != schedules.length - 1) ? courseSplitter : "");
        totalCost += courseSeats * courseCost;
    }
    eraseCookie("cart");
    createCookie("cart", bookingItems, cookiePeriod);
    updateCartTotalSeat();
    $("#cartTotalCost").html(totalCost.toFixed(2));
    applyDiscount();
    updateTotalDue();
}

function applyDiscount() {
    eraseCookie("discountCode");
    eraseCookie("discount");
    var discountCode = $("#DiscountCode").val();
    if (discountCode != "") {
        var discountAmount = 0;
        var currentItems = readCookie("cart").split(courseSplitter);
        var listOfSchedule = "";
        for (var i = 0; i < currentItems.length; i++) {
            if (currentItems[i] != null) {
                var courseItems = currentItems[i].split(itemSplitter);
                var courseId = courseItems[courseIdIndex];
                var courseSeat = courseItems[courseSeatIndex];
                if (courseId != "") {
                    listOfSchedule += courseId + "," + courseSeat + "|";
                }
            }
        }
        var ajaxUrl = "/Cart/GetDiscount?Schedules=" + listOfSchedule + "&DiscountCode=" + discountCode;
        $.ajax({
            url: ajaxUrl,
            success: function(result) {
                discountAmount = result;
                if (discountAmount > 0) {
                    createCookie('discount', discountAmount, cookiePeriod);
                    createCookie('discountCode', discountCode, cookiePeriod);
                    updateTotalDue();
                }
                else {
                    alert("Invalid discount code.");
                }
            }
        });
    }
}

function removeDiscount() {
    $("#DiscountCode").val(""); 
    eraseCookie("discountCode");
    eraseCookie("discount");
    applyDiscount();
    updateTotalDue();
}

function updateTotalDue() {
    var totalCost = $("#cartTotalCost").html();
    var discountAmount = readCookie("discount") * 1;
    $(".discountAmount").html(discountAmount.toFixed(2));
    var discountCode = readCookie("discountCode");
    if (discountCode != "") {
        $("#DiscountCode").val(discountCode);
        $("#DiscountCode").attr("disabled", true);
        $("#RemoveDiscount").show();
        $("#ApplyDiscount").hide();
    }
    else {
        $("#DiscountCode").val('');
        $("#DiscountCode").removeAttr("disabled");
        $("#RemoveDiscount").hide();
        $("#ApplyDiscount").show();
    }
    var totalDue = totalCost - discountAmount;
    $(".totalDue").html(totalDue.toFixed(2));
    $("#BookingAmount").val($(".totalDue").html());
}

function updateAttendeeList() {
    var attendeeRows = $(".attendeeRow");
    var attendeeList = "";
    for (var i = 0; i < attendeeRows.length; i++) {
        var rowInputs = $(attendeeRows[i]).find("input");
        for (var j = 0; j < rowInputs.length; j++) {
            attendeeList += $(rowInputs[j]).val() + ((j < rowInputs.length - 1) ? attendeeDetailSplitter : "") ;
        }
        attendeeList += (i < attendeeRows.length - 1) ? attendeeSplitter : ""
    }
    //alert(attendeeList);
    createCookie("attendee", attendeeList, cookiePeriod);
}

function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return "";
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

$(document).ready(function() {
    updateCartTotalSeat();
    updateTotalDue();
    $("#cart .courseSeat select").change(function() {
        updateCourseTotal(this);
        applyDiscount();
    });
    $("#cart .courseSchedule select").change(function() {
        updateCart();
    });
    $("#cart .courseAttendee input").blur(function() {
        updateCart();
    });
});
