﻿
function DateValidate(source, clientside_arguments)
{
var clientsideArguments = Trim(clientside_arguments.Value);
 if(clientsideArguments == "" || clientsideArguments == null) 
   {
       ResetValue(source.controltovalidate);
       SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.RequiredDate, GlobalFormat.SiteDateFormat));
     return false; 
   }
  else
   {

    var getErrorMsg;
        var dValidate = source.controltovalidate;
        if (IsNotNull($get(dValidate)))
        {
               if(IsNotNull(rt.Dep))
               rt.departureDT = parseVaxDate(rt.Dep.value);
               
               if(IsNotNull(rt.Ret))
               rt.returnDT = parseVaxDate(rt.Ret.value);
               
               if(IsNotNull(rt.ChkIn))
               rt.chkinDT = parseVaxDate(rt.ChkIn.value);
               
               if(IsNotNull(rt.ChkOut))
               rt.chkOutDT = parseVaxDate(rt.ChkOut.value);
               
               if(IsNotNull(rt.PiUp))
               rt.picupDT = parseVaxDate(rt.PiUp.value);
               
               if(IsNotNull(rt.DrOff))
                   rt.drOffDT = parseVaxDate(rt.DrOff.value);
                       
          
                if(IsNotNull(rt.Dep))
                {
                   if(rt.Dep.id == dValidate) {
                       	rt.departureDT = parseVaxDate(clientsideArguments);
						if(IsNotNull(rt.departureDT)) {
						    
						   var todayDT = new Date();
						   CheckDepRetDates(todayDT, rt.departureDT, source, clientside_arguments, RestoolClientSideErrorMessage.DepartureDtGreaterThanTodayDt);
						   if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.Dep.HighDate)) && (IsNotNull(rt.Dep.LowDate))){
						           var highDT = parseVaxDate(rt.Dep.HighDate);
						           var lowDT = parseVaxDate(rt.Dep.LowDate);
						           CheckHighLowDates(rt.departureDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(rt.Dep.LowDate, rt.Dep.HighDate));
						   }
						}
						else
						{
						    SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
						}
				    }
                }

                if(IsNotNull(rt.Ret))                {
                    if (rt.Ret.id == dValidate) {
                        rt.returnDT = parseVaxDate(clientsideArguments);
                        if (IsNotNull(rt.returnDT)) {
                            if (IsNotNull(rt.departureDT)) {
                                CheckDepRetDates(rt.departureDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.ReturnDtGreaterThanDepDt);
                            }
                            
                            if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.Ret.HighDate)) && (IsNotNull(rt.Ret.LowDate))) {
                                var highDT = parseVaxDate(rt.Ret.HighDate);
                                var lowDT = parseVaxDate(rt.Ret.LowDate);
                                CheckHighLowDates(rt.returnDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(rt.Ret.LowDate, rt.Ret.HighDate));
                            }

                        }
                        else {
                            SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                        }
                    }
                }

                if (IsNotNull(rt.ChkIn)) {
                    if (rt.ChkIn.id == dValidate) {
                        rt.chkinDT = parseVaxDate(clientsideArguments);
                        if (IsNotNull(rt.chkinDT)) {
                            
                            if (IsNotNull(rt.departureDT)) {
                                if (CompareStartEndDates(rt.departureDT, rt.chkinDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckinDtGreaterThanDepDt)) {
                                    if (IsNotNull(rt.returnDT) ){
                                        CompareStartEndDates(rt.chkinDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckinDtLessThanRetDt);
                                    }
                                }
                            }

                            if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.ChkIn.HighDate)) && (IsNotNull(rt.ChkIn.LowDate))) {
                                var highDT = parseVaxDate(rt.ChkIn.HighDate);
                                var lowDT = parseVaxDate(rt.ChkIn.LowDate);
                                CheckHighLowDates(rt.chkinDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(rt.ChkIn.LowDate, rt.ChkIn.HighDate));
                            }
                        }
                        else {
                            SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                        }
                    }
                }

                if (IsNotNull(rt.ChkOut)) {
                    if (rt.ChkOut.id == dValidate) {
                        rt.chkOutDT = parseVaxDate(clientsideArguments);
                        if (IsNotNull(rt.chkOutDT)) {
                            
                            if (IsNotNull(rt.chkinDT)) {
                                if (CompareStartEndDates(rt.chkinDT, rt.chkOutDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckoutDtGreaterThanChkInDt) == true) {
                                    if (IsNotNull(rt.returnDT)) {
                                        CompareStartEndDates(rt.chkOutDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckoutDtLessThanRetDt);
                                    }
                                }
                            }

                            if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.ChkOut.HighDate)) && (IsNotNull(rt.ChkOut.LowDate))) {
                                var highDT = parseVaxDate(rt.ChkOut.HighDate);
                                var lowDT = parseVaxDate(rt.ChkOut.LowDate);
                                CheckHighLowDates(rt.chkOutDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(rt.ChkOut.LowDate, rt.ChkOut.HighDate));
                            }
                        }
                        else {
                            SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                        }
                    }
                }

                if (IsNotNull(rt.PiUp)) {
                    if (rt.PiUp.id == dValidate) {
                        rt.picupDT = parseVaxDate(clientsideArguments);
                        if (IsNotNull(rt.picupDT)) {
                            
                            if (IsNotNull(rt.departureDT)) {
                                if (CompareStartEndDates(rt.departureDT, rt.picupDT, source, clientside_arguments, RestoolClientSideErrorMessage.PickupDtGreaterThanDepDt) == true) {
                                    if (IsNotNull(rt.returnDT)) {
                                        CompareStartEndDates(rt.picupDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.PickupDtLessThanRetDt);
                                    }
                                }
                            }

                            if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.PiUp.HighDate)) && (IsNotNull(rt.PiUp.LowDate))) {
                                var highDT = parseVaxDate(rt.PiUp.HighDate);
                                var lowDT = parseVaxDate(rt.PiUp.LowDate);
                                CheckHighLowDates(rt.picupDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(rt.PiUp.LowDate, rt.PiUp.HighDate));
                            }
                        }
                        else {
                            SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                        }
                    }
                }

                if (IsNotNull(rt.DrOff)) {
                    if (rt.DrOff.id == dValidate) {
                        rt.drOffDT = parseVaxDate(clientsideArguments);
                        if (IsNotNull(rt.drOffDT)) {
                            
                            if (IsNotNull(rt.picupDT)) {
                                if (CompareStartEndDates(rt.picupDT, rt.drOffDT, source, clientside_arguments, RestoolClientSideErrorMessage.DropoffDtGreaterThanPiUpDt) == true) {
                                    if (IsNotNull(rt.returnDT)) {
                                        CompareStartEndDates(rt.drOffDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.DropoffDtLessThanRetDt);
                                    }
                                }
                            }

                            if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.DrOff.HighDate)) && (IsNotNull(rt.DrOff.LowDate))) {
                                var highDT = parseVaxDate(rt.DrOff.HighDate);
                                var lowDT = parseVaxDate(rt.DrOff.LowDate);
                                CheckHighLowDates(rt.drOffDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(rt.DrOff.LowDate, rt.DrOff.HighDate));
                            }
                            
                        }
                        else {
                            SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                        }
                    }
                }
        }
   }
}

function DateChangeAvailValidate(source, clientside_arguments) {
    var clientsideArguments = Trim(clientside_arguments.Value);
    if (clientsideArguments == "" || clientsideArguments == null) {
        ResetValue(source.controltovalidate);
        SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.RequiredDate, GlobalFormat.SiteDateFormat));
        return false;
    }
    else {

        var getErrorMsg;
        var dValidate = source.controltovalidate;
        if (IsNotNull($get(dValidate))) {
            if (IsNotNull(rt.Dep))
                rt.departureDT = parseVaxDate(rt.Dep.value);

            if (IsNotNull(rt.Ret))
                rt.returnDT = parseVaxDate(rt.Ret.value);

            if (IsNotNull(rt.ChkIn))
                rt.chkinDT = parseVaxDate(rt.ChkIn.value);

            if (IsNotNull(rt.ChkOut))
                rt.chkOutDT = parseVaxDate(rt.ChkOut.value);

            if (IsNotNull(rt.PiUp))
                rt.picupDT = parseVaxDate(rt.PiUp.value);

            if (IsNotNull(rt.DrOff))
                rt.drOffDT = parseVaxDate(rt.DrOff.value);


            if (IsNotNull(rt.Dep)) {
                if (rt.Dep.id == dValidate) {
                    rt.departureDT = parseVaxDate(clientsideArguments);
                    if (IsNotNull(rt.departureDT)) {

                        var todayDT = new Date();
                        CheckDepRetDates(todayDT, rt.departureDT, source, clientside_arguments, RestoolClientSideErrorMessage.DepartureDtGreaterThanTodayDt);
                        if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.Dep.HighDate)) && (IsNotNull(rt.Dep.LowDate))) {
                            var highDT = parseVaxDate(rt.Dep.HighDate);
                            var lowDT = parseVaxDate(rt.Dep.LowDate);
                            CheckHighLowDates(rt.departureDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(lowDT, highDT));
                        }

                        var dtCartReturnDate = new Date(hidCartReturnDate.value);
                        CompareDepartDateOverlap(rt.departureDT, dtCartReturnDate, source, clientside_arguments, RestoolClientSideErrorMessage.DepartureDtMustOverlap);            
                    }
                    else {
                        SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                    }
                }
            }

            if (IsNotNull(rt.Ret)) {
                if (rt.Ret.id == dValidate) {
                    rt.returnDT = parseVaxDate(clientsideArguments);
                    if (IsNotNull(rt.returnDT)) {

                        if (IsNotNull(rt.departureDT)) {
                            CheckDepRetDates(rt.departureDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.ReturnDtGreaterThanDepDt);

                        }
                        else {
                            clientside_arguments.IsValid = true;
                            return true;
                        }

                        if ((clientside_arguments.IsValid == true) && (IsNotNull(rt.Ret.HighDate)) && (IsNotNull(rt.Ret.LowDate))) {
                            var highDT = parseVaxDate(rt.Ret.HighDate);
                            var lowDT = parseVaxDate(rt.Ret.LowDate);
                            CheckHighLowDates(rt.returnDT, highDT, lowDT, source, clientside_arguments, getInvalidDateRangeMessage(lowDT, highDT));
                        }

                        var dtCartDepartDate = new Date(hidCartDepartureDate.value);
                        CompareReturnDateOverlap(rt.returnDT, dtCartDepartDate, source, clientside_arguments, RestoolClientSideErrorMessage.ReturnDtMustOverlap);                                                           

                    }
                    else {
                        SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                    }
                }
            }

            if (IsNotNull(rt.ChkIn)) {
                if (rt.ChkIn.id == dValidate) {
                    rt.chkinDT = parseVaxDate(clientsideArguments);
                    if (IsNotNull(rt.chkinDT)) {
                        if (IsNotNull(rt.departureDT)) {
                            if (CompareStartEndDates(rt.departureDT, rt.chkinDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckinDtGreaterThanDepDt) == true) {
                                if (rt.returnDT == null) {
                                    clientside_arguments.IsValid = true;
                                    return true;
                                }
                                else {
                                    CompareStartEndDates(rt.chkinDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckinDtLessThanRetDt);
                                }
                            }
                        }
                    }
                    else {
                        SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                    }
                }
            }

            if (IsNotNull(rt.ChkOut)) {
                if (rt.ChkOut.id == dValidate) {
                    rt.chkOutDT = parseVaxDate(clientsideArguments);
                    if (IsNotNull(rt.chkOutDT)) {
                        if (IsNotNull(rt.chkinDT)) {
                            if (CompareStartEndDates(rt.chkinDT, rt.chkOutDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckoutDtGreaterThanChkInDt) == true) {
                                if (rt.returnDT == null) {
                                    clientside_arguments.IsValid = true;
                                    return true;
                                }
                                else {
                                    CompareStartEndDates(rt.chkOutDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.CheckoutDtLessThanRetDt);
                                }
                            }
                        }
                    }
                    else {
                        SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                    }
                }
            }

            if (IsNotNull(rt.PiUp)) {
                if (rt.PiUp.id == dValidate) {
                    rt.picupDT = parseVaxDate(clientsideArguments);
                    if (IsNotNull(rt.picupDT)) {
                        if (IsNotNull(rt.departureDT)) {
                            if (CompareStartEndDates(rt.departureDT, rt.picupDT, source, clientside_arguments, RestoolClientSideErrorMessage.PickupDtGreaterThanDepDt) == true) {
                                if (rt.returnDT == null) {
                                    clientside_arguments.IsValid = true;
                                    return true;
                                }
                                else {
                                    CompareStartEndDates(rt.picupDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.PickupDtLessThanRetDt);
                                }
                            }
                        }
                    }
                    else {
                        SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                    }
                }
            }

            if (IsNotNull(rt.DrOff)) {
                if (rt.DrOff.id == dValidate) {
                    rt.drOffDT = parseVaxDate(clientsideArguments);
                    if (IsNotNull(rt.drOffDT)) {
                        if (IsNotNull(rt.picupDT)) {
                            if (CompareStartEndDates(rt.picupDT, rt.drOffDT, source, clientside_arguments, RestoolClientSideErrorMessage.DropoffDtGreaterThanPiUpDt) == true) {
                                if (rt.returnDT == null) {
                                    clientside_arguments.IsValid = true;
                                    return true;
                                }
                                else {
                                    CompareStartEndDates(rt.drOffDT, rt.returnDT, source, clientside_arguments, RestoolClientSideErrorMessage.DropoffDtLessThanRetDt);
                                }
                            }
                        }
                    }
                    else {
                        SetErrorMsg(source, clientside_arguments, String.format(RestoolClientSideErrorMessage.CheckDate, GlobalFormat.SiteDateFormat));
                    }
                }
            }
        }
    }
}

function CheckDepRetDates(startDate,endDate,source,clientside_arguments,errMsgs)
{
    if(startDate < endDate)
    {
        clientside_arguments.IsValid = true;
        return true;
    }
    else
    {
        SetErrorMsg(source,clientside_arguments,errMsgs);
    }     
}

function CheckHighLowDates(startDate, highDate,lowDate, source, clientside_arguments, errMsgs) {

    if (startDate <= highDate && startDate>=lowDate ) {
        clientside_arguments.IsValid = true;        
        return true;
    }
    else {
        SetErrorMsg(source, clientside_arguments, errMsgs);
    }

 }
 function getInvalidDateRangeMessage(lowDT, highDT) {
     return String.format(RestoolClientSideErrorMessage.InvalidDateRange, lowDT, highDT);
 } 

 function CompareStartEndDates(startDate,endDate,source,clientside_arguments,errMsgs)
 {
    if(startDate <= endDate)
    {
        clientside_arguments.IsValid = true;
        return true;
    }
    else
    {
        SetErrorMsg(source,clientside_arguments,errMsgs);
    }           
 }

 function CompareDepartDateOverlap(newDepartDate, cartReturnDate, source, clientside_arguments, errMsgs) {
     if (newDepartDate > cartReturnDate) {
         SetErrorMsg(source, clientside_arguments, errMsgs);
     }
     else {
         clientside_arguments.IsValid = true;
         return true;
     }
 }
 
 function CompareReturnDateOverlap(newReturnDate, cartDepartDate, source, clientside_arguments, errMsgs) {
     if (newReturnDate < cartDepartDate) {
         SetErrorMsg(source, clientside_arguments, errMsgs);
     }
     else {
         clientside_arguments.IsValid = true;
         return true;         
     }
 }
 
function ResetValue(ControlID)
{
    if(IsNotNull(rt.Dep))
    {
        if(rt.Dep.id == ControlID)
        {
            rt.departureDT = null;
        }
    }
    if(IsNotNull(rt.Ret))
    {
        if(rt.Ret.id == ControlID)
        {
            rt.returnDT = null;
        }
    }
    if(IsNotNull(rt.ChkIn))
    {
        if(rt.ChkIn.id == ControlID)
        {
            rt.chkinDT = null;
        }
    }
    if(IsNotNull(rt.ChkOut))
    {
        if(rt.ChkOut.id == ControlID)
        {
            rt.chkOutDT = null;
        }
    }       
    if(IsNotNull(rt.PiUp))
    {
        if(rt.PiUp.id == ControlID)
        {
            rt.picupDT = null;
        }
    }
    if(IsNotNull(rt.DrOff))
    {
        if(rt.DrOff.id == ControlID)
        {
            rt.drOffDT = null;
        }
    }        
} 
  
function SetErrorMsg(CusE,CsArgs,ErrorMsg)
{
  CollapseErrorPanel(CusE.controltovalidate);
  CusE.errormessage = ErrorMsg;
  CsArgs.IsValid = false;
}

function Trim(str) {
    if (!str || typeof str != 'string' || str == "") {
        return "";
    }
    else {
        return str.replace(/^[\s]+/, '').replace(/[\s]+$/, '').replace(/[\s]{2,}/, ' ');
    }
}

function CollapseErrorPanel(ControlID)
{
    if (typeof rt != 'undefined') {
        if(IsNotNull(rt.ChkIn))
        {
            if(rt.ChkIn.id == ControlID)
            {
                if($find("cpeSearchHotel"))
                {
                 $find("cpeSearchHotel").expandPanel("pnlSearchHotelContent");
                }
            }
        }
        if(IsNotNull(rt.ChkOut))
        {
            if(rt.ChkOut.id == ControlID)
            {
                if($find("cpeSearchHotel"))
                {
                 $find("cpeSearchHotel").expandPanel("pnlSearchHotelContent");
                }
            }
        }       
        if(IsNotNull(rt.PiUp))
        {
            if(rt.PiUp.id == ControlID)
            {
                if($find("cpeSearchRentalCar"))
                {
                 $find("cpeSearchRentalCar").expandPanel("pnlSearchRentalCar");  
                }
            }
        }
        if(IsNotNull(rt.DrOff))
        {
            if(rt.DrOff.id == ControlID)
            {
                if($find("cpeSearchRentalCar"))
                {
                 $find("cpeSearchRentalCar").expandPanel("pnlSearchRentalCar");  
                }
            }
        }
    } 
}
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();