
YAHOO.namespace("BIRTS.PopupCalendar");


YAHOO.BIRTS.PopupCalendar.init = function() {     
    YAHOO.BIRTS.PopupCalendar.Calendar = new YAHOO.widget.Calendar("Calendar", "BIRTS_PlanTripCalendarContainer", {mindate:"1/1/2006", maxdate:"12/31/2006", birts_month_label_style_format: 1});            

    YAHOO.BIRTS.PopupCalendar.Calendar.render();                                
        
    selectedDateHandler = function() {                    
        var date1 = YAHOO.BIRTS.PopupCalendar.Calendar.getSelectedDates()[0];
        YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer.style.display = 'none';   
        YAHOO.BIRTS.PopupCalendar.isActived = false;
        YAHOO.BIRTS.PopupCalendar.isSelected = true;
        date1 = new Date(date1);
        var formattedDate = new Date(date1);
        var mindex = 0, dindex = 0;
        for(var i=0; i<YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.options.length; i++) {
            if (YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.options[i].value == ((formattedDate.getMonth()+1) + "," + formattedDate.getFullYear()))
            {
                mindex = i;            
                break;
            }    
        }
        
        if (YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex == mindex) {
            YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex = mindex;
            
            for(var i=0; i<YAHOO.BIRTS.PopupCalendar.DayControl.options.length; i++) {
                if (YAHOO.BIRTS.PopupCalendar.DayControl.options[i].value == formattedDate.getDate().toString()) {
                    dindex = i;
                    break;
                }
            }
        
            YAHOO.BIRTS.PopupCalendar.DayControl.selectedIndex = dindex;
        }
        else {
            YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex = mindex;
            
            var defCfg = YAHOO.widget.Calendar._DEFAULT_CONFIG;
            
            var minDate = this.cfg.getProperty(defCfg.MINDATE.key);
            var maxDate = this.cfg.getProperty(defCfg.MAXDATE.key);
            
            var selMonth = parseInt(YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.options[YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex].value.substr(0, YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.options[YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex].value.indexOf(",")), 10) - 1;
            var selYear = parseInt(YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.options[YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex].value.substr(YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.options[YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex].value.indexOf(",")+1), 10);            
                        
            var startDate = new Date(selYear, selMonth, 1);
            if (startDate < minDate)
                startDate = minDate;                
                                            
            var endDate = new Date(selYear, selMonth+1, 1);            
            endDate.setDate(endDate.getDate()-1);
            if (endDate > maxDate)
                endDate = maxDate;
                            
            YAHOO.BIRTS.PopupCalendar.DayControl.options.length = 0;            
            
            for(var i=startDate.getDate(); i<=endDate.getDate(); i++) {                                
                                              
                YAHOO.BIRTS.PopupCalendar.DayControl.options[YAHOO.BIRTS.PopupCalendar.DayControl.options.length] = new Option(this.Locale.WEEKDAYS_MEDIUM[startDate.getDay()] + " " + startDate.getDate(), startDate.getDate()); 
                
                startDate.setDate(startDate.getDate()+1);
            }
            
            for(var i=0; i<YAHOO.BIRTS.PopupCalendar.DayControl.options.length; i++) {
                if (YAHOO.BIRTS.PopupCalendar.DayControl.options[i].value == formattedDate.getDate().toString()) {
                    dindex = i;
                    break;
                }
            }
        
            YAHOO.BIRTS.PopupCalendar.DayControl.selectedIndex = dindex;
                                  
        }
                
        if (YAHOO.BIRTS.PopupCalendar.OnSelectedIndexChange != null)
            eval(YAHOO.BIRTS.PopupCalendar.OnSelectedIndexChange);
       
        YAHOO.util.Event.removeListener(document, "click");
                
    }
    YAHOO.BIRTS.PopupCalendar.Calendar.selectEvent.subscribe(selectedDateHandler, YAHOO.BIRTS.PopupCalendar.Calendar, true);                                
}

YAHOO.BIRTS.PopupCalendar.getDate = function(targetMonthYearID, targetDayID) {    
    var controlMonthYear = YAHOO.util.Dom.get(targetMonthYearID);
    var controlDay = YAHOO.util.Dom.get(targetDayID);
    
    var day = controlDay.options[controlDay.selectedIndex].value;
    var month = controlMonthYear.options[controlMonthYear.selectedIndex].value.substr(0, controlMonthYear.options[controlMonthYear.selectedIndex].value.indexOf(","));
    var year = controlMonthYear.options[controlMonthYear.selectedIndex].value.substr(controlMonthYear.options[controlMonthYear.selectedIndex].value.indexOf(",")+1);
    
    return month + "/" + day + "/" + year;
    
}

YAHOO.BIRTS.PopupCalendar.showCalendar = function(targetMonthYearID, targetDayID, minDate, maxDate, caption, ev) {                     
        YAHOO.BIRTS.PopupCalendar.MonthAndYearControl = YAHOO.util.Dom.get(targetMonthYearID);
        YAHOO.BIRTS.PopupCalendar.DayControl = YAHOO.util.Dom.get(targetDayID);        
        
        YAHOO.BIRTS.PopupCalendar.OnSelectedIndexChange = ev;
        if (!YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.disabled && !YAHOO.BIRTS.PopupCalendar.DayControl.disabled)
        {
        
            /* Initial calendar */          
            var myValue = YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.options[YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.selectedIndex].value;        
            var month = parseInt(myValue.substr(0, myValue.indexOf(",")), 10);
            var year = parseInt(myValue.substr(myValue.indexOf(",")+1), 10);
            var day = parseInt(YAHOO.BIRTS.PopupCalendar.DayControl.options[YAHOO.BIRTS.PopupCalendar.DayControl.selectedIndex].value, 10);        
            
            var page = month + "/" + year;            
            var sel = month + "/" + day + "/" + year;  
            
                            
            YAHOO.BIRTS.PopupCalendar.Calendar.cfg.setProperty("selected",sel,false);   
            YAHOO.BIRTS.PopupCalendar.Calendar.cfg.setProperty("pagedate",page,false);               
            YAHOO.BIRTS.PopupCalendar.Calendar.cfg.setProperty("mindate",minDate,false);               
            YAHOO.BIRTS.PopupCalendar.Calendar.cfg.setProperty("maxdate",maxDate,false);   
            
            YAHOO.BIRTS.PopupCalendar.Calendar.cfg.setProperty("birts_travel_label", caption, false);
            YAHOO.BIRTS.PopupCalendar.Calendar.render();   

                
            var pos = YAHOO.util.Dom.getXY(YAHOO.BIRTS.PopupCalendar.MonthAndYearControl);                    
            YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer.style.display = "block";                    
            YAHOO.util.Dom.setXY(YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer, [pos[0], pos[1]+YAHOO.BIRTS.PopupCalendar.MonthAndYearControl.offsetHeight+1]);    
            
			YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer.focus();
			YAHOO.BIRTS.PopupCalendar.onShow = true;
                YAHOO.util.Event.addListener(document, "click", function(e) {                                        
                if (!YAHOO.BIRTS.PopupCalendar.onShow) {                
                    var IE = document.all?true:false;             
                    var tempX = 0;
                    var tempY = 0;                                                                                         
                    
                    if (IE)
                    {                                                
                        if( document.documentElement ) {
                            //IE 6+ in 'standards compliant mode'
                            tempX = event.clientX + document.documentElement.scrollLeft;
                            tempY = event.clientY + document.documentElement.scrollTop;                            
                        }                        
                        else if( document.body ) {
                            //IE 4 compatible
                            tempX = event.clientX + document.body.scrollLeft;
                            tempY = event.clientY + document.body.scrollTop;                             
                        }                                               
                    }
                    else
                    {                        
                        if (e) {
                            tempX = e.pageX;
                            tempY = e.pageY;
                        }
                        else {
                            tempX = event.pageX;
                            tempY = event.pageY;
                        }                    
                    }
                    
                    // catch possible negative values in NS4
                    if (tempX < 0){tempX = 0}
                    if (tempY < 0){tempY = 0}  
                    
                    var minPos = YAHOO.util.Dom.getXY(YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer);
                    var maxPos = new Array();
                    maxPos[0] = minPos[0] + YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer.offsetWidth;
                    maxPos[1] = minPos[1] + YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer.offsetHeight;
                                                                                            
                    if (tempX < minPos[0] || tempX > maxPos[0] || tempY < minPos[1] || tempY > maxPos[1])
                    {                       
                        YAHOO.BIRTS.PopupCalendar.Calendar.oDomContainer.style.display = "none";
                        YAHOO.util.Event.removeListener(document, "click");  
                    }    
                }
                else
                    YAHOO.BIRTS.PopupCalendar.onShow = false;                    
            });        
    }                                                                                
}

YAHOO.BIRTS.PopupCalendar.showCalendar.isDateFormat = function(d) {
    var dateFormat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
    var matchArray = d.match(dateFormat); // is the format ok?
    return (matchArray != null);
}


YAHOO.util.Event.addListener(window, "load", YAHOO.BIRTS.PopupCalendar.init);

