﻿///Start Calendar functions
///Global vars to hold last selected calendars drop down values
var ddlFromCarMonthSelected = 0;
var ddlToCarMonthSelected = 0;

var ddlFromFlightMonthSelected = 0;
var ddlToFlightMonthSelected = 0;
var ddlSingleMonthSelected = 0;
var ddlFlight4MonthSelected = 0;

var ddlFromPackageMonthSelected = 0;
var ddlToPackageMonthSelected = 0;

var ddlFromFlyAndDriveMonthSelected = 0;
var ddlToFlyAndDriveMonthSelected = 0;

var ddlFromIsraelHotelsMonthSelected = 0;
var ddlToIsraelHotelsMonthSelected = 0;

var ddlFromHotelsMonthSelected = 0;
var ddlToHotelsMonthSelected = 0;

var ddlGeneralMonthSelected = 0;

var lastGeneralCalendarTitle = '';


//alert(iParamDaysDelta)
var iDaysDelta = (typeof (iParamDaysDelta) != "undefined") ? iParamDaysDelta : 3;
///holds the last source calendar selected date for setting a target cal min date
//var lastObjCalSourceSelectedDate1 = null;
//var lastObjCalSourceSelectedDate2 = null;
//var lastObjCalSourceSelectedDate3 = null;
var fromMin = 0;

///Get the delta days when the iParamDaysDelta is changed more then once by several controls
///get it after all controls have loaded
function SetDaysDelta() {
    if (typeof (iParamDaysDelta) != "undefined") {
        if (iParamDaysDelta != iDaysDelta) iDaysDelta = iParamDaysDelta;
    }
}

//alert(iDaysDelta)

///Start from
function PickerFrom_OnDateChange(sender, eventArgs) {
    //alert()
    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);
    //alert(additionalDatesDisplayControlID)
    SetDaysDelta();

    var fromDate = co.objPickerFrom.getSelectedDate();
    //alert(eval("PickerSingle"));
    if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
        var SingleDate = co.objPickerSingle.getSelectedDate();
        var Flight4Date = co.objPickerFlight4.getSelectedDate();
    }


    var toDate = co.objPickerTo.getSelectedDate();
    //alert(fromDate.Add("D", 3))

    co.objCalendarFrom.setSelectedDate(fromDate);

    //nnn
    //ddlFromMonthSelected = fromDate.getMonth();
    ///set the global variable
    eval(co.strDdlMonthFromID + 'Selected = ' + fromDate.getMonth()); // = ;

    //alert(ddlFromMonthSelected);
    if (!co.IsdoubleCalendar) {

        ///TODO: there is a bug in the calendar - when using the picker only to change dates and there
        ///is a transition between month there is an error - "invalid argument" probably because of the .Add
        ///function
        if (fromDate > toDate) {
            var fromDateTmp = new Date(fromDate);
            co.objPickerTo.setSelectedDate(fromDateTmp.Add("D", iDaysDelta));
            fromDateTmp = new Date(fromDate);
            co.objCalendarTo.setSelectedDate(fromDateTmp.Add("D", iDaysDelta));

            if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
                var SingleDateTmp = new Date(SingleDate);
                co.objPickerSingle.setSelectedDate(SingleDateTmp.Add("D", iDaysDelta + 1));
                SingleDateTmp = new Date(SingleDate);
                co.objCalendarSingle.setSelectedDate(SingleDateTmp.Add("D", iDaysDelta + 1));
                var Flight4DateTmp = new Date(Flight4Date);
                co.objPickerFlight4.setSelectedDate(Flight4DateTmp.Add("D", iDaysDelta + 1));
                Flight4DateTmp = new Date(Flight4Date);
                co.objCalendarFlight4.setSelectedDate(Flight4DateTmp.Add("D", iDaysDelta + 1));
            }

        }

        //alert(((toDate-fromDate)/(24*60*60*1000)));
        //var datDiff = ((toDate-fromDate)/(24*60*60*1000));
        //SetRentDaysCount(fromDate, toDate, objCalendarFrom);
        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();

        SetCalendarMinDate(co.objCalendarTo, co.objCalendarFrom, co.objPickerTo, co.objPickerFrom);

        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
            SetCalendarMinDate(co.objCalendarSingle, co.objCalendarFrom, co.objPickerSingle, co.objPickerFrom);x
            SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarFrom, co.objPickerFlight4, co.objPickerFrom);
        }
        //alert(fromDate.getMonth())
    }

    if (calName.indexOf("FromIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("FromHotels") > -1)
        SetTxtSpan("Hotels");
}


///main - this
function CalendarFrom_OnChange(sender, eventArgs) {
    
    //alert(33)
    var calName = sender.GlobalAlias;
    //alert('--' + sender.GlobalAlias)
    //alert(sender.get_attributes().getAttribute("ffgg"))
    var co = InitCalendarObjects(sender);
    //alert(1)
    SetDaysDelta();
    //alert(co);
    ///

    var fromDate = co.objCalendarFrom.getSelectedDate();
    if (fromDate == null)
        fromDate = co.objPickerFrom.getSelectedDate();
    //var fromDate = sender.getSelectedDate();

    if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
        var SingleDate = co.objPickerSingle.getSelectedDate();
        var Flight4Date = co.objPickerFlight4.getSelectedDate();
    }

    var toDate = co.objPickerTo.getSelectedDate();
    //alert(fromDate)
    //ddlFromMonthSelected = fromDate.getMonth();
    //eval(co.strDdlMonthFromID + 'Selected = ' + fromDate.getMonth());// = ;

    if (co.IsdoubleCalendar)
        if ($get('ddlMonthFromFlyAndDrive'))
        $get('ddlMonthFromFlyAndDrive').value = fromDate.getMonth();

    //alert(ddlFromFlyAndDriveMonthSelected)
    //alert(eval(co.strDdlMonthFromID + 'Selected'));
    //alert(ddlFromCarMonthSelected)

    //CalendarTo.MinDate = CalendarFrom.getSelectedDate();
    //CalendarTo.Render();
    //alert(CalendarTo.MinDate)
    //PickerTo.MinDate = CalendarFrom.getSelectedDate();
    //PickerTo.Render();
    ///nnn
    //disableSundays(CalendarTo);
    //alert(fromDate.Add("D", 1));
    //CalendarTo.initialize();
    //CalendarTo.MinDate = fromDate.Add("D", 1);
    //PickerTo.MinDate = fromDate.Add("D", 1);
    //CalendarTo.render();
    

    co.objPickerFrom.setSelectedDate(fromDate);
    //alert(additionalDatesDisplayControlID)
    SetAdditionalUIElements(co);
    
    ///this line position is important
    if (!co.IsdoubleCalendar) {
        //debugger
        SetCalendarMinDate(co.objCalendarTo, co.objCalendarFrom, co.objPickerTo, co.objPickerFrom);
        //alert(2);
        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
            SetCalendarMinDate(co.objCalendarSingle, co.objCalendarFrom, co.objPickerSingle, co.objPickerFrom);
            SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarFrom, co.objPickerFlight4, co.objPickerFrom);
        }
    }

    

    if (!co.IsdoubleCalendar) {

        if (fromDate > toDate) {
            var fromDateTmp = new Date(fromDate);
            co.objPickerTo.setSelectedDate(fromDateTmp.Add("D", iDaysDelta));
            fromDateTmp = new Date(fromDate);
            co.objCalendarTo.setSelectedDate(fromDateTmp.Add("D", iDaysDelta));

            if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
                var SingleDateTmp = new Date(SingleDate);
                co.objPickerSingle.setSelectedDate(SingleDateTmp.Add("D", iDaysDelta + 1));
                SingleDateTmp = new Date(SingleDate);
                co.objCalendarSingle.setSelectedDate(SingleDateTmp.Add("D", iDaysDelta + 1));
                var Flight4DateTmp = new Date(Flight4Date);
                co.objPickerFlight4.setSelectedDate(Flight4DateTmp.Add("D", iDaysDelta + 1));
                Flight4DateTmp = new Date(Flight4Date);
                co.objCalendarFlight4.setSelectedDate(Flight4DateTmp.Add("D", iDaysDelta + 1));
            }
        }

        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();
    }
    else {
        //co.objPickerFrom.set_enabled(false);
        //debugger
        // clear calendar - disable 4 months dates

        co.objCalendarTo.get_disabledDates().clear();
        
        var dis = co.objCalendarTo.get_disabledDates();
        var minDate = new Date();
        //the last disabled date
        var maxDate = co.objPickerFrom.getSelectedDate();
        
        minDate.setDate(minDate.getDate() - 30);
        maxDate.setDate(maxDate.getDate());
        //alert(minDate)
        //alert(maxDate)
        
        dis.addRange(minDate, maxDate);

        //co.objCalendarTo.Render();
        //if (sender.GlobalAlias.indexOf("Package") > -1)
        //    SetPackageEndDatesPackage(fromDate);

        //if (sender.GlobalAlias.indexOf("FlyAndDrive") > -1)
        //    SetPackageEndDatesFlyAndDrive(fromDate);
        
        ///default selected delta
        var fromDatenew =new Date(fromDate.getFullYear(), fromDate.getMonth(), fromDate.getDate());
        var mydate = DateAdd(fromDatenew, "D", iDaysDelta); ;
        //alert(fromDatenew)
        co.objPickerTo.setSelectedDate(mydate);
        co.objCalendarTo.setSelectedDate(co.objPickerTo.getSelectedDate());
        //alert(co.objPickerTo.getSelectedDate())
        eval(co.strDdlMonthToID + 'Selected = ' + co.objPickerTo.getSelectedDate().getMonth()); // = ;
        setCalendarMonth(co.objPickerTo, 'ToPackage');
    }
    //ddlToMonthSelected = PickerTo.getSelectedDate().getMonth();
    //alert(toDate)

    if (calName.indexOf("FromIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("FromHotels") > -1)
        SetTxtSpan("Hotels");
}
///End from


///Start to
function PickerTo_OnDateChange(sender, eventArgs) {
    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);
    //debugger
    //$get()
    //alert(additionalDatesDisplayControlID)
    var fromDate = co.objPickerFrom.getSelectedDate();
    var toDate = co.objPickerTo.getSelectedDate();

    //ddlToMonthSelected = toDate.getMonth();
    eval(co.strDdlMonthToID + 'Selected = ' + toDate.getMonth()); // = ;


    co.objCalendarTo.setSelectedDate(toDate);

    if (!co.IsdoubleCalendar) {

        if (fromDate > toDate) {
            co.objPickerFrom.setSelectedDate(toDate);
            co.objCalendarFrom.setSelectedDate(toDate);
        }

        //SetRentDaysCount(fromDate, toDate);
        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();

        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
            SetCalendarMinDate(co.objCalendarSingle, co.objCalendarTo, co.objPickerSingle, co.objPickerTo);
            SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarTo, co.objPickerFlight4, co.objPickerTo);
        }
    }
    else {
        SetPackageNightsCount(fromDate, toDate);

    }

    if (calName.indexOf("ToIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("ToHotels") > -1)
        SetTxtSpan("Hotels");
}



function CalendarTo_OnChange(sender, eventArgs) {
    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);
    //debugger
    //alert(co.objPickerFrom);
    var fromDate = co.objPickerFrom.getSelectedDate();
    var toDate = co.objCalendarTo.getSelectedDate();

    co.objPickerTo.setSelectedDate(toDate);
    SetAdditionalUIElements(co);

    if (!co.IsdoubleCalendar) {
        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
            SetCalendarMinDate(co.objCalendarSingle, co.objCalendarTo, co.objPickerSingle, co.objPickerTo);
            SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarTo, co.objPickerFlight4, co.objPickerTo);
        }
    }

    if (!co.IsdoubleCalendar) {
        if (fromDate > toDate) {
            co.objPickerFrom.setSelectedDate(toDate);
            co.objCalendarFrom.setSelectedDate(toDate);
        }

        //SetRentDaysCount(fromDate, toDate);
        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();
    }
    else {
        CancelClick(co.objCalendarTo);
        SetPackageNightsCount(fromDate, toDate);
    }
    //ddlToMonthSelected = PickerTo.getSelectedDate().getMonth();
    //debugger
    if (calName.indexOf("ToIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("ToHotels") > -1)
        SetTxtSpan("Hotels");
}
///End to

///Start single
function PickerSingle_OnDateChange(sender, eventArgs) {//alert()
    var co = InitCalendarObjects(sender);

    if (!co.IsdoubleCalendar) {
        var fromDate = PickerSingle.getSelectedDate();
        //var toDate = PickerTo.getSelectedDate();
        //alert(fromDate.Add("D", 3))
        CalendarSingle.setSelectedDate(fromDate);
        //nnn


        //     if (fromDate > toDate)
        //     {
        //       PickerTo.setSelectedDate(fromDate.Add("D", 3));
        //       CalendarTo.setSelectedDate(fromDate.Add("D", 3));
        //     }

        //alert(((toDate-fromDate)/(24*60*60*1000))); 
        //var datDiff = ((toDate-fromDate)/(24*60*60*1000));
        //SetRentDaysCount(fromDate, toDate);

        //alert(fromDate.getMonth())
        ddlSingleMonthSelected = fromDate.getMonth();

        SetCalendarMinDate(CalendarFlight4, CalendarSingle, PickerFlight4, PickerSingle);
    }
}

function CalendarSingle_OnChange(sender, eventArgs) {
    var co = InitCalendarObjects(sender);

    if (!co.IsdoubleCalendar) {
        var fromDate = CalendarSingle.getSelectedDate();
        //var toDate = PickerTo.getSelectedDate();
        ///nnn
        //disableSundays(CalendarTo);
        //alert(fromDate.Add("D", 1));
        //CalendarTo.initialize();
        //CalendarTo.MinDate = fromDate.Add("D", 1);
        //PickerTo.MinDate = fromDate.Add("D", 1);
        //CalendarTo.render();

        PickerSingle.setSelectedDate(fromDate);

        SetCalendarMinDate(CalendarFlight4, CalendarSingle, PickerFlight4, PickerSingle);
        //     if (fromDate > toDate)
        //     {
        //       PickerTo.setSelectedDate(fromDate.Add("D", 3));
        //       CalendarTo.setSelectedDate(fromDate.Add("D", 3));
        //     }

        //SetRentDaysCount(fromDate, toDate);


        //ddlToMonthSelected = PickerTo.getSelectedDate().getMonth();
        //alert(toDate)
    }

}
///End single

///Start Flight4
function PickerFlight4_OnDateChange(sender, eventArgs) {//alert()
    //alert(eval('window.PickerFlight4'))
    //alert(eval('PickerFlight4'))
    var fromDate = PickerFlight4.getSelectedDate();
    //var toDate = PickerTo.getSelectedDate();
    //alert(fromDate.Add("D", 3))
    CalendarFlight4.setSelectedDate(fromDate);
    //nnn


    //     if (fromDate > toDate)
    //     {
    //       PickerTo.setSelectedDate(fromDate.Add("D", 3));
    //       CalendarTo.setSelectedDate(fromDate.Add("D", 3));
    //     }

    //alert(((toDate-fromDate)/(24*60*60*1000)));
    //var datDiff = ((toDate-fromDate)/(24*60*60*1000));
    //SetRentDaysCount(fromDate, toDate);

    //alert(fromDate.getMonth())
    ddlFlight4MonthSelected = fromDate.getMonth();
}

function CalendarFlight4_OnChange(sender, eventArgs) {
    var fromDate = CalendarFlight4.getSelectedDate();
    //var toDate = PickerTo.getSelectedDate();
    ///nnn
    //disableSundays(CalendarTo);
    //alert(fromDate.Add("D", 1));
    //CalendarTo.initialize();
    //CalendarTo.MinDate = fromDate.Add("D", 1);
    //PickerTo.MinDate = fromDate.Add("D", 1);
    //CalendarTo.render();

    PickerFlight4.setSelectedDate(fromDate);

    //     if (fromDate > toDate)
    //     {
    //       PickerTo.setSelectedDate(fromDate.Add("D", 3));
    //       CalendarTo.setSelectedDate(fromDate.Add("D", 3));
    //     }

    //SetRentDaysCount(fromDate, toDate);


    //ddlToMonthSelected = PickerTo.getSelectedDate().getMonth();
    //alert(toDate)

}
///End Flight4
function NewHide() {
    //alert('s4')
    this.show();
};

function NewRender() {
    alert(this);
};
///disables all dates in objCalTarget that range from objCalTarget min date to objCalSource selected date
///also make the objPickerTarget min date to objPickerSource selected date
function SetCalendarMinDate(objCalTarget, objCalSource, objPickerTarget, objPickerSource) {


    ///temp calender to set current min date dates because calendar uses byref values in the loops
    var dtObjCalTargetMinDate1 = new Date(objCalTarget.MinDate);
    var dtObjCalTargetMinDate2 = new Date(objCalTarget.MinDate);
    //alert('dtObjCalTargetMinDate1' + dtObjCalTargetMinDate1)
    //alert(PickerFrom.getSelectedDate())

    ///set the target picker mindate
    //alert(objPickerSource.getSelectedDate())
    objPickerTarget.set_minDate(objPickerSource.getSelectedDate());
    //PickerTo.Render();
    ///the source calendar selected date - from the target cal min daste to this date 
    ///all dates will be disabled
    var dtObjCalSourceSelectedDate = objCalSource.getSelectedDate();
    //alert('dtObjCalSourceSelectedDate' + dtObjCalSourceSelectedDate)

    ///the first time lastObjCalSourceSelectedDate is null
    //if (lastObjCalSourceSelectedDate == null)
    //   lastObjCalSourceSelectedDate = dtObjCalSourceSelectedDate;
    //alert('to_min' + CalendarToMinDate)

    //debugger
    //alert(objCalTarget.GlobalAlias)
    //alert('lastObjCalSourceSelectedDate' + lastObjCalSourceSelectedDate)
    ///loop the current disabled dates in the target cal and enable them
    //        for(yy = dtObjCalTargetMinDate1; yy < lastObjCalSourceSelectedDate; yy.Add("D", 1))
    //        {   
    //           alert('enable' + yy)      
    //           var date = new Date(yy);//also works with dtObjCalTargetMinDate1 because yy is byref
    //           objCalTarget.get_disabledDates().Remove(date);
    //        }


    //var ff = objCalTarget.get_disabledDates();
    //debugger
    //alert(ff.GetCount())
    //objCalTarget.get_disabledDates().CleanUp();
    objCalTarget.get_disabledDates().clear();
    //alert(objCalTarget.get_disabledDates().GetCount())
    //        for (yy = 0; yy < ff.GetCount(); yy += 1) 
    //        {
    //            //debugger
    //            alert('enable' + ff.DateArray[yy])
    //            var date = new Date(ff.DateArray[yy]); //also works with dtObjCalTargetMinDate1 because yy is byref
    //            objCalTarget.get_disabledDates().Remove(date);
    //        }

    ////if the dtObjCalTargetMinDate2 year is very small. i.e. 1909 the calendar will render very slowly
    ///there for the dtObjCalTargetMinDate2 needs to be set to a minimum of 2 years befor today.
    var currentFullYear = new Date().getFullYear();//2009
    var minimunFullYear = new Date().getFullYear() - 1;//2008

    //alert(currentFullYear)
    //alert(minimunFullYear)

    if (currentFullYear - dtObjCalTargetMinDate2.getFullYear() > 2) {
        dtObjCalTargetMinDate2.setFullYear(minimunFullYear)
    }

    //debugger
    objCalTarget.Render();

    //alert('dtObjCalSourceSelectedDate' + dtObjCalSourceSelectedDate)
    ///disable the wanted dates in the target cal
    //for(ii = dtObjCalTargetMinDate2; ii < dtObjCalSourceSelectedDate; ii.Add("D", 1))
    //{ 
    //alert('disable' + ii)       
    //alert(ii);
    //var date = new Date(ii);//also works with dtObjCalTargetMinDate2 because ii is byref
    objCalTarget.get_disabledDates().AddRange(dtObjCalTargetMinDate2, dtObjCalSourceSelectedDate);

    // }

    objCalTarget.Render();

    //lastObjCalSourceSelectedDate = dtObjCalSourceSelectedDate; //alert(lastObjCalSourceSelectedDate);
}

function setCalendarMonth(objPicker, p_strContext) {
    if (objPicker.getSelectedDate()) {
        //objDdl = objPicker.getSelectedDate().getMonth();

        eval('ddl' + p_strContext + 'MonthSelected = ' + objPicker.getSelectedDate().getMonth());
        if ($get('ddlMonth' + p_strContext)) {
            $get('ddlMonth' + p_strContext).selectedIndex = eval('ddl' + p_strContext + 'MonthSelected'); //;ddlFromMonthSelected;
            //alert(eval('ddl' + p_strContext + 'MonthSelected'))
            //eval('ddl' + p_strContext + 'MonthSelected');
        }
    }
}


///Start generic b
function Button_OnClick(event, p_strContext) {
    //alert('bc')
    //debugger;
    //nnn
    var objCal = eval('Calendar' + p_strContext);

    var co = InitCalendarObjects(objCal);

    var objPicker = eval('Picker' + p_strContext);
    var IE6 = false/*@cc_on || @_jscript_version < 5.7@*/;
    var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

    if (co.IsdoubleCalendar && objCal.oldHide == undefined) {
        objCal.oldHide = objCal.Hide;
        objCal.Hide = NewHide;
    }
    
    //var objDdl = eval('ddl' + p_strContext + 'MonthSelected');
    ///doubleCalendarPackagePopUpExpandOffsetX is set in the ascx where the calendar ojects are and
    ///is designed to override the PopUpExpandOffsetX when it is not implemented by the cal itself.
    var tmpDoubleCalendarPackagePopUpExpandOffsetX = 0;
    if (typeof (doubleCalendarPackagePopUpExpandOffsetX) != 'undefined') {
        tmpDoubleCalendarPackagePopUpExpandOffsetX = doubleCalendarPackagePopUpExpandOffsetX;
        //alert(tmpDoubleCalendarPackagePopUpExpandOffsetX);
    }

    var tmpDoubleCalendarPackagePopUpExpandOffsetY = 0;
    if (typeof (doubleCalendarPackagePopUpExpandOffsetY) != 'undefined') {
        tmpDoubleCalendarPackagePopUpExpandOffsetY = doubleCalendarPackagePopUpExpandOffsetY;
    }
    
    if (objCal.get_popUpShowing()) {
        objCal.hide();
    }
    else {
        objCal.setSelectedDate(objPicker.getSelectedDate());

        setCalendarMonth(objPicker, p_strContext);

        if (co.IsdoubleCalendar) {
            //get calendar id.
            //alert(p_strContext)
            //objCal.show();
            //debugger

            //alert(IE6)

            var btnCal = event.target || event.srcElement;
            var idCal = objCal.get_id();
            //get calendar div container element.
            var parentCal = document.getElementById(idCal + "_CalendarTable").parentNode;
            var posLeft = $(parentCal).css("left");
            var calWidth = 226;//$(parentCal).width();
            //alert(calWidth)
            var btnLeft = pageX(btnCal);

            //check if the distance bewteen the button and the left side of the page can fit for 2 calendars.
            var difference = 0;

            //alert(btnLeft)
            //alert(calWidth)
            //alert($(parentCal).width() * 2)
            //alert(objCal.get_popUpExpandOffsetX())

            ///not used
            if (btnLeft < $(parentCal).width() * 2) {
                difference = Math.abs(btnLeft - calWidth);
            }

            //alert(difference)

            if (difference != 0 || is_chrome || 1 == 1) {
                var adjustLeft = calWidth + difference;
                //alert(pageY(btnCal))
                //alert(getElementAbsolutePos(btnCal).x + "66")

                var adjustTop = pageY(btnCal) + $(btnCal).height();
                //check which is the current calendar (negative value: the one with close button - second one)
                //if (objCal.get_popUpExpandOffsetX() < 0 && !is_chrome)
                if (p_strContext == 'ToPackage' && !is_chrome)
                {
                    if (!is_English) {
                        adjustLeft = adjustLeft - calWidth;
                    }
                    else {
                        adjustLeft = adjustLeft + (calWidth - 4);
                    }

                }
                else if (is_chrome)
                {
                    if (p_strContext == 'ToPackage') {
                        //iCorrection = -2;
                        if (typeof (is_English) != 'undefined') {
                            if (!is_English) {
                                adjustLeft = adjustLeft - calWidth;
                            }
                            else {
                                adjustLeft = (calWidth * 2);

                                if (typeof (is_1024) != 'undefined') {
                                    if (is_1024) {
                                        //adjustLeft = (calWidth * 2) + 108;
                                    }
                                }
                            }
                        }
                    }
                }

                //alert(adjustLeft)
                //alert(adjustTop)
                
                //debugger
                //alert('tmpDoubleCalendarPackagePopUpExpandOffsetX' + tmpDoubleCalendarPackagePopUpExpandOffsetX)
                if (!IE6 || typeof (IsPackagesHorizontalSearchDoubleCalendar) == 'undefined') {
                    //alert(tmpDoubleCalendarPackagePopUpExpandOffsetX)
                    
                    var iCorrection = 0;
                    //alert(p_strContext)
                    if (p_strContext == 'FromPackage') {
                        //iCorrection = -4;
                    }

                    if (p_strContext == 'ToPackage') {
                        //iCorrection = -2;
                    }

                    //alert('s0-' + ((adjustLeft + tmpDoubleCalendarPackagePopUpExpandOffsetX) + iCorrection) + '--' + (adjustTop + tmpDoubleCalendarPackagePopUpExpandOffsetY))                    

                    //window.scrollTo(0, 10);
                    objCal.show((adjustLeft + tmpDoubleCalendarPackagePopUpExpandOffsetX) + iCorrection, adjustTop + tmpDoubleCalendarPackagePopUpExpandOffsetY);
                    //debugger
                    //alert(adjustLeft + tmpDoubleCalendarPackagePopUpExpandOffsetX);
                    if (parentCal.style.left == "0px") {
                        parentCal.style.left = (adjustLeft + tmpDoubleCalendarPackagePopUpExpandOffsetX) + 'px';
                        //alert(parentCal.style.left)
                    }

                    if (p_strContext == 'ToPackage' && is_English) {
                        parentCal.style.zIndex = "1100";///fromcal zIndex is 1000
                        //alert(parentCal.style.zIndex)
                    }
                    
                    
                }
                ///when IE6 and in Packages Horizontal Search only - the doubel calendar needs to be re positioned
                ///because the objCal.show(adjustLeft, adjustTop) in that page does not works.
                else {
                    ///this method works fine with IE6
                    objCal.show();
                    //alert('s1')
                    //alert(btnLeft)
                    var calWidthConst = 226;
                    var calNewLeft = btnLeft - calWidthConst;

                    ///variable indicating we are in Packages Horizontal Search
                    if (typeof (IsPackagesHorizontalSearchDoubleCalendar) != 'undefined') {
                        calNewLeft += 120;
                    }

                    if (p_strContext != 'FromPackage') {

                        //alert(parentCal.style.left)
                        parentCal.style.left = (calNewLeft - calWidthConst) + "px";
                    }
                    else {
                        parentCal.style.left = calNewLeft + "px";
                    }

                    ///hide the results per page combo in ie6 because it visible even though the calendar is
                    ///over it
                    if (typeof (objDDlDisplayResultsInPageClientID) != 'undefined') {
                        if ($get(objDDlDisplayResultsInPageClientID)) {
                            //alert(objDDlDisplayResultsInPage)
                            HideObject($get(objDDlDisplayResultsInPageClientID));
                        }
                    }
                }
            }
            else {
                //debugger
                objCal.PopUpExpandOffsetY = 150;
                objCal.show();
                //alert('s2')
            }

            //}
            //            else
            //                objCal.show();
        }
        else {
            objCal.show();
            //alert('s3')
        }

    }
}

function Button_OnMouseUp(event, p_strContext) {
    //alert('mu')
    var objCal = eval('Calendar' + p_strContext);

    if (objCal.get_popUpShowing()) {//alert('popshowing')
        event.cancelBubble = true;
        event.returnValue = false;
        return false;
    }
    else {
        return true;
    }
}
///End generic b



function CancelClick(objCalendar) {
    var co = InitCalendarObjects(objCalendar);
    //nnn
    //CalendarTo.hide();
    //alert('calcel')
    //alert(co.IsdoubleCalendar)
    SetAdditionalUIElements(co);

    if (!co.IsdoubleCalendar) {
        objCalendar.hide();

        
    }
    else {
        if (co.objCalendarFrom.oldHide != undefined && co.objCalendarTo.oldHide != undefined && co.IsdoubleCalendar) {
            co.objCalendarFrom.hide = co.objCalendarFrom.oldHide;
            co.objCalendarTo.hide = co.objCalendarTo.oldHide;
            co.objCalendarFrom.hide();
            co.objCalendarTo.hide();
        }

        ///show the results per page combo in package search results page after it was hidden by
        ///Button_OnClick in ie6.
        if (typeof (objDDlDisplayResultsInPageClientID) != 'undefined') {
            if ($get(objDDlDisplayResultsInPageClientID)) {
                //alert(objDDlDisplayResultsInPage)
                ShowObject($get(objDDlDisplayResultsInPageClientID));
            }
        }
    }

    if (typeof (Close_Popup) == 'function') {
        Close_PopupCalendar();
    }

}

function xxx() {
    var dt = new Date(2008, 11, 1);
    alert(dt);
    //CalendarTo.VisibleDate = dt;
    //CalendarFrom.GoMonth(3);
    CalendarFrom.setSelectedDate(dt);

    //CalendarFrom.hide();
    //CalendarTo.show();

}

function jjj(sender, e) {
    disableSundays(CalendarTo);
}



function ddlMonth_OnSelectedIndexChanged(objCalendar, value, p_strContext) {
    //alert('ddl chenaged')
    //objCalendar.goDate(new Date(objCalendar.get_visibleDate().setMonth(value) ) );

    var bBeforeMinDate = false;

    var objPicker = eval('Picker' + p_strContext);

    //        //alert('value: ' + value);
    //alert('pick min' + PickerFrom.MinDate.getMonth())
    //if (value >= PickerFrom.MinDate.getMonth())
    //alert(objCalendar.get_visibleDate())

    ///must use getFullYear because of a bug in ff
    var dtWantedDate = new Date(objCalendar.get_visibleDate().getFullYear(), value, objPicker.MinDate.getDate())
    //var dtMinDate
    //alert(PickerFrom.MinDate.getDate())
    //alert(dtWantedDate)
    //alert(objPicker.MinDate)
    //debugger
    //var dt1 = new Date(objCalendar.get_visibleDate());
    //alert(objCalendar.get_visibleDate().getFullYear());
    //alert(dt1.getFullYear())
    
    if (dtWantedDate >= objPicker.MinDate) {
        //ddlFromMonthSelected = parseInt(value);
        eval('ddl' + p_strContext + 'MonthSelected = ' + parseInt(value));
    }
    else {
        bBeforeMinDate = true;
    }


    //alert('value: ' + value);
    //alert(PickerFrom.MinDate.getMonth())
    //alert(bBeforeMinDate)

    //CalendarFrom.setSelectedDate(new Date(CalendarFrom.get_visibleDate().setMonth(value) ));
    if (!bBeforeMinDate) {
        ///nnn
        //alert(objCalendar.get_visibleDate().getYear())

        //objCalendar.setSelectedDate(new Date(objCalendar.get_visibleDate().getYear(), value, 1));
        objCalendar.SetVisibleDate(new Date(objCalendar.get_visibleDate().getFullYear(), value, 1));

        ///this line has bugs - get_visibleDate().setMonth(value) does not always work
        //new Date(objCalendar.get_visibleDate().setMonth(value) ));    
    }



    //CalendarFrom.setVisibleDate(new Date(CalendarFrom.get_visibleDate().setMonth(value) ));
    //CalendarFrom.render();
    //CalendarFrom.load();

    //var fromDate = CalendarFrom.getSelectedDate();
    //disableSundays(CalendarTo);
    //alert(fromDate)
    //alert(fromDate.Add)

    //CalendarTo.MinDate = fromDate.Add("D", 1);
    //CalendarTo.setVisibleDate(fromDate.Add("D", 1));//new Date(CalendarFrom.get_visibleDate().Add("D", 1).setMonth(value) ));
    //CalendarTo.render();

    ///nnn

    //alert(fromDate.Add("D", 1));
    //CalendarTo.initialize();


    //CalendarFrom.render();
    //CalendarFrom.show();
}

function GetVisibleYear(objCalendar) {
    var result = objCalendar.get_visibleDate().getFullYear();

//    if (objCalendar.get_visibleDate().getMonth()) { 
//        month
//    }


    return result;
}

function GoPrevMonth(objCalendar, p_strContext) { //alert('kkk');
    //CalendarFrom.GoPrevMonth();
    var objPicker = eval('Picker' + p_strContext);


    //alert(objCalendar.get_visibleDate() > PickerFrom.MinDate)
    //alert('ddlfrom' + ddlFromMonthSelected);
    //alert('from min' +PickerFrom.MinDate.getMonth())
    //if (ddlFromMonthSelected > PickerFrom.MinDate.getMonth())
    if (objCalendar.get_visibleDate() > objPicker.MinDate) {//alert('in')
        objCalendar.GoPrevMonth()
        //BackwardFromMonthDropDown();

        var ddlName = 'ddlMonth' + p_strContext;

        if ($get(ddlName).selectedIndex > 0) {
            $get(ddlName).selectedIndex = $get(ddlName).selectedIndex - 1;
            //ddlFromMonthSelected = ddlFromMonthSelected - 1;
            eval('ddl' + p_strContext + 'MonthSelected = ddl' + p_strContext + 'MonthSelected - 1');
        }
        else {
            $get(ddlName).selectedIndex = 11;
            //ddlFromMonthSelected = 11;
            eval('ddl' + p_strContext + 'MonthSelected = 11');
        }

    }


}

function GoNextMonth(objCalendar, p_strContext) { //alert('kkk');
    //CalendarFrom.GoNextMonth();
    objCalendar.GoNextMonth();
    //alert(objCalendar.get_visibleDate().getYear());
    //alert(objCalendar.getSelectedDate())
    //debugger

    var ddlName = 'ddlMonth' + p_strContext;

    //alert($get(ddlName).selectedIndex)
    if ($get(ddlName).selectedIndex < 11) {
        $get(ddlName).selectedIndex = $get(ddlName).selectedIndex + 1;
        //ddlFromMonthSelected = ddlFromMonthSelected + 1;
        eval('ddl' + p_strContext + 'MonthSelected = ddl' + p_strContext + 'MonthSelected + 1');
    }
    else {
        $get(ddlName).selectedIndex = 0;
        //ddlFromMonthSelected = 0;
        eval('ddl' + p_strContext + 'MonthSelected = 0');
    }



}



/// End calendar functions
/////////////////////////////////


///sets the inner text of the days count span with the cars rent days based on the dates and hours seletced.
///when the 30 minutes threshhold after 24 hour is reached - a new rent date is added
function SetRentDaysCount(fromDate, toDate, objCalendar) {
    //var mydate = new Date('6/20/2008 15:00');
    //var mydate2 = new Date('6/20/2008 15:30');
    var co = InitCalendarObjects(objCalendar);
    ///the amount of minutes in seconds that if user adds to the regular 24 hours - a new rent day is added to the total.
    var decMinSecondsConsideredAsRentDay = 0.02;

    //alert(DateDiffDecimal(mydate, mydate2));
    //alert(objCalendarFrom.objDdlHoursFrom);

    ///full dates including hours
    var dtFromDateFull = new Date('' + (fromDate.getMonth() + 1) + '/' + (fromDate.getDate()) + '/' + fromDate.getFullYear() + ' ' + co.objDdlHoursFrom.value + '');
    var dtToDateFull = new Date('' + (toDate.getMonth() + 1) + '/' + (toDate.getDate()) + '/' + toDate.getFullYear() + ' ' + co.objDdlHoursTo.value + '');
    //alert(dtFromDateFull)
    ///alert(dtToDateFull)

    if ($get('spnDays')) {
        var dateDiff = DateDiff(fromDate, toDate);
        var dateDiffDecimal = DateDiffDecimal(dtFromDateFull, dtToDateFull);

        //alert(dateDiffDecimal)
        ///if the dates are not the same day
        if (Math.floor(dateDiffDecimal) > 0) {
            if (
            ///if the reminder is bigger then the new day threshhld
                        (dateDiffDecimal % Math.floor(dateDiffDecimal) > decMinSecondsConsideredAsRentDay)
                        &&
                        (
            ///the hour is bigger
                            (dtToDateFull.getHours() > dtFromDateFull.getHours())
                            ||
                            (
            ///the hours are equal and the minutes are bigger or equal
                                (dtToDateFull.getHours() == dtFromDateFull.getHours())
                                &&
                                (dtToDateFull.getMinutes() >= dtFromDateFull.getHours())
                            )
                        )

                    ) {
                dateDiff += 1;
            }

            //decMinSecondsConsideredAsRentDay
        }
        ///same day was chosen
        else {
            ///threshhold was reached
            if (dateDiffDecimal > decMinSecondsConsideredAsRentDay && (dateDiff == 0))
                dateDiff += 1;
        }

        if (dateDiff < 0) dateDiff = 0;
        //alert(dateDiff)
        $get('spnDays').innerHTML = dateDiff;
    }
}

function SetPackageNightsCount(fromDate, toDate) {
    if ($get('spnDays')) {
        var dateDiff = DateDiff(fromDate, toDate);

        if (dateDiff < 0) dateDiff = 0;

        $get('spnDays').innerText = dateDiff;
    }

    //if ($get('divNights')) {
    //   $get('divNights').style.display = "block";
    //}
}

///disbale days
function Calendar1_onLoad(sender, e) {//alert('load');
    disableSundays(sender);
}
function Calendar1_onAfterVisibleDateChanged(sender, e) {
    disableSundays(sender);
}
function daysInMonth(iMonth, iYear) {
    return 32 - new Date(iYear, iMonth, 32).getDate();
}
function disableSundays(calendar) {
    var visibledate = calendar.get_visibleDate();
    var tempdate;

    for (i = 0; i < daysInMonth(visibledate.getMonth() - 1, visibledate.getYear()); i++) {
        tempdate = new Date(visibledate);
        tempdate.setDate(i);
        if (tempdate.getDay() == 0)  // 0 = Sunday
        {
            calendar.get_disabledDates().add(tempdate);
        }
    }
}

///Start Init Controls functions


///Inits controls properties i.e. calendars custom properties


////*********************** Start Slim calendar functions ***********************************

///Start from
function PickerFrom_OnDateChangeSlim(sender, eventArgs) {
    //debugger
    //return;

    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);

    SetDaysDelta();
    alert()
    var fromDate = co.objPickerFrom.getSelectedDate();
    //alert(eval("PickerSingle"));
    if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
        var SingleDate = co.objPickerSingle.getSelectedDate();
        var Flight4Date = co.objPickerFlight4.getSelectedDate();
    }


    var toDate = co.objPickerTo.getSelectedDate();
    //alert(fromDate.Add("D", 3))

    //co.objCalendarFrom.setSelectedDate(fromDate);

    //nnn
    //ddlFromMonthSelected = fromDate.getMonth();
    ///set the global variable
    eval(co.strDdlMonthFromID + 'Selected = ' + fromDate.getMonth()); // = ;

    //alert(ddlFromMonthSelected);
    if (!co.IsdoubleCalendar) {

        ///TODO: there is a bug in the calendar - when using the picker only to change dates and there
        ///is a transition between month there is an error - "invalid argument" probably because of the .Add
        ///function
        if (fromDate > toDate) {
            var fromDTmp = new Date(fromDate);
            co.objPickerTo.setSelectedDate(fromDTmp.Add("D", iDaysDelta));
            //co.objCalendarTo.setSelectedDate(fromDate.Add("D", iDaysDelta));

            if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
                var singleDTmp = new Date(SingleDate);
                co.objPickerSingle.setSelectedDate(singleDTmp.Add("D", iDaysDelta + 1));
                //co.objCalendarSingle.setSelectedDate(SingleDate.Add("D", iDaysDelta + 1));
                var flight4DTmp = new Date(Flight4Date);
                co.objPickerFlight4.setSelectedDate(flight4DTmp.Add("D", iDaysDelta + 1));
                //co.objCalendarFlight4.setSelectedDate(Flight4Date.Add("D", iDaysDelta + 1));
            }


        }


        //alert(((toDate-fromDate)/(24*60*60*1000)));
        //var datDiff = ((toDate-fromDate)/(24*60*60*1000));
        //SetRentDaysCount(fromDate, toDate, objCalendarFrom);
        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();

        //SetCalendarMinDate(co.objCalendarTo, co.objCalendarFrom, co.objPickerTo, co.objPickerFrom);

        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
            //SetCalendarMinDate(co.objCalendarSingle, co.objCalendarFrom, co.objPickerSingle, co.objPickerFrom);
            //SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarFrom, co.objPickerFlight4, co.objPickerFrom);
        }
        //alert(fromDate.getMonth())
    }

    if (calName.indexOf("FromIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("FromHotels") > -1)
        SetTxtSpan("Hotels");
}




function CalendarGeneral_OnChangeSlim(sender, eventArgs) {
    //debugger
    var calName = sender.GlobalAlias;
    //alert(lastCalendarOpenerButtonID);
    //alert($get(lastCalendarOpenerButtonID));
    //alert($get(lastCalendarOpenerButtonID).Context);
    //alert($get(lastCalendarOpenerButtonID).attributes['context'].value)
    //debugger
    //alert('--' + sender.GlobalAlias)
    //alert(sender.get_attributes().getAttribute("ffgg"))
    var btnCalendarOpener = $get(lastCalendarOpenerButtonID);
    var btnCalendarOpenerContext = '';

    //if (window.addEventListener) {
    btnCalendarOpenerContext = $get(lastCalendarOpenerButtonID).attributes['Context'].value;
    //}
    //else {
    //    btnCalendarOpenerContext = $get(lastCalendarOpenerButtonID).Context;
    //}

    //btnCalendarOpenerContext = $get(lastCalendarOpenerButtonID).attributes['Context'].value;
    //alert(btnCalendarOpenerContext)

    var co = InitCalendarObjects(sender);

    SetDaysDelta();
    //alert(co);
    ///


    var fromDate = co.objCalendarFrom.getSelectedDate();
    //var fromDate = eval('Calendar' + btnCalendarOpenerContext) ;//co.objCalendarFrom.getSelectedDate();

    //if (fromDate == null)
    //    fromDate = co.objPickerFrom.getSelectedDate();

    //var fromDate = sender.getSelectedDate();

    if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
        var SingleDate = co.objPickerSingle.getSelectedDate();
        var Flight4Date = co.objPickerFlight4.getSelectedDate();
    }
    //debugger
    var toDate = co.objPickerTo.getSelectedDate();
    //alert(fromDate)
    //ddlFromMonthSelected = fromDate.getMonth();
    //eval(co.strDdlMonthFromID + 'Selected = ' + fromDate.getMonth());// = ;

    if (co.IsdoubleCalendar)
        if ($get('ddlMonthFromFlyAndDrive'))
        $get('ddlMonthFromFlyAndDrive').value = fromDate.getMonth();

    //alert(ddlFromFlyAndDriveMonthSelected)
    //alert(eval(co.strDdlMonthFromID + 'Selected'));
    //alert(ddlFromCarMonthSelected)

    //CalendarTo.MinDate = CalendarFrom.getSelectedDate();
    //CalendarTo.Render();
    //alert(CalendarTo.MinDate)
    //PickerTo.MinDate = CalendarFrom.getSelectedDate();
    //PickerTo.Render();
    ///nnn
    //disableSundays(CalendarTo);
    //alert(fromDate.Add("D", 1));
    //CalendarTo.initialize();
    //CalendarTo.MinDate = fromDate.Add("D", 1);
    //PickerTo.MinDate = fromDate.Add("D", 1);
    //CalendarTo.render();

    //alert(eval('Picker' + btnCalendarOpenerContext));
    var associatedPicker = eval('Picker' + btnCalendarOpenerContext);

    //co.objPickerFrom.setSelectedDate(fromDate);
    //alert(fromDate)

    associatedPicker.setSelectedDate(fromDate);

    ///collect picker dates
    var date1 = co.objPickerFrom.getSelectedDate();
    var date2 = co.objPickerTo.getSelectedDate();
    //var fromDate = eval('Calendar' + btnCalendarOpenerContext) ;//co.objCalendarFrom.getSelectedDate();

    //if (fromDate == null)
    //    fromDate = co.objPickerFrom.getSelectedDate();
    //var fromDate = sender.getSelectedDate();

    if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
        var date3 = co.objPickerSingle.getSelectedDate();
        var date4 = co.objPickerFlight4.getSelectedDate();
    }



    ///this line position is important
    if (!co.IsdoubleCalendar) {
        //SetCalendarMinDate(co.objCalendarTo, co.objCalendarFrom, co.objPickerTo, co.objPickerFrom);

        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
            //SetCalendarMinDate(co.objCalendarSingle, co.objCalendarFrom, co.objPickerSingle, co.objPickerFrom);
            //SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarFrom, co.objPickerFlight4, co.objPickerFrom);
        }
    }

    if (!co.IsdoubleCalendar) {

        if (btnCalendarOpenerContext.toLowerCase() == 'fromflight') {
            if (date1 > date2) {
                var dtf1 = new Date(date1); //'4/1/2009');
                co.objPickerTo.setSelectedDate(dtf1.Add("D", iDaysDelta)); //fromDate.Add("D", iDaysDelta));
                dtf1 = new Date(date1);
                co.objPickerSingle.setSelectedDate(dtf1.Add("D", iDaysDelta));
                dtf1 = new Date(date1);
                co.objPickerFlight4.setSelectedDate(dtf1.Add("D", iDaysDelta));
            }
        }

        if (btnCalendarOpenerContext.toLowerCase() == 'toflight') {
            if (date2 > date3) {
                var dtf2 = new Date(date2); //'4/1/2009');
                co.objPickerSingle.setSelectedDate(dtf2); //.Add("D", iDaysDelta)); //fromDate.Add("D", iDaysDelta));
                co.objPickerFlight4.setSelectedDate(dtf2);
            }
        }

        if (btnCalendarOpenerContext.toLowerCase() == 'single') {
            if (date3 > date4) {
                var dtf3 = new Date(date3); //'4/1/2009');
                co.objPickerFlight4.setSelectedDate(dtf3);
            }
        }

        ///////////////////////

        if (fromDate > toDate) {
            //co.objPickerTo.setSelectedDate(fromDate.Add("D", iDaysDelta));
            //co.objCalendarTo.setSelectedDate(fromDate.Add("D", iDaysDelta));

            if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
                //co.objPickerSingle.setSelectedDate(SingleDate.Add("D", iDaysDelta + 1));
                //co.objCalendarSingle.setSelectedDate(SingleDate.Add("D", iDaysDelta + 1));
                //co.objPickerFlight4.setSelectedDate(Flight4Date.Add("D", iDaysDelta + 1));
                //co.objCalendarFlight4.setSelectedDate(Flight4Date.Add("D", iDaysDelta + 1));
            }
        }

        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();
    }
    else {
        //co.objPickerFrom.set_enabled(false);

        // clear calendar - disable 4 months dates
        var dis = co.objCalendarTo.get_disabledDates();
        var minDate = new Date();
        var maxDate = new Date();
        minDate.setDate(minDate.getDate() - 30);
        maxDate.setDate(maxDate.getDate() + 122);

        dis.addRange(minDate, maxDate);
        if (sender.GlobalAlias.indexOf("Package") > -1)
            SetPackageEndDatesPackage(fromDate);

        if (sender.GlobalAlias.indexOf("FlyAndDrive") > -1)
            SetPackageEndDatesFlyAndDrive(fromDate);
    }
    //ddlToMonthSelected = PickerTo.getSelectedDate().getMonth();
    //alert(toDate)

    if (calName.indexOf("FromIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("FromHotels") > -1)
        SetTxtSpan("Hotels");

}
///End from


///Start to
function PickerTo_OnDateChangeSlim(sender, eventArgs) {

    //debugger
    //return;
    //alert('p2');
    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);

    var fromDate = co.objPickerFrom.getSelectedDate();
    var toDate = co.objPickerTo.getSelectedDate();

    var SingleDate = co.objPickerSingle.getSelectedDate();


    //ddlToMonthSelected = toDate.getMonth();
    eval(co.strDdlMonthToID + 'Selected = ' + toDate.getMonth()); // = ;


    //co.objCalendarTo.setSelectedDate(toDate);

    if (!co.IsdoubleCalendar) {

        if (fromDate > toDate) {
            co.objPickerFrom.setSelectedDate(toDate);
            //co.objCalendarFrom.setSelectedDate(toDate);
        }

        if (toDate > SingleDate) {
            if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
                var toDateTmp = new Date(toDate);
                co.objPickerSingle.setSelectedDate(toDateTmp);
                //co.objCalendarSingle.setSelectedDate(SingleDate.Add("D", iDaysDelta + 1));
                //var flight4DTmp = new Date(Flight4Date);
                co.objPickerFlight4.setSelectedDate(toDateTmp);
                //co.objCalendarFlight4.setSelectedDate(Flight4Date.Add("D", iDaysDelta + 1));
            }
        }

        //SetRentDaysCount(fromDate, toDate);
        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();

        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4))) {
            //SetCalendarMinDate(co.objCalendarSingle, co.objCalendarTo, co.objPickerSingle, co.objPickerTo);
            //SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarTo, co.objPickerFlight4, co.objPickerTo);
        }
    }
    else {
        SetPackageNightsCount(fromDate, toDate);

    }

    if (calName.indexOf("ToIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("ToHotels") > -1)
        SetTxtSpan("Hotels");
}

///Start single
function PickerSingle_OnDateChangeSlim(sender, eventArgs) {//alert()
    var co = InitCalendarObjects(sender);
    //alert('ps');
    var date3 = PickerSingle.getSelectedDate();
    var date4 = co.objPickerFlight4.getSelectedDate();

    if (!co.IsdoubleCalendar) {

            if (date3 > date4) {
            var date3Tmp = new Date(date3);

            co.objPickerFlight4.setSelectedDate(date3Tmp);
        }

        //alert(fromDate.getMonth())
        ddlSingleMonthSelected = date3.getMonth();
      
    }
}

///Start Flight4
function PickerFlight4_OnDateChangeSlim(sender, eventArgs) {//alert()

    var fromDate = PickerFlight4.getSelectedDate();
  


    //     if (fromDate > toDate)
    //     {
    //       PickerTo.setSelectedDate(fromDate.Add("D", 3));
    //       CalendarTo.setSelectedDate(fromDate.Add("D", 3));
    //     }

    //alert(fromDate.getMonth())
    ddlFlight4MonthSelected = fromDate.getMonth();
}

///disables all dates in objCalTarget that range from objCalTarget min date to objCalSource selected date
///also make the objPickerTarget min date to objPickerSource selected date
function SetCalendarMinDateSlim(objCalTarget, objCalSource, objPickerTarget, objPickerSource) {

    //debugger
    ///temp calender to set current min date dates because calendar uses byref values in the loops

    var dtObjCalTargetMinDate2 = new Date(PickerFromFlight.MinDate); //new Date(objPickerSource.MinDate); //new Date(objPickerTarget.MinDate);

 
    ///set the target picker mindate
    //alert(objPickerSource.getSelectedDate())
    objPickerTarget.set_minDate(objPickerSource.getSelectedDate());




    //PickerTo.Render();
    ///the source calendar selected date - from the target cal min daste to this date 
    ///all dates will be disabled

    //////////////var dtObjCalSourceSelectedDate = objCalSource.getSelectedDate();
    var dtObjCalSourceSelectedDate = objPickerSource.getSelectedDate();
 
    //if (dtObjCalTargetMinDate2.toString() != dtObjCalSourceSelectedDate.toString()) {
        objCalTarget.get_disabledDates().clear();

    
        objCalTarget.Render();

        //var date = new Date(ii);//also works with dtObjCalTargetMinDate2 because ii is byref

        objCalTarget.get_disabledDates().AddRange(dtObjCalTargetMinDate2, dtObjCalSourceSelectedDate);

        // }

        objCalTarget.Render();

 
}

function setCalendarMonthSlim(objPicker, p_strContext) {
    if (objPicker.getSelectedDate()) {
        //objDdl = objPicker.getSelectedDate().getMonth();

        eval('ddl' + p_strContext + 'MonthSelected = ' + objPicker.getSelectedDate().getMonth());
        eval('ddlGeneralMonthSelected = ddl' + p_strContext + 'MonthSelected');

        //alert(eval('ddl' + p_strContext + 'MonthSelected'))
        //alert(ddlGeneralMonthSelected);

        //if ($get('ddlMonth' + p_strContext)) {
        if ($get('ddlMonthGeneral')) {
            //alert('in')
            $get('ddlMonthGeneral').selectedIndex = eval('ddl' + p_strContext + 'MonthSelected'); //;ddlFromMonthSelected;
            //$get('ddlMonth' + p_strContext).selectedIndex = eval('ddl' + p_strContext + 'MonthSelected'); //;ddlFromMonthSelected;
        }
    }
}

function getOffset(el) {
    var _x = 0; var _y = 0; while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { _x += el.offsetLeft - el.scrollLeft; _y += el.offsetTop - el.scrollTop; el = el.parentNode; } return { top: _y, left: _x };
}

function getAbsX(obj) {
    var leftOffset = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            leftOffset += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    else if (obj.x) //for NN4
    {
        leftOffset = obj.x;
    }
    return leftOffset;
}

function getAbsY(obj) {
    var topOffset = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            topOffset += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }
    else if (obj.y) // for NN4
    {
        topOffset = obj.y;
    }
    return topOffset;
}

if (top != window)
{
    //document.onmousemove = top.getMouseXY;
}



///Start generic b
function Button_OnClickSlim(event, p_strContext) {
    //alert('mu2')
    //var objCal = eval('Calendar' + p_strContext);
    var objCal = eval('CalendarGeneral');
    //debugger
    var btnObj = event.target || event.srcElement;

    //objCal.element.setAttribute('clientLeft', 871, null);
    //objCal.element.style.pixelLeft = 871;
    //objCal.element.style.pixelTop = 871;

    //objCal.PopUpObject.x = event.clientX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = event.clientY;
    //objCal.PopUpObject.ContainerStyle.pixelTop = 400;
    objCal.PopUpObject.AlignElement = btnObj;
    //objCal.PopUpObject.Container.clientTop = 500;

    lastCalendarOpenerButtonID = btnObj.id; //event.srcElement.id;
    var generalCalendarTitle = '';
    var txtChooseDate = 'בחר תאריך ';

    //alert(3)
    var co = InitCalendarObjects(objCal);

    ///disable days
    if (p_strContext.toLowerCase() == 'fromflight') {
        generalCalendarTitle = 'הלוך';
        objCal.get_disabledDates().clear();
        objCal.Render();
    }
    else if (p_strContext.toLowerCase() == 'toflight') {
        generalCalendarTitle = 'חזור';
        SetCalendarMinDateSlim(co.objCalendarTo, co.objCalendarFrom, co.objPickerTo, co.objPickerFrom);
    }
    else if (p_strContext.toLowerCase() == 'single') {
        generalCalendarTitle = 'טיסה 3';
        SetCalendarMinDateSlim(co.objCalendarTo, co.objCalendarFrom, co.objPickerSingle, co.objPickerTo);
    }
    else if (p_strContext.toLowerCase() == 'flight4') {
        generalCalendarTitle = 'טיסה 4';
        SetCalendarMinDateSlim(co.objCalendarTo, co.objCalendarFrom, co.objPickerFlight4, co.objPickerSingle);
    }

    if (lastGeneralCalendarTitle == '') {
        lastGeneralCalendarTitle = 'CALENDAR_TITLE';
    }
   
    generalCalendarTitle = txtChooseDate + generalCalendarTitle;

    objCal.HeaderClientTemplate = objCal.HeaderClientTemplate.replace(lastGeneralCalendarTitle, generalCalendarTitle);

    lastGeneralCalendarTitle = generalCalendarTitle;

    //debugger
    var objPicker = eval('Picker' + p_strContext);

    if (co.IsdoubleCalendar && objCal.oldHide == undefined) {
        ////objCal.oldHide = objCal.Hide;
        ////objCal.Hide = NewHide;
        //alert('newh');
    }
    //var objDdl = eval('ddl' + p_strContext + 'MonthSelected');

    if (objCal.get_popUpShowing()) {
        objCal.hide();
    }
    else {
        objCal.setSelectedDate(objPicker.getSelectedDate());

        setCalendarMonthSlim(objPicker, p_strContext);


        if (co.IsdoubleCalendar) {
            //get calendar id.

            var btnCal = event.target || event.srcElement;
            var idCal = objCal.get_id();
            //get calendar div container element.
            var parentCal = document.getElementById(idCal + "_CalendarTable").parentNode;
            var posLeft = $(parentCal).css("left");
            var calWidth = $(parentCal).width();

            var btnLeft = pageX(btnCal);

            //check if the distance bewteen the button and the left side of the page can fit for 2 calendars.
            var difference = 0;
            if (btnLeft < $(parentCal).width() * 2)
                difference = Math.abs(btnLeft - calWidth);

            if (difference != 0) {
                var adjustLeft = calWidth + difference;
                var adjustTop = pageY(btnCal) + $(btnCal).height();
                //check which is the current calendar (negative value: the one with close button - second one)
                if (objCal.get_popUpExpandOffsetX() < 0)
                    adjustLeft = adjustLeft - calWidth;

                objCal.show(adjustLeft, adjustTop);

            }
            else
                objCal.show();

            //}
            //            else
            //                objCal.show();
        }
        else {
            objCal.show();

            objCal.element.style.pixelLeft = 871;
            objCal.element.style.pixelTop = 871;
        }

    }   
}


function Button_OnMouseUpSlim(event, p_strContext) {
    //var objCal = eval('Calendar' + p_strContext);
    var objCal = eval('CalendarGeneral');

    if (objCal.get_popUpShowing()) {//alert('popshowing')
        event.cancelBubble = true;
        event.returnValue = false;
        return false;
    }
    else {
        return true;
    }
}



function ddlMonth_OnSelectedIndexChangedSlim(objCalendar, value, p_strContext) {
    //alert('ddl chenaged')
    //objCalendar.goDate(new Date(objCalendar.get_visibleDate().setMonth(value) ) );

    var bBeforeMinDate = false;

    var objPicker = eval('Picker' + p_strContext);

    //        //alert('value: ' + value);
    //alert('pick min' + PickerFrom.MinDate.getMonth())
    //if (value >= PickerFrom.MinDate.getMonth())
    //alert(objCalendar.get_visibleDate())
    var dtWantedDate = new Date(objCalendar.get_visibleDate().getYear(), value, objPicker.MinDate.getDate())
    //var dtMinDate
    //alert(PickerFrom.MinDate.getDate())
    //alert(dtWantedDate)
    //alert(PickerFrom.MinDate)
    if (dtWantedDate >= objPicker.MinDate) {
        //ddlFromMonthSelected = parseInt(value);
        eval('ddl' + p_strContext + 'MonthSelected = ' + parseInt(value));
        eval('ddlGeneralMonthSelected = ' + parseInt(value));
    }
    else {
        bBeforeMinDate = true;
    }


    //CalendarFrom.setSelectedDate(new Date(CalendarFrom.get_visibleDate().setMonth(value) ));
    if (!bBeforeMinDate) {
              //objCalendar.setSelectedDate(new Date(objCalendar.get_visibleDate().getYear(), value, 1));
        objCalendar.SetVisibleDate(new Date(objCalendar.get_visibleDate().getYear(), value, 1));

        ///this line has bugs - get_visibleDate().setMonth(value) does not always work
        //new Date(objCalendar.get_visibleDate().setMonth(value) ));    
    }
}

function GoPrevMonthSlim(objCalendar, p_strContext) { //alert('kkk');
    //CalendarFrom.GoPrevMonth();
    var objPicker = eval('Picker' + p_strContext);


    //alert(objCalendar.get_visibleDate() > PickerFrom.MinDate)
    //alert('ddlfrom' + ddlFromMonthSelected);
    //alert('from min' +PickerFrom.MinDate.getMonth())
    //if (ddlFromMonthSelected > PickerFrom.MinDate.getMonth())
    if (objCalendar.get_visibleDate() > objPicker.MinDate) {//alert('in')
        objCalendar.GoPrevMonth()
        //BackwardFromMonthDropDown();

        //var ddlName = 'ddlMonth' + p_strContext;
        var ddlName = 'ddlMonthGeneral';

        if ($get(ddlName).selectedIndex > 0) {
            $get(ddlName).selectedIndex = $get(ddlName).selectedIndex - 1;
            //ddlFromMonthSelected = ddlFromMonthSelected - 1;
            eval('ddl' + p_strContext + 'MonthSelected = ddl' + p_strContext + 'MonthSelected - 1');
            eval('ddlGeneralMonthSelected = ddlGeneralMonthSelected - 1');
        }
        else {
            $get(ddlName).selectedIndex = 11;
            //ddlFromMonthSelected = 11;
            eval('ddl' + p_strContext + 'MonthSelected = 11');
            eval('ddlGeneralMonthSelected = 11');
        }

    }


}

function GoNextMonthSlim(objCalendar, p_strContext) { //alert('kkk');
    //CalendarFrom.GoNextMonth();
    objCalendar.GoNextMonth();



    //var ddlName = 'ddlMonth' + p_strContext;
    var ddlName = 'ddlMonthGeneral';

    //alert($get(ddlName).selectedIndex)
    if ($get(ddlName).selectedIndex < 11) {
        $get(ddlName).selectedIndex = $get(ddlName).selectedIndex + 1;
        //ddlFromMonthSelected = ddlFromMonthSelected + 1;
        eval('ddl' + p_strContext + 'MonthSelected = ddl' + p_strContext + 'MonthSelected + 1');
        eval('ddlGeneralMonthSelected = ddlGeneralMonthSelected + 1');
    }
    else {
        $get(ddlName).selectedIndex = 0;
        //ddlFromMonthSelected = 0;
        eval('ddl' + p_strContext + 'MonthSelected = 0');
        eval('ddlGeneralMonthSelected = 0');
    }

}

function InitFlightControlsSlim() {
    CalendarsIDs =
            {
                strPickerFromID: 'PickerFromFlight',
                strCalendarFromID: 'CalendarGeneral', //'CalendarFromFlight',
                strPickerToID: 'PickerToFlight',
                strCalendarToID: 'CalendarGeneral', //'CalendarToFlight',
                strPickerSingleID: 'PickerSingle',
                strCalendarSingleID: 'CalendarGeneral', //'CalendarSingle',
                strPickerFlight4ID: 'PickerFlight4',
                strCalendarFlight4ID: 'CalendarGeneral', //'CalendarFlight4',
                strDdlMonthFromID: 'ddlFromFlightMonth',
                strDdlMonthToID: 'ddlToFlightMonth'
            };
    //alert(1)
    if (IsDefined(typeof (PickerFromFlight)))
        SetCalendarProperties(PickerFromFlight, CalendarsIDs);
    if (IsDefined(typeof (CalendarFromFlight)))
        SetCalendarProperties(CalendarFromFlight, CalendarsIDs);
    if (IsDefined(typeof (PickerToFlight)))
        SetCalendarProperties(PickerToFlight, CalendarsIDs);
    if (IsDefined(typeof (CalendarToFlight)))
        SetCalendarProperties(CalendarToFlight, CalendarsIDs);
    if (IsDefined(typeof (PickerSingle)))
        SetCalendarProperties(PickerSingle, CalendarsIDs);
    if (IsDefined(typeof (CalendarSingle)))
        SetCalendarProperties(CalendarSingle, CalendarsIDs);
    if (IsDefined(typeof (PickerFlight4)))
        SetCalendarProperties(PickerFlight4, CalendarsIDs);
    if (IsDefined(typeof (CalendarFlight4)))
        SetCalendarProperties(CalendarFlight4, CalendarsIDs);

    if (IsDefined(typeof (CalendarGeneral)))
        SetCalendarProperties(CalendarGeneral, CalendarsIDs);
}

////*********************** end Slim calendar functions

///Perform Additional UI tasks according to dates selected
function SetAdditionalUIElements(co) {
    //alert(is_English);
    if (typeof (HideSearchResults) == 'function') {
        HideSearchResults();
    }
    
    if (typeof (additionalDatesDisplayControlID) != 'undefined' ) {
        //debugger
        if (typeof (bUseSingleAdditionalDatesDisplayControlID) != 'undefined' && bUseSingleAdditionalDatesDisplayControlID && additionalDatesDisplayControlID != '') {
            var objAdditionalDatesDisplayControlID = $("#" + additionalDatesDisplayControlID);

            //var fromDateTmp1 = new Date(fromDate);
            //fromDateTmp1.Add("M", 1);
            if (objAdditionalDatesDisplayControlID && objAdditionalDatesDisplayControlID.length > 0) {
                var dt1 = co.objCalendarFrom.getSelectedDate();
                var dt2 = co.objCalendarTo.getSelectedDate();

                var strdt1 = dt1.getDate() + "/" + ((dt1.getMonth() < 10) ? "0" : "") + (dt1.getMonth() + 1) + "/" + dt1.getFullYear();

                if (is_English) {
                    strdt1 = ((dt1.getMonth() < 10) ? "0" : "") + (dt1.getMonth() + 1) + "/" + dt1.getDate() + "/" + dt1.getFullYear();    
                }
                
                var strdt2 = dt2.getDate() + "/" + ((dt2.getMonth() < 10) ? "0" : "") + (dt2.getMonth() + 1) + "/" + dt2.getFullYear();

                if (is_English) {
                    strdt2 = ((dt2.getMonth() < 10) ? "0" : "") + (dt2.getMonth() + 1) + "/" + dt2.getDate() + "/" + dt2.getFullYear();
                }

                objAdditionalDatesDisplayControlID[0].value = strdt1 + " - " + strdt2;
            }
        }
        else 
         if (
             (typeof (additionalFromDateDisplayControlID) != 'undefined')
             &&
             (typeof (additionalToDateDisplayControlID) != 'undefined')
             
         )
         { 
            var objAdditionalFromDateDisplayControlID = $("#" + additionalFromDateDisplayControlID);
            var objAdditionalToDateDisplayControlID = $("#" + additionalToDateDisplayControlID);

            //var fromDateTmp1 = new Date(fromDate);
            //fromDateTmp1.Add("M", 1);
            if (
                objAdditionalFromDateDisplayControlID && objAdditionalFromDateDisplayControlID.length > 0
                &&
                objAdditionalToDateDisplayControlID && objAdditionalToDateDisplayControlID.length > 0
                
                ) {
                    var dt1 = co.objCalendarFrom.getSelectedDate();
                    var dt2 = co.objCalendarTo.getSelectedDate();

                    var strdt1 = dt1.getDate() + "/" + ((dt1.getMonth() < 10) ? "0" : "") + (dt1.getMonth() + 1) + "/" + dt1.getFullYear();

                    if (is_English) {
                        strdt1 = ((dt1.getMonth() < 10) ? "0" : "") + (dt1.getMonth() + 1) + "/" + dt1.getDate() + "/" + dt1.getFullYear();
                    } 
                    
                    var strdt2 = dt2.getDate() + "/" + ((dt2.getMonth() < 10) ? "0" : "") + (dt2.getMonth() + 1) + "/" + dt2.getFullYear();

                    if (is_English) {
                        strdt2 = ((dt2.getMonth() < 10) ? "0" : "") + (dt2.getMonth() + 1) + "/" + dt2.getDate() + "/" + dt2.getFullYear();
                    }

                    objAdditionalFromDateDisplayControlID[0].innerHTML = strdt1;
                    objAdditionalToDateDisplayControlID[0].innerHTML = strdt2;
                }
        }
      
    }
}

