﻿    /*
    * Regular expression containing validation pattern of date
    */
    var datePattern = new RegExp(/(\d{4})-(\d{1,2})-(\d{1,2})/);

    /*
    * Regular expression containing validation pattern of time
    */
    var timePattern = new RegExp(/(\d{2}):(\d{1,2})/);

    /*
    * Replaces all text in textboxes, with an emtpy string, marked as swapValue cssclass
    * @see http://www.aspcode.net/A-watermark-texbox-with-JQuery-and-aspnet.aspx
    */
    $(document).ready(function() {
        swapValues = [];
        $(".swap_value").each(
            function(i) {
                swapValues[i] = $(this).val();
                $(this).focus(function() {
                    if ($(this).val() == swapValues[i]) {
                        $(this).val("")
                    }
                }
                ).blur(function() {
                    if ($.trim($(this).val()) == "") {
                        $(this).val(swapValues[i])
                    }
                })
            })
    });

    /*
    * Create date pickers for date fields
    * @version 2009jul09
    */
    $(document).ready(function() {
        $("#"+PickupDateTextBoxClientID).datepicker({
            showOn: 'both',
            numberOfMonths: [1, 2],
            buttonImageOnly: true,
            buttonImage: '/Images/calender.gif',
            buttonText: CalenderButtonText,
            dateFormat: 'yy-mm-dd',
            firstDay: 1,
            minDate: 0,
            //maxDate: 365,
            hideIfNoPrevNext: false,
            defaultDate: +2,
            showOtherMonths: true,
            showStatus: true,
            duration: '',
            monthNames: tnCalFullMonthNames, //['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December'],
            monthNamesShort: tnCalMonthNames, //['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
            dayNames: tnCalFullDayNames, //['Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lördag'],
            dayNamesShort: tnCalDayNames, //['Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör'],
            dayNamesMin: tnCalDayNames, //['Sö', 'Må', 'Ti', 'On', 'To', 'Fr', 'Lö'],
            changeMonth: false,
            changeYear: false,
            showCurrentAtPos: 0,
            prevText: CalenderPrevText,
            nextText: CalenderNextText,
            gotoCurrent:true,
            showButtonPanel: false,
            closeText: CalenderCloseText,
            currentText: CalenderCurrentText,

            /*
            * Action event of calender date click
            * @param dateText Text of chosen item on calender
            * @version 2009jul14
            */
            onSelect: function(dateText) {
                onPickupCalendarChoice(this, dateText);

                if (AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout != null) {
                    AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.hide();
                }

            }
        });

        $("#"+DropoffDateTextBoxClientID).datepicker({
            showOn: 'both',
            numberOfMonths: [1, 2],
            buttonImageOnly: true,
            buttonImage: '/Images/calender.gif',
            buttonText: CalenderButtonText,
            dateFormat: 'yy-mm-dd',
            firstDay: 1,
            //maxDate: 365,
            hideIfNoPrevNext: false,
            defaultDate: null,
            showOtherMonths: true,
            showStatus: true,
            duration:'',
  
            monthNames: tnCalFullMonthNames, //['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December'],
            monthNamesShort: tnCalMonthNames, //['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
            dayNames: tnCalFullDayNames, //['Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lördag'],
            dayNamesShort: tnCalDayNames, //['Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör'],
            dayNamesMin: tnCalDayNames, //['Sö', 'Må', 'Ti', 'On', 'To', 'Fr', 'Lö'],
            changeMonth: false,
            changeYear: false,
            showCurrentAtPos: 0,
            prevText: CalenderPrevText,
            nextText: CalenderNextText,
           gotoCurrent:true,
            showButtonPanel: false,
            closeText: CalenderCloseText,
            currentText: CalenderCurrentText,

            /*
            * Action event of calender date click
            * @param dateText Text of chosen item on calender
            * @version 2009jul14
            */
            onSelect: function(dateText) {
                onDropoffCalendarChoice(this, dateText);

                if (AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout != null) {
                    AjaxControlToolkit.ValidatorCalloutBehavior._currentCallout.hide();
                }
                
            }
        });
    });

     $(document).ready(function() {
      
      var today = new Date();
      var minDate = new Date();
      var dropOffDate = new Date();
      
      minDate.setDate(minDate.getDate()+2);
      dropOffDate.setDate(dropOffDate.getDate()+9);
       
       var pickupDateTextBox = $("#"+PickupDateTextBoxClientID);
       var pickupArray = pickupDateTextBox.val().split('-');
       pickupArray[1]-=1;
       var tempPickupDate = new Date(pickupArray[0], pickupArray[1], pickupArray[2]);

       if(isNaN(Date.parse(tempPickupDate)))
       {
           pickupDateTextBox.datepicker('option', 'minDate', today);
           pickupDateTextBox.datepicker('setDate', minDate);
           
           var minDateYear =  minDate.getFullYear();
           var minDateMonth = padLeft(minDate.getMonth() + 1, 2);
           var minDateDt = padLeft(minDate.getDate(), 2);
           var label = $get(PickupDateInfoClientID);
           
           if (label != null) 
           {
             label.innerHTML = getFullDateLabel(minDateYear+"-"+ minDateMonth +"-"+ minDateDt);
           }
       }
       
       var dropoffDateTextBox = $("#"+DropoffDateTextBoxClientID);
       var dropOffArray = dropoffDateTextBox.val().split('-');
       dropOffArray[1]-=1;
       var tempdropOffDate = new Date(dropOffArray[0], dropOffArray[1], dropOffArray[2]);
       
       if(isNaN(Date.parse(tempdropOffDate)))
       {
           dropoffDateTextBox.datepicker('option', 'minDate', minDate);
           dropoffDateTextBox.datepicker('setDate', dropOffDate);
           
           var dropDateYear =  dropOffDate.getFullYear();
           var dropDateMonth = padLeft(dropOffDate.getMonth() + 1, 2);
           var dropDateDt = padLeft(dropOffDate.getDate(), 2);
           var label = $get(DropoffDateInfoClientID);
           
           if (label != null) 
           {
             label.innerHTML = getFullDateLabel(dropDateYear+"-"+ dropDateMonth +"-"+ dropDateDt);
           }
       }
         
     });
    
    function padLeft(number, length) 
    {
        var str = '' + number;
        while (str.length < length) 
        {
            str = '0' + str;
        }
        return str;
    }
    
    /*
    * Action event of calender date click
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009jul23
    */
    
    function onPickupCalendarChoice(sender, args) {
        if (sender.value != null) {
            args = sender.value;
        }
        var datedata = args.split('-');
        var thisDate = new Date(datedata[0] + '/' + datedata[1] + '/' + datedata[2]);
   
       var textbox = $("#"+DropoffDateTextBoxClientID);
       var dropdatedata = textbox.val().split('-');
       var newDate = new Date(dropdatedata[0] + '/' + dropdatedata[1] + '/' + dropdatedata[2]);
       if(newDate<thisDate)
       {
            newDate = new Date(thisDate.toString());
       }
        
       textbox.datepicker('option', 'minDate', thisDate);
       textbox.datepicker('setDate', newDate);
       
       var dropDateYear =  newDate.getFullYear();
       var dropDateMonth = padLeft(newDate.getMonth() + 1, 2);
       var dropDateDt = padLeft(newDate.getDate(), 2);
       var label = $get(DropoffDateInfoClientID);
           
       if (label != null) 
       {
         label.innerHTML = getFullDateLabel(dropDateYear+"-"+ dropDateMonth +"-"+ dropDateDt);
       }
       
       var label = $get(PickupDateInfoClientID);
        
        if (label != null) 
        {
            label.innerHTML = getFullDateLabel(args);
            setDaysBetweenLabel();
        }

        showDateTimeValidation();

        HideUnder25();
    }

    /*
    * Action event of calender date click
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009jul23
    */
    function onDropoffCalendarChoice(sender, args) {
        if (sender.value != null) {
            args = sender.value;
        }

        var datedata = args.split('-');
        var thisDate = new Date(datedata[0] + '/' + datedata[1] + '/' + datedata[2]);

        var label = $get(DropoffDateInfoClientID);
        if (label != null) {
            label.innerHTML = getFullDateLabel(args);
            setDaysBetweenLabel();
        }

        showDateTimeValidation();
    }

    /*
    * Action event of pickup time click
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009jul09
    */
    function onPickupTimeChoice(sender, args) {
        var pickupTimeTextBox = $get(PickupTimeTextBoxClientID);
        if (pickupTimeTextBox != null) {
            pickupTimeTextBox.value = sender.innerHTML;

            
            


////            var validator2 = $get("<%= PickupTimeTextBoxEmptyValidator.ClientID %>");            
////            if (validator2 != null) {
////                validator2.style.display = "none";
////            }
        }

        onPickupTimeBlur(sender, args);
    }

    /*
    * Action event of pickup time blur
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009jul23
    */
    function onPickupTimeBlur(sender, args) {
        var dropoffTimeTextBox = $get(DropoffTimeTextBoxClientID);
        if (dropoffTimeTextBox.value == "tt:mm" && sender.innerHTML !== "") {
           dropoffTimeTextBox.value = sender.innerHTML;
        }

        showDateTimeValidation();
        setDaysBetweenLabel();
    }

    /*
    * Action event of dropoff time click
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009may12
    */
    function onDropoffTimeChoice(sender, args) {
        var dropoffTimeTextBox = $get(DropoffTimeTextBoxClientID);
        var dropoffScrollArea = $get(DropoffTimeDropDownAreaClientID);
        if (dropoffTimeTextBox != null) {
            dropoffTimeTextBox.value = sender.innerHTML;

            


////            var validator2 = $get("<%= DropoffTimeTextBoxEmptyValidator.ClientID %>");            
////            if (validator2 != null) {
////                validator2.style.display = "none";
////            }
        }

        onDropoffTimeBlur(sender, args);
    }

    /*
    * Action event of dropoff time blur
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009jul23
    */
    function onDropoffTimeBlur(sender, args) {
        showDateTimeValidation();
        setDaysBetweenLabel();
    }

    /*
    * Show validation of calender and time if values are valid
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009jul23  
    */
    function showDateTimeValidation(sender, args) {
        pickupTimeValid();
        dropoffTimeValid();
    }

    /*
    * Action event of pick up time valid
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009may15
    */
    function pickupTimeValid(sender, args) {
        var date = $get(PickupDateTextBoxClientID);
        var time = $get(PickupTimeTextBoxClientID);
        var image = $get(PickupTimeValidatedImageClientID);

        return showPickupValidation(date, time, image);
    }

    /*
    * Action event of drop off time valid
    * @param sender Invoker of the event
    * @param args Event arguments
    * @version 2009may15
    */
    function dropoffTimeValid(sender, args) {
        var pickupDate = $get(PickupDateTextBoxClientID);
        var dropoffDate = $get(DropoffDateTextBoxClientID);
        var time = $get(DropoffTimeTextBoxClientID);
        var image = $get(DropoffTimeValidatedImageClientID);

        return showDropoffValidation(dropoffDate, time, pickupDate, image);
    }

    /*
    * Show user interface confirmation of correct data
    * @param date First validator to handle correctnes of data
    * @param time Second validator to handle correctnes of data
    * @param image Image to show if validation is valid
    * @return true if the validation is shown
    * @version 2009jul02
    */
    function showPickupValidation(date, time, image) {
        if (date != null && time != null && image != null) {
            if (date.value.match(datePattern)
                && time.value.match(timePattern)) {
                image.className = "inline";
                return true;
            }
            else {
                image.className = "hidden";
                return false;
            }
        }
        else {
            return false;
        }
    }

    /*
    * Show user interface confirmation of correct data
    * @param dropoffDate First validator to handle correctnes of data
    * @param time Second validator to handle correctnes of data
    * @param pickupDate Theird validator to handle correctnes of data
    * @param image Image to show if validation is valid
    * @return true if the validation is shown
    * @version 2009jul02
    */
    function showDropoffValidation(dropoffDate, time, pickupDate, image) {
        if (dropoffDate != null && time != null && image != null) {
            if (dropoffDate.value > pickupDate.value
                && dropoffDate.value.match(datePattern)
                && time.value.match(timePattern)) {
                image.className = "inline";
                return true;
            }
            else {
                image.className = "hidden";
                return false;
            }
        }
        else {
            return false;
        }
    }

    /*
    * Get the GUI version of date to show
    * @param theDate Date to format as a date string
    * @return Provided date as a string
    * @version 2009jul14
    */
    function getFullDateLabel(theDate) {
        var dateString = "&nbsp;";
        
        if (theDate.match(datePattern)) {
            theDate = getDateFromString(theDate);
          
            var minYear = theDate.getFullYear();
            if (minYear > '1899') {
                dateString = tnCalFullDayNames[theDate.getDay()]
                + ' ' + theDate.getDate()
                + '. ' + tnCalFullMonthNames[theDate.getMonth()]
                + ' ' + theDate.getFullYear();
                document.cookie='pickup_info'+ "=" +escape(dateString);


              
            }
        }
        return dateString;
    }

    /*
    * Get a date from string with format yyyy-MM-dd
    * @param str Date as a string
    * @return Provided string as a date or standard date object
    * @version 2009-jul10
    */
    function getDateFromString(str) {
        try {
            return new Date(str.substring(0, 4), str.substring(5, 7) - 1, str.substring(8, 10));
        } catch (err) {
            return new Date();
        }
    }

    /*
    * Set days between label 
    * @version 2009-jul10
    */
    function setDaysBetweenLabel() {
        var noOfDaysLabel = $get(NoOfDaysInfoClientID);
        if (noOfDaysLabel != null) {
            var noOfDays = daysBetween();
            var noOfDaysText = $get(TotalNoOfDaysLabelClientID).innerHTML;
            if (isNumeric(noOfDays)) {
                noOfDaysLabel.innerHTML = noOfDaysText.replace("{0}", noOfDays);
                
            }
        }
    }

    /*
    * Check if object is numeric
    * @param data Object to be checked
    * @return True if the object is numeric else false
    * @version 2009-jul10
    */
    function isNumeric(data) {
        return parseFloat(data) == data;
    }

    /**
    * Function of calculating number of days between pickup datetime and dropoff datetime
    * @return Number of days between pickup datetime and dropoff datetime
    * @version 2009-jul10
    * @see http://www.webdeveloper.com/forum/showthread.php?t=162953
    */
    function daysBetween() {
        var noOfDays;

        var dateArray1 = new Array(5);
        var dateArray2 = new Array(5);

        //Read the date textboxes with dates
        var pickupDate = $get(PickupDateTextBoxClientID);
        var dropoffDate = $get(DropoffDateTextBoxClientID);

        var strDate1 = pickupDate.value;
        var strDate2 = dropoffDate.value;

        //Split the date in year month, and day (format yyyy-mm-dd)
        // and store them in the array ( [0] = yyyy, [1] = mm, [2] = dd )
        dateArray1 = strDate1.split('-');
        dateArray2 = strDate2.split('-');

        //Read the time textboxes and store them in the array ( [3] = hh, [4] = mm )
        var pickupTime = $get(PickupTimeTextBoxClientID);
        var dropoffTime = $get(DropoffTimeTextBoxClientID);
        var timeArray1 = pickupTime.value.split(':');
        var timeArray2 = dropoffTime.value.split(':');
        dateArray1[3] = timeArray1[0];
        dateArray1[4] = timeArray1[1];
        dateArray2[3] = timeArray2[0];
        dateArray2[4] = timeArray2[1];
    
        //Month in javascript.Date are from 0-11
        dateArray1[1] = dateArray1[1] - 1;
        dateArray2[1] = dateArray2[1] - 1;

        //Make dates of the year, month, day, hours and minutes
        var date1 =  Date.UTC(dateArray1[0], dateArray1[1], dateArray1[2], dateArray1[3], dateArray1[4],0,0);
        var date2 =  Date.UTC(dateArray2[0], dateArray2[1], dateArray2[2], dateArray2[3], dateArray2[4],0,0);

        // The number of milliseconds in one day
        var ONE_DAY = 1000 * 60 * 60 * 24;

        // Convert both dates to milliseconds
        var date1_ms = date1;//.getTime();
        var date2_ms = date2;//.getTime();

        // Calculate the difference in milliseconds
        var difference_ms = date1_ms - date2_ms;

        // Convert back to days and return (uses Math.ceil instead of Math.round)
        if (difference_ms <= 0) {
            //Set a positive value
            noOfDays = Math.ceil(Math.abs(difference_ms / ONE_DAY));
        }
        else {
            //Set a negative value
            noOfDays = '-' + Math.ceil(Math.abs(difference_ms / ONE_DAY));
        }
        
        var lblShortErrorMessage = $get(Notice_DropoffLaterThanPickupTime).innerHTML;
        //var lblShortErrorMessage1 = $get('<%= ErrorMessageNoScript1.ClientID  %>');
        //TO DO 
        //Change to jquery for finding the clientid.
        var lblShortErrorMessage1 = document.getElementById('ctl00_MainContentWrapper_Tabs_TabPanel1_FrontPageSearchForm_ErrorMessageNoScript2');
        
        if(lblShortErrorMessage1 != null)
        {
            if (((Math.abs(difference_ms / ONE_DAY)- noOfDays) != 0) & (noOfDays > 1))
            {
                if (dropoffTime.value > pickupTime.value)
                { 
                    lblShortErrorMessage1.innerHTML = lblShortErrorMessage; 
                }
                else
                {
                    lblShortErrorMessage1.innerHTML = '';
                }
            }
            else
            {
                lblShortErrorMessage1.innerHTML = '';
            }
        }

        return noOfDays;
    }

    /*
    * Reposition ajax dropdown areas cause of positioning errors in IE8
    * @version 2009may18
    */
    function repositionDropDowns() {
        var pickupAreaCalender = $find('PickupCalenderExtenderBehavior');
        if (pickupAreaCalender != null) {
            pickupAreaCalender.add_shown(repositionPickupCalender);
        }

        var dropoffAreaCalender = $find('DropoffCalenderExtenderBehavior');
        if (dropoffAreaCalender != null) {
            dropoffAreaCalender.add_shown(repositionDropoffCalender);
        }

        var pickupAreaTime = $find('PickupTimeDropDownExtender');
        if (pickupAreaTime != null) {
            pickupAreaTime.add_shown(repositionPickupTime);
        }

        var dropoffAreaTime = $find('DropoffTimeDropDownExtender');
        if (dropoffAreaTime != null) {
            dropoffAreaTime.add_shown(repositionDropoffTime);
        }
    }

    /*
    * Reposition pickup calender dropdown of the dropdown extender cause of positioning errors in IE8
    * @version 2009may18
    */
    function repositionPickupCalender() {
        var extender = $find('PickupCalenderExtenderBehavior');
        var textbox = $get(PickupDateTextBoxClientID);
        if (extender != null && textbox != null) {
            var top = textbox.offsetTop + textbox.offsetHeight;
            extender._popupDiv.style.left = parseInt(textbox.offsetLeft) + 'px';
            extender._popupDiv.style.top = parseInt(top) + 'px';
        }
    }

    /*
    * Reposition dropoff calender dropdown of the dropdown extender cause of positioning errors in IE8
    * @version 2009may18
    */
    function repositionDropoffCalender() {
        var extender = $find('DropoffCalenderExtenderBehavior');
        var textbox = $get(DropoffDateTextBoxClientID);
        if (extender != null && textbox != null) {
            var top = textbox.offsetTop + textbox.offsetHeight;
            extender._popupDiv.style.left = parseInt(textbox.offsetLeft) + 'px';
            extender._popupDiv.style.top = parseInt(top) + 'px';
        }
    }

    /*
    * Reposition pickup time dropdown of the dropdown extender cause of positioning errors in IE8
    * @version 2009may18
    */
    function repositionPickupTime() {
        var extender = $find('PickupTimeDropDownExtender');
        extender._dropDownControl.style.left = parseInt(extender._dropFrameLeft.style.left, 10) + 'px';
        extender._dropDownControl.style.top = parseInt(extender._dropFrameBottom.style.top, 10) + 'px';
    }

    /*
    * Reposition dropoff time dropdown of the dropdown extender cause of positioning errors in IE8
    * @version 2009may18
    */
    function repositionDropoffTime() {
        var extender = $find('DropoffTimeDropDownExtender');
        extender._dropDownControl.style.left = parseInt(extender._dropFrameLeft.style.left, 10) + 'px';
        extender._dropDownControl.style.top = parseInt(extender._dropFrameBottom.style.top, 10) + 'px';
    }    


