/********************************************************************************************
* BlueShoes Framework; This file is part of the php application framework.
* NOTE: This code is stripped (obfuscated). To get the clean documented code goto 
*       www.blueshoes.org and register for the free open source *DEVELOPER* version or 
*       buy the commercial version.
*       
*       In case you've already got the developer version, then this is one of the few 
*       packages/classes that is only available to *PAYING* customers.
*       To get it go to www.blueshoes.org and buy a commercial version.
* 
* @copyright www.blueshoes.org
* @author    sam blum <sam-at-blueshoes>
* @author    Andrej Arn <andrej-at-blueshoes>
*/
if (!Bs_Objects) {var Bs_Objects = [];};function bs_dp_inputFieldBlur() {
event.srcElement.bsObj.updateByInputFieldBlur();}
function bs_dp_inputFieldChange() {
event.srcElement.bsObj.updateByInputFieldChange();}
function bs_dp_inputFieldWheel() {
return event.srcElement.bsObj.updateByMouseWheel();}
function Bs_DatePicker(fieldName) {
this._objectId;this.fieldName = fieldName;this.visibleFieldName;this._hasHiddenField = false;this.jsBaseDir = '';this.imgDir = 'images/';this.openByInit = false;this.autoClose  = true;this.enableMouseWheel = false;this.txtHideCalendar = 'Hide Calendar';this.txtShowCalendar = 'Show Calendar';this.validateErrorMsg = "Not a valid date: '__VALUE__'. Try again or use the date picker. Valid formats are:\nAmerican mm/dd/yyyy (eg 12/31/2003)\nEuropean dd.mm.yyyy (eg 31.12.2003)\nISO yyyy-mm-dd (eg 2003-12-31)";this.validateErrorMsgEn;this.rangeErrorMsg = "Not a valid date: '__VALUE__'. It is not in the allowed range.";this._language = 'en';this.monthLong = new Array('Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık');;this.monthLongEn;this.monthNumChars = 0;this.days = new Array('Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi', 'Pazar');;this.daysEn;this.daysNumChars = 2;this.useYearField = 3;this.useMonthField = 2;this.useSpinEditForYear	= (typeof(Bs_NumberField) != 'undefined');this.useArrows = false;this.useButtonToday = false;this.dayHeaderFontColor = '#D4D0C8';this.dayHeaderBgColor   = '#808080';this.dayFontColor       = 'black';this.dayBgColor         = 'white';this.dayFontColorActive = 'white';this.dayBgColorActive   = '#0A246A';this.dayTableBgColor    = 'white';this.dayBgColorOver     = '#FFFFE1';this.dayTableAttributeString = 'width="100%" border="0" cellspacing="0" cellpadding="3"';this.width = 150;this.internalDateFormat = 'iso';this.displayDateFormat = 'iso';this.dateFormat = 'iso';this._internalDateFormat;this._displayDateFormat;this.withTime = false;this.timeFormat = 'H:i:s';this.positionAbsolute = false;this.dayClassNameByDay = new Array();this.dateRangeLower = '1800-01-01';this.dateRangeUpper = '2100-12-31';this.allowedWeekdays = new Array(true, true, true, true, true, true, true);this._currentDate  = '';this._currentTime  = '00:00:00';this._currentYear  = 0;this._currentMonth = 0;this._currentDay   = 0;this.toggleButton;this.popupUrl = '/_bsJavascript/components/datepicker/popup.html';this.asPopup;this._lastCursorPos = 0;this._wheelTimeout;this.dateToday = new Date();this.holidays = new Array(
new Array(null, 1, 1),
new Array(null, 12, 31)
);this._constructor = function() {
this._id = Bs_Objects.length;Bs_Objects[this._id] = this;this._objectId = "Bs_DatePicker_"+this._id;var btnName = this._objectId + '_tglBtn';this.toggleButton = new Bs_Button(btnName);eval(btnName + ' = this.toggleButton;');this.toggleButton.group           = 'toggleButton';this.toggleButton.imgName         = 'bs_calendar';this.toggleButton.cssClassDefault = 'bsBtnMouseOver';this.toggleButton.attachEvent('Bs_Objects['+this._id+'].toggleSelector();', 'on');this.toggleButton.attachEvent('Bs_Objects['+this._id+'].toggleSelector();', 'off');}
this.setLanguage = function(language) {
if (typeof(Bs_DatePicker_Lang) == 'undefined') return false;if (typeof(Bs_DatePicker_Lang[language]) == 'undefined') return false;this._language = language;this.monthLong        = Bs_DatePicker_Lang[language]['months'];this.days             = Bs_DatePicker_Lang[language]['days'];this.validateErrorMsg = Bs_DatePicker_Lang[language]['errorValidate'];this.rangeErrorMsg    = Bs_DatePicker_Lang[language]['errorRange'];this.txtHideCalendar  = Bs_DatePicker_Lang[language]['hideCalendar'];this.txtShowCalendar  = Bs_DatePicker_Lang[language]['showCalendar'];return true;}
this.setDisabled = function(bool) {
try {
if (typeof(bool) == 'undefined') {
bool = !document.getElementById(this.fieldName).disabled;}
if (bool) {
this.toggleButton.setStatus(0);document.getElementById(this.fieldName).disabled = true;} else {
this.toggleButton.setStatus(1);document.getElementById(this.fieldName).disabled = false;}
} catch (e) {
}
}
this.resetDate = function() {
this._currentYear  = 0;this._currentMonth = 0;this._currentDay   = 0;this.updateCurrentDate();this.updateInputField();}
this.setDate = function(date, reRender) {
var isoDate = this.dateToIsoDate(date, true);return this.setDateByIso(date, reRender);}
this.setDateByChunks = function(year, month, day, reRender) {
if (typeof(reRender) == 'undefined') reRender = true;year = this.fixYear(year);var newDate = this.dateToIsoDate(year + '-' + month + '-' + day);if (newDate == false) return false;if (!this.isDateSelectable(year, month, day)) return false;this._currentYear  = year;this._currentMonth = month;this._currentDay   = day;this.updateCurrentDate();this.updateInputField();if (reRender) this._reRenderDatePicker();return true;}
this.setDateByJunks = function(year, month, day) {
return this.setDateByChunks(year, month, day);}
this.setDateByIso = function(isoDate, reRender) {
if ("" == isoDate) {
this.resetDate();} else {
var newDate = this.dateToIsoDate(isoDate);if (newDate == false) return false;var year  = parseInt(newDate.substr(0, 4), 10);var month = parseInt(newDate.substr(5, 2), 10);var day   = parseInt(newDate.substr(8, 2), 10);if (!this.isDateSelectable(year, month, day)) return false;this._currentYear  = year;this._currentMonth = month;this._currentDay   = day;this.updateCurrentDate();if (newDate.length > 14) {
this.setTime(newDate.substr(11));}
}
this.updateInputField();if (reRender) this._reRenderDatePicker();return true;}
this.setDateByEu = function(euDate, reRender) {
var isoDate = this.dateToIsoDate(euDate, true);return this.setDateByIso(isoDate, reRender);}
this.setDateByObject = function(dateObject, reRender) {
return this.setDateByChunks(dateObject.getYear(), dateObject.getMonth()+1, dateObject.getDate(), reRender);}
this.getDate = function() {
if (this._currentYear == 0) return false;switch (this.getDisplayDateFormat()) {
case 'eu':
return this._currentDay   + '.' + this._currentMonth + '.' + this._currentYear;case 'us':
return this._currentMonth + '/' + this._currentDay   + '/' + this._currentYear;case 'iso':
default:
return this._currentYear  + '-' + this._currentMonth + '-' + this._currentDay;}
}
this.getDateAsIso = function() {
if (this._currentYear == 0) return false;return this._currentYear + '-' + this._currentMonth + '-' + this._currentDay;}
this.setTime = function(time) {
switch (time.length) {
case 0:
time = '00:00:00';case 2:
time += ':00:00';case 5:
time += ':00';}
this._currentTime = time;this.updateInputField();return true;}
this.seedInternalWithCurrentDate = function() {
var dateNow = new Date();this._currentYear  = this.fixYear(dateNow.getYear());this._currentMonth = dateNow.getMonth() +1;this._currentDay   = dateNow.getDate();this.updateCurrentDate();}
this.drawInto = function(tagId) {
var tag = document.getElementById(tagId);if ((tag == null) || !tag) return false;if (this.asPopup) {
this.toggleButton.detachEvents('on');this.toggleButton.detachEvents('off');this.toggleButton.attachEvent('Bs_Objects['+this._id+'].openPopup();', 'on');} else {
}
tag.innerHTML = this.render();this._convertYearToSpinEdit();return true;}
this._calculateFieldMaxlength = function() {
if (this.withTime) {
switch (this.timeFormat) {
case 'H:i':
return 16;break;default:
return 19;}
} else {
return 10;}
}
this.convertField = function(fieldId) {
var origFld = document.getElementById(fieldId);if ((origFld == null) || !origFld) return false;if (origFld.value != '') this.setDate(origFld.value, false);origFld.maxLength = this._calculateFieldMaxlength();if (bs_isEmpty(origFld['name']))  origFld['name'] = fieldId;if (!bs_isEmpty(origFld['name'])) this.fieldName = origFld['name'];var formatInternal = this.getInternalDateFormat();var formatDisplay  = this.getDisplayDateFormat();if (formatInternal != formatDisplay) {
origFld.setAttribute('name', this.fieldName + '_display');origFld.setAttribute('id', this.fieldName + '_display');if (origFld.value != '') {
var curDate = this.dateToIsoDate(origFld.value, true);if (curDate) {
this.setDateByIso(curDate);origFld.value = this.getCurrentDateFormatted();}
}
} else {
}
var visibleFieldCode = origFld.outerHTML;if ((formatInternal != formatDisplay) && (ie)) {
var myRegExp = new RegExp("name=" + this.fieldName + " ", "i");var to   = 'name=' + this.fieldName + '_display ';			visibleFieldCode = visibleFieldCode.replace(myRegExp, to);
var myRegExp = new RegExp("name=" + this.fieldName + ">", "i");var to   = 'name=' + this.fieldName + '_display>';			visibleFieldCode = visibleFieldCode.replace(myRegExp, to);
var myRegExp = new RegExp("id=" + this.fieldName + " ", "i");var to   = 'id=' + this.fieldName + '_display ';			visibleFieldCode = visibleFieldCode.replace(myRegExp, to);
var myRegExp = new RegExp("id=" + this.fieldName + ">", "i");var to   = 'id=' + this.fieldName + '_display>';			visibleFieldCode = visibleFieldCode.replace(myRegExp, to);
}
var htmlCode = this.render(visibleFieldCode);try {
origFld.outerHTML = htmlCode;origFld = document.getElementById(fieldId);this._convertYearToSpinEdit();origFld.bsObj = this;var visibleFieldElm = document.getElementById(this.visibleFieldName);visibleFieldElm.bsObj = this;visibleFieldElm.attachEvent('onblur',       bs_dp_inputFieldBlur);visibleFieldElm.attachEvent('onkeyup',      bs_dp_inputFieldChange);visibleFieldElm.attachEvent('onmousewheel', bs_dp_inputFieldWheel);} catch (e) {
}
if ((origFld.value == '0000-00-00') || (origFld.value == '0000-00-00 00:00:00') || (origFld.value == '0000-00-00 00:00')) {
origFld.value = '';}
return true;}
this.render = function(inputField) {
if (typeof(this.monthLongEn)        != 'undefined') this.monthLong        = this.monthLongEn;if (typeof(this.daysEn)             != 'undefined') this.days             = this.daysEn;if (typeof(this.validateErrorMsgEn) != 'undefined') this.validateErrorMsg = this.validateErrorMsgEn;var ret = new Array();ret[ret.length] = '<table border="0" cellspacing="0" cellpadding="0"><tr><td valign="top">';var formatInternal = this.getInternalDateFormat();var formatDisplay  = this.getDisplayDateFormat();if (formatInternal != formatDisplay) {
ret[ret.length] = '<input type="hidden" name="'+this.fieldName+'" id="'+this.fieldName+'" value="'+this.getCurrentDateFormatted(true)+'">';this._hasHiddenField = true;this.visibleFieldName = this.fieldName + '_display';} else {
this.visibleFieldName = this.fieldName;}
if (inputField == true) {
} else if (typeof(inputField) == 'string') {
ret[ret.length] = inputField;} else { 'undefined'
ret[ret.length] = '<input type="hidden"';ret[ret.length] = ' type="text"';ret[ret.length] = ' name="'    + this.visibleFieldName + '"';ret[ret.length] = ' id="'      + this.visibleFieldName + '"';ret[ret.length] = ' onblur="Bs_Objects['+this._id+'].updateByInputFieldBlur();"';ret[ret.length] = ' onkeyup="Bs_Objects['+this._id+'].updateByInputFieldChange();"';ret[ret.length] = ' onmousewheel="Bs_Objects['+this._id+'].updateByMouseWheel(); return false;"';ret[ret.length] = ' size="10"';ret[ret.length] = ' maxlength="' + this._calculateFieldMaxlength() + '"';var cssWidth = this.width -22;if (this.withTime) {
if (cssWidth < 140) cssWidth = 140;}
ret[ret.length] = ' style="width:' + cssWidth + 'px;"';ret[ret.length] = ' class="BsDp_date"';ret[ret.length] = ' title="' + this.getCurrentDateReadable() + '"';ret[ret.length] = ' value="' + this.getCurrentDateFormatted() + '">';}
ret[ret.length] = '</td><td valign="top">';this.toggleButton.title = (this.openByInit) ? this.txtHideCalendar : this.txtShowCalendar;if (this.openByInit) this.toggleButton.setStatus(2);var btnHtml = this.toggleButton.render();ret[ret.length] = btnHtml;ret[ret.length] = '</td></tr></table>';if (!this.asPopup) {
ret[ret.length] = '<div id="' + this._objectId + '_div"';ret[ret.length] = ' style="width:' + this.width + 'px;';if (!this.openByInit) {
ret[ret.length] = ' display:none;';}
if (this.positionAbsolute) {
ret[ret.length] = ' position:absolute;';}
ret[ret.length] = '"';ret[ret.length] = ' class="BsDp_div"';ret[ret.length] = '>';ret[ret.length] = this.renderDatePicker();ret[ret.length] = '</div>';}
return ret.join('');}
this.renderDatePicker = function() {
var ret = new Array();if (this._currentDate.length == 0) {
this.seedInternalWithCurrentDate();}
ret[ret.length] = '<div class="BsDp_monthYearDiv">';ret[ret.length] = '<table border="0" width="100%" cellpadding="0" cellspacing="0" align="center"><tr>';if (this.useArrows) {
ret[ret.length] = '<td align="center" onclick="Bs_Objects['+this._id+'].dateCalc(0, -1);" style="cursor:hand;cursor:pointer;" class="BsDp_arrowLeft">';ret[ret.length] = '&nbsp;';ret[ret.length] = '<img src="' + this.imgDir + 'arrowLeft.gif' + '" align="middle" border="0"/>';ret[ret.length] = '&nbsp;';ret[ret.length] = '</span>';ret[ret.length] = '</td><td align="center">';} else {
ret[ret.length] = '<td align="center">';}
if (this.useMonthField == 1) {
ret[ret.length] = '<span class="BsDp_monthText">' + this.monthLong[this._currentMonth -1] + '</span>';} else if (this.useMonthField == 2) {
ret[ret.length] = '<select name="' + this.fieldName + '_month"';ret[ret.length] = ' id="' + this._objectId + '_month" size="1"';ret[ret.length] = ' onChange="Bs_Objects['+this._id+'].updateByMonth();"';ret[ret.length] = ' class="BsDp_month"';ret[ret.length] = '>';var i = 1;for (var m=0; m<this.monthLong.length; m++) {
ret[ret.length] = '<option value="' + i + '"';if (this._currentMonth == i) ret[ret.length] = ' selected';ret[ret.length] = '>';if (this.monthNumChars > 0) {
ret[ret.length] = this.monthLong[m].substr(0, this.monthNumChars);} else {
ret[ret.length] = this.monthLong[m];}
ret[ret.length] = '</option>';i++;}
ret[ret.length] = '</select>';}
ret[ret.length] = '</td>';if (moz && this._useSpinEditForYear()) {
ret[ret.length] = '<td align="left">';} else {
ret[ret.length] = '<td align="center">';}
if (this.useYearField == 1) {
ret[ret.length] = '<span class="BsDp_yearText">' + this._currentYear + '</span>';} else if (this.useYearField >= 2) {
ret[ret.length] = '<input type="text" name="' + this.fieldName + '_year"';ret[ret.length] = ' id="' + this._objectId + '_year" value="' + this._currentYear + '"';ret[ret.length] = ' size="4" maxlength="4" onKeyUp="Bs_Objects['+this._id+'].updateByYearChange();"';ret[ret.length] = ' onBlur="Bs_Objects['+this._id+'].updateByYearBlur();"';ret[ret.length] = ' class="BsDp_year"';ret[ret.length] = '>';if (this._useSpinEditForYear()) {
ret[ret.length] = '&nbsp;&nbsp;&nbsp;';}
}
if (this.useArrows) {
ret[ret.length] = '</td><td align="center" onclick="Bs_Objects['+this._id+'].dateCalc(0, 1);" style="cursor:hand;cursor:pointer;" class="BsDp_arrowRight">';ret[ret.length] = '&nbsp;';ret[ret.length] = '<img src="' + this.imgDir + 'arrowRight.gif' + '" align="middle" border="0"/>';ret[ret.length] = '&nbsp;';}
ret[ret.length] = '</td>';ret[ret.length] = '</tr></table>';ret[ret.length] = '</div>';ret[ret.length] = '<div id="' + this._objectId + '_dayDiv" class="BsDp_dayTableDiv">';ret[ret.length] = this.renderDayTable(this._currentYear, this._currentMonth, this._currentDay);ret[ret.length] = '</div>';if (this.useButtonToday) {
ret[ret.length] = '<div class="BsDp_buttonsDiv">';ret[ret.length] = '<img src="' + this.imgDir + 'en_btnToday.gif' + '" align="middle" border="0"';ret[ret.length] = ' onclick="Bs_Objects['+this._id+'].setDateByObject(Bs_Objects['+this._id+'].dateToday);"';ret[ret.length] = ' style="cursor:hand; cursor:pointer;"';ret[ret.length] = '/>';ret[ret.length] = '</div>';}
return ret.join('');}
this._reRenderDatePicker = function() {
var div = document.getElementById(this._objectId + '_div');if ((div == null) || !div) return;div.innerHTML = this.renderDatePicker();this._convertYearToSpinEdit();}
this.renderDayTable = function(currentYear, currentMonth, currentDay) {
var day            = 1;var lastDayOfMonth = this.getNumberOfDays(currentYear, currentMonth);var ret            = new Array();ret[ret.length] = '<table ' + this.dayTableAttributeString;ret[ret.length] = ' bgcolor="' + this.dayTableBgColor + '"';ret[ret.length] = ' class="BsDp_dayTable"';ret[ret.length] = '>';if (currentYear >= 1970) {
ret[ret.length] = '<tr bgcolor="' + this.dayHeaderBgColor + '">';for (var d=0; d<this.days.length; d++) {
ret[ret.length] = '<td width="14%" bgcolor="' + this.dayHeaderBgColor + '" align="right"';ret[ret.length] = ' title="' + this.days[d] + '"';ret[ret.length] = ' class="BsDp_dayHeader"';ret[ret.length] = ' style="color:' + this.dayHeaderFontColor + '; cursor:default;">';if (this.daysNumChars > 0) {
ret[ret.length] = this.days[d].substr(0, this.daysNumChars);} else {
ret[ret.length] = this.days[d];}
ret[ret.length] = '</td>';}
ret[ret.length] = '</tr>';var dateObjFirst = new Date(currentYear, currentMonth-1, 1, 0, 0, 0);var weekDayFirst = dateObjFirst.getDay();if (weekDayFirst == 0) weekDayFirst = 7;} else {
var weekDayFirst = 1;}
for (var i=0; i<6; i++) {
ret[ret.length] = '<tr>';for (var j=1; j<8; j++) {
var isSelectableDate = this.isDateSelectable(this._currentYear, this._currentMonth, day);if ((day > lastDayOfMonth) || ((i == 0) && (j < weekDayFirst))) {
ret[ret.length] = '<td>&nbsp;</td>';} else {
ret[ret.length] = '<td';ret[ret.length] = ' id="' + this._objectId + '_td' + day + '"';ret[ret.length] = ' align="right"';if (isSelectableDate) {
ret[ret.length] = ' onMouseOver="Bs_Objects['+this._id+'].dayMouseOver(' + day + ');"';ret[ret.length] = ' onMouseOut="Bs_Objects['+this._id+'].dayMouseOut(' + day + ');"';ret[ret.length] = ' onClick="Bs_Objects['+this._id+'].updateByDay(' + day + ');"';}
var classArr = new Array();classArr[classArr.length] = 'BsDp_day';classArr[classArr.length] = 'BsDp_weekday' +j;if (typeof(this.dayClassNameByDay[day])   != 'undefined') classArr[classArr.length] = this.dayClassNameByDay[day];if (this.isHoliday(this._currentYear, this._currentMonth, day)) {
classArr[classArr.length] = 'BsDb_holiday';}
if ((this.dateToday.getDate() == day) && (this.dateToday.getMonth() == (this._currentMonth -1)) && (this.fixYear(this.dateToday.getYear()) == this._currentYear)) {
classArr[classArr.length] = 'BsDp_dayToday';}
if (!isSelectableDate) classArr[classArr.length] = 'BsDp_dayUnselectable';if (classArr.length > 0) {
ret[ret.length] = ' class="' + classArr.join(' ') + '"';ret[ret.length] = ' style="';} else {
ret[ret.length] = ' style="font-family:arial; font-size:11px;';}
if (isSelectableDate) {
ret[ret.length] = 'cursor:hand; cursor:pointer;';} else {
ret[ret.length] = 'cursor:default;';}
if (day == currentDay) {
ret[ret.length] = ' color:' + this.dayFontColorActive + '; background-color:' + this.dayBgColorActive + ';';} else {
}
ret[ret.length] = '">';ret[ret.length] = day;ret[ret.length] = '</td>';day++;}
}
ret[ret.length] = '</tr>';if (day >= (lastDayOfMonth +1)) break;}
ret[ret.length] = '</table>';return ret.join('');}
this.updateDayTable = function() {
document.getElementById(this._objectId + '_dayDiv').innerHTML = this.renderDayTable(this._currentYear, this._currentMonth, this._currentDay);}
this.getCurrentDateReadable = function() {
if (this._currentDay   == 0) return '';if (this._currentMonth == 0) return '';if (this._currentYear  == 0) return '';var ret = '';var dateObj = new Date(this._currentYear, this._currentMonth -1, this._currentDay);var weekDay = dateObj.getDay();if (weekDay == 0) weekDay = 7;ret += this.days[weekDay -1] + ', '
ret += this.monthLong[this._currentMonth -1] + ' ';ret += this._currentDay;switch (this._currentDay) {
case 1: case 21: case 31:
ret += 'st'; break;case 2: case 22:
ret += 'nd'; break;case 3: case 23:
ret += 'rd'; break;default:
ret += 'th';}
ret += ' ' + this._currentYear;if (this.withTime) {
ret += ' ' + this.getCurrentTimeFormatted();}
return ret;}
this.getCurrentDateFormatted = function(internal) {
if (this._currentDay   == 0) return '';if (this._currentMonth == 0) return '';if (this._currentYear  == 0) return '';var format = ((typeof(internal) != 'undefined') && internal) ? this.getInternalDateFormat() : this.getDisplayDateFormat();switch (format) {
case 'us':
var ret = '';if (this._currentMonth < 10) ret += '0';ret += this._currentMonth + '/';if (this._currentDay < 10) ret += '0';ret += this._currentDay + '/';ret += this._currentYear;break;case 'eu':
var ret = '';if (this._currentDay < 10) ret += '0';ret += this._currentDay + '.';if (this._currentMonth < 10) ret += '0';ret += this._currentMonth + '.';ret += this._currentYear;break;default:
var ret = this._currentDate;}
if (this.withTime) {
ret += ' ' + this.getCurrentTimeFormatted();}
return ret;}
this.getCurrentTimeFormatted = function() {
if (!this.withTime) return '';switch (this.timeFormat) {
case 'H:i':
return this._currentTime.substr(0, 5);break;default:
return this._currentTime;}
}
this.updateInputField = function() {
var formatInternal = this.getInternalDateFormat();var formatDisplay  = this.getDisplayDateFormat();if (formatInternal != formatDisplay) {
var fld = document.getElementById(this.fieldName);if ((fld == null) || !fld) return;fld.value = this.getCurrentDateFormatted(true);var fld = document.getElementById(this.visibleFieldName);if ((fld == null) || !fld) return;fld.value = this.getCurrentDateFormatted();fld.title = this.getCurrentDateReadable();} else {
var fld = document.getElementById(this.fieldName);if ((fld == null) || !fld) return;fld.value = this.getCurrentDateFormatted();fld.title = this.getCurrentDateReadable();}
}
this.updateByMouseWheel = function() {
if (!this.enableMouseWheel) return true;if (typeof(this._wheelTimeout) != 'undefined') clearTimeout(this._wheelTimeout)
var pos = this._rememberCursorPos();if (pos > 0) {
var negative = (event.wheelDelta < 0);var calcObj = this._posToDateCalcHelper(pos, negative);this.dateCalc(calcObj.calcDay, calcObj.calcMonth, calcObj.calcYear, false);this._resetCursorPos();} else {
if (event.wheelDelta > 0) {
this.dateCalc(1, 0, 0, false);} else if (event.wheelDelta < 0) {
this.dateCalc(-1, 0, 0, false);}
}
this._wheelTimeout = setTimeout('Bs_Objects['+this._id+']._reRenderDatePicker();', 300);return false;}
this.updateByInputFieldChange = function() {
switch (window.event.keyCode) {
case 16:
case 35:
case 36:
case 37:
case 39:
return;case 38:
case 40:
var negative = (window.event.keyCode == 40) || ((window.event.keyCode == 34));if ((document.selection) && (document.selection.createRange)) {
var pos = this._rememberCursorPos();var calcObj = this._posToDateCalcHelper(pos, negative);this.dateCalc(calcObj.calcDay, calcObj.calcMonth, calcObj.calcYear);this._resetCursorPos();} else {
this.dateCalc((negative) ? -1 : 1);}
return;case 107:
var fld = document.getElementById(this.fieldName);var pos = fld.value.indexOf('+');var calcObj = this._posToDateCalcHelper(pos);this.dateCalc(calcObj.calcDay, calcObj.calcMonth, calcObj.calcYear);this.setCursorPos(pos);return;default:
}
var fld = document.getElementById(this.visibleFieldName);var userVal = fld.value;if ((userVal.length == 10) && (this.dateToIsoDate(userVal) != false)) {
this.updateByInputFieldBlur();}
}
this.updateByInputFieldBlur = function() {
var fld = document.getElementById(this.visibleFieldName);var userVal = fld.value;if (userVal == this._currentDate) return;if (userVal.length > 0) {
var isDateOk = false;do {
if (this.withTime) {
var newVal = this.dateToIsoDate(userVal.substr(0, 10));var time   = userVal.substr(11);} else {
var newVal = this.dateToIsoDate(userVal);}
if (newVal == false) {
					alert(this.validateErrorMsg.replace(/__VALUE__/, userVal));
break;}
var year  = parseInt(newVal.substr(0, 4), 10);var month = parseInt(newVal.substr(5, 2), 10);var day   = parseInt(newVal.substr(8, 2), 10);if (!this.isDateSelectable(year, month, day)) {
fld.value = '';					alert(this.rangeErrorMsg.replace(/__VALUE__/, userVal));
break;}
isDateOk = true;} while (false);if (!isDateOk) {
return;}
this._currentYear  = year;this._currentMonth = month;this._currentDay   = day;this._currentTime  = time;this.updateCurrentDate();this.updateInputField();} else {
this.seedInternalWithCurrentDate();}
this._reRenderDatePicker();}
this.updateByDay = function(day) {
try {
var oldTd = document.getElementById(this._objectId + '_td' + this._currentDay);oldTd.style.backgroundColor = this.dayBgColor;oldTd.style.color           = this.dayFontColor;} catch (e) {
}
var oldTd = document.getElementById(this._objectId + '_td' + day);oldTd.style.backgroundColor = this.dayBgColorActive;oldTd.style.color           = this.dayFontColorActive;this._currentDay = parseInt(day, 10);this.updateCurrentDate();this.updateInputField();if (this.autoClose) this.toggleSelector();}
this.updateByMonth = function() {
var tmp = new Bs_FormFieldSelect();var monthSelect = document.getElementById(this._objectId + '_month');tmp.init(monthSelect);this._currentMonth = parseInt(monthSelect.getValue(), 10);var isDateOk = false;do {
if (!this.isValidDate(this._currentYear, this._currentMonth, this._currentDay)) {
break;}
if (!this.isDateSelectable(this._currentYear, this._currentMonth, this._currentDay)) {
break;}
isDateOk = true;} while (false);this.updateCurrentDate();if (isDateOk) {
this.updateInputField();} else {
var fld = document.getElementById(this.fieldName);fld.value = '';fld.title = '';}
this.updateDayTable();}
this.updateByYearChange = function() {
var tmpYear = parseInt(document.getElementById(this._objectId + '_year').value, 10);if ((tmpYear < 2100) && (tmpYear > 1800)) {
this.updateByYearBlur();}
}
this.updateByYearBlur = function() {
var tmpYear = parseInt(document.getElementById(this._objectId + '_year').value, 10);tmpYear = this.fixYear(tmpYear);this._currentYear = tmpYear;var isDateOk = false;do {
if (!this.isValidDate(this._currentYear, this._currentMonth, this._currentDay)) {
break;}
if (!this.isDateSelectable(this._currentYear, this._currentMonth, this._currentDay)) {
break;}
isDateOk = true;} while (false);this.updateCurrentDate();if (isDateOk) {
this.updateInputField();} else {
var fld = document.getElementById(this.fieldName);fld.value = '';fld.title = '';}
this.updateDayTable();}
this.updateCurrentDate = function() {
if ((0 == this._currentYear) &&
(0 == this._currentMonth) &&
(0 == this._currentDay) ) {
this._currentDate = "";} else {
this._currentDate = this._currentYear + '-';if (this._currentMonth < 10) this._currentDate += '0';this._currentDate += this._currentMonth + '-';if (this._currentDay < 10) this._currentDate += '0';this._currentDate += this._currentDay;}
}
this.toggleSelector = function() {
var div = document.getElementById(this._objectId + '_div');if (div.style.display == 'none') {
div.style.display = 'block';var inputField = document.getElementById(this.fieldName);if (inputField.offsetLeft > div.offsetLeft) {
div.style.marginLeft = inputField.offsetLeft + 'px';}
var newChar  = '-';if (this._useSpinEditForYear()) {
var objName = this._objectId + '_yObj';eval(objName + '.redraw();');}
this.toggleButton.setStatus(2);this.toggleButton.setTitle(this.txtHideCalendar);} else {
div.style.display = 'none';var newChar  = '+';this.toggleButton.setStatus(1);this.toggleButton.setTitle(this.txtShowCalendar);}
}
this.dayMouseOver = function(day) {
var td = document.getElementById(this._objectId + '_td' + day);if (td.style.backgroundColor.toLowerCase() == this.dayBgColor.toLowerCase()) {
td.style.backgroundColor = this.dayBgColorOver;}
}
this.dayMouseOut = function(day) {
var td = document.getElementById(this._objectId + '_td' + day);if (day != this._currentDay) {
td.style.backgroundColor = this.dayBgColor;}
}
this.isHoliday = function(year, month, day) {
year  = parseInt(year);month = parseInt(month);day   = parseInt(day);var holidays = this.holidays;for (var i=0; i<holidays.length; i++) {
if ((holidays[i][0] != null) && (holidays[i][0] != year))  continue;if ((holidays[i][1] != null) && (holidays[i][1] != month)) continue;if ((holidays[i][2] != null) && (holidays[i][2] != day))   continue;return true;}
return false;}
this.setCursorPos = function(pos) {
if ((document.selection) && (document.selection.createRange)) {
var fld = document.getElementById(this.fieldName);var x = document.selection.createRange();x.move('character', -(fld.value.length - pos));x.select();return this._lastCursorPos;} else {
return false;}
}
this.getCursorPos = function() {
if ((document.selection) && (document.selection.createRange)) {
var text = '!';var fld = document.getElementById(this.fieldName);if (document.activeElement == fld) {
var caretPos = document.selection.createRange().duplicate();caretPos.collapse(false);caretPos.text = "!";var pos = fld.value.indexOf('!');fld.value = fld.value.substring(0, pos) + fld.value.substring(pos +1);caretPos.collapse(false);return pos;}
}
return 0;}
this.loadSkin = function(skinName) {
try {
var oLink = document.createElement("link")
oLink.href = this.jsBaseDir + 'components/datepicker/css/' + skinName + '.css';oLink.rel  = "stylesheet";oLink.type = "text/css";document.body.appendChild(oLink);} catch (e) {
}
switch (skinName) {
case 'win2k':
this.imgDir               = this.jsBaseDir + 'images/';this.toggleButton.imgPath = this.imgDir;this.toggleButton.imgName = 'toggleButton';this.daysNumChars   = 1;return true;case 'osx':
case 'h2ogtk2':
this.imgDir                       = this.jsBaseDir + 'images/' + skinName + '/';this.toggleButton.imgPath         = this.imgDir;this.toggleButton.imgName         = 'toggleButton';this.toggleButton.backgroundColor = 'transparent';this.toggleButton.cssClassDefault     = '';this.toggleButton.cssClassMouseOver   = '';this.toggleButton.cssClassMouseDown   = '';this.daysNumChars   = 1;this.useMonthField  = 1;this.useYearField   = 1;this.useArrows      = true;this.useButtonToday = true;this.dayTableAttributeString    = 'width="100%" border="0" cellspacing="0" cellpadding="2" bordercolor="white"';this.dayHeaderFontColor         = 'black';this.dayHeaderBgColor           = 'white';this.dayFontColor               = 'black';this.dayBgColor                 = 'white';this.dayFontColorActive         = 'white';this.dayBgColorActive           = '#B5B6BD';this.dayTableBgColor            = 'white';this.dayBgColorOver             = '#B5B6BD';return true;}
return false;}
this.openPopup = function() {
var url = this.popupUrl + '?objectId=' + this._id;var w=window.open(url, 'DatePicker', 'toolbar=no,scrollbars=no,resizable=yes,width=180,height=260');w.focus();}
this.isDateSelectable = function(year, month, day) {
if (typeof(this._dateRangeLower_year) == 'undefined') {
this._dateRangeLower_year  = this.dateRangeLower.substr(0, 4);this._dateRangeLower_month = this.dateRangeLower.substr(5, 2);this._dateRangeLower_day   = this.dateRangeLower.substr(8, 2);this._dateRangeUpper_year  = this.dateRangeUpper.substr(0, 4);this._dateRangeUpper_month = this.dateRangeUpper.substr(5, 2);this._dateRangeUpper_day   = this.dateRangeUpper.substr(8, 2);}
var isSelectableDate = false;do {
if (year < this._dateRangeLower_year) break;if ((year == this._dateRangeLower_year) && (month < this._dateRangeLower_month)) break;if ((year == this._dateRangeLower_year) && (month == this._dateRangeLower_month) && (day < this._dateRangeLower_day)) break;if (year > this._dateRangeUpper_year) break;if ((year == this._dateRangeUpper_year) && (month > this._dateRangeUpper_month)) break;if ((year == this._dateRangeUpper_year) && (month == this._dateRangeUpper_month) && (day > this._dateRangeUpper_day)) break;var checkWeekday = false;for (var i=0; i<7; i++) {
if (!this.allowedWeekdays[i]) {
checkWeekday = true;break;}
}
if (checkWeekday) {
var dateObj = new Date(year, month-1, day);var weekday = dateObj.getDay();weekday--; if (weekday < 0) weekday = 6;if (!this.allowedWeekdays[weekday]) break;}
isSelectableDate = true;} while (false);return isSelectableDate;}
this.isValidDate = function(year, month, day) {
return bs_isValidDate(year, month, day);}
this.fixYear = function(year) {
return bs_fixYear(year);}
this.getNumberOfDays = function(year, month) {
return bs_getNumberOfDays(year, month);}
this.dateToIsoDate = function(someDate, allowTime) {
return bs_dateToIsoDate(someDate, allowTime);}
this.isLeapYear = function(year) {
return bs_isLeapYear(year);}
this.dateCalc = function(addDays, addMonths, addYears, reRender) {
if (typeof(reRender) == 'undefined') reRender = true;if (this._currentDay   == 0) return false;if (this._currentMonth == 0) return false;if (this._currentYear  == 0) return false;if (typeof(addDays)   == 'undefined') addDays   = 0;if (typeof(addMonths) == 'undefined') addMonths = 0;if (typeof(addYears)  == 'undefined') addYears  = 0;var tmpDate = new Date(this._currentYear+addYears, this._currentMonth-1+addMonths, this._currentDay+addDays);this.setDateByChunks(tmpDate.getYear(), tmpDate.getMonth()+1, tmpDate.getDate(), reRender);return true;}
this._posToDateCalcHelper = function(pos, negative) {
var ret = new Object();ret.calcDay   = 0;ret.calcMonth = 0;ret.calcYear  = 0;switch (this.getDisplayDateFormat()) {
case 'eu':
if (pos <= 2) {
ret.calcDay   = 1;} else if (pos <= 5) {
ret.calcMonth = 1;} else {
ret.calcYear  = 1;}
break;case 'us':
if (pos <= 2) {
ret.calcMonth = 1;} else if (pos <= 5) {
ret.calcDay   = 1;} else {
ret.calcYear  = 1;}
break;default:
if (pos <= 4) {
ret.calcYear  = 1;} else if (pos <= 7) {
ret.calcMonth = 1;} else {
ret.calcDay   = 1;}
}
if (negative) {
ret.calcDay   = -ret.calcDay;ret.calcMonth = -ret.calcMonth;ret.calcYear  = -ret.calcYear;}
return ret;}
this._convertYearToSpinEdit = function() {
if (this._useSpinEditForYear()) {
var objName = this._objectId + '_yObj';var myNf = new Bs_NumberField(this._objectId + '_year');eval(objName + ' = myNf;');myNf.buttonUp.imgPath   = this.jsBaseDir + 'images/';myNf.buttonDown.imgPath = this.jsBaseDir + 'images/';myNf.minValue = 1800;myNf.maxValue = 2300;myNf.attachEvent('onAfterChange', 'Bs_Objects['+this._id+'].updateByYearBlur();');myNf.draw();}
}
this._useSpinEditForYear = function() {
return (!this.asPopup &&
( (this.useYearField == 3) && ((typeof(Bs_NumberField) != 'undefined')) ) ||
((typeof(this.useYearField) == 'undefined') && this.useSpinEditForYear)
);}
this._rememberCursorPos = function() {
this._lastCursorPos = this.getCursorPos();return this._lastCursorPos;}
this._resetCursorPos = function() {
return this.setCursorPos(this._lastCursorPos)
}
this.getInternalDateFormat = function() {
if (typeof(this._internalDateFormat) != 'undefined') return this._internalDateFormat;if (this.dateFormat != 'iso') {
this._internalDateFormat = this.dateFormat;} else {
this._internalDateFormat = this.internalDateFormat;}
return this._internalDateFormat;}
this.getDisplayDateFormat = function() {
if (typeof(this._displayDateFormat) != 'undefined') return this._displayDateFormat;if (this.dateFormat != 'iso') {
this._displayDateFormat = this.dateFormat;} else {
this._displayDateFormat = this.displayDateFormat;}
return this._displayDateFormat;}
this._constructor();}
