YAHOO.widget.CalendarGroup.prototype.renderCellNotThisMonth = function(workingDate, cell)  {
        YAHOO.util.Dom.addClass(cell, this.Style.CSS_CELL_OOM);
        return YAHOO.widget.Calendar.STOP_RENDER;
}

YAHOO.namespace("calendarUtil");
YAHOO.calendarUtil.module = function () {
        //private shorthand references to YUI utilities:
        var yue = YAHOO.util.Event,
                yud = YAHOO.util.Dom,
                yuc = YAHOO.widget.CalendarGroup,
                yum = YAHOO.widget.DateMath;
        var calendarFocus = false;
        var currentField = "";
        var minDate = "";
        var maxDate = "";
        var dateFormatPattern = "";
        var dateRange = "";
        var section = "";
        var yearMonthDisplay = "";
        var monthPosition = "1";
        var yearPosition = "2";
        var yearSuffix = "";
        var fromAndToDtHash = new Array() ;

        return  {
                init: function () {
                        var monthNames = "" ;
                        var weekDays   = "" ;

                        var elParent = document.body.firstChild;
                        var calContainer = document.createElement("DIV");

                        calContainer.id = "calContainer";
                        elParent.parentNode.insertBefore(calContainer,elParent);

                        if(yud.get("monthNames")) {
                                monthNames = yud.get("monthNames").value.split(",");
                        }

                        if(yud.get("weekDays")) {
                                weekDays = yud.get("weekDays").value.split(",");
                        }
                        if(yud.get("minDate")) {
                                minDate = yud.get("minDate").value;
                        }
                        if(yud.get("maxDate")) {
                                maxDate = yud.get("maxDate").value;
                        }

                        if(yud.get("section")) {
                                section = yud.get("section").value;
                        }

                        if(yud.get("yearMonthDisplay")) {
                                yearMonthDisplay = yud.get("yearMonthDisplay").value;
                                if(yearMonthDisplay == 'Y'){
                                        yearPosition = "1";
                                        monthPosition = "2";
                                }
                                yearSuffix =  yud.get("yearSuffix").value;
                        }

                        dateFormatPattern = this.getDateFormatPattern() ;

                        dateRange = {
                                from:new Date(minDate),
                                to:new Date(maxDate)
                        }
                        var attributes = {
                                pages : 1,
                                mindate : minDate,
                                maxdate : maxDate,
                                MONTHS_LONG : monthNames,
                                WEEKDAYS_1CHAR : weekDays,
                                HIDE_BLANK_WEEKS : true,
                                LOCALE_WEEKDAYS : "1char",
                                MY_LABEL_YEAR_POSITION: yearPosition,
                                MY_LABEL_MONTH_POSITION: monthPosition,
                                MY_LABEL_YEAR_SUFFIX: yearSuffix,
                                close: true
                        };
                        var cal = new yuc("calendarObj", calContainer.id, attributes);
                        cal.beforeRenderEvent.subscribe(this.setDateRange, cal, true)
                        cal.renderEvent.subscribe(this.displayDateRange, cal, true);
                        cal.selectEvent.subscribe(this.selectedDate, cal, true);
                        yue.on(cal.containerId, 'mouseover', this.over, cal, true);
                    yue.on(cal.containerId, 'mouseout', this.out, cal, true);
                        yue.on(this.getDateFields(), 'click', this.show, cal, true);
                        yue.on(this.getDateFields(), 'focus', this.show, cal, true);
                        yue.on(this.getDateFields(), 'blur', this.hide, cal, true);

                        //Events and meeting specific functionality. Honestly, I never wanted to build this functionality into this file,
                        //but there was no other way of implementing and hadddddd to code it here (:-
                        if(section == "emsearch"){
                                yue.on(this.getDateFields(), 'change', this.performEMSearchFormDtOnChange, cal, true);
                        }else if(section != "emrfp"){
                                //For E&M RFP, the E&M js defines the onchange function
                                yue.on(this.getDateFields(), 'change', this.hideAndPrePop, cal, true);
                        }

                        //This is required in order to populate the todate based on fromdate value
                        fromAndToDtHash = this.getDateFiedsHashTable() ;

                        cal.render();
                },
                over: function (type, args, cal) {
                        calendarFocus = true;
                },
                out: function (type, args, cal) {
                        calendarFocus = false;
                },
                selectedDate: function(type, args, cal) {
                        var calDate = this.getSelectedDates()[0];
                        calDate = (calDate.getMonth() + 1) + '/' + calDate.getDate() + '/' + calDate.getFullYear();
                        currentField.value = formatDate(calDate,dateFormatPattern);
                        //If defaultToDateDays is not null ,prepopulate the toDate field based on the from date value
                        YAHOO.calendarUtil.module.prePopToDate(calDate,currentField,false) ;

                        calendarFocus = false;
                        YAHOO.calendarUtil.module.hide(type, args, cal);
                        //Events and meeting specific functionality
                        if(section == "emsearch"){
                                YAHOO.calendarUtil.module.performEMEventOnDtSelection(currentField);
                        }else if(section == "emrfp"){
                                YAHOO.calendarUtil.module.performEMRfpEvent();
                        }
                },
                show: function(type, args, cal) {
                        var tar = yue.getTarget(type);
                    currentField = tar;
                    var xy = yud.getXY(tar);
                    var date = yud.get(tar).value;
                        var container = yud.get(this.containerId);
                        var dateObj ;
                        var coordinates = YAHOO.calendarUtil.module.getPosition(tar, container) ;

                    if (date) {
                                var validDate = true ;
                                if(!isDateValid(date,dateFormatPattern) ||
                                isDateLessThanDate1(date,formatDate(minDate,dateFormatPattern),dateFormatPattern) ||
                                isDateGreaterThanDate1(date,formatDate(maxDate,dateFormatPattern),dateFormatPattern) ){
                                        validDate = false ;
                                }

                                if(validDate){
                                        //If the user enters date in different format, convert to
                                        //'mm/dd/yy' in order for the calendar to render properly.
                                        date = dateInMMDDYYFormat(date,dateFormatPattern) ;
                                        this.cfg.setProperty('selected', date);
                                        dateObj = new Date(date) ;
                                }
                                else {
                                        this.cfg.setProperty('selected', '');
                                        //On travel agents commission search page, the calendar needs to displayed backwards
                                        if(section == "tacomm"){
                                                dateObj = new Date(maxDate) ;
                                        }else{
                                                dateObj = new Date() ;
                                        }
                                }
                                this.setMonth(dateObj.getMonth());
                                this.setYear(dateObj.getFullYear());
                        this.render();
                    }
                        else {
                        this.cfg.setProperty('selected', '');
                                //For travel agents commission search page, the calendar needs to displayed backwards
                                if(section == "tacomm"){
                                        dateObj = new Date(maxDate) ;
                                }else{
                                        dateObj = new Date() ;
                                }
                                this.setMonth(dateObj.getMonth());
                                this.setYear(dateObj.getFullYear());
                        this.render();
                    }
                    yud.setStyle(this.containerId, 'display', 'block');
                        yud.setX(this.containerId, coordinates.x);
                        yud.setY(this.containerId, coordinates.y);

                },
                hideAndPrePop: function(type, args, cal) {
                        if (!calendarFocus) {
                                yud.setStyle(this.containerId, 'display', 'none');
                        }

                        var currentField = yue.getTarget(type);
                        YAHOO.calendarUtil.module.prePopToDate('',currentField,true) ;

                },
                hide: function(type, args, cal) {
                        if (!calendarFocus) {
                                if(cal != undefined){
                                        yud.setStyle(cal.containerId, 'display', 'none');
                                }else{
                                        yud.setStyle(this.containerId, 'display', 'none');
                                }
                        }
                },
                setDateRange: function (type, args, cal) {
                        var pagedate = this.cfg.getProperty("pagedate");
                        if (yum.before(pagedate, dateRange.from)) {
                                this.cfg.setProperty("pagedate", dateRange.from);
                        }
                        if (yum.after(pagedate, dateRange.to)) {
                                this.cfg.setProperty("pagedate", dateRange.to);
                        }
                },
                displayDateRange: function (type, args, cal) {
                        var leftArrow = yud.getElementsByClassName(this.Style.CSS_NAV_LEFT, null, this.oDomContainer)[0];
                        var rightArrow = yud.getElementsByClassName(this.Style.CSS_NAV_RIGHT, null, this.oDomContainer)[0];

                        var pagedate0 = cal.pages[0].cfg.getProperty("pagedate");
                        var pagedate1 = cal.pages[1].cfg.getProperty("pagedate");

                        if (pagedate0.getMonth() == dateRange.from.getMonth() && pagedate0.getFullYear() == dateRange.from.getFullYear()) {
                                yud.setStyle(leftArrow, "visibility", "hidden");
                        } else {
                                yud.setStyle(leftArrow, "visibility", "visible");
                        }

                        if (pagedate1.getMonth() == dateRange.to.getMonth() && pagedate1.getFullYear() == dateRange.to.getFullYear()) {
                                yud.setStyle(rightArrow, "visibility", "hidden");
                        } else {
                                yud.setStyle(rightArrow, "visibility", "visible");
                        }

                        if (pagedate0.getMonth() == dateRange.to.getMonth() && pagedate0.getFullYear() == dateRange.to.getFullYear()) {
                                yud.setStyle(rightArrow, "visibility", "hidden");
                        }
                },
                getPosition: function (target, obj) {
                        var x = yud.getX(target);
                        var y = yud.getY(target);

                        var containerHeight = obj.offsetHeight;

                        var maxXPos = x+330;
                        var maxYPos = y + containerHeight;

                        var screenWidth = 0 ;
                        var screenWidth = yud.getViewportWidth();
                        var screenHeight = yud.getViewportHeight();

                        var top = (document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop);
                        var left = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft);
                        var viewTop = parseInt(screenHeight + top);
                        var viewLeft = parseInt(screenWidth + left);
                        var coordinates = new Object();

                        if(viewLeft >= maxXPos){
                                coordinates.x = x-89;
                        }
                        else {
                                coordinates.x = x-89;
                        }

                        if ( viewTop >= maxYPos ) {
                                coordinates.y = y + 14;
                        }
                        else {
                                coordinates.y = y - (containerHeight - 1);
                        }
                        return coordinates ;
                },
                getDateFields: function () {
                        var date1Fields = this.getDate1Fields() ;
                        var date2Fields = this.getDate2Fields() ;
                        var dateFields = date1Fields.concat(date2Fields) ;
                        return dateFields ;
                },
                getDate1Fields: function () {
                        var date1Fields = new Array() ;
                        date1Fields = document.getElementsByName("date1Field") ;
                        var length = date1Fields.length ;
                        var tempArray = new Array() ;
                        for (var i = 0; i < length; i++)
                        {
                                tempArray[i] = date1Fields[i].value ;
                        }
                        return tempArray ;
                },
                getDate2Fields: function () {
                        var date2Fields = new Array() ;
                        date2Fields = document.getElementsByName("date2Field") ;
                        var length = date2Fields.length ;
                        var tempArray = new Array() ;
                        for (var i = 0; i < length; i++)
                        {
                                tempArray[i] = date2Fields[i].value ;
                        }

                        return tempArray ;
                },
                getDateFormatPattern: function () {
                        var dateFormatPattern = "" ;
                        var dfpFields = new Array() ;
                        dfpFields = document.getElementsByName("dateFormatPattern") ;
                        if(dfpFields != null && dfpFields.length > 0){
                                dateFormatPattern = dfpFields[0].value.toLowerCase() ;
                        }

                        return dateFormatPattern ;
                },
                getDateFiedsHashTable: function () {
                        var fromAndToDtHash = new Array() ;
                        var keys = new Array() ;

                        var datelFields = this.getDate1Fields() ;
                        var date2Fields = this.getDate2Fields() ;
                        var date1FielsLen = datelFields.length ;
                        for(i=0;i<date1FielsLen;i++){
                                this.put(fromAndToDtHash,keys,datelFields[i],date2Fields[i]) ;
                        }
                        return fromAndToDtHash ;
                },
                put: function (fromAndToDtHash,keys,key,value){
                        if (value == null)
                                return null;

                        if (fromAndToDtHash[key] == null){
                                fromAndToDtHash[keys.length] = key;
                        }

                        fromAndToDtHash[key] = value;
                },
                prePopToDate: function (calDate,currentField,onblurEvent){
                        if(yud.get("defaultToDateDays")) {
                                var defaultToDateDays = yud.get("defaultToDateDays");
                                var toDateFld = fromAndToDtHash[currentField.id] ;

                                if(toDateFld != undefined){
                                        if(yud.get(toDateFld)){
                                                var currentToDate = '' ;
                                                if(onblurEvent){
                                                        calDate = yud.get(currentField).value ;
                                                        if(calDate != null && calDate != '' && isDateValid(calDate,dateFormatPattern)){
                                                                var commaDelimitedDate = getCommaDelimitedDate(calDate,dateFormatPattern) ;
                                                                var dateArr = commaDelimitedDate.split(",") ;
                                                                calDate = dateArr[1]+"/"+dateArr[2]+"/"+dateArr[0] ;
                                                        }else{
                                                                calDate = '';
                                                        }
                                                }
                                                if((calDate != null && calDate.length > 0) &&
                                                        isDateLessThanOrEqualToDate1(calDate,maxDate,"mm/dd/yy")){
                                                        //If to date is null,invalid or is less than from date, make todate = fromDate + defaultToDateDays
                                                        currentToDate = yud.get(toDateFld).value ;
                                                        if((currentToDate == null || currentToDate == '' ) ||
                                                                !isDateValid(currentToDate,dateFormatPattern) ||
                                                                !isDateGreaterThanDate1(dateInMMDDYYFormat(currentToDate,dateFormatPattern),calDate,"mm/dd/yy") ){
                                                                var toDate = new Date(calDate) ;
                                                                toDate.setDate(toDate.getDate()+parseInt(defaultToDateDays.value)) ;
                                                                toDate = (toDate.getMonth() + 1) + '/' + toDate.getDate() + '/' + toDate.getFullYear();
                                                                yud.get(toDateFld).value = formatDate(toDate,dateFormatPattern);
                                                        }
                                                }
                                        }
                                }
                        }
                },
                performEMSearchFormDtOnChange: function (type, args, cal) {
                        this.hide() ;
                        var tar = yue.getTarget(type);
                        YAHOO.calendarUtil.module.performEMEvent(tar.id) ;
                },
                performEMEventOnDtSelection: function (fieldName) {
                        YAHOO.calendarUtil.module.performEMEvent(fieldName.id) ;
                },
                performEMEvent: function (fieldName) {
                        var date1Fields =  YAHOO.calendarUtil.module.getFromDateHashTable() ;
                        var date2Fields = YAHOO.calendarUtil.module.getToDateHashTable() ;
                        var searchType = '' ;
                        if(fieldName.indexOf("_")){
                                var splitValue = fieldName.split("_");
                                searchType = splitValue[1] ;
                        }
                        if(fieldName in date1Fields){
                                arrivaldate_onchange('true',searchType) ;
                        }else if(fieldName in date2Fields){
                                departuredate_onchange('true',searchType) ;
                        }
                },
                performEMRfpEvent: function () {
                        marriott.meetings.groupSales.eventdates.validateEventDate();
                },
                getFromDateHashTable: function () {
                        var fromDtHash = new Array() ;
                        var keys = new Array() ;

                        var datelFields = this.getDate1Fields() ;
                        var date1FielsLen = datelFields.length ;
                        for(i=0;i<date1FielsLen;i++){
                                this.put(fromDtHash,keys,datelFields[i],datelFields[i]) ;
                        }
                        return fromDtHash ;
                },

                getToDateHashTable: function () {
                        var toDtHash = new Array() ;
                        var keys = new Array() ;

                        var date2Fields = this.getDate2Fields() ;
                        var date2FielsLen = date2Fields.length ;
                        for(i=0;i<date2FielsLen;i++){
                                this.put(toDtHash,keys,date2Fields[i],date2Fields[i]) ;
                        }
                        return toDtHash ;
                }

        };
}();

YAHOO.util.Event.onAvailable("minDate",YAHOO.calendarUtil.module.init, YAHOO.calendarUtil.module, true,true);

		function generateToDate(){
				calDate = document.getElementById('bookdate').value;
				var toDate = new Date(calDate) ;		
				var sel = document.getElementById("bookdays");
				var catezile = sel.options[sel.selectedIndex].value;								
				toDate.setDate(toDate.getDate()+parseInt(catezile)) ;
				toDate = (toDate.getMonth() + 1) + '/' + toDate.getDate() + '/' + toDate.getFullYear();
				document.getElementById('booktoDate').value = formatDate(toDate,"m/d/yy");					
		}


        function showPAJe(){
                document.getElementById('searchFormJe').style.display='none';
                document.getElementById('restuJe').style.display='block';
                document.getElementById('bkje').className='bknje';
                document.getElementById('paje').className='packoje';
        }

        function showBKJe(){
                document.getElementById('searchFormJe').style.display='block';
                document.getElementById('restuJe').style.display='none';
                document.getElementById('bkje').className='bknoje';
                document.getElementById('paje').className='packje';
        }
        function showPAsml(){
                document.getElementById('searchFormsml').style.display='none';
                document.getElementById('restusml').style.display='block';
                document.getElementById('bksml').className='bknsml';
                document.getElementById('pasml').className='packosml';
        }

        function showBKsml(){
                document.getElementById('searchFormsml').style.display='block';
                document.getElementById('restusml').style.display='none';
                document.getElementById('bksml').className='bknosml';
                document.getElementById('pasml').className='packsml';
        }

