var calendarPanel;
var calendar;

function showCalendar(caller, input, title, setDateCallback, align) {

	calendarPanel.setHeader(title);
	
	calendarPanel.callerElement = caller;
	calendarPanel.inputElement = input;
	calendarPanel.callback = setDateCallback;
	
	var minDate = new Date();
	var maxDate = new Date();
	maxDate.setDate(maxDate.getDate() + 540);
	calendar.cfg.setProperty('mindate', minDate);
	calendar.cfg.setProperty('maxdate', maxDate);
	
	setCalendarDate(input, new Date());

	if (align == 'right') {
		calendarPanel.cfg.setProperty('context',[input, 'tr', 'br']);
	} else {
		calendarPanel.cfg.setProperty('context',[input, 'tl', 'bl']);
	}
	
	calendarPanel.show();
}

function setCalendarDate(input, defaultDate) {
	if (!calendar) {
		return;
	}
	var str = input.value;
	var date;
	if (str.match(/^\d{2}\/\d{2}\/\d{4}$/)) {
		date = new Date(str);
		if (str != formatShortDate(date)) {
			return;
		}
	} else {
		if (!defaultDate) {
			return;
		}
		date = defaultDate;
	}
	calendar.select(date);
	calendar.cfg.setProperty('pagedate', (date.getMonth() + 1) + '/' + date.getFullYear());
	calendar.render();
}

YAHOO.util.Event.onDOMReady(function() {

	calendarPanel = new YAHOO.widget.Dialog('calendarPanel', { 
		effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration:0.25},
		appendtodocumentbody:true,
	    visible:false,
	    draggable:false,
	    constraintoviewport:true,
	    preventcontextoverlap:true,
	    close:true});
	calendarPanel.setHeader('Calendar');
    calendarPanel.setBody('<div id="calendar"></div>');
    calendarPanel.inputElement = null;
    calendarPanel.callerElement = null;
    calendarPanel.callback = null;
    calendarPanel.render(document.body);
    
	calendarPanel.showEvent.subscribe(function() {
        if (YAHOO.env.ua.ie) {
            // Since we're hiding the table using yui-overlay-hidden, we want to 
        	// let the dialog know that the content size has changed, when shown
            dialog.fireEvent("changeContent");
        }
    });
    
	calendar = new YAHOO.widget.CalendarGroup('calendar', {
		pages:2, 
		close:false,
		HIDE_BLANK_WEEKS:true,
		iframe:false,
		LOCALE_WEEKDAYS:'1char',			
		navigator:{
	        strings : {
	            month: 'Choose Month',
	            year: 'Enter Year',
	            submit: 'OK',
	            cancel: 'Cancel',
	            invalidYear: 'Please enter a valid year'
	        },
	        monthFormat: YAHOO.widget.Calendar.LONG,
	        initialFocus: 'month'
	  }});

	calendar.render();
	
    calendar.renderEvent.subscribe(function() {
        // Tell Dialog it's contents have changed, which allows 
        // container to redraw the underlay (for IE6/Safari2)
        calendarPanel.fireEvent("changeContent");
    });
    
	calendar.selectEvent.subscribe(function(d) {
    	var dates = calendar.getSelectedDates();
    	if (!dates || dates.length < 1) {
    		return;
    	}
    	var date = dates[0];
        if (calendarPanel.inputElement) {
        	calendarPanel.inputElement.value = formatShortDate(date);
        }
        if (calendarPanel.callback) {
        	calendarPanel.callback(date);
        }
        calendarPanel.hide();
    });
	
});

// Hide Calendar if we click anywhere in the document other than the calendar
YAHOO.util.Event.on(document, 'click', function(e) {
    var el = YAHOO.util.Event.getTarget(e);
    if (!calendarPanel) {
    	return;
    }
    var ignoreElements = [
    	calendarPanel.element,
    	calendarPanel.callerElement,
    	calendarPanel.inputElement];
   	for (var i = 0; i < ignoreElements.length; i++) {
   		if (el == ignoreElements[i] || YAHOO.util.Dom.isAncestor(ignoreElements[i], el)) {
   			return;
   		}
   	} 
    calendarPanel.hide();
});
