﻿/// <reference path="jquery-1.4.1-vsdoc.js" />
/// <reference path="jquery.validate-vsdoc.js" />


var childWindow;

function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

function inRange(n, min, max) {
    var num = parseFloat(n);
    return num >= min && num <= max;
} 

function CommaFormatted(amount) {
    var delimiter = ","; // replace comma if desired
    var a = amount.split('.', 2)
    var d = a[1];
    var i = parseInt(a[0]);
    if (isNaN(i)) { return ''; }
    var minus = '';
    if (i < 0) { minus = '-'; }
    i = Math.abs(i);
    var n = new String(i);
    var a = [];
    while (n.length > 3) {
        var nn = n.substr(n.length - 3);
        a.unshift(nn);
        n = n.substr(0, n.length - 3);
    }
    if (n.length > 0) { a.unshift(n); }
    n = a.join(delimiter);
    if (d.length < 1) { amount = n; }
    else { amount = n + '.' + d; }
    amount = minus + amount;
    return amount;
}
// end of function CommaFormatted()

function CurrencyFormatted(amount) {
    var i = parseFloat(amount);
    if (isNaN(i)) { i = 0.00; }
    var minus = '';
    if (i < 0) { minus = '-'; }
    i = Math.abs(i);
    i = parseInt((i + .005) * 100);
    i = i / 100;
    s = new String(i);
    if (s.indexOf('.') < 0) { s += '.00'; }
    if (s.indexOf('.') == (s.length - 2)) { s += '0'; }
    s = minus + s;
    return CommaFormatted(s);
}
// end of function CurrencyFormatted()

function toLongDateString() {
    var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    return this.getDate() + " " + months[this.getMonth()] + " " + this.getFullYear();
}
Date.prototype.toLongDateString = toLongDateString;
function addDays(days) {
    this.setDate(this.getDate() + days);
    return this;
}
Date.prototype.addDays = addDays;

jQuery.fn.tooltip = function (tipSelector) {
    /* CONFIG */
    xOffset = 10;
    yOffset = 20;
    // these 2 variable determine popup's distance from the cursor
    // you might want to adjust to get the right result 
    /* END CONFIG */
    this.each(function () {
        $(this).children(tipSelector).hide();
        $(this).hover(function (e) {
            var text = $(this).children(tipSelector).html();
            if (text) {
                $("body").append("<p id='tooltip'>" + text + "</p>");
                $("#tooltip")
                    .css("top", (e.pageY - xOffset) + "px")
                    .css("left", (e.pageX + yOffset) + "px")
                    .fadeIn("fast");
            }
        },
        function () {
            $("#tooltip").remove();
        }
    );
        
    $(this).mousemove(function (e) {
        $("#tooltip")
            .css("top", (e.pageY - xOffset) + "px")
            .css("left", (e.pageX + yOffset) + "px");
    });
    });
};

function PopupWindow(url, name, width, height, resizable, scrollbars, toolbars) {
    var features;
    features = "height=#h#,width=#w#,scrollbars=#s#,resizable=#r#,toolbar=#t#,menubar=#t#,location=#t#,directories=#t#,status=yes";
    features = features.replace("#w#", width).replace("#h#", height).replace("#s#", scrollbars).replace("#r#", resizable).replace("#t#", toolbars);
    var newWindow = window.open(url, name, features);
    return newWindow;
}

jQuery.fn.popup = function () {
    this.each(function () {
        $(this).click(function () {
            var href = $(this).attr("href");
            var size = $(this).attr("popupwh");
            var wh = size.split("x");
            var h, w;
            if (wh[0] > 0) {
                w = wh[0];
            } else {
                w = 900;
            }
            if (wh[1] > 0) {
                h = wh[1];
            } else {
                h = 740;
            }
            childWindow = PopupWindow(href, "popupWindow", w, h, true, "yes", "yes");
            //$(newWin.document).find("#close-win").show();popupWindow
            return false;
        });
    });
};

//session booking
function ShowBookingForm(element) {
    var close = ($(element).text() == "Close (X)");
    if (close) {
        $(element).next(".availability-form").slideUp(500);
    }
    $(".availability-form").hide();
    $(".availability").removeClass("selected");
    $(".availability").find("a.book").text("Book");

    if (!close) {
        
        var f = $(element).next(".availability-form").children("form");
        // get numbers from cookie
        var adultsNum = $.cookie('booking_adults');
        var u17Num = $.cookie('booking_u17');
        if (adultsNum > 0) {
            var adults = f.find("input[name=AdultNumber]");
            adults.val(adultsNum);
        }
        if (u17Num > 0) {
            var u17 = f.find("input[name=U17Number]");
            u17.val(u17Num);
        }

        // show form - fadeIn
        $(element).next(".availability-form").slideDown(500);
        $(element).parent().addClass("selected");
        $(element).text("Close (X)");
    }

    return false;
}
function AddSessionBooking(element) {
    var sessionId = $(element).prevAll('input[name=sessionid]').val();
    var f = $('#ava_' + sessionId);
    var spaces = $(element).attr("data-spacesavailable");

    //check form fields are filled in
    var adults = f.find("input[name=AdultNumber]");
    var u17 = f.find("input[name=U17Number]");
    var adultsNum = adults.val();
    var u17Num = u17.val();
    var valid = true;

    if ((!adultsNum) && (!u17Num)) {
        // Nothing in either box
        adults.addClass("error");
        u17.addClass("error");
        valid = false;
    } else {
        if ((!adultsNum) || isNumber(adultsNum)) {
            adults.removeClass("error");
            if (!adultsNum) adultsNum = 0;
        } else {
            adults.addClass("error");
            adultsNum = 0;
            valid = false;
        }
        if ((!u17Num) || isNumber(u17Num)) {
            u17.removeClass("error");
            if (!u17Num) u17Num = 0;
        } else {
            u17.addClass("error");
            u17Num = 0;
            valid = false;
        }

        if (!inRange(parseInt(u17Num) + parseInt(adultsNum), 1, spaces)) {
            valid = false;
            alert("There are not enough spaces available on this session")
        }
    }

    if (valid) {
        adults.removeClass("error");
        u17.removeClass("error");
    }


    if (valid) {
        //disable the button
        $(element).attr("disabled", "disabled");

        $.cookie('booking_adults', adultsNum, { path: '/' });
        $.cookie('booking_u17', u17Num, { path: '/' });

        //get booking guid if there
        var bookingguid = $.cookie('booking_guid');
        //set value of input[name=bookingid]
        if (bookingguid) $(element).prevAll('input[name=bookingguid]').val(bookingguid);

        //serialise the form
        var action = f.attr("action");
        var serialisedForm = f.serialize();

        //submit to form action
        $.post(action, serialisedForm, function (data, textStatus) { AddSessionBookingCallback(data, textStatus); }, "json");
    }
    return false;
}
function AddSessionBookingCallback(data, textStatus) {
    //alert(data);
    var f = $('#ava_' + data.SessionId);
    if (data.AlreadyBooked) {
        if (confirm("You have already booked on this session.  Do you wish to add additional bookings?")) {
            f.find("input[name=isadditional]").val("true");

            AddSessionBooking(f.find("button"));
        } else {
            //hide availability form
            $("a.book").text("Book");
            f.parent(".availability-form").slideUp("slow").parent(".availability").removeClass("selected");
        }
    } else {
        if (data.Success) {
            $.cookie('booking_guid', data.BookingGuid, { path: '/' });
            //Clear form fields
            var adults = f.find("input[name=AdultNumber]");
            var u17 = f.find("input[name=U17Number]");
            adults.val("");
            u17.val("");

            LoadCartSummary(data.BookingGuid);

            //hide availability form
            $("a.book").text("Book");
            f.parent(".availability-form").slideUp("slow").parent(".availability").removeClass("selected");

        } else {
            alert(data.Message);
        }
    }
    f.find("button").removeAttr("disabled");
}
function LoadCartSummary(bookingId) {
    var date = new Date();
    $("#cart-summary").load("/bookingssupport.aspx/getsessioncartsummary/" + bookingId + "?ticks=" + date.getTime(),
        function () {
            //alert(("[" + $("#cart-summary").text()).indexOf("none") > 0 );
            if (("[" + $("#cart-summary").text()).indexOf("none") > 0) {
                clearBookingCookie();
                HideCart();
                $("#cart-summary").addClass("hide");
            } else {
                $("#cart-summary").removeClass("hide");
            }
        });
}
function LoadCart() {
    var bookingguid = $.cookie('booking_guid');
    if (bookingguid) {
        //alert(bookingguid);
        LoadCartSummary(bookingguid);
        LoadCartFull(bookingguid);
    }
}
function LoadCartFull(bookingId) {
    var date = new Date();
    var cart = $("#cart");
    cart.load("/bookingssupport.aspx/getsessioncart/" + bookingId + "?ticks=" + date.getTime());
    //$("#video").hide();
    showOverlay();
    cart.removeClass("hide");
    return false;
}
function updateBooking(element) {
    var sessionId = $(element).attr("data-sessionid");
    var guid = $(element).attr("data-guid");
    var u17Td = $(element).parent().prev();
    var u17 = u17Td.find("input");
    var u17Num = u17.val();
    var adultTd = u17Td.prev();
    var adults = adultTd.find("input");
    var adultsNum = adults.val();
    var valid = true;
    var spaces = $(element).attr("data-spacesavailable");

    //alert(sessionId + " " + guid + " " + adult + " " + u17);
    if ((!adultsNum) && (!u17Num)) {
        // Nothing in either box
        adults.addClass("error");
        u17.addClass("error");
        valid = false;
    } else {
        if ((!adultsNum) || isNumber(adultsNum)) {
            adults.removeClass("error");
            if (!adultsNum) adultsNum = 0;
        } else {
            adults.addClass("error");
            adultsNum = 0;
            valid = false;
        }
        if ((!u17Num) || isNumber(u17Num)) {
            u17.removeClass("error");
            if (!u17Num) u17Num = 0;
        } else {
            u17.addClass("error");
            u17Num = 0;
            valid = false;
        }

        if (!inRange(parseInt(u17Num) + parseInt(adultsNum), 1, spaces)) {
            valid = false;
            alert("There are not enough spaces available on this session")
        }
    }

    if (valid) {
        adults.removeClass("error");
        u17.removeClass("error");
    }


    if (valid) {
        UpdateSessionBooking(guid, sessionId, adultsNum, u17Num);
    }
}
function UpdateSessionBooking(bookingId, sessionId, adultsNum, u17sNum) {
    $.post("/bookingssupport.aspx/updatesessionbooking/" + bookingId,
              { SessionId: sessionId, AdultNumber: adultsNum, U17Number: u17sNum },
              function (data) {
                  if (data.Success) {
                      //alert(data.BookingId);
                      LoadCart(); // Full(data.BookingId);
                  } else {
                      alert(data.Message);
                  }
              },
              "json");
}
function deleteBooking(element) {
    var sessionId = $(element).attr("data-sessionid");
    var guid = $(element).attr("data-guid");
    //alert(sessionId + " " + guid);
    DeleteSessionBooking(guid, sessionId);
}
function DeleteSessionBooking(bookingId, sessionId) {
    $.post("/bookingssupport.aspx/deletesessionbooking/" + bookingId,
              { SessionId: sessionId },
              function (data) {
                  if (data.Success) {
                      LoadCart(); // Full(data.BookingId);
                  } else {
                      alert(data.Message);
                  }
              },
              "json");
}

function HideCart() {
    $("#cart").toggleClass("hide");
    hideOverlay();
    //$("#video").show();
}
function clearBookingCookie() {
    $.cookie('booking_guid', "", { path: '/' });
//    $.cookie('booking_adults', "", { path: '/' });
//    $.cookie('booking_u17', "", { path: '/' });
}
function showOverlay() { $("#overlay").removeClass("hide"); }
function hideOverlay() { $("#overlay").addClass("hide"); }
function showHideWait(show) {
    if (show) {
        showOverlay();
        $("#working-wait").removeClass("hide");
    } else {
        $("#working-wait").addClass("hide");
        hideOverlay();
    }
}

    // Page vars
    var messageInterval;

    $(document).ready(function () {
        //hide the all of the element with class msg_body
        $(".showhide_body").hide();
        //toggle the component with class msg_body
        $(".showhide_head").click(function () {
            $(this).next(".showhide_body").slideToggle(600);
        });
        $('a[href^="http"]').attr("target", "_blank");

        // Expanding textbox
        $(".expander").click(function () {
            $(this).next(".form-expanding-div").toggleClass("form-expanded-div");
            if ($(this).text() == 'Grow') {
                $(this).text('Shrink');
            } else {
                $(this).text('Grow');
            }
        });
        $(".showcal").datepicker({ showAnim: "fadeIn", dateFormat: "d MM, yy", numberOfMonths: 2 });
        //message dialog display on page load
        $("#message").hide();
        $("#message").addClass("message-dialog");
        $("#message").fadeIn(500);
        messageInterval = setInterval(function () { clearInterval(messageInterval); $("#message").fadeOut(500); }, 4000);
        $("a.popup").popup();
        $("#activity-summaries .activity-summary").hover(
            function () { $(this).children(".activity-desc").slideDown("fast"); },
            function () { $(this).children(".activity-desc").slideUp("fast"); }
        );
        /*
        $("#cart").delegate("click", "a", function (e) {
            var action = $(this).attr("class");
            switch (action) {
                case "delete":
                    var sessionId = $(this).attr("data-sessionid");
                    var guid = $(this).attr("data-guid");
                    alert(sessionId + " " + guid);
                    break;

                case "update":
                    var sessionId = $(this).attr("data-sessionid");
                    var guid = $(this).attr("data-guid");
                    var u17Td = $(this).parent().prev();
                    var u17 = u17Td.find("input").val();
                    var adultTd = u17Td.prev();
                    var adult = adult.find("input").val();
                    alert(sessionId + " " + guid + " " + adult + " " + u17);
                    break;

                default:
                    break;
            }
            return false;
        });
        */
        //Load cart Summary
        //get booking guid if there
        var bookingguid = $.cookie('booking_guid');
        if (bookingguid) LoadCartSummary(bookingguid);
    });





