﻿///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;
    }
}


///Start from
function PickerFrom_OnDateChange(sender, eventArgs) {
   
    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);

    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");
}


function PickerFrom_OnDateChangeV2(sender, eventArgs)
{

    var calName = sender.GlobalAlias;
    var co = InitCalendarObjectsV2(sender);

    SetDaysDelta();

    var fromDate = co.objPickerFrom.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 (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();

        SetCalendarMinDate(co.objCalendarTo, co.objCalendarFrom, co.objPickerTo, co.objPickerFrom);

    }

    if (calName.indexOf("FromIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("FromHotels") > -1)
        SetTxtSpan("Hotels");
}



function CalendarFrom_OnChange(sender, eventArgs) {
    //
    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);

    
    ///this line position is important
    if (!co.IsdoubleCalendar) {
        //
        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.objCalendarToV2)) && IsDefined(typeof (co.objPickerToV2)))
            {
                fromDateTmp = new Date(fromDate);
                co.objPickerToV2.setSelectedDate(fromDateTmp.Add("D", iDaysDelta));
                fromDateTmp = new Date(fromDate);
                co.objCalendarToV2.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);

        // 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_OnDateChange(sender, eventArgs) {

    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);

    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 PickerTo_OnDateChangeV2(sender, eventArgs)
{

    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);

    var fromDate = co.objPickerFrom.getSelectedDate();
    var toDate = co.objPickerToV2.getSelectedDate();

    //ddlToMonthSelected = toDate.getMonth();
    eval(co.strDdlMonthToID + 'Selected = ' + toDate.getMonth()); // = ;


    co.objCalendarToV2.setSelectedDate(toDate);

    if (!co.IsdoubleCalendar)
    {

        if (fromDate > toDate)
        {
            co.objPickerFrom.setSelectedDate(toDate);
            co.objCalendarFrom.setSelectedDate(toDate);
        }

        //SetRentDaysCount(fromDate, toDate);
        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();

    }
    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);
    //alert(co.objPickerFrom);
    var fromDate = co.objPickerFrom.getSelectedDate();
    var toDate = co.objCalendarTo.getSelectedDate();

    co.objPickerTo.setSelectedDate(toDate);

    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();
    //
    if (calName.indexOf("ToIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("ToHotels") > -1)
        SetTxtSpan("Hotels");
}

function CalendarTo_OnChangeV2(sender, eventArgs)
{

    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);
    //alert(co.objPickerFrom);
    var fromDate = co.objPickerFrom.getSelectedDate();
    var toDate = co.objCalendarToV2.getSelectedDate();

    co.objPickerToV2.setSelectedDate(toDate);
    co.objPickerTo.setSelectedDate(toDate);

    if (!co.IsdoubleCalendar)
    {
        if (IsDefined(typeof (co.objPickerSingle)) && IsDefined(typeof (co.objPickerFlight4)))
        {
            SetCalendarMinDate(co.objCalendarSingle, co.objCalendarToV2, co.objPickerSingle, co.objPickerToV2);
            SetCalendarMinDate(co.objCalendarFlight4, co.objCalendarToV2, co.objPickerFlight4, co.objPickerToV2);
        }
    }

    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.objCalendarToV2);
        SetPackageNightsCount(fromDate, toDate);
    }
    //ddlToMonthSelected = PickerTo.getSelectedDate().getMonth();
    //
    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() {
    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)

    //
    //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();
    //
    //alert(ff.GetCount())
    //objCalTarget.get_disabledDates().CleanUp();
    objCalTarget.get_disabledDates().clear();
    //alert(objCalTarget.get_disabledDates().GetCount())
    //        for (yy = 0; yy < ff.GetCount(); yy += 1) 
    //        {
    //            //
    //            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)
    }

    //
    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');
        }
    }
    //

     //var d=new Date();
//       m=d.getMonth();
//    if((objPicker.getSelectedDate().getMonth()<=d.getMonth())&&(objPicker.getSelectedDate().getYear()<=d.getYear()))
//    {
//     // var a=  $('btPrev').disabled;
//     // $('btPrev').addClass();
//       // $('btPrev').disabled = false;
//    }
}


///Start generic b
function Button_OnClick(event, p_strContext)
{
    //alert('bc')
    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@*/;

    if (co.IsdoubleCalendar && objCal.oldHide == undefined) {
        objCal.oldHide = objCal.Hide;
        objCal.Hide = NewHide;
    }
    //var objDdl = eval('ddl' + p_strContext + 'MonthSelected');
    
    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();
            //

            //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 = $(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;

                if (!IE6 || typeof (IsPackagesHorizontalSearchDoubleCalendar) == 'undefined')
                {
                    objCal.show(adjustLeft, adjustTop);
                }
                ///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(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
                objCal.show();
        }
        else
        {
            objCal.show(); 
        }

    }
}


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(co.IsdoubleCalendar)

    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));
            }
        }
    }

}

function CancelClickV2(objCalendar)
{
    var co = InitCalendarObjectsV2(objCalendar);

    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));
            }
        }
    }
}


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())
    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));
    }
    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().getYear(), 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 GoPrevMonth(objCalendar, p_strContext) { //alert('kkk');

        var d=new Date();
        var ddlName = 'ddlMonth' + p_strContext;
     
       var selYear = $get(ddlName)[$get(ddlName).selectedIndex].innerHTML;
       var my_year=selYear.substring(selYear.length-5);
        //alert(my_year);
    if(($get(ddlName).selectedIndex==d.getMonth())&&(my_year<=d.getYear()))
    {
       return;
    }
    //CalendarFrom.GoPrevMonth();
   
    //if(objCalendar.
    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');

//
// if((objCalendar.getSelectedDate().getMonth()<=d.getMonth())&&(objCalendar.getSelectedDate().getYear()<=d.getYear()))
//    {
//       
//    }
//    //CalendarFrom.GoNextMonth();
    objCalendar.GoNextMonth();



    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);

    ///fill 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) {

    //return;

    var calName = sender.GlobalAlias;
    var co = InitCalendarObjects(sender);

    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 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) {
    //
    var calName = sender.GlobalAlias;
    //alert(lastCalendarOpenerButtonID);
    //alert($get(lastCalendarOpenerButtonID));
    //alert($get(lastCalendarOpenerButtonID).Context);
    //alert($get(lastCalendarOpenerButtonID).attributes['context'].value)
    //
    //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();
    }
    //
    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");

}


function CalendarGeneral_OnChangeSlimV2(sender, eventArgs)
{
    var calName = sender.GlobalAlias;
    var btnCalendarOpener = $get(lastCalendarOpenerButtonID);
    var btnCalendarOpenerContext = '';

    btnCalendarOpenerContext = $get(lastCalendarOpenerButtonID).attributes['Context'].value;

    var co = InitCalendarObjectsV2(sender);

    SetDaysDelta();


    var fromDate = co.objCalendarFrom.getSelectedDate();

    var toDate = co.objPickerTo.getSelectedDate();

    if (co.IsdoubleCalendar)
        if ($get('ddlMonthFromFlyAndDrive'))
        $get('ddlMonthFromFlyAndDrive').value = fromDate.getMonth();

    var associatedPicker = eval('Picker' + btnCalendarOpenerContext);

    associatedPicker.setSelectedDate(fromDate);

    ///collect picker dates
    var date1 = co.objPickerFrom.getSelectedDate();
    var date2 = co.objPickerTo.getSelectedDate();

    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));
            }
        }

        if (typeof (SetRentDaysCountProxy) != "undefined")
            SetRentDaysCountProxy();
    }
    else
    {
        // 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);
    }

    if (calName.indexOf("FromIsraelHotels") > -1)
        SetTxtSpan("IsraelHotels");

    if (calName.indexOf("FromHotels") > -1)
        SetTxtSpan("Hotels");

}


///End from


///Start to
function PickerTo_OnDateChangeSlim(sender, eventArgs) {

    //
    //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) {

        //var toDate = PickerTo.getSelectedDate();
        //alert(fromDate.Add("D", 3))
        //CalendarSingle.setSelectedDate(fromDate);
        //nnn


        if (date3 > date4) {
            var date3Tmp = new Date(date3);

            co.objPickerFlight4.setSelectedDate(date3Tmp);
        }

        //     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 = date3.getMonth();

        //SetCalendarMinDate(CalendarFlight4, CalendarSingle, PickerFlight4, PickerSingle);
    }
}

///Start Flight4
function PickerFlight4_OnDateChangeSlim(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();
}

///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) {

    //
    ///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);
    var dtObjCalTargetMinDate2 = new Date(PickerFromFlight.MinDate); //new Date(objPickerSource.MinDate); //new Date(objPickerTarget.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();
    var dtObjCalSourceSelectedDate = objPickerSource.getSelectedDate();

    //alert('dtObjCalSourceSelectedDate' + dtObjCalSourceSelectedDate)

    ///the first time lastObjCalSourceSelectedDate is null
    //if (lastObjCalSourceSelectedDate == null)
    //   lastObjCalSourceSelectedDate = dtObjCalSourceSelectedDate;
    //alert('to_min' + CalendarToMinDate)

    //
    //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();
    //
    //alert(ff.GetCount())
    //objCalTarget.get_disabledDates().CleanUp();

    //if (dtObjCalTargetMinDate2.toString() != dtObjCalSourceSelectedDate.toString()) {
        objCalTarget.get_disabledDates().clear();


        //alert(objCalTarget.get_disabledDates().GetCount())
        //        for (yy = 0; yy < ff.GetCount(); yy += 1) 
        //        {
        //            //
        //            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);
        //        }


        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 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;

            //alert(eval('ddl' + p_strContext + 'MonthSelected'))
            //eval('ddl' + p_strContext + 'MonthSelected');
        }
    }
}

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;
}

//alert(top == window);

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');
    //
    var btnObj = event.target || event.srcElement;

    ///for iframe use/////////////////////////////////
    ///works - absolut position
    //objCal.PopUpObject.x = event.clientX; //event.clientX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = event.clientY;
    //window.top.getiframepos();
    //---------------
    //objCal.PopUpObject.x = event.clientX + window.top.getiframepos().x ; //event.clientX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = event.clientY + window.top.getiframepos().y;
    //window.top.hh(event.clientX + window.top.getiframepos().x, event.clientY + window.top.getiframepos().y);
    //return;
    ////////////////////////////////////////////////
    
    
    
    //alert(event.clientX + window.top.getiframepos().x);
    //alert(event.clientY + window.top.getiframepos().y);
//    var tt = pageX(window.frameElement.parentNode);

    

//    var x = getOffset(window.frameElement).left;
//    var y = getOffset(window.frameElement).top;

//    var x2 = getOffset(window.frameElement.parentNode).left;
//    var y2 = getOffset(window.frameElement.parentNode).top;

//    var t1 = getAbsX(window.frameElement.parentNode);
//    var t2 = getAbsY(window.frameElement.parentNode);

// Detect if the browser is IE or not.
// If it is not IE, we assume that the browser is NS.
//var IE = window.top.document.all?true:false

//// If NS -- that is, !IE -- then set up for mouse capture
//if (!IE) document.captureEvents(Event.MOUSEMOVE)

//// Set-up to use getMouseXY function onMouseMove
//window.top.document.onmousemove = getMouseXY;
//document.onmousemove = getMouseXY;

//// Temporary variables to hold mouse x-y pos.s
//var tempX = 0
//var tempY = 0

//// Main function to retrieve mouse x-y pos.s




    
    
    
    ////////////////////////////////////////////////////////////////////////////////////////
    
    
    //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;

    //objCal.PopUpObject.x = event.screenX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = event.screenY;
    //objCal.element.clientLeft = 871;
    //objCal.element.clientTop = 369;

    //alert(event.target.id)
    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;
    ////////



    //
    var objPicker = eval('Picker' + p_strContext);

    if (co.IsdoubleCalendar && objCal.oldHide == undefined) {
        objCal.oldHide = objCal.Hide;
        objCal.Hide = NewHide;
    }
    //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;
        }

    }


//    objCal.element.style.pixelLeft = 10;
//    objCal.element.style.pixelTop = 10;
//    objCal.element.style.clientLeft = 10;
//    objCal.element.style.clientTop = 10;

//////    var idCal = objCal.get_id();
//////    var parentCal2 = document.getElementById(idCal + "_CalendarTable").parentNode;

    //parentCal2.style.left = "10px";
    
    ///objCal.element.setAttribute('clientLeft', 871, null);
    //objCal.element.style.pixelLeft = 271;
    //objCal.element.style.pixelTop = 271;

    //objCal.PopUpObject.x = 20;//event.clientX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = 20;//event.clientY;
    //objCal.PopUpObject.ContainerStyle.pixelTop = 400;
    //objCal.PopUpObject.AlignElement = btnObj;
    //objCal.PopUpObject.Container.clientTop = 500;

    //objCal.PopUpObject.x = event.screenX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = event.screenY;
    //objCal.element.clientLeft = 871;
    //objCal.element.clientTop = 369;
    
}

function Button_OnClickSlimV2(event, p_strContext)
{
    var objCal = eval('CalendarGeneral');

    var btnObj = event.target || event.srcElement;

    objCal.PopUpObject.AlignElement = btnObj;

    lastCalendarOpenerButtonID = btnObj.id; //event.srcElement.id;
    var generalCalendarTitle = '';
    var txtChooseDate = 'בחר תאריך ';

    //alert(3)
    var co = InitCalendarObjectsV2(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);
    }

    if (lastGeneralCalendarTitle == '')
    {
        lastGeneralCalendarTitle = 'CALENDAR_TITLE';
    }

    generalCalendarTitle = txtChooseDate + generalCalendarTitle;

    objCal.HeaderClientTemplate = objCal.HeaderClientTemplate.replace(lastGeneralCalendarTitle, generalCalendarTitle);

    lastGeneralCalendarTitle = generalCalendarTitle;
    ////////



    //
    var objPicker = eval('Picker' + p_strContext);

    if (co.IsdoubleCalendar && objCal.oldHide == undefined)
    {
        objCal.oldHide = objCal.Hide;
        objCal.Hide = NewHide;
    }
    //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;
        }

    }


    //    objCal.element.style.pixelLeft = 10;
    //    objCal.element.style.pixelTop = 10;
    //    objCal.element.style.clientLeft = 10;
    //    objCal.element.style.clientTop = 10;

    //////    var idCal = objCal.get_id();
    //////    var parentCal2 = document.getElementById(idCal + "_CalendarTable").parentNode;

    //parentCal2.style.left = "10px";

    ///objCal.element.setAttribute('clientLeft', 871, null);
    //objCal.element.style.pixelLeft = 271;
    //objCal.element.style.pixelTop = 271;

    //objCal.PopUpObject.x = 20;//event.clientX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = 20;//event.clientY;
    //objCal.PopUpObject.ContainerStyle.pixelTop = 400;
    //objCal.PopUpObject.AlignElement = btnObj;
    //objCal.PopUpObject.Container.clientTop = 500;

    //objCal.PopUpObject.x = event.screenX - objCal.PopUpObject.ContainerWidth;
    //objCal.PopUpObject.y = event.screenY;
    //objCal.element.clientLeft = 871;
    //objCal.element.clientTop = 369;

}


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;
    }


    //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().getYear(), 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 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);
}

////*********************** Start Slim calendar functions


//alert(typeof (Sys))
//if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();