﻿if (ATR.Site.Controls === undefined) {ATR.Site.Controls = {};}

var showwaitexists = true;
if ("undefined" === typeof showWait) {showwaitexists=false;}

ATR.Site.Controls.BookingEngine = {
    init: function()
    {
        currentdate = $("#hotelDate").val();
        if (currentdate == "")
        {
            tomorrow = new Date ();
            tomorrow.setDate (tomorrow.getDate() + 1)
            $("#hotelDate").val(tomorrow.format("dd/MM/yyyy"));
        }
    	$("#booking_container .tabs li a").bind("click",this.showengine);
	    $('#ddlRooms').change(this.updateRooms);
	    $('#themepark_tickettype').change(this.updatePrices);
	    this.bind();
    },
    bind: function()
    {
        $(".ddlChildAges").unbind("change");
    	$(".ddladults").unbind("change");
	    $(".ddlchildren").unbind("change");
        $(".ddlChildAges").change(this.updateChildAges);
    	$(".ddladults").change(this.updateAdults);
	    $(".ddlchildren").change(this.updateChildren);
    },
    showengine: function()
    {
	    $("#booking_container .tabs li a").removeClass("on");
	    $(this).addClass("on");
	    $(".enginecontainer").hide();
	    $("#" + $(this).attr("id") + "-panel").show();
	    return false;
    },
    updateRooms: function() {
        newrooms = parseInt($('#ddlRooms').val());
        roomdiff = newrooms - BookingRequest.RequestedRooms
        if (roomdiff > 0)
        {
            for(i = 1; i < roomdiff+1; i++)
            {
                roomnumber = BookingRequest.RequestedRooms + i;
                ATR.Site.Controls.BookingEngine.addroom(roomnumber);
            }
        }
           
        if (roomdiff < 0)
        {
            for(i = BookingRequest.RequestedRooms; i > (BookingRequest.RequestedRooms + roomdiff); i--)
            {
                $("#room_" + i).remove();
            }
        }
        ATR.Site.Controls.BookingEngine.bind();
        BookingRequest.RequestedRooms = newrooms;
    },
	updateAdults: function() {
        dd = $(this);
        room = dd.parents('.room');
        index = room.parent().index();
        BookingRequest.Rooms[index].Adults = parseInt(dd.val());
        ATR.Site.Controls.BookingEngine.bind();
    },
    updateChildren: function() {
        dd = $(this);
        room = dd.parents('.room');
        newchildren = parseInt(dd.val());
        index = room.parent().index();
        roomnumber = index + 1;
        BookingRequest.Rooms[index].Children = parseInt(dd.val());
        if (newchildren == 0)
        {
            children.html("");
        } else {
            prevchildren = 0;
            if (dd.data("previous") !== undefined)
            {
                prevchildren  = parseInt(dd.data("previous"));
            }
            childrendiff = newchildren - prevchildren;
            if (childrendiff > 0)
            {
                for(i = prevchildren +1; i <= newchildren; i++)
                {
                    ATR.Site.Controls.BookingEngine.addchild(roomnumber,i);
                }
            }
            if (childrendiff < 0)
            {
                for(i = prevchildren; i > (prevchildren + childrendiff); i--)
                {
                    $("#childage_" + roomnumber + "_" + i).remove();
                }
            }
        }
        dd.data("previous",dd.val());
        ATR.Site.Controls.BookingEngine.bind();
    },
    updateChildAges: function() {
        dd = $(this);
        room = dd.parents('.room');
        age = dd.parents('.age');
        roomindex = room.parent().index();
        ageindex = age.index();
        //while (BookingRequest.Rooms[roomindex].length < roomindex +1){BookingRequest.Rooms.push();}
        BookingRequest.Rooms[roomindex].Ages[ageindex] = parseInt(dd.val());
    },
    addchild: function(roomnumber, childnumber)
    {
        room = $('#room_' + roomnumber + ' .room');
	    children = room.children(".childAges");
        childrenhtml = '<div id="childage_' + roomnumber + '_'+childnumber+'" class="childLbl age">\
                            <div>\
                                <div class="left">Age of child ' + i +'</div>\
                                <div class="right">\
                                    <select id="ddlChildAges_' + roomnumber + '_' + childnumber +'" name="ddlChildAges_' + roomnumber + '_' + childnumber +'" class="ddlChildAges short">\
							            <option value="-1">-</option>\
                                        <option value="0">0</option>\
                                        <option value="1">1</option>\
                                        <option value="2">2</option>\
                                        <option value="3">3</option>\
                                        <option value="4">4</option>\
                                        <option value="5">5</option>\
                                        <option value="6">6</option>\
                                        <option value="7">7</option>\
                                        <option value="8">8</option>\
                                        <option value="9">9</option>\
                                        <option value="10">10</option>\
                                        <option value="11">11</option>\
                                    </select>\
                                </div>\
                            </div>\
                            <div class="rightLbl">Child ' + childnumber +'</div>\
                            <div style="clear:both;"></div>\
                        </div>';
        children.append(childrenhtml);
        if (BookingRequest.Rooms[roomnumber-1].Ages[childnumber-1] !== undefined)
        {
            $("#ddlChildAges_" + roomnumber + "_" + childnumber).val( parseInt(BookingRequest.Rooms[roomnumber-1].Ages[childnumber-1]));
        }
    },
    addroom: function(roomnumber)
    {
        elemrooms = $('#rooms');

        roomhtml = '<div id="room_'+roomnumber+'"><div class="room clearfix">\
                        <div class="row">\
                            <h3>Room ' + roomnumber + '</h3>\
                            <div class="left">Adults</div>\
                            <div class="right">\
                                <select id="ddlAdults' + roomnumber + '" name="ddlAdults' + roomnumber + '" class="short ddladults">\
                                    <option value="0">0</option>\
                                    <option value="1">1</option>\
                                    <option value="2">2</option>\
                                    <option value="3">3</option>\
                                    <option value="4">4</option>\
                                    <option value="5">5</option>\
                                </select>\
                            </div>\
                        </div>\
                        <div class="left childLbl">\
                            <div>Children</div>\
                        </div>\
                        <div class="right">\
                            <select id="ddlChildren' + roomnumber + '" name="ddlChildren' + roomnumber + '" class="short ddlchildren">\
                                <option value="0">0</option>\
                                <option value="1">1</option>\
                                <option value="2">2</option>\
                                <option value="3">3</option>\
                                <option value="4">4</option>\
                                <option value="5">5</option>\
                            </select>\
                        </div>\
                        <div class="rightLbl">(under 12)</div>\
                        <div style="clear:both;"></div>\
                        <div class="childAges"></div>\
                        <hr class="spacer" />\
                      </div></div>';

        while (BookingRequest.Rooms.length < roomnumber){BookingRequest.Rooms.push(new RoomRequest());}
        elemrooms.append(roomhtml);
        
        $('#ddlAdults' + roomnumber).val(BookingRequest.Rooms[roomnumber -1].Adults);
        $('#ddlAdults' + roomnumber).data("previous",BookingRequest.Rooms[roomnumber -1].Adults);
        
        $('#ddlChildren' + roomnumber).val(BookingRequest.Rooms[roomnumber -1].Children);
        if(BookingRequest.Rooms[roomnumber -1].Children > 0)
        {
            prevchildren = BookingRequest.Rooms[roomnumber -1].Children;
            $('#ddlChildren' + roomnumber).data("previous",prevchildren);
            for (i = 1; i <= prevchildren;i++){this.addchild(roomnumber, i);}
        }
    },
    updatePrices: function(){
        dd = $(this);
        ticket = ZeusTickets[dd.val()];
        if (ticket.Family === undefined)
        {
            $("#familytickets").hide();
        } else {
            $("#themepark_price4").html("£"+ticket.Family.price.formatMoney());
            $("#familytickets").show();
        }
        
        $("#themepark_price1").html("£"+ticket.Adult.price.formatMoney());
        $("#themepark_price2").html("£"+ticket.Child.price.formatMoney());
        $("#themepark_price3").html("£"+ticket.Senior.price.formatMoney());
    },
    searchallhotels: function()
    {
        if (showwaitexists){showWait();}
        refer = encodeURIComponent(hxtrack_base64_encode(location.href));
        refer2 = encodeURIComponent(location.href);
        seattype = $("#ddlNights").val();
        date = $("#hotelDate").val();
        parkdate = encodeURIComponent(date);
        requesturl = "http://alton.merlinbreaks.co.uk/merlinAlton/?agent=ATC01&refer=" + refer + "&refer2=" + refer2 + "&parkCode=THMATA&Nights=" + seattype + "&ParkDate=" + parkdate + "&submit=Search";
        window.location = requesturl;
        return false;
    },
    searchaltonhotels: function()
    {
        if (showwaitexists){showWait();}
        BookingRequest.PromoCode = $('#promocode').val();
        BookingRequest.Nights = parseInt($('#ddlNights').val());
        BookingRequest.Date = $("#hotelDate").val();
        while (BookingRequest.Rooms.length > BookingRequest.RequestedRooms){BookingRequest.Rooms.pop();}
        for(i = 0; i<BookingRequest.Rooms.length;i++)
        {
            while (BookingRequest.Rooms[i].Ages.length > BookingRequest.Rooms[i].Children){BookingRequest.Rooms[i].Ages.pop();}
            while (BookingRequest.Rooms[i].Ages.length < BookingRequest.Rooms[i].Children){BookingRequest.Rooms[i].Ages.push(-1);}
            for(j = 0; j<BookingRequest.Rooms[i].Ages.length;j++)
            {
                if (BookingRequest.Rooms[i].Ages[j] === undefined)
                {
                    BookingRequest.Rooms[i].Ages[j] = -1;
                }
            }
        }
        str = Ektron.JSON.stringify(BookingRequest);
        $.ajax({
            async: true,
            url: '/site/controls/bookingengine/Handler.ashx',
            type: 'POST',
            data: { "request": str },
            dataType: 'json',
            success: function (data, textStatus) {
                ATR.Site.Controls.BookingEngine.searchfinshed(data);
            }
        })

        return false;
    },
    searchfinshed: function (response){
        if (response.Success)
        {
            window.location = response.Link;
        } else {
            hideWait();
        }
    },
    booktickets: function(productcode, adults, children, seniors, family, date)
    {
        url = "https://secure.altontowersresort.com/webapp/wcs/stores/servlet/StoreView?storeId=10651";
	    tickettypes = "";
        if (adults > 0 || children > 0 || seniors > 0 || family > 0)
	    {
    	    atcode = ZeusTickets[productcode].Adult.code;
            ctcode = ZeusTickets[productcode].Child.code;
            stcode = ZeusTickets[productcode].Senior.code;
            ftcode = ZeusTickets[productcode].Family.code;
    	    
	        tickettypecounter = 1;
	        if (adults > 0 && atcode != "")
	        {
		        tickettypes += "&visitorType_1=" + atcode + "_" + adults;
		        tickettypecounter++;
	        }
	        if (children > 0 && ctcode != "")
	        {
		        tickettypes+="&visitorType_" + tickettypecounter + "=" + ctcode + "_" + children;
		        tickettypecounter++;
	        }
	        if (seniors > 0 && stcode != "")
	        {
		        tickettypes+="&visitorType_" + tickettypecounter + "=" + stcode + "_" + seniors;
		        tickettypecounter++;
	        }
	        if (family > 0 && ftcode != "")
	        {
		        tickettypes+="&visitorType_" + tickettypecounter + "=" + ftcode + "_" + family;
		        tickettypecounter++;
	        }
        }
	    requesturl = url + "&productId=" + productcode + tickettypes + "&visitDate=" + date;
        _gaq.push(['_link', requesturl]);
        return false;
    },
    themeparktickets: function()
    {
        productcode = $("#themepark_tickettype").val();
	    adults = $("#themepark_adult").val();
	    children = $("#themepark_child").val();
	    seniors = $("#themepark_senior").val();
	    family = $("#themepark_family").val();
	    date = $("#themepark_date").val().replace(/\//gi, "-");

        this.booktickets(productcode, adults, children, seniors, family, date);
        return false;
    },
    waterparktickets: function()
    {
	    adults = $("#waterpark_adult").val();
	    children = $("#waterpark_child").val();
	    seniors = $("#waterpark_senior").val();
	    family = $("#waterpark_family").val();
        date = $("#waterpark_date").val().replace(/\//gi, "-");
        
        this.booktickets("5911000105", adults, children, seniors, family, date);
        return false;
    }    
}

BookingRequest =
{
    "RequestedRooms": 1,
    "Rooms": [new RoomRequest()]
}

function RoomRequest()
{
    this.Adults = 2;
    this.Children = 0;
    this.Ages =[];
}

$(document).ready(function(){
    ATR.Site.Controls.BookingEngine.init();
});

Number.prototype.formatMoney = function(c, d, t){
    var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "." : d, t = t == undefined ? "," : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

