﻿var isSeasonPasses = false;
$(function() {
	$(".BuildMyTripForm input:radio").bind("click", function(){
	    var Heavenly        = "94b93799-3a60-4a59-b715-f010640e0fb8";
	    var Vail            = "b83de25a-2851-4c0c-a140-f1e9d025234c";
	    var Keystone        = "fbac9f42-158c-44af-92f0-c25a54047393";
	    var Beavercreek     = "5350cedf-9d41-4f1a-b388-517affdbbdb4";
	    var Breckenridge    = "f1adaa57-af9e-4cb3-8a3f-4a12a4a41c03";
	    
	    switch ($(this).val()){
	        case Heavenly:
	        case Vail:
	        case Keystone:
	        case Beavercreek:
	        case Breckenridge:
			    $("fieldset.datesAndTravellers").hide();
			    isSeasonPasses = true;
	            break;
	        default:
			    $("fieldset.datesAndTravellers").show();
			    isSeasonPasses = false;
	        break;
	    }
	});
    $('[id$=txtCheckInDate]').bind("change", function() {
        if($('[id$=txtCheckInDate]').val() != '' && IsDateMMDDYYYY($('[id$=txtCheckInDate]').val())) {
            var NewDate = new Date($('[id$=txtCheckInDate]').val());
            NewDate.setDate(NewDate.getDate() + 1);
            $('[id$=txtCheckOutDate]').datepicker('option', 'minDate', NewDate);
            $('[id$=txtCheckOutDate]').datepicker('setDate', NewDate);            
        }
    });
    $('[id$=txtCheckInDate]').datepicker("option", "onSelect", function() {
        if($('[id$=txtCheckInDate]').val() != '' && IsDateMMDDYYYY($('[id$=txtCheckInDate]').val())) {
            var NewDate = new Date($('[id$=txtCheckInDate]').val());
            NewDate.setDate(NewDate.getDate() + 1);
            $('[id$=txtCheckOutDate]').datepicker('option', 'minDate', NewDate);
            $('[id$=txtCheckOutDate]').datepicker('setDate', NewDate);            
        }
    });
    $("#selProductTopLeftGrey").removeClass("topLeftLightGrey");
    $("#selProductMiddleLeftGrey").removeClass("middleLeftLightGrey");
    $("#selProductLightGreyBox").removeClass("lightGreyBox");
    $("#selProductBottomLeftGrey").removeClass("bottomLeftLightGrey");
    //$("#selProductBottomLeftGrey ul").removeClass("item_itinerary");
    $(".buildMyTripContent .item_itinerary").removeClass("item_itinerary");
    $("[id$=noProductSelectedErrorMessage]").addClass("hide");
    $(".buildMyTripContent .itineraryBtn").addClass("hide");
    $(".buildMyTripContent .itineraryBox h4").addClass("hide");

    $("[id$=kidsNoAdded]").unbind("change").bind("change", function() {
        if ($("[id$=kidsNoAdded]").val() > 0) {
            $("#" + 'howOldAreChildrenText').removeClass("hideDiv");
        }
        else {
            $("#" + 'howOldAreChildrenText').attr("class", "hideDiv");
        }
        $("ul#addDropBox li").addClass("hideDiv");
        $("ul#addDropBox li:lt(" + $(this).val() + ")").removeClass("hideDiv");
    });

    $("input[id $= 'txtCheckInDate']").change(function() {
        var enteredDateValue = $("input[id $= 'txtCheckInDate']").val();

        // RegEx Pattern for validating date syntax
        var RegExPattern = /^\d{1,2}\/\d{1,2}\/\d{1,4}$/;
        if ((enteredDateValue.match(RegExPattern)) && (enteredDateValue != '')) {
            var str = enteredDateValue.split('/');

            if (str[2].length == 2) {
                var enteredDate = new Date(enteredDateValue);
                if (enteredDate.getFullYear() < 2000) {
                    enteredDate = new Date(Math.round(enteredDate.getMonth() + 1) + '/' + enteredDate.getDate() + '/' + Math.round(enteredDate.getFullYear() + 100));
                    $("input[id $= 'txtCheckInDate']").val(Math.round(enteredDate.getMonth() + 1) + '/' + enteredDate.getDate() + '/' + enteredDate.getFullYear());
                }
            }
        }
    });

    $("input[id $= 'txtCheckOutDate']").change(function() {
        var enteredDateValue = $("input[id $= 'txtCheckOutDate']").val();

        // RegEx Pattern for validating date syntax
        var RegExPattern = /^\d{1,2}\/\d{1,2}\/\d{1,4}$/;
        if ((enteredDateValue.match(RegExPattern)) && (enteredDateValue != '')) {
            var str = enteredDateValue.split('/');
            if (str[2].length == 2) {
                var enteredDate = new Date(enteredDateValue);
                if (enteredDate.getFullYear() < 2000) {
                    enteredDate = new Date(Math.round(enteredDate.getMonth() + 1) + '/' + enteredDate.getDate() + '/' + Math.round(enteredDate.getFullYear() + 100));
                    $("input[id $= 'txtCheckOutDate']").val(Math.round(enteredDate.getMonth() + 1) + '/' + enteredDate.getDate() + '/' + enteredDate.getFullYear());
                }
            }
        }
    });

/* added to fix - artf1015888 : K | Book A Vacation | Color of Continue button is incorrect [SA] */
if("#keystone".length>0){
    $("#keystone .buildMyTrip .buildMyTripContent ul.datesTravelers li.btnContainer span").removeClass("btnGrey");
    }

if("#vail".length>0){
    $("#vail .buildMyTrip .buildMyTripContent ul.datesTravelers li.btnContainer input").removeClass("activeBtnVacation");
    }    
/* end of fix - artf1015888 [SA]*/

});

//This function validates if total number of travelers is greater than 19.
function ValidateTotalNumberOfTravelers(val, args) {
    var totalTravelers = Number($("#" + val.controltovalidate).val()) + Number($("[id$=kidsNoAdded]").val());
    
    if (totalTravelers > 19) {
        args.IsValid = false;
    } else {
        args.IsValid = true;
    }
    return args.IsValid;
}

//This function checks if user has selected any product or not.
function HasUserSelectedAnyProduct(val, args) {
    if ($(".BuildMyTripForm input:radio:checked").length > 0) {
        args.IsValid = true;
    }
    else {
        args.IsValid = false;
    }
    return (args.IsValid);
}


//This function calculates difference between two dates
function DateDiff(strDate1,strDate2) {
    var one_day = 1000 * 60 * 60 * 24;
    date1 = new Date(strDate1.split('/')[2], (strDate1.split('/')[0] - 1), strDate1.split('/')[1]);
    date2 = new Date(strDate2.split('/')[2], (strDate2.split('/')[0] - 1), strDate2.split('/')[1]);

    var difference = Math.ceil((date1.getTime() - date2.getTime()) / (one_day));
    return (difference);
}

//The function fires the checkout date range validator if check out date is 
//entered in correct format.
function validateGeneralInfo(productSelectionValidator, reqdCheckInDateValidator, checkInDateRegularExpressionValidator, reqdCheckOutDateValidator, checkOutDateRegularExpressionValidator, datesComparer, checkoutDateRangeValidator, checkInDateRangeValidator, checkoutDateLessThanCurValidator, checkInDateWithinYearValidator, reqdadultTravelersRequiredValidator, totalNumberOfTravelersValidator) {
    var doValidation = false;
    var validationResult = false;
    var requiredValidatorsFailed = false;
    var regExValidatorsFailed = false;
    var checkInDateMissing = false;
    var checkOutDateMissing = false;
    var checkInDateIsNotLessThanEqualToCurrent = false;
    var checkOutDateIsNotLessThanEqualToCurrent = false;
    var checkInDateFormatIsCorrect = false;
    var adultTravelersSelected = true;
    var isProductSelected = false;
    var areDatesFine = false;
    var totalTraverlersExceededTheLimit = false;
    var checkInDateIsWithinAYear = false;
    var validatorIDs = new Array();

    var checkInDateFormatErrorMessage = 'Check In Date - Check In Date format must be MM/DD/YYYY.<br/>';
    var checkOutDateFormatErrorMessage = 'Check Out Date - Check Out Date format must be MM/DD/YYYY.<br/>';
    
    var requiredFieldMissingErrorMessage = '<li>Please complete the following required fields:<br/>';
    var regExValidationErrorMessage = '<li>You have entered the following invalid data:<br/>';

    //if season passes is selected then don't do any validation - prateek artf996898 
    if(isSeasonPasses)
    {
        return true;
    }
    else
    {
        $("[id$='requiredErrorMessageSummary']").addClass("errorMessage");
        $("[id$='regularExpressionValidationSummary']").addClass("errorMessage");
        $("[id$='requiredErrorMessageSummary']").html("");
        $("[id$='regularExpressionValidationSummary']").html("");

        for (var i = 0; i < Page_Validators.length; i++) {
            var key = Page_Validators[i].id;
            var value = i;
            validatorIDs[key] = value;
        }

        ValidatorValidate(Page_Validators[validatorIDs[productSelectionValidator]]);

        if (Page_Validators[validatorIDs[productSelectionValidator]].isvalid == true) {
            isProductSelected = true;
        }

        for (validator in validatorIDs) {
            if (validator.indexOf('reqd') > -1) {
                ValidatorValidate(Page_Validators[validatorIDs[validator]]);
                if (Page_Validators[validatorIDs[validator]].isvalid == false) {

                    $("#" + Page_Validators[validatorIDs[validator]].controltovalidate).closest("li").find("label").addClass("required");

                    requiredFieldMissingErrorMessage += "" + $("#" + Page_Validators[validatorIDs[validator]].controltovalidate).closest("li").find("label").text().replace(/:/, '') + "<br/>";

                    $("[id$='requiredErrorMessageSummary']").html(requiredFieldMissingErrorMessage);

                    requiredValidatorsFailed = true;

                    if (Page_Validators[validatorIDs[validator]].controltovalidate.indexOf('txtCheckInDate') > -1) {
                        checkInDateMissing = true;
                    }

                    if (Page_Validators[validatorIDs[validator]].controltovalidate.indexOf('txtCheckOutDate') > -1) {
                        checkOutDateMissing = true;
                    }

                    if (Page_Validators[validatorIDs[validator]].controltovalidate.indexOf('adultNo') > -1) {
                        adultTravelersSelected = false;
                    }
                }
                else {
                    $("#" + Page_Validators[validatorIDs[validator]].controltovalidate).closest("li").find("label").removeClass("required");
                }
            }
        }

        requiredFieldMissingErrorMessage += "</li>";

        if (checkInDateMissing == false) {
            ValidatorValidate(Page_Validators[validatorIDs[checkInDateRegularExpressionValidator]]);
            if (Page_Validators[validatorIDs[checkInDateRegularExpressionValidator]].isvalid == false) {
                validationResult = false;
                regExValidationErrorMessage += checkInDateFormatErrorMessage;
                $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
                $("#" + Page_Validators[validatorIDs[checkInDateRegularExpressionValidator]].controltovalidate).closest("li").find("label").addClass("required");
            }
            else {
                validationResult = true;
                checkInDateFormatIsCorrect = true;
                $("#" + Page_Validators[validatorIDs[checkInDateRegularExpressionValidator]].controltovalidate).closest("li").find("label").removeClass("required");
            }
        }

        if (checkOutDateMissing == false) {
            ValidatorValidate(Page_Validators[validatorIDs[checkOutDateRegularExpressionValidator]]);
            if (Page_Validators[validatorIDs[checkOutDateRegularExpressionValidator]].isvalid == false) {
                doValidation = false;
                regExValidationErrorMessage += checkOutDateFormatErrorMessage;
                $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
                $("#" + Page_Validators[validatorIDs[checkOutDateRegularExpressionValidator]].controltovalidate).closest("li").find("label").addClass("required");
            }
            else {
                doValidation = true;
                $("#" + Page_Validators[validatorIDs[checkOutDateRegularExpressionValidator]].controltovalidate).closest("li").find("label").removeClass("required");
            }
        }
        
        if (isProductSelected == false) {
            requiredFieldMissingErrorMessage += 'Select atleast one product';
            $("[id$='requiredErrorMessageSummary']").html(requiredFieldMissingErrorMessage);
        }
        
        if (validationResult == true) {
            //$("[id$=regularExpressionValidationSummary]").html("");
            ValidatorEnable(Page_Validators[validatorIDs[checkInDateRangeValidator]], true);
            ValidatorValidate(Page_Validators[validatorIDs[checkInDateRangeValidator]]);
            
            if (Page_Validators[validatorIDs[checkInDateRangeValidator]].isvalid == true) {
                checkInDateIsNotLessThanEqualToCurrent = true;
            }
            else {
                regExValidationErrorMessage += 'Check In - Check In date cannot be less than current date + 2-Days.<br/>Please re-enter your data.<br/>';
                $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
            }
                
            ValidatorEnable(Page_Validators[validatorIDs[checkInDateWithinYearValidator]], true);
            ValidatorValidate(Page_Validators[validatorIDs[checkInDateWithinYearValidator]]);
            
            if (Page_Validators[validatorIDs[checkInDateWithinYearValidator]].isvalid == true) {
                checkInDateIsWithinAYear = true;
            }
            else {
                regExValidationErrorMessage += 'Check In - Check In date cannot be greater than 365 days from current date.<br/>Please re-enter your data.<br/>';
                $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
            }
        }
        else {
            ValidatorEnable(Page_Validators[validatorIDs[checkInDateRangeValidator]], false);
        }
        
        if (doValidation == true) {
            ValidatorEnable(Page_Validators[validatorIDs[checkoutDateLessThanCurValidator]], true);
            ValidatorValidate(Page_Validators[validatorIDs[checkoutDateLessThanCurValidator]]);
            
            if (Page_Validators[validatorIDs[checkoutDateLessThanCurValidator]].isvalid == false) {
                checkOutDateIsNotLessThanEqualToCurrent = false;
                regExValidationErrorMessage += 'Check Out - Check Out date cannot be less than current date + 2-Days.<br/>Please re-enter your data.<br/>';
                $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
            }
            else {
                checkOutDateIsNotLessThanEqualToCurrent = true;
                ValidatorEnable(Page_Validators[validatorIDs[checkoutDateLessThanCurValidator]], false);
            }

            if (((checkOutDateIsNotLessThanEqualToCurrent == true) && (checkInDateFormatIsCorrect == false)) || ((checkOutDateIsNotLessThanEqualToCurrent == true) && (checkInDateMissing == true)) || ((checkOutDateIsNotLessThanEqualToCurrent == true) && (checkInDateFormatIsCorrect == true))) {
                ValidatorEnable(Page_Validators[validatorIDs[checkoutDateRangeValidator]], true);
                ValidatorValidate(Page_Validators[validatorIDs[checkoutDateRangeValidator]]);
                if (Page_Validators[validatorIDs[checkoutDateRangeValidator]].isvalid == false) {
                    regExValidationErrorMessage += 'Check Out - Check Out date cannot be greater than 365 days from current date.<br/>Please re-enter your data.<br/>';
                    $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
                }
            }

            if ((checkOutDateIsNotLessThanEqualToCurrent == true) && (checkInDateMissing == false) && (checkInDateIsWithinAYear == true) && (Page_Validators[validatorIDs[checkoutDateRangeValidator]].isvalid == true))
            {
            ValidatorEnable(Page_Validators[validatorIDs[datesComparer]], true);
            ValidatorValidate(Page_Validators[validatorIDs[datesComparer]]);
            if (Page_Validators[validatorIDs[datesComparer]].isvalid == true) {
                regExValidationErrorMessage += 'Check Out - Check Out date cannot be same as check in date.<br/>Please re-enter your data.<br/>';
                $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
            }
            else {
                var difference = DateDiff(document.getElementById(Page_Validators[validatorIDs[datesComparer]].controltocompare).value, document.getElementById(Page_Validators[validatorIDs[datesComparer]].controltovalidate).value);
                if ((difference >= 1) && (checkInDateIsNotLessThanEqualToCurrent == true)) {
                    areDatesFine = true;
                }
                else if ((checkInDateIsNotLessThanEqualToCurrent == true) && (checkInDateIsWithinAYear == true) && (checkOutDateIsNotLessThanEqualToCurrent == true)) {
                    regExValidationErrorMessage += 'Check Out - Check Out date must be at least 1 day following the check in date.<br/>Please re-enter your data.<br/>';
                    $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
                }
            }
            }
        }
        else {
            ValidatorEnable(Page_Validators[validatorIDs[checkoutDateRangeValidator]], false);
            ValidatorEnable(Page_Validators[validatorIDs[checkoutDateLessThanCurValidator]], false);
            ValidatorEnable(Page_Validators[validatorIDs[datesComparer]], false);
        }
        
        if (adultTravelersSelected == true) {
            ValidatorEnable(Page_Validators[validatorIDs[totalNumberOfTravelersValidator]], true);
            ValidatorValidate(Page_Validators[validatorIDs[totalNumberOfTravelersValidator]]);
            if (Page_Validators[validatorIDs[totalNumberOfTravelersValidator]].isvalid == false) {
                regExValidationErrorMessage += 'Party Size - Party Size cannot exceed 19 travelers. Please contact customer service or re-enter your data.<br/>';
                $("[id$='regularExpressionValidationSummary']").html(regExValidationErrorMessage);
                totalTraverlersExceededTheLimit = true;
            }
        }
        return ((areDatesFine) && (!totalTraverlersExceededTheLimit) && (adultTravelersSelected) && (isProductSelected));
    }
}