$(document).ready(function () {

    DatePicker();
    CheckTripType()

    var hostUrl = window.location.pathname;
    var tripType = $("#TripType").val();
    var dropTripType = document.getElementById("TripType");
    if (hostUrl.match("annual") != null) {
        $("#TripType option[value='Annual']").attr("selected", "selected");
        tripType = "Annual";
        $("#EndDateWrapper").css('display', 'none');
    }
    if ((hostUrl.match("long") != null) || (hostUrl.match("backpacker") != null)) {
        $("#TripType option[value='LongStay']").attr("selected", "selected");
        tripType = "LongStay";
    }
    if (hostUrl.match("winter") != null) {
        $("#Option").val("winter");
        $("#TripType option:not(:contains(Ski))").each(function () {
            $(this).append(" (with Ski cover)");
        });
        $("#TripType option[value='LongStay']").remove();
    }
    if (hostUrl.match("golf") != null) {
        $("#Option").val("golf");
        $("#TripType option:not(:contains(Golf))").each(function () {
            $(this).append(" (with Golf cover)");
        });
        $("#TripType option[value='LongStay']").remove();
    }
    if (hostUrl.match("business") != null) {
        $("#Option").val("business");
        $("#TripType option:not(:contains(Business))").each(function () {
            $(this).append(" (with Business cover)");
        });
        $("#TripType option[value='LongStay']").remove();
    }
    if (hostUrl.match("cruise") != null) {
        $("#Option").val("cruise");
        $("#TripType option:not(:contains(Cruise))").each(function () {
            $(this).append(" (with Cruise cover)");
        });
        $("#TripType option[value='LongStay']").remove();
    }

    $("[id$=TripType]").change(function () {
        var tripType = $("#TripType").val();
        if (tripType == "Annual") {
            var startDateString = $("#StartDate").get(0).value;
            var endDateString = CreateEndDate(startDateString);
            $("[id$=EndDate]").get(0).value = endDateString;
        }
        CheckTripType()
    });

    $("[id$=TravellerQuantity]").change(function () {
        var qRequired = parseInt($(this).val());
        CreateAgeBoxes(qRequired);
    });

    $("[id$=GroupType]").change(function () {
        var groupType = $("[id$=GroupType]").val();
        var travellerQuantity = $("[id$=TravellerQuantity]").val();
        if (groupType == "Individual") {
            $("#TravellerQuantity option[value='1']").attr("disabled", false);
            $("#TravellerQuantity option[value='1']").attr("selected", "selected");
            $("#TravellerQuantity").attr("disabled", true);
        }
        else if (groupType == "Couple") {
            $("#TravellerQuantity option[value='1']").attr("disabled", false);
            $("#TravellerQuantity option[value='2']").attr("disabled", false);
            $("#TravellerQuantity option[value='2']").attr("selected", "selected");
            $("#TravellerQuantity").attr("disabled", true);
        }
        else if (groupType == "Family") {
            $("#TravellerQuantity option[value='1']").attr("disabled", true);
            $("#TravellerQuantity option[value='2']").attr("disabled", false);
            $("#TravellerQuantity option[value='3']").attr("disabled", false);
            $("#TravellerQuantity option[value='3']").attr("selected", "selected");
            $("#TravellerQuantity").attr("disabled", false);
        }
        else if (groupType == "GroupOfPeople") {
            $("#TravellerQuantity").attr("disabled", false);
            if (travellerQuantity == 1) {
                $("#TravellerQuantity option[value='1']").attr("disabled", true);
                $("#TravellerQuantity option[value='2']").attr("disabled", false);
                $("#TravellerQuantity option[value='3']").attr("disabled", false);
                $("#TravellerQuantity option[value='3']").attr("selected", "selected");
            }
        }
        travellerQuantity = $("[id$=TravellerQuantity]").val();
        CreateAgeBoxes(travellerQuantity);
    });


    $("[id=btnTripContinue]").click(function () {

        var travellers = $("[id$=TravellerQuantity]").val();
        var relationship = $("[id$=GroupType]").val();

        if (travellers == 0) {
            alert("There should be at least 1 traveller");
            return false;
        }
        if ((relationship == "Individual") && (travellers > 1)) {
            alert("There can be only 1 traveller when 'Individual' is selected");
            return false;
        }
        if (relationship == 'Couple' && (travellers != 2)) {
            alert("There must be 2 adults on a 'Couple' policy");
            return false;
        }
        if (relationship == 'GroupOfPeople' && (travellers < 2)) {
            alert("Number of travellers should be more than one");
            return false;
        }

        $("[id$=quoteform-trip]").hide();
        var hasMedical = $("[id$=MedicalCondition]").val();
        if (hasMedical == "true") {
            CreateAgeBoxes(travellers);
            $("[id$=quoteform-medical]").show();
        }
        else {
            CreateAgeBoxes(travellers);
            $("[id$=quoteform-travellers]").show();
        }
    });

    $("[id=btnMedicalContinue]").click(function () {
        $("[id$=quoteform-trip]").hide();
        $("[id$=quoteform-medical]").hide();
        $("[id$=quoteform-travellers]").show();
    });

    $("[id=btnMedicalContinue]").click(function () {
        $("[id$=quoteform-trip]").hide();
        $("[id$=quoteform-medical]").hide();
        $("[id$=quoteform-travellers]").show();
    });

    $("[id=btnBackTravellers]").click(function () {
        $("[id$=quoteform-travellers]").hide();
        var hasMedical = $("[id$=MedicalCondition]").val();
        if (hasMedical == "true") {
            $("[id$=quoteform-medical]").show();
        }
        else {
            $("[id$=quoteform-trip]").show();
        }
    });

    $("[id=btnBackMedical]").click(function () {
        $("[id$=quoteform-trip]").show();
        $("[id$=quoteform-medical]").hide();
        $("[id$=quoteform-travellers]").hide();
    });

    // Newsletter and Recommend a friend boxes
    var optionsNewsletter = {
        clearForm: true,
        success: function () {
            alert('Thanks for you signing up to our newsletter!');
        }
    };
    $('#newsletter-signup').ajaxForm(optionsNewsletter);

    var optionsFriend = {
        clearForm: true,
        success: function () {
            alert('Thanks for recommending Teletext Travel Insurance to a friend!');
        }
    };
    $('#recommend-friend').ajaxForm(optionsFriend);

});


function CreateAgeBoxes(boxesToCreate) {
    var qRequired = boxesToCreate;
    var qRendered = $('.travellerage').size();
    var qToRender = qRequired - qRendered;
    var html = "";
    if (qToRender > 0) {
        for (i = qRendered + 1; i < qRendered + qToRender + 1; i++) {
            html = html + '<div id="traveller' + i + '" class="group travellerage"><label for="traveller' + i + 'age" id="traveller' + 1 + 'agelabel" class="travellerquantity">Traveller ' + i + ' Age:</label><input name="traveller' + i + 'age" id="traveller' + i + 'age"" type="text" class="travelleragebox inputbox inputboxtiny"  /></div>'
        }
        $(html).insertAfter(".travellerage:last");
    }
    else if (qToRender < 0) {
        var qToRemove = Math.abs(qToRender);
        for (i = qRendered; i > (qRendered - qToRemove); i--) {
            $('#traveller' + i).remove();
        }
    }
}

this.DatePicker = function () {

    var maximumDate;
    var tripType = $("[id$=TripType]").val();

    $.datepicker.setDefaults({
        showOn: 'both',
        buttonImageOnly: true,
        buttonImage: '/styles/images/calendar.gif',
        buttonText: 'Calendar',
        dateFormat: 'dd/mm/yy',
        minDate: 0,
        maxDate: 365
    });

    $("[id$=StartDate]").datepicker();
    $("[id$=EndDate]").datepicker();

    $("[id$=StartDate]").val($.datepicker.formatDate('dd/mm/yy', addDays(new Date(), 1)));
    $("[id$=EndDate]").val($.datepicker.formatDate('dd/mm/yy', addDays(new Date(), 7)));

    $(".ui-datepicker-trigger").css('margin-left', '6px');

    $(".ui-datepicker-trigger").hover(function () {
        $(this).css('cursor', 'hand');
        $(this).attr("src", "/styles/images/calendar_over.gif");
    }, function () {
        $(this).attr("src", "/styles/images/calendar.gif");
    });
}

function CheckTripType() {

    var hostUrl = window.location.pathname;
    var tripType = $("#TripType").val();
    var dropTripType = document.getElementById("TripType");

    //    if (hostUrl.match("annual") != null) {
    //        $("#TripType option[value='Annual']").attr("selected", "selected");
    //        $("#TripType option[value='SingleTrip']").remove();
    //        tripType = "Annual";
    //    }
    //    if (hostUrl.match("single") != null) {
    //        $("#TripType option[value='SingleTrip']").attr("selected", "selected");
    //        $("#TripType option[value='Annual']").remove();
    //        tripType = "SingleTrip";
    //    }
    //    if (hostUrl.match("golf") != null) {
    //        $("#TripType option:not(:contains(Golf))").each(function () {
    //            $(this).append(" (with Golf cover)");
    //        });
    //        $("#PolicyOption").val("golf");
    //    }
    //    if (hostUrl.match("business") != null) {
    //        $("#TripType option:not(:contains(Business))").each(function () {
    //            $(this).append(" (with Business cover)");
    //        });
    //        $("#PolicyOption").val("business");
    //    }
    //    if (hostUrl.match("winter") != null) {
    //        $("#TripType option:not(:contains(Winter))").each(function () {
    //            $(this).append(" (with Winter Sports cover)");
    //        });
    //        $("#PolicyOption").val("winter");
    //    }

    if (tripType == 'Annual') {
        $("#EndDateWrapper").css('display', 'none');
        $("#StartDateLabel").text('Start Date:');
    }
    else {
        $("#EndDateWrapper").css('display', 'block');
        $("#StartDateLabel").text('Depart Date:');
    }
}

function addText(sel, text) {
    for (var i = 0, limit = sel.options.length; i < limit; i++) {
        var txt = sel.options[i].text;
        if (txt.indexOf(text) != -1) continue;
        sel.options[i].text += text;
    }
}

function validateFormOnSubmit(thisform) {

    var travellers = 0;
    var relationship = $("#GroupType").val();
    var destination = $("#Destination").val();
    var tripType = $("#TripType").val();
    var residentcountry = $("#residentcountry").val();

    var medicalQuestionOne = $("#medical1").val();
    var medicalQuestionTwo = $("#medical2").val();

    if ((medicalQuestionOne == "true") || (medicalQuestionTwo == "true")) {

        if (residentcountry != "United Kingdom") {
            alert("Sorry, cover for pre-existing medical conditions is not availble to EU customers");
            return false;
        }
        else {
            alert("As you answered \"Yes\" to one or both of the \"Medical Details\" questions you must call 0845 250 5247 to buy your travel insurance");
            return false;
        }
    }

    $(".travelleragebox").each(function () {
        try {
            var value = parseInt($(this).val());
            if (tripType == "Annual" && value > 79) {
                alert("Sorry the maximum age for Annual Multi-trip cover is 79");
                return false;
            }
            else if (tripType == "SingleTrip" && value > 89) {
                alert("Sorry the maximum age for Single Trip cover is 89");
                return false;
            }
            else if (value > 0) {
                travellers = travellers + 1;
            }
        }
        catch (err) {
            alert("Please enter an age");
            return false;
        }
    });

    if (travellers == 0) {
        alert("There should be at least 1 traveller");
        return false;
    }
    if ((relationship == "Individual") && (travellers > 1)) {
        alert("There can be only 1 person on this policy");
        return false;
    }
    if (relationship == 'Couple' && (travellers != 2)) {
        alert("There must be 2 adults on a couple policy");
        return false;
    }
    if (relationship == 'GroupOfPeople' && (travellers < 2)) {
        alert("Number of travellers should be more than one");
        return false;
    }

    //check the dates
    var reDate = /^(0?[1-9]|([12]\d)|(3[01]))\/(0?[1-9]|(1[012]))\/20\d{2}$/

    var startDate = $("[id$=StartDate]").val();
    if (!startDate.match(reDate)) {
        alert('Departure date should be in following format DD/MM/YYYY. Please, check the date.');
        return false;
    }

    var a = startDate.split('/');
    var d1 = new Date(a[2], a[1] - 1, a[0], 0, 0, 0, 0);

    if (tripType == "Annual") {
        var d2 = addDays(d1, 365);
    }
    else {
        var endDate = $("[id$=EndDate]").val();
        if (!endDate.match(reDate)) {
            alert('Return date should be in following format DD/MM/YYYY. Please, check the date.');
            return false;
        }
        a = endDate.split('/');
        var d2 = new Date(a[2], a[1] - 1, a[0], 0, 0, 0, 0);
    }

    var d = new Date();
    d = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0);

    //    if (d1.getTime() < addDays(d, 1)) {
    //        alert('Departure date cannot be before tomorrow');
    //        return false;
    //    }

    if (d2.getTime() < d1.getTime()) {
        alert('Return date cannot be before departure');
        return false;
    }

    return true;
}

function addDays(myDate, days) {
    return new Date(myDate.getTime() + days * 24 * 60 * 60 * 1000);
}

function CreateEndDate(inputDateString) {

    var dateParts = inputDateString.split("/");
    var date1 = new Date(dateParts[1] + "/" + dateParts[0] + "/" + dateParts[2]);

    var year = date1.getFullYear();
    var mon = date1.getMonth() + 1;
    var day = date1.getDate();

    if (day == 1) {

        switch (mon) {
            case 1:
                day = 31;
                break;
            case 2:
                day = 31;
                break;
            case 3:
                if (isLeapYear(year)) {
                    day = 29;
                    break;
                }
                else {
                    day = 28;
                    break;
                }
            case 4:
                day = 31;
                break;
            case 5:
                day = 30;
                break;
            case 6:
                day = 31;
                break;
            case 7:
                day = 30;
                break;
            case 8:
                day = 31;
                break;
            case 9:
                day = 31;
                break;
            case 10:
                day = 30;
                break;
            case 11:
                day = 30;
                break;
            case 12:
                day = 30;
                break;
            default:
                break;
        }

        if (mon == 1) {
            mon = 12;
            year = year;
        }
        else {
            mon = mon - 1;
            year = year + 1;
        }
    }
    else {
        day = day - 1;
        year = year + 1;
    }

    return leadingZero(day) + "/" + leadingZero(mon) + "/" + year;

}

function isLeapYear(yr) {
    return new Date(yr, 2 - 1, 29).getDate() == 29;
}

function leadingZero(nr) {
    if (nr < 10) nr = "0" + nr;
    return nr;
}

function openBrwsrWindow(urlString, winName, width, height) {
    posx = (screen.width / 2) - (width / 2)
    posy = (screen.height / 2) - (height / 2)
    if (posx < 0) { posx = 0; }
    if (posy < 0) { posy = 0; }

    window.open(urlString, winName, 'width=' + width + ',height=' + height + ',scrollbars=yes,status=no,toolbar=no,resizable=yes,left=' + posx + ',top=' + posy);
}