/* jQuery-Mobile-DateBox */ /*! CALBOX Mode */ (function($) { $.extend( $.mobile.datebox.prototype.options, { themeDateToday: "b", themeDayHigh: "b", themeDatePick: "b", themeDateHigh: "b", themeDateHighAlt: "b", themeDateHighRec: "b", themeDate: "a", calNextMonthIcon: "plus", calPrevMonthIcon: "minus", calHighToday: true, calHighPick: true, calShowDays: true, calOnlyMonth: false, calWeekMode: false, calWeekModeDay: 1, calControlGroup: false, calShowWeek: false, calUsePickers: false, calNoHeader: false, calFormatter: false, calAlwaysValidateDates: false, calYearPickMin: -6, calYearPickMax: 6, useTodayButton: false, useTomorrowButton: false, useCollapsedBut: false, highDays: false, highDates: false, highDatesRec: false, highDatesAlt: false, enableDates: false, calDateList: false, calShowDateList: false }); $.extend( $.mobile.datebox.prototype, { _cal_gen: function (start,prev,last,other,month) { var rc = 0, cc = 0, day = 1, next = 1, cal = [], row = [], stop = false; for ( rc = 0; rc <= 5; rc++ ) { if ( stop === false ) { row = []; for ( cc = 0; cc <= 6; cc++ ) { if ( rc === 0 && cc < start ) { if ( other === true ) { row.push([prev + (cc - start) + 1,month-1]); } else { row.push(false); } } else if ( rc > 3 && day > last ) { if ( other === true ) { row.push([next,month+1]); next++; } else { row.push(false); } stop = true; } else { row.push([day,month]); day++; if ( day > last ) { stop = true; } } } cal.push(row); } } return cal; }, _cal_check : function (checkDates, year, month, date, done) { var w = this, i, o = this.options, maxDate = done.x, minDate = done.i, thisDate = done.t, presetDay = done.p, day = new this._date(year,month,date,0,0,0,0).getDay(), bdRec = o.blackDatesRec, hdRec = o.highDatesRec, ret = { ok: true, iso: year + "-" + w._zPad(month+1) + "-" + w._zPad(date), theme: o.themeDate, force: false, recok: true, rectheme: false }; if ( month === 12 ) { ret.iso = ( year + 1 ) + "-01-" + w._zPad(date); } if ( month === -1 ) { ret.iso = ( year - 1 ) + "-12-" + w._zPad(date); } ret.comp = parseInt( ret.iso.replace( /-/g, "" ), 10 ); if ( bdRec !== false ) { for ( i=0; i < bdRec.length; i++ ) { if ( ( bdRec[i][0] === -1 || bdRec[i][0] === year ) && ( bdRec[i][1] === -1 || bdRec[i][1] === month ) && ( bdRec[i][2] === -1 || bdRec[i][2] === date ) ) { ret.ok = false; } } } if ( $.isArray( o.enableDates ) && $.inArray( ret.iso, o.enableDates ) < 0 ) { ret.ok = false; } else if ( checkDates ) { if ( ( ret.recok !== true ) || ( o.afterToday && thisDate.comp() > ret.comp ) || ( o.beforeToday && thisDate.comp() < ret.comp ) || ( o.notToday && thisDate.comp() === ret.comp ) || ( o.maxDays !== false && maxDate.comp() < ret.comp ) || ( o.minDays !== false && minDate.comp() > ret.comp ) || ( $.isArray(o.blackDays) && $.inArray(day, o.blackDays) > -1 ) || ( $.isArray(o.blackDates) && $.inArray(ret.iso, o.blackDates) > -1 ) ) { ret.ok = false; } } if ( $.isArray(o.whiteDates) && $.inArray(ret.iso, o.whiteDates) > -1 ) { ret.ok = true; } if ( ret.ok ) { if ( hdRec !== false ) { for ( i=0; i < hdRec.length; i++ ) { if ( ( hdRec[i][0] === -1 || hdRec[i][0] === year ) && ( hdRec[i][1] === -1 || hdRec[i][1] === month ) && ( hdRec[i][2] === -1 || hdRec[i][2] === date ) ) { ret.rectheme = true; } } } if ( o.calHighPick && date === presetDay && ( w.d.input.val() !== "" || o.defaultValue !== false )) { ret.theme = o.themeDatePick; } else if ( o.calHighToday && ret.comp === thisDate.comp() ) { ret.theme = o.themeDateToday; } else if ( o.calHighPick && w.calDateVisible && w.calBackDate !== false && w.calBackDate.comp() === ret.comp ) { ret.theme = o.themeDatePick; ret.force = true; } else if ( $.isArray(o.highDatesAlt) && ($.inArray(ret.iso, o.highDatesAlt) > -1) ) { ret.theme = o.themeDateHighAlt; } else if ( $.isArray(o.highDates) && ($.inArray(ret.iso, o.highDates) > -1) ) { ret.theme = o.themeDateHigh; } else if ( $.isArray(o.highDays) && ($.inArray(day, o.highDays) > -1) ) { ret.theme = o.themeDayHigh; } else if ( $.isArray(o.highDatesRec) && ret.rectheme === true ) { ret.theme = o.themeDateHighRec; } } return ret; } }); $.extend( $.mobile.datebox.prototype._build, { "calbox": function () { var tempVal, pickerControl, calContent, genny, weekdayControl, listControl, row, col, rows, cols, htmlRow, i, prangeS, prangeL, fmtRet, fmtObj, absStartDO, absEndDO, w = this, o = this.options, dList = o.calDateList, uid = "ui-datebox-", curDate = ( ( w.calBackDate !== false && w.theDate.get(0) === w.calBackDate.get(0) && w.theDate.get(1) === w.calBackDate.get(1) ) ? new w._date(w.calBackDate.getTime()) : w.theDate ), checked = false, checkDatesObj = {}, minDate = w.initDate.copy(), maxDate = w.initDate.copy(), cStartDay = (curDate.copy([0],[0,0,1]).getDay() - w.__( "calStartDay" ) + 7) % 7, curMonth = curDate.get(1), curYear = curDate.get(0), curDateArr = curDate.getArray(), presetDate = ( w.d.input.val() === "" ) ? w._startOffset( w._makeDate( w.d.input.val() ) ) : w._makeDate( w.d.input.val() ), presetDay = -1, cTodayDate = new w._date(), cTodayDateArr = cTodayDate.getArray(), weekNum = curDate .copy( [0], [0,0,1] ) .adj( 2, ( -1 * cStartDay ) +( w.__( "calStartDay" ) === 0 ? 1 : 0 ) ) .getDWeek(4), weekModeSel = 0, isTrueMonth = false, isTrueYear = false, cMonthEnd = 32 - w.theDate.copy([0],[0,0,32,13]).getDate(), cPrevMonthEnd = 32 - w.theDate.copy([0,-1],[0,0,32,13]).getDate(), checkDates = ( o.afterToday || o.beforeToday || o.notToday || o.calAlwaysValidateDates || o.maxDays || o.minDays || o.blackDays || o.blackDates ) ? true : false; if ( w.calBackDate !== false ) { if ( w.theDate.get(0) === w.calBackDate.get(0) && w.theDate.get(1) === w.calBackDate.get(1) ) { w.theDate = new w._date(w.calBackDate.getTime()); w.calBackDate = false; } } if ( typeof w.d.intHTML !== "boolean" ) { w.d.intHTML.remove(); w.d.intHTML = null; } w.d.headerText = ( ( w._grabLabel() !== false ) ? w._grabLabel() : w.__( "titleDateDialogLabel" ) ); w.d.intHTML = $( "" ); $("

" + w._formatter( w.__( "calHeaderFormat" ), w.theDate ) + "

") .appendTo(w.d.intHTML); // Previous and next month buttons, define booleans to decide if they should do anything $( "
" + w.__( "nextMonth") + "
" ) .prependTo( w.d.intHTML.find( "." + uid + "gridheader" ) ) .find( "a" ) .addClass( "ui-btn-inline ui-link ui-btn ui-btn-" + o.themeDate + " ui-icon-" + o.calNextMonthIcon + " ui-btn-icon-notext ui-shadow ui-corner-all" ) .on(o.clickEventAlt, function(e) { e.preventDefault(); if ( w.calNext ) { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } if ( w.theDate.getDate() > 28 ) { w.theDate.setDate(1); } w._offset( "m", 1 ); } }); $( "
" + w.__( "prevMonth") + "
" ) .prependTo( w.d.intHTML.find( "." + uid + "gridheader" ) ) .find( "a" ) .addClass( "ui-btn-inline ui-link ui-btn ui-btn-" + o.themeDate + " ui-icon-" + o.calPrevMonthIcon + " ui-btn-icon-notext ui-shadow ui-corner-all" ) .on(o.clickEventAlt, function(e) { e.preventDefault(); if ( w.calPrev ) { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } if ( w.theDate.getDate() > 28 ) { w.theDate.setDate(1); } w._offset( "m", -1 ); } }); if ( o.calNoHeader ) { if ( o.calUsePickersIcons ) { w.d.intHTML.find( "." + uid + "gridlabel" ).hide(); } else { w.d.intHTML.find( "." + uid + "gridheader" ).remove(); } } w.calNext = true; w.calPrev = true; if ( Math.floor( cTodayDate.comp() / 100 ) === Math.floor( curDate.comp() / 100 ) ) { isTrueMonth = true; } if ( Math.floor( cTodayDate.comp() / 10e3 ) === Math.floor( curDate.comp() / 10e3 ) ) { isTrueYear = true; } if ( presetDate.comp() === curDate.comp() ) { presetDay = presetDate.get(2); } if ( o.afterToday && ( isTrueMonth || ( isTrueYear && cTodayDateArr[1] >= curDateArr[1] ) ) ) { w.calPrev = false; } if ( o.beforeToday && ( isTrueMonth || ( isTrueYear && cTodayDateArr[1] <= curDateArr[1] ) ) ) { w.calNext = false; } if ( o.minDays !== false ) { minDate.adj( 2, o.minDays * -1 ); tempVal = minDate.getArray(); if ( curDateArr[0] === tempVal[0] && curDateArr[1] <= tempVal[1] ) { w.calPrev = false; } } if ( o.maxDays !== false ) { maxDate.adj( 2, o.maxDays ); tempVal = maxDate.getArray(); if ( curDateArr[0] === tempVal[0] && curDateArr[1] >= tempVal[1] ) { w.calNext = false; } } if ( o.calUsePickers ) { pickerControl = $("
"); if ( o.calNoHeader && o.calUsePickersIcons ) { pickerControl.addClass( "ui-datebox-pickicon" ); } pickerControl.i = $("
").appendTo(pickerControl); pickerControl.a = $( "" ) .appendTo( pickerControl.i ); for ( i=0; i<=11; i++ ) { pickerControl.a.append( $( "" ) ); } if ( o.calYearPickMin < 1 ) { prangeS = curYear + o.calYearPickMin; } else if ( o.calYearPickMin < 1800 ) { prangeS = curYear - o.calYearPickMin; } else if ( o.calYearPickMin === "NOW" ) { prangeS = cTodayDateArr[0]; } else { prangeS = o.calYearPickMin; } if ( o.calYearPickMax < 1800 ) { prangeL = curYear + o.calYearPickMax; } else if ( o.calYearPickMax === "NOW" ) { prangeL = cTodayDateArr[0]; } else { prangeL = o.calYearPickMax; } for ( i = prangeS; i <= prangeL; i++ ) { pickerControl.b.append( $( "" ) ); } pickerControl.a.on( "change", function () { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } w.theDate.setD( 1, $( this ).val() ); if ( w.theDate.get(1) !== parseInt( $( this ).val(), 10 ) ) { w.theDate.setD( 2, 0 ); } if ( w.calBackDate !== false ) { w._t( { method: "displayChange", selectedDate: w.calBackDate, shownDate: w.theDate, thisChange: "p", thisChangeAmount: null }); } w.refresh(); }); pickerControl.b.on( "change", function () { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } w.theDate.setD( 0, $( this ).val() ); if (w.theDate.get(1) !== parseInt( pickerControl.a.val(), 10)) { w.theDate.setD( 2, 0 ); } if ( w.calBackDate !== false ) { w._t( { method: "displayChange", selectedDate: w.calBackDate, shownDate: w.theDate, thisChange: "p", thisChangeAmount: null }); } w.refresh(); }); pickerControl.i.controlgroup({ mini: true, type: "horizontal" }); pickerControl.i.find( "select" ).selectmenu( { //mini: true, nativeMenu: true } ); pickerControl.i.find( ".ui-controlgroup-controls" ).css({ marginRight: "auto", marginLeft: "auto", width: "100%", display: "table", }); pickerControl.i.find( ".ui-select" ) .first().css({ width: "60%" }) .end().last().css({ width: "40%" }); if ( o.calNoHeader && o.calUsePickersIcons ) { pickerControl.i.css({ padding: "0 10px 5px 10px" }); } pickerControl.appendTo( w.d.intHTML ); } calContent = $("
" ).appendTo( w.d.intHTML ); if ( o.calShowDays ) { w._cal_days = w.__( "daysOfWeekShort").concat( w.__( "daysOfWeekShort" ) ); weekdayControl = $( "
", { "class": uid + "gridrow" } ).appendTo( calContent ); if ( o.calControlGroup ) { weekdayControl.addClass( uid + "gridrow-last" ); } if ( w.__( "isRTL" ) === true ) { weekdayControl.css( "direction", "rtl" ); } if ( o.calShowWeek ) { $("
") .addClass( uid + "griddate " + uid + "griddate-label" ) .appendTo( weekdayControl ); } for ( i=0; i<=6;i++ ) { $( "
" ) .text( w._cal_days[ ( i + w.__( "calStartDay") ) % 7 ] ) .addClass( uid + "griddate " + uid + "griddate-label" ) .appendTo( weekdayControl ); } } checkDatesObj = { i: minDate, x: maxDate, t: cTodayDate, p: presetDay }; genny = w._cal_gen( cStartDay, cPrevMonthEnd, cMonthEnd, !o.calOnlyMonth, curDate.get(1) ); if ( ! $.isFunction( o.calFormatter ) && o.calFormatter !== false && $.isFunction( window[ o.calFormatter ] ) ) { o.calFormatter = window[ o.calFormatter ]; } absStartDO = new Date( w.theDate.get(0), genny[0][0][1], genny[0][0][0], 0, 0, 0, 0 ); absEndDO = new Date( w.theDate.get(0), genny[genny.length-1][6][1], genny[genny.length-1][6][0], 0, 0, 0, 0 ); if ( w.calBackDate === false ) { w.calDateVisible = true; } else { if ( o.calOnlyMonth ) { w.calDateVisible = false; } else { if ( w.calBackDate.comp() < absStartDO.comp() || w.calBackDate.comp() > absEndDO.comp() ) { w.calDateVisible = false; } else { w.calDateVisible = true; } } } for ( row = 0, rows = genny.length; row < rows; row++ ) { htmlRow = $("
", { "class": uid + "gridrow" } ); if ( w.__( "isRTL" ) ) { htmlRow.css( "direction", "rtl" ); } if ( o.calShowWeek ) { $("
", { "class": uid + "griddate " + uid + "griddate-empty" } ) .text( "W" + weekNum ) .css( (o.calControlGroup ? {"float": "left"} : {}) ) .appendTo( htmlRow ); weekNum++; if ( weekNum > 52 && typeof(genny[ row + 1 ]) !== "undefined" ) { weekNum = new w._date( curDateArr[0], curDateArr[1], ( w.__( "calStartDay" )===0 ) ? genny[ row + 1 ][ 1 ][ 0 ] : genny[ row + 1 ][ 0 ][ 0 ], 0, 0, 0, 0 ).getDWeek( 4 ); } } for ( col=0, cols = genny[row].length; col < cols; col++ ) { if ( o.calWeekMode ) { weekModeSel = genny[row][o.calWeekModeDay][0]; } if ( typeof genny[row][col] === "boolean" ) { $("
", { "class": uid + "griddate " + uid + "griddate-empty" } ).appendTo( htmlRow ); } else { checked = w._cal_check( checkDates, curDateArr[0], genny[row][col][1], genny[row][col][0], checkDatesObj ); if ( genny[row][col][0]) { if ( ! $.isFunction(o.calFormatter) ) { fmtRet = { text: genny[row][col][0], "class": "" }; } else { fmtObj = { "Year": ( ( genny[row][col][1] > 11 ) ? curYear + 1 : ( genny[row][col][1] < 0 ) ? curYear - 1 : curYear ), "Month" : ( ( genny[row][col][1] === 12 ) ? 0 : ( genny[row][col][1] === -1 ) ? 11 : genny[row][col][1] ), "Date" : genny[row][col][0] }; fmtObj.ISO = fmtObj.Year + "-" + w._zPad(fmtObj.Month + 1) + "-" + w._zPad(fmtObj.Date); fmtObj.Comp = parseInt( fmtObj.ISO.replace( /-/g, "" ), 10 ); fmtObj.dateVisible = w.calDateVisible; tempVal = o.calFormatter(fmtObj); if ( typeof tempVal !== "object" ) { fmtRet = { text: tempVal, "class": "" }; } else { fmtRet = { "text": tempVal.text, "class": tempVal["class"] }; } } $("
") .html( fmtRet.text ) .addClass( uid + "griddate ui-corner-all ui-btn") .addClass( ( curMonth === genny[row][col][1] || checked.force ) ? ( "ui-btn-" + checked.theme + ( checked.ok ? "" : " ui-state-disabled" ) ) : ( uid + "griddate-empty" ) ) .addClass( fmtRet["class"] ) .css(( curMonth !== genny[row][col][1] && !o.calOnlyMonth ) ? { cursor: "pointer" } : {} ) .data( "date", ( ( o.calWeekMode ) ? weekModeSel : genny[row][col][0] ) ) .data( "enabled", checked.ok) .data( "month", genny[ row ][ ( ( o.calWeekMode ) ? o.calWeekModeDay : col ) ][1] ) .appendTo( htmlRow ); } } } if ( o.calControlGroup ) { htmlRow.controlgroup({type: "horizontal"}); } if ( row === rows - 1 ) { htmlRow.addClass( uid + "gridrow-last" ); } htmlRow.appendTo(calContent); } if ( o.calShowWeek ) { calContent.find( "." + uid + "griddate" ).addClass( uid + "griddate-week" ); } if ( o.calShowDateList && dList !== false ) { listControl = $( "
" ); listControl.a = $( "" ).appendTo(listControl); listControl.a.append("" ); for ( i = 0; i < dList.length; i++ ) { listControl.a.append( $( "" ) ); } listControl.a.on( "change", function() { tempVal = $( this ).val().split( "-" ); w.theDate = new w._date(tempVal[0], tempVal[1]-1, tempVal[2], 0,0,0,0); w._t( { method: "doset" } ); }); listControl.find( "select" ).selectmenu( { mini: true, nativeMenu: true } ); listControl.appendTo( calContent ); } if ( o.useTodayButton || o.useTomorrowButton || o.useClearButton ) { htmlRow = $("
", { "class": uid + "controls" } ); if ( o.useTodayButton ) { $( "" + w.__( "calTodayButtonLabel" ) + "" ) .appendTo(htmlRow) .addClass( "ui-btn ui-btn-" + o.theme + " ui-icon-navigation ui-btn-icon-left ui-shadow ui-corner-all" ) .on(o.clickEvent, function(e) { e.preventDefault(); w.theDate = w._pa([0,0,0], new w._date()); w.calBackDate = false; w._t( { method: "doset" } ); }); } if ( o.useTomorrowButton ) { $( "" + w.__( "calTomorrowButtonLabel" ) + "" ) .appendTo(htmlRow) .addClass( "ui-btn ui-btn-" + o.theme + " ui-icon-navigation ui-btn-icon-left ui-shadow ui-corner-all" ) .on(o.clickEvent, function(e) { e.preventDefault(); w.theDate = w._pa([0,0,0], new w._date()).adj( 2, 1 ); w.calBackDate = false; w._t( { method: "doset" } ); }); } if ( o.useClearButton ) { htmlRow.append(w._stdBtn.clear.apply(w)); } if ( o.useCollapsedBut ) { htmlRow.controlgroup({ type: "horizontal" }); htmlRow.addClass( "ui-datebox-collapse" ); } else { htmlRow.controlgroup(); } htmlRow.appendTo( calContent ); } w.d.intHTML.on(o.clickEventAlt, "div." + uid + "griddate", function(e) { e.preventDefault(); if ( $( this ).data( "enabled" ) ) { w.calBackDate = false; w.theDate .setD( 2, 1 ) .setD( 1, $( this ).jqmData( "month" ) ) .setD( 2, $( this ).data( "date" ) ); w._t( { method: "set", value: w._formatter( w.__fmt(),w.theDate ), date: w.theDate } ); w._t( { method: "close" } ); } }); w.d.intHTML .on( "swipeleft", function() { if ( w.calNext ) { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } w._offset( "m", 1 ); } } ) .on( "swiperight", function() { if ( w.calPrev ) { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } w._offset( "m", -1 ); } } ); if ( w.wheelExists ) { // Mousewheel operations, if plugin is loaded w.d.intHTML.on( "mousewheel", function(e,d) { e.preventDefault(); if ( d > 0 && w.calNext ) { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } w.theDate.setD( 2, 1 ); w._offset( "m", 1 ); } if ( d < 0 && w.calPrev ) { if ( w.calBackDate === false ) { w.calBackDate = new Date(w.theDate.getTime()); } w.theDate.setD( 2, 1 ); w._offset( "m", -1 ); } }); } } }); })( jQuery );