                YAHOO.namespace("resmark.calendar");
				var resmark = resmark || {};
				resmark.calendar = resmark.calendar || {};
				resmark.calendar.createBeginCalendarConfig = function() {
					return {pages:2, title:"Please select a date:", mindate: new Date()};
				};
				resmark.calendar.createEndCalendarConfig = function() {
					return {pages:2, title:"Please select a date:", mindate: new Date()};
				};
				resmark.calendar.ensureDateRange = function(inputElement) {
					var date = inputElement.value;
					var today_str = getMMDDYYYY(new Date());
					
					if(Date.parse(date) < Date.parse(today_str)){
						alert('Date may not be in the past.  Please try again.');
						inputElement.value = today_str;
						date = today_str;
					}
					
					return date;
				};
				
                    var begin;
                    var end;
                    var over_begin_cal = false;   
                    var over_end_cal = false;
                    var clicked_input;
					
                    function init() {
                         begin = new YAHOO.widget.CalendarGroup("begin","beginContainer", resmark.calendar.createBeginCalendarConfig());
                         begin.selectEvent.subscribe(getDate, begin, true);   
                         begin.renderEvent.subscribe(setupBeginListeners, begin, true);
                         begin.render();
						 
                         end = new YAHOO.widget.CalendarGroup("end","endContainer", resmark.calendar.createEndCalendarConfig());
                         end.selectEvent.subscribe(getDate, end, true);   
                         end.renderEvent.subscribe(setupEndListeners, end, true);
                         end.render();
                     }
   
                     function setupBeginListeners() {   
                         YAHOO.util.Event.addListener('beginContainer', 'mouseover', overBeginCal);   
                         YAHOO.util.Event.addListener('beginContainer', 'mouseout', outBeginCal);   
                     }
					 
                     function setupEndListeners() {   
                         YAHOO.util.Event.addListener('endContainer', 'mouseover', overEndCal);   
                         YAHOO.util.Event.addListener('endContainer', 'mouseout', outEndCal);   
                     } 
					 
                     function updateEndDate(date){
                         if(check_date(date)){
                            var elemArray = getElementsByClass('calendar',null,'input');
                            var today_str = getMMDDYYYY(new Date());
							date = resmark.calendar.ensureDateRange(elemArray[0]);
							/*
                            if(Date.parse(date) < Date.parse(today_str)){
                                alert('Date may not be in the past.  Please try again.');
                                
                                elemArray[0].value = today_str;
                                date = today_str;
                            }
							*/
                            var edate = elemArray[1].value;
                            if(check_date(edate)){
                              if(Date.parse(date) > Date.parse(edate)){
                                elemArray[1].value = date;
                              }
                            }else{
                                elemArray[1].value = date;
                            }
                         }
                     }
					 
                     function updateBeginDate(date){
                         if(check_date(date)){
                            var elemArray = getElementsByClass('calendar',null,'input');
                            var today_str = getMMDDYYYY(new Date());
							date = resmark.calendar.ensureDateRange(elemArray[1]);
							/*
                            if(Date.parse(date) < Date.parse(today_str)){
                                alert('Sorry!!!','Date may not be in the past.  Please try again.');
                                
                                elemArray[1].value = today_str;
                                date = today_str;
                            }
							*/
                            
                            var edate = elemArray[0].value;
                            if(check_date(edate)){
                              if(Date.parse(date) < Date.parse(edate)){
                                elemArray[0].value = date;
                              }
                            }else{
                                elemArray[0].value = date;
                            }
                         }
                     }
					
                     function getDate() {
                             var calDate = this.getSelectedDates()[0];
                             calDate = getMMDDYYYY(calDate);
                             if(clicked_input){
                               clicked_input.value = calDate;
                             }
                             if(this.containerId == 'beginContainer'){
                                over_begin_cal = false;
                                updateEndDate(calDate);
                             }
                             else{
                                over_end_cal = false;
                                updateBeginDate(calDate);
                             }
                             hideCal(this.containerId);   
                     }   

                     function showCal(el, id, cal) {   
						clicked_input = el;
                         var xy = YAHOO.util.Dom.getXY(el);
                         var date = YAHOO.util.Dom.get(el).value; 
                        if (date) {
                             if(check_date(date)){
                                 cal.cfg.setProperty('selected', date);
                                 var date_array = date.split('\/');
                                 var day = date_array[1];

                                // Attention! Javascript consider months in the range 0 - 11
                                 var month = date_array[0];
                                 var year = date_array[2];
                                 cal.cfg.setProperty('pagedate', month + "/" + year);   
                             }
                             cal.render();   
                         }   
                         YAHOO.util.Dom.setStyle(id, 'display', 'block');   
                         xy[1] = xy[1] + 20;   
                         YAHOO.util.Dom.setXY(id, xy);   
                     }   
               
                     function hideCal(id) {
                         if(id == 'beginContainer'){
                            if (!over_begin_cal) {   
                                 YAHOO.util.Dom.setStyle(id, 'display', 'none');   
                            }
                         }else{
                             if (!over_end_cal) {   
                                 YAHOO.util.Dom.setStyle(id, 'display', 'none');   
                            }
                         }
                     }
					 
                     function overBeginCal() {   
                         over_begin_cal = true;   
                     }   

                     function outBeginCal() {   
                         over_begin_cal = false;   
                     }
					 
                     function overEndCal() {   
                         over_end_cal = true;   
                     }   

                     function outEndCal() {   
                         over_end_cal = false;   
                     }
					 
                     function check_date(val){
                          // Regular expression used to check if date is in correct format
                           var pattern = new RegExp('(0[1-9]|1[0-2])\/(([0-2][0-9])|(3[0-1]))\/20[0-9]{2}');
                           if(val.match(pattern))
                           {
                              var date_array = val.split('\/');
                              var day = date_array[1];

                              // Attention! Javascript consider months in the range 0 - 11
                              var month = date_array[0] - 1;
                              var year = date_array[2];

                              // This instruction will create a date object
                              var source_date = new Date(year,month,day);

                              if(year != source_date.getFullYear())
                              {
                                 return false;
                              }

                              if(month != source_date.getMonth())
                              {
                                 return false;
                              }

                              if(day != source_date.getDate())
                              {
                                 return false;
                              }
                           }
                           else
                           {
                              return false;
                           }

                           return true;

                     }
					 
					function getMMDDYYYY(dateObject) {
						var day   = dateObject.getDate();
						var month = dateObject.getMonth() + 1;
						var year  = dateObject.getFullYear();
						
						if (day < 10) {
							day = '0' + day;
						}
						if (month < 10) {
							month = '0' + month;
						}
						
						return month + '/' + day + '/' + year;
					}
					
					function parseMMDDYYYY(mmddyyyy) {
						var values = mmddyyyy.split('\/');
						var month = values[0] - 1;
						var day   = values[1];
						var year  = values[2];
						
						return new Date(year, month, day);
					}
					 
                        function getElementsByClass(searchClass,node,tag) {
                                var classElements = new Array();
                                if ( node == null )
                                        node = document;
                                if ( tag == null )
                                        tag = '*';
                                var els = node.getElementsByTagName(tag);
                                var elsLen = els.length;
                                var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
                                for (i = 0, j = 0; i < elsLen; i++) {
                                        if ( pattern.test(els[i].className) ) {
                                                classElements[j] = els[i];
                                                j++;
                                        }
                                }
                                return classElements;
                        }



                     YAHOO.util.Event.addListener(window, 'load', init);