git-svn-id: http://www.observium.org/svn/observer/trunk@2610 61d68cd4-352d-0410-923a-c4978735b2b8
This commit is contained in:
Adam Amstrong 2011-09-29 15:52:24 +00:00
parent 8774bb32a9
commit 79ed35214c
4 changed files with 653 additions and 0 deletions

144
html/js/Bs_Button.class.js Normal file
View File

@ -0,0 +1,144 @@
if (!Bs_Objects) {var Bs_Objects = [];};function Bs_Button() {
this._id;this._objectId;this.id;this.group;this._status = 1;this.inactiveStyle = 3;this._imgPathDefault = '/_bsImages/buttons/';this.imgPath;this.imgName;this.height;this.width;this.backgroundColor;this.title;this.caption;this.action;this.cssClassDefault = 'bsBtnDefault';this.cssClassMouseOver = 'bsBtnMouseOver';this.cssClassMouseDown = 'bsBtnMouseDown';this._buttonBar;this.actualizeFromChildren = 0;this._childrenButtonBar;this._isDragAction;this._attachedEvents = new Array;this._constructor = function() {
this._id = Bs_Objects.length;Bs_Objects[this._id] = this;this._objectId = "Bs_Button_"+this._id;}
this.attachEvent = function(fire, e) {
if (typeof(e) == 'undefined') e = 'on';if (typeof(this._attachedEvents[e]) == 'undefined') this._attachedEvents[e] = new Array;this._attachedEvents[e][this._attachedEvents[e].length] = fire;}
this.attachFireOff = function(param) {
}
this.render = function() {
var isGecko = this._isGecko();var out = new Array;var containerStyle = new Array;out[out.length] = '<div style="display:inline; white-space:nowrap;">';var tagType = 'div';out[out.length] = '<' + tagType;out[out.length] = ' id="' + this._getId() + '"';if (typeof(this.title) != 'undefined') {
out[out.length] = ' title="' + this.title + '"';}
out[out.length] = ' unselectable="on"';captionType = typeof(this.caption);if (captionType != 'undefined') {
containerStyle[containerStyle.length] = 'width:auto';} else {
if (typeof(this.width) != 'undefined') containerStyle[containerStyle.length] = 'width:' + this.width + 'px';if (typeof(this.height) != 'undefined') containerStyle[containerStyle.length] = 'height:' + this.height + 'px';}
if (typeof(this.backgroundColor) != 'undefined') containerStyle[containerStyle.length] = 'background-color:' + this.backgroundColor;switch (this._status) {
case 0:
var filter = this._getInactiveStyleFilter();if (typeof(filter) == 'string') {
containerStyle[containerStyle.length] = 'filter:' + filter;}
case 1:
out[out.length] = ' class="' + this.cssClassDefault + '"';break;case 2:
out[out.length] = ' class="' + this.cssClassMouseDown + '"';break;}
out[out.length] = ' style="' + containerStyle.join(';') + '"';out[out.length] = ' onMouseOver="Bs_Objects['+this._id+'].mouseOver(this);"';out[out.length] = ' onMouseOut="Bs_Objects['+this._id+'].mouseOut(this);"';out[out.length] = ' onMouseDown="Bs_Objects['+this._id+'].mouseDown(this);"';out[out.length] = ' onMouseUp="Bs_Objects['+this._id+'].mouseUp(this);"';out[out.length] = '>';if (typeof(this.imgName) != 'undefined') {
var imgFullPath = '';imgFullPath += this._getImgPath();imgFullPath += this.imgName;if (this.imgName.substr(this.imgName.length -4) != '.gif') imgFullPath += '.gif';out[out.length] = '<img id="' + this._getId() + '_icon" src="' + imgFullPath + '"';if ((typeof(this.height) == 'undefined') || (this.height > 18)) out[out.length] = ' style="vertical-align:top;"';out[out.length] = '>';}
captionType = typeof(this.caption);if (captionType != 'undefined') {
if (captionType == 'string') {
out[out.length] = this.caption;} else {
out[out.length] = this.title;}
if (!isGecko) out[out.length] = '&nbsp;';}
if ((typeof(this._childrenButtonBar) != 'undefined') && (this.numberOfAttachedEvents('on') == 0)) {
this.group = this._objectId + '_pseudoGroup';var imgFullPath = '';if (this.imgPath) imgFullPath += this._getImgPath();imgFullPath += 'small_black_arrow_down.gif';out[out.length] = '&nbsp;<img src="' + imgFullPath + '" style="vertical-align:middle;">&nbsp;';var subBarString = this._childrenButtonBar.render();subBarString = '<div id="' + this._objectId + '_childBar" class="bsBtnMouseOver" style="width:auto; height:auto; display:none; position:absolute; left:50px; top:50px;">' + subBarString + '</div>';out[out.length] = subBarString;}
out[out.length] = '</' + tagType + '>';out[out.length] = '</div>';return out.join('');}
this.drawOut = function() {
document.writeln(this.render());}
this.drawInto = function(elm) {
if (typeof(elm) == 'string') {
elm = document.getElementById(elm);}
if (elm != null) {
var x = this.render(); //x = x.replace(/<nobr>/, '');
//x = x.replace(/<\/nobr>/, '');
x = x.replace(/<nobr>/, '<span style="white-space: nowrap">');
x = x.replace(/<\/nobr>/, '<\/span>');
elm.innerHTML = x;}
}
this.mouseOver = function(div) {
if (this._status == 2) return;if (this._status == 0) return;if (!this._isGecko()) {
div.className = this.cssClassMouseOver;}
this._fireEvent('over');}
this.mouseOut = function(div) {
if (this._status == 2) return;if (this._status == 0) return;if (!this._isGecko()) {
div.className = this.cssClassDefault;}
this._fireEvent('out');}
this.mouseDown = function(div) {
if (this._status == 0) return;this._isDragAction = false;div.className = this.cssClassMouseDown;}
this.mouseUp = function(div) {
if (this._status == 0) return;var doFireOn = true;var doFireOff = false;if (this._isGecko()) {
div.className = this.cssClassDefault;} else {
div.className = this.cssClassMouseOver;}
if (typeof(this.group) != 'undefined') {
if (this._status == 2) {
this._status = 1;doFireOn = false;doFireOff = true;} else {
div.className = this.cssClassMouseDown;this._status = 2;this._deactivateOtherGroupButtons();}
}
if (this._isDragAction) doFireOn = false;if (doFireOn) {
this._fireEvent('on');} else if (doFireOff) {
this._fireEvent('off');}
}
this.dragStart = function(div) {
if (this._status == 0) return false;this._isDragAction = true;div.className = this.cssClassMouseOver;return false;}
this._deactivateOtherGroupButtons = function() {
if (typeof(this._buttonBar) == 'undefined') return;for (var i=0; i<this._buttonBar._buttons.length; i++) {
var btnObj = this._buttonBar._buttons[i][0];if (typeof(btnObj) != 'object') continue;if ((btnObj.group == this.group)) {
if (btnObj._objectId == this._objectId) continue;btnObj._status = 1;btnDiv = document.getElementById(btnObj._getId());btnDiv.className = btnObj.cssClassDefault;}
}
}
this.setStatus = function(status) {
if (this._status == status) return;var oldStatus = this._status;this._status = status;var btnDiv = document.getElementById(this._getId());if (btnDiv != null) {
switch (status) {
case 0:
var filter = this._getInactiveStyleFilter();if (typeof(filter) == 'string') {
btnDiv.style.filter = filter;}
break;case 1:
btnDiv.className = this.cssClassDefault;break;case 2:
if (this._isGecko()) {
btnDiv.className = this.cssClassDefault;} else {
btnDiv.className = this.cssClassMouseDown;}
if (typeof(this.group) != 'undefined') {
this._deactivateOtherGroupButtons();}
break;}
}
if ((oldStatus == 0) && (this.inactiveStyle != 0)) {
btnDiv.style.filter = "";}
}
this.getStatus = function() {
return this._status;}
this.setTitle = function(title) {
var elm = document.getElementById(this._getId());if (elm != null) elm.title = title;this.title = title;}
this.setChildrenButtonBar = function(bar) {
bar._parentButton = this;this._childrenButtonBar = bar;}
this._isGecko = function() {
if (navigator.appName == "Microsoft Internet Explorer") return false; var x = navigator.userAgent.match(/gecko/i);
return (x);return false;}
this._fireEvent = function(e) {
if ((e == 'on') && (typeof(this._buttonBar) != 'undefined') && (typeof(this._buttonBar._parentButton) != 'undefined')) {
this._buttonBar._parentButton._fireEvent('off');if ((this._buttonBar._parentButton.actualizeFromChildren == 1) || (this._buttonBar._parentButton.actualizeFromChildren == 3)) {
var elm = document.getElementById(this._buttonBar._parentButton._getId() + '_icon');var imgFullPath = '';if (this.imgPath) imgFullPath += this.imgPath;imgFullPath += this.imgName;if (this.imgName.substr(this.imgName.length -4) != '.gif') imgFullPath += '.gif';elm.src = imgFullPath;}
}
if (((e == 'on') || (e == 'off')) && (typeof(this._childrenButtonBar) != 'undefined') && (this.numberOfAttachedEvents('on') == 0)) {
var elm = document.getElementById(this._objectId + '_childBar');if (elm != null) {
if (e == 'on') {
this._buttonBar.ignoreEvents = true;var pos = getAbsolutePos(document.getElementById(this._getId()));var plusPixel = (typeof(this.height) != 'undefined') ? parseInt(this.height) : 22;elm.style.top = (pos.y + plusPixel) + 'px';elm.style.left = pos.x + 'px';elm.style.display = 'block';} else {
this._buttonBar.ignoreEvents = false;elm.style.display = 'none';}
}
} else {
if (!this._attachedEvents[e]) return;for (var i=0; i<this._attachedEvents[e].length; i++) {
switch (typeof(this._attachedEvents[e][i])) {
case 'function':
this._attachedEvents[e][i](this);break;case 'string':
//var ev = this._attachedEvents[e][i].replace(/__THIS__/, this);
eval(this._attachedEvents[e][i]);break;default:
}
}
}
}
this.numberOfAttachedEvents = function(e) {
try {
return this._attachedEvents[e].length;} catch (ex) {
return 0;}
}
this._getId = function() {
if (typeof(this.id) != 'undefined') return this.id;return this._objectId + "_container";}
this._getInactiveStyleFilter = function() {
switch (this.inactiveStyle) {
case 0:
return false;break;case 1:
return 'progid:DXImageTransform.Microsoft.BasicImage(grayScale=1)';break;case 2:
return 'progid:DXImageTransform.Microsoft.BasicImage(opacity=.3)';break;default:
return 'progid:DXImageTransform.Microsoft.BasicImage(grayScale=1) progid:DXImageTransform.Microsoft.BasicImage(opacity=.3)';}
}
this._getImgPath = function() {
if (typeof(this.imgPath) != 'undefined') {
return this.imgPath;} else if (typeof(this._buttonBar) != 'undefined') {
return this._buttonBar.imgPath;} else {
return this._imgPathDefault;}
}
this._constructor();}

View File

@ -0,0 +1,195 @@
if (!Bs_Objects) {var Bs_Objects = [];};function bs_dp_inputFieldBlur() {
event.srcElement.bsObj.updateByInputFieldBlur();}
function bs_dp_inputFieldChange() {
event.srcElement.bsObj.updateByInputFieldChange();}
function Bs_DatePicker(fieldName) {
this._objectId;this.fieldName = fieldName;this.jsBaseDir = '/_bsJavascript/';this.openByInit = false;this.monthLongEn = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');this.monthNumChars = 0;this.daysEn = new Array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');this.daysNumChars = 2;this.useSpinEditForYear = (typeof(Bs_NumberField) != 'undefined');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.dayTableClassName;this.dateInputClassName;this.monthSelectClassName;this.yearInputClassName;this.dayHeaderClassName;this.dayClassName;this.dayTableAttributeString = 'width="100%" border="0" cellspacing="0" cellpadding="3"';this.width = 150;this.validateErrorMsgEn = "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.validateErrorMsgDe = "Kein gültiges Datum: '__VALUE__'. Versuchen Sie es erneut oder benutzen Sie den DatePicker. Gültige Formate sind:\nAmerikanisch mm/dd/yyyy (Beispiel 12/31/2003)\nEuropäisch dd.mm.yyyy (Beispiel 31.12.2003)\nISO yyyy-mm-dd (Beispiel 2003-12-31)";this.internalDateFormat = 'iso';this.displayDateFormat = 'iso';this.dateFormat = 'iso';this.dayClassNameByWeekday = new Array();this.dayClassNameByDay = new Array();this.dateRangeLower = '1800-01-01';this.dateRangeUpper = '2100-12-31';this._currentDate = '';this._currentYear = 0;this._currentMonth = 0;this._currentDay = 0;this.toggleButton;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.resetDate = function() {
this._currentYear = 0;this._currentMonth = 0;this._currentDay = 0;this.updateCurrentDate();}
this.setDateByChunks = function(year, month, day) {
var newDate = this.dateToIsoDate(year + '-' + month + '-' + day);if (newDate == false) return false;this._currentYear = year;this._currentMonth = month;this._currentDay = day;this.updateCurrentDate();return true;}
this.setDateByJunks = function(year, month, day) {
return this.setDateByChunks(year, month, day);}
this.setDateByIso = function(isoDate) {
if ("" == isoDate) {
this.resetDate();} else {
var newDate = this.dateToIsoDate(isoDate);if (newDate == false) return false;this._currentYear = parseInt(newDate.substr(0, 4), 10);this._currentMonth = parseInt(newDate.substr(5, 2), 10);this._currentDay = parseInt(newDate.substr(8, 2), 10);this.updateCurrentDate();}
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.fixYear = function(year) {
if (year < 100) {
year = parseInt('19' + year, 10);} else if ((year >= 100) && (year < 110)) {
year = parseInt(200 + '' + year.toString().substr(2, 1), 10);}
return year;}
this.drawInto = function(tagId) {
document.getElementById(tagId).innerHTML = this.render();if (this.useSpinEditForYear) this._convertYearToSpinEdit();return true;}
this.convertField = function(fieldId) {
var origFld = document.getElementById(fieldId);if (origFld == null) return false;origFld.maxLength = 10;if (bs_isEmpty(origFld['name'])) origFld['name'] = fieldId;this.fieldName = origFld['name'];var htmlCode = this.render(true);origFld.insertAdjacentHTML('afterEnd', htmlCode);if (this.useSpinEditForYear) this._convertYearToSpinEdit();origFld.bsObj = this;origFld.attachEvent('onblur', bs_dp_inputFieldBlur);origFld.attachEvent('onkeyup', bs_dp_inputFieldChange);return true;}
this.render = function(noInputField) {
var ret = new Array();if (!noInputField) {
ret[ret.length] = '<input';ret[ret.length] = ' type="text"';ret[ret.length] = ' name="' + this.fieldName + '"';ret[ret.length] = ' id="' + this.fieldName + '"';ret[ret.length] = ' onBlur="Bs_Objects['+this._id+'].updateByInputFieldBlur();"';ret[ret.length] = ' onKeyUp="Bs_Objects['+this._id+'].updateByInputFieldChange();"';ret[ret.length] = ' size="10"';ret[ret.length] = ' maxlength="10"';ret[ret.length] = ' style="width:' + (this.width -22) + 'px;"';if (typeof(this.dateInputClassName) != 'undefined') {
ret[ret.length] = ' class="' + this.dateInputClassName + '"';}
ret[ret.length] = ' title="' + this.getCurrentDateReadable() + '"';ret[ret.length] = ' value="' + this.getCurrentDateFormatted() + '">';}
this.toggleButton.title = (this.openByInit) ? 'Hide Calendar' : 'Show Calendar';if (this.openByInit) this.toggleButton.setStatus(2);var btnHtml = this.toggleButton.render();ret[ret.length] = btnHtml;ret[ret.length] = '<div id="' + this._objectId + '_div"';ret[ret.length] = ' style="width:' + this.width + 'px; border:1px solid black;';if (!this.openByInit) {
ret[ret.length] = ' display:none;';}
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] = '<nobr>';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();"';if (typeof(this.monthSelectClassName) != 'undefined') {
ret[ret.length] = ' class="' + this.monthSelectClassName + '"';} else {
ret[ret.length] = ' style="width:94px;"';}
ret[ret.length] = '>';var i = 1;for (var m=0; m<this.monthLongEn.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.monthLongEn[m].substr(0, this.monthNumChars);} else {
ret[ret.length] = this.monthLongEn[m];}
ret[ret.length] = '</option>';i++;}
ret[ret.length] = '</select>';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();"';if (typeof(this.yearInputClassName) != 'undefined') {
ret[ret.length] = ' class="' + this.yearInputClassName + '"';} else {
ret[ret.length] = ' style="width:42px;"';}
ret[ret.length] = '>';ret[ret.length] = '</nobr><br>';ret[ret.length] = '<div id="' + this._objectId + '_dayDiv">';ret[ret.length] = this.renderDayTable(this._currentYear, this._currentMonth, this._currentDay);ret[ret.length] = '</div>';return ret.join('');}
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 + '"';if (typeof(this.dayTableClassName) != 'undefined') {
ret[ret.length] = ' class="' + this.dayTableClassName + '"';}
ret[ret.length] = '>';if (currentYear >= 1970) {
ret[ret.length] = '<tr>';for (var d=0; d<this.daysEn.length; d++) {
ret[ret.length] = '<td width="14%" bgcolor="' + this.dayHeaderBgColor + '" align="right">';ret[ret.length] = '<span';ret[ret.length] = ' title="' + this.daysEn[d] + '"';if (typeof(this.dayHeaderClassName) != 'undefined') {
ret[ret.length] = ' class="' + this.dayHeaderClassName + '"';ret[ret.length] = ' style="color:' + this.dayHeaderFontColor + '; cursor:default;">';} else {
ret[ret.length] = ' style="color:' + this.dayHeaderFontColor + '; cursor:default; font-family:arial; font-size:12px;">';}
if (this.daysNumChars > 0) {
ret[ret.length] = this.daysEn[d].substr(0, this.daysNumChars);} else {
ret[ret.length] = this.daysEn[d];}
ret[ret.length] = '</span>';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++) {
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"';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 + ');"';if (typeof(this.dayClassName) != 'undefined') {
ret[ret.length] = ' class="' + this.dayClassName + '"';ret[ret.length] = ' style="cursor:hand; cursor:pointer;';} else {
ret[ret.length] = ' style="cursor:hand; cursor:pointer; font-family:arial; font-size:11px;';}
if (day == currentDay) {
ret[ret.length] = ' color:' + this.dayFontColorActive + '; background-color:' + this.dayBgColorActive + ';';} else {
ret[ret.length] = ' color:' + this.dayFontColor + '; background-color:' + this.dayBgColor + ';';}
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.daysEn[weekDay -1] + ', '
ret += this.monthLongEn[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;return ret;}
this.getCurrentDateFormatted = function() {
if (this._currentDay == 0) return '';if (this._currentMonth == 0) return '';if (this._currentYear == 0) return '';switch (this.dateFormat) {
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;return ret;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;return ret;break;default:
return this._currentDate;}
}
this.updateInputField = function() {
var fld = document.getElementById(this.fieldName);if (fld) {
fld.value = this.getCurrentDateFormatted();fld.title = this.getCurrentDateReadable();}
}
this.updateByInputFieldChange = function() {
switch (window.event.keyCode) {
case 16:
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:
return;}
var userVal = document.getElementById(this.fieldName).value;if ((userVal.length == 10) && (this.dateToIsoDate(userVal) != false)) {
this.updateByInputFieldBlur();}
}
this.updateByInputFieldBlur = function() {
var fld = document.getElementById(this.fieldName);var userVal = fld.value;if (userVal == this._currentDate) return;if (userVal.length > 0) {
newVal = this.dateToIsoDate(userVal);if (newVal == false) {
fld.value = ''; alert(this.validateErrorMsgEn.replace(/__VALUE__/, userVal));
return;}
this._currentDate = newVal, 10;this._currentYear = parseInt(newVal.substr(0, 4), 10);this._currentMonth = parseInt(newVal.substr(5, 2), 10);this._currentDay = parseInt(newVal.substr(8, 2), 10);this.updateInputField();} else {
this.seedInternalWithCurrentDate();}
var div = document.getElementById(this._objectId + '_div');div.innerHTML = this.renderDatePicker();if (this.useSpinEditForYear) this._convertYearToSpinEdit();}
this.dateToIsoDate = function(someDate) {
if (someDate.length < 6) return false;if (someDate.length > 10) return false;if (someDate.indexOf('/') >= 0) {
var chunks = someDate.split('/');if (chunks.length != 3) return false;var day = parseInt(chunks[1], 10);var month = parseInt(chunks[0], 10);var year = parseInt(chunks[2], 10);} else if (someDate.indexOf('-') >= 0) {
var chunks = someDate.split('-');if (chunks.length != 3) return false;var day = parseInt(chunks[2], 10);var month = parseInt(chunks[1], 10);var year = parseInt(chunks[0], 10);} else if (someDate.indexOf('.') >= 0) {
var chunks = someDate.split('.');if (chunks.length != 3) return false;var day = parseInt(chunks[0], 10);var month = parseInt(chunks[1], 10);var year = parseInt(chunks[2], 10);} else {
return false;}
if (year < 100) {
if (year < 30) {
year += 2000;} else {
year += 1900;}
}
if (year >= 1970) {
var tDate = new Date(year, month -1, day);if (day != tDate.getDate()) return false;if (month != (tDate.getMonth() +1)) return false;if (year != this.fixYear(tDate.getYear())) return false;} else {
if ((day < 1) || (day > 31)) return false;if ((month < 1) || (month > 12)) return false;if ((year < 1000) || (year > 3000)) return false;}
if (day > 28) {
if (this.getNumberOfDays(year, month) < day) return false;}
var ret = '';ret += year + '-';if (month < 10) ret += '0';ret += month + '-';if (day < 10) ret += '0';ret += day;return ret;}
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();}
this.updateByMonth = function() {
var tmp = new Bs_FormFieldSelect();var monthSelect = document.getElementById(this._objectId + '_month');tmp.init(monthSelect);this._currentMonth = parseInt(monthSelect.getValue(), 10);this.updateCurrentDate();this.updateInputField();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);this._currentYear = tmpYear;this.updateCurrentDate();this.updateInputField();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.setTitle('Hide Calendar');} else {
div.style.display = 'none';var newChar = '+';this.toggleButton.setTitle('Show Calendar');}
}
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 (td.style.backgroundColor.toLowerCase() == this.dayBgColorOver.toLowerCase()) {
td.style.backgroundColor = this.dayBgColor;}
}
this.isLeapYear = function(year) {
return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));}
this.getNumberOfDays = function(year, month) {
switch (month) {
case 2:
if (this.isLeapYear(year)) return 29;return 28;break;case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;break;default:
return 30;}
}
this._convertYearToSpinEdit = function() {
var objName = this._objectId + '_yObj';var myNf = new Bs_NumberField(this._objectId + '_year');eval(objName + ' = myNf;');myNf.buttonUp.imgPath = this.jsBaseDir + 'components/numberfield/img/';myNf.buttonDown.imgPath = this.jsBaseDir + 'components/numberfield/img/';myNf.minValue = 1800;myNf.maxValue = 2300;myNf.attachEvent('onAfterChange', 'Bs_Objects['+this._id+'].updateByYearBlur();');myNf.draw();}
this._constructor();}

View File

@ -0,0 +1,102 @@
function Bs_FormFieldSelect() {
this.hasValue = function(val) {
val = val + '';for (var i=0; i<this.length; i++) {
var t = this.options[i].value + '';if (t == val) return true;}
return false;}
this.getValue = function() {
var selIndex = this.selectedIndex;if ((selIndex != 'undefined') && (selIndex > -1)) {
if (typeof(this.options[selIndex].value) != 'undefined') return this.options[selIndex].value;if (typeof(this.options[selIndex].text) != 'undefined') return this.options[selIndex].text;}
return 'undefined';}
this.getValueOrText = function(selIndex) {
if (typeof(selIndex) == 'undefined') selIndex = this.selectedIndex;if ((selIndex != 'undefined') && (selIndex > -1)) {
if (typeof(this.options[selIndex].value) != 'undefined') {
if (typeof(this.options[selIndex].outerHTML) == 'string') {
if (this.options[selIndex].outerHTML.toLowerCase().indexOf('value=') != -1) {
return this.options[selIndex].value;}
} else {
if (this.options[selIndex].value != '') return this.options[selIndex].value;}
}
if (typeof(this.options[selIndex].text) != 'undefined') return this.options[selIndex].text;}
return false;}
this.getTextForValue = function(value) {
for (var i=0; i<this.options.length; i++) {
if (this.options[i].value == value) {
return this.options[i].text;}
}
return false;}
this.setTo = function(compare, type) {
if (typeof(type) == 'undefined') type = 'text';for (var i=0; i<this.length; i++) {
if (this.options[i][type] == compare) {
this.selectedIndex = i;return true;}
}
return false;}
this.moveSelectedTo = function(toField, keepSelected) {
if (typeof(toField) == 'string') toField = document.getElementById(toField);if (bs_isNull(toField)) return false;var unsetArray = new Array();for (var i=0; i<this.length; i++) {
if (this.options[i].selected) {
var newOpt = new Option(this.options[i].text, this.options[i].value, false, false);toField.options[toField.length] = newOpt;unsetArray[unsetArray.length] = i;}
}
unsetArray.reverse();for (var i=0; i<unsetArray.length; i++) {
this.options[unsetArray[i]] = null;}
return true;}
this.moveAllTo = function(toField) {
if (typeof(toField) == 'string') toField = document.getElementById(toField);if (bs_isNull(toField)) return false;var unsetArray = new Array();for (var i=0; i<this.length; i++) {
var newOpt = new Option(this.options[i].text, this.options[i].value, false, false);toField.options[toField.length] = newOpt;unsetArray[unsetArray.length] = i;}
unsetArray.reverse();for (var i=0; i<unsetArray.length; i++) {
this.options[unsetArray[i]] = null;}
return true;}
this.moveTo = function(toField, optionValue) {
if (typeof(toField) == 'string') toField = document.getElementById(toField);if (bs_isNull(toField)) return false;var unsetArray = new Array();for (var i=0; i<this.options.length; i++) {
if (this.options[i].value == optionValue) {
var newOpt = new Option(this.options[i].text, this.options[i].value, false, false);toField.options[toField.length] = newOpt;unsetArray[unsetArray.length] = i;break;}
}
unsetArray.reverse();for (var i=0; i<unsetArray.length; i++) {
this.options[unsetArray[i]] = null;}
return true;}
this.moveHashTo = function(toField, hash) {
if (typeof(toField) == 'string') toField = document.getElementById(toField);if (bs_isNull(toField)) return false;var unsetArray = new Array();for (var i=0; i<this.length; i++) {
if (typeof(hash[this.options[i].value]) != 'undefined') {
var newOpt = new Option(this.options[i].text, this.options[i].value, false, false);toField.options[toField.length] = newOpt;unsetArray[unsetArray.length] = i;}
}
unsetArray.reverse();for (var i=0; i<unsetArray.length; i++) {
this.options[unsetArray[i]] = null;}
return true;}
this.getAllKeys = function() {
var ret = new Array();for (var i=0; i<this.options.length; i++) {
ret[i] = this.options[i].value;}
return ret;}
this.getAllOptions = function() {
var ret = new Array();for (var i=0; i<this.options.length; i++) {
var key = this.getValueOrText(i);ret[key] = this.options[i].text;}
return ret;}
this.prune = function() {
this.options.length = 0;}
this.addElementsByHash = function(dataHash) {
var i = 0;for (var key in dataHash) {
var newOpt = new Option(dataHash[key], key, false, false);this.options[this.options.length] = newOpt;i++;}
return i;}
this.sortByText = function(desc, natural) {
var sortArr = new Array;for (var i=0; i<this.length; i++) {
if (this.options[i].value == 'undefined') this.options[i].value = this.options[i].text;sortArr[i] = this.options[i].text + '__BS_SORT__' + this.options[i].value;}
sortArr.sort();if (desc) sortArr.reverse();this.prune();var key = '';var txt = '';for (var i=0; i<sortArr.length; i++) {
var pos = sortArr[i].lastIndexOf('__BS_SORT__');txt = sortArr[i].substr(0, pos);key = sortArr[i].substr(pos + '__BS_SORT__'.length);var newOpt = new Option(txt, key, false, false);this.options[this.options.length] = newOpt;}
}
this.sortByKey = function() {
}
this.setText = function(value, text) {
for (var i=0; i<this.length; i++) {
if (this.options[i].value == value) {
this.options[i].text = text
return true;}
}
return false;}
this.removeElement = function(value) {
for (var i=0; i<this.length; i++) {
if (this.options[i].value == value) {
this.options[i] = null;return true;}
}
return false;}
this.init = function(formField) {
if (formField == null) return;for (var name in this) {
if (name == 'init') continue;formField[name] = this[name];}
}
}

212
html/js/Bs_Misc.lib.js Normal file
View File

@ -0,0 +1,212 @@
var ie = document.all != null;var moz = !ie && document.getElementById != null && document.layers == null;function bs_isNull(theVar) {
if (typeof(theVar) == 'undefined') return true;if (theVar == null) return true;return false;}
function bs_isObject(theVar) {
ret = false;if (typeof(theVar) == 'object') {
ret = !bs_isNull(theVar);}
return ret;}
function bs_isEmpty(theVar) {
if (bs_isNull(theVar)) return true;if (theVar == '') return true;return false;}
function bs_typeOf(theVar) {
ret = 'undefined';switch (typeof(theVar)) {
case 'boolean': ret = 'boolean'; break;case 'number': ret = 'number'; break;case 'string': ret = 'string'; break;case 'function': ret = 'function'; break;case 'object':
if (bs_isNull(theVar)) {
ret = 'null';break;}
if (theVar.concat && theVar.join && theVar.sort && theVar.pop) {
ret = 'array';break;}
break;case 'undefined':
default:
ret = 'undefined';}
return ret;}
function bs_arrayMerge(obj1, obj2) {
if (!bs_isObject(obj1) || !bs_isObject(obj2)) return false;for (var key in obj2) {obj1[key] = obj2[key];}
return obj1;}
function bs_arrayFlip(aArray) {
var aHash = new Object();type = bs_typeOf(aArray);if (type == 'array') {
for (var i=0; i<aArray.length; i++) {
aHash[aArray[i]] = true;}
} else if (type == 'string') {
if (aArray != '') {
aHash[aArray] = true;}
}
return aHash;}
function queryStringToHash(queryString) {
if (typeof(queryString) == 'undefined') {
var queryString = window.location.search;}
var ret = new Array;if (bs_isEmpty(queryString)) return ret;queryString = queryString.substr(1);if (bs_isEmpty(queryString)) return ret;var junks = queryString.split('&');for (var i=0; i<junks.length; i++) {
var x = junks[i].split('=');if (x.length == 2) {
ret[x[0]] = x[1];} else {
ret[x[0]] = '';}
}
return ret;}
function dump(theVar, doReturn, showFunctions, _out, _indent, _numCall) {
if (!_indent) {
_indent = ' ';_bsDumpOverallNumCall = 1;} else {
_indent += ' ';_bsDumpOverallNumCall++;}
if (_bsDumpOverallNumCall < 8) {
if (_out) {
var isInternal = true;} else {
_out = '';_numCall = 1;}
var goOn = true;if (_numCall > 10) {
goOn = false;if (!doReturn) {
goOn = confirm("There have been 10 recursive calls so far. Maybe you have an endless loop. Do you want to continue?");}
if (!goOn) {
_out += _indent + "error/warning: nesting levels too deep (>10 times)!\n";} else {
_numCall = 0;}
}
if (goOn) {
switch (typeof(theVar)) {
case 'object':
for (var key in theVar) {
switch (typeof(theVar[key])) {
case 'function':
if (typeof(showFunctions) == 'boolean') {
if (showFunctions) {
_out += _indent + 'function "' + key + '" => ' + theVar[key] + "\n";} else {
_out += _indent + 'function "' + key + "\n";}
} else {
if (showFunctions == 2) {
_out += _indent + 'function "' + key + '" => ' + theVar[key] + "\n";} else if (showFunctions == 1) {
_out += _indent + 'function "' + key + "\n";} else {
}
}
break;case 'undefined':
break;case 'object':
_out += _indent + key;if (theVar[key] instanceof Array) {
_out += ' (Array) => \n';} else if (theVar[key] instanceof Date) {
_out += ' (Date) => '+ theVar[key] +'\n';} else{
_out += ' (Object) => \n';}
_out = dump(theVar[key], doReturn, showFunctions, _out, _indent + " ", _numCall+1);break;case 'number':
if (theVar instanceof Date) alert('date');default:
_out += _indent + typeof(theVar[key]) + ' "' + key + '" => ' + theVar[key] + "\n";}
}
break;default:
_out += _indent + typeof(theVar) + ' => ' + theVar + "\n";}
}
}
if (isInternal || doReturn) {
return _out;} else {
alert(_out);return;}
}
function Position(x, y) {
this.x = x;this.y = y;};function getAbsolutePos(el, stopIfAbsolute) {
if (bs_isNull(el)) {
var res = new Position(0, 0);return res;}
var res = new Position(el.offsetLeft, el.offsetTop);if (el.offsetParent) {
if ((stopIfAbsolute != true ) || ((el.offsetParent.currentStyle.position != 'absolute') && (el.offsetParent.currentStyle.position != 'relative') && (el.offsetParent.currentStyle.overflow != 'auto') && (el.offsetParent.currentStyle.overflow != 'scroll'))) {
var tmp = getAbsolutePos(el.offsetParent, stopIfAbsolute);res.x += tmp.x;res.y += tmp.y;}
}
return res;};if ("undefined" != typeof(HTMLElement)) {
if ("undefined" == typeof(HTMLElement.insertAdjacentElement)) {
HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode) {
switch(where){
case 'beforeBegin':
this.parentNode.insertBefore(parsedNode,this)
break;case 'afterBegin':
this.insertBefore(parsedNode,this.firstChild);break;case 'beforeEnd':
this.appendChild(parsedNode);break;case 'afterEnd':
if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);else this.parentNode.appendChild(parsedNode);break;}
}
}
}
if (moz) {
extendEventObject();emulateAttachEvent();emulateEventHandlers(["click", "dblclick", "mouseover", "mouseout",
"mousedown", "mouseup", "mousemove",
"keydown", "keypress", "keyup"]);emulateCurrentStyle(["left", "right", "top", "bottom", "width", "height"]);emulateHTMLModel();Event.LEFT = 1;Event.MIDDLE = 2;Event.RIGHT = 3;}
else {
Event = {};Event.LEFT = 1;Event.MIDDLE = 4;Event.RIGHT = 2;}
function extendEventObject() {
Event.prototype.__defineSetter__("returnValue", function (b) {
if (!b) this.preventDefault();return b;});Event.prototype.__defineSetter__("cancelBubble", function (b) {
if (b) this.stopPropagation();return b;});Event.prototype.__defineGetter__("srcElement", function () {
var node = this.target;while (node.nodeType != 1) node = node.parentNode;return node;});Event.prototype.__defineGetter__("fromElement", function () {
var node;if (this.type == "mouseover")
node = this.relatedTarget;else if (this.type == "mouseout")
node = this.target;if (!node) return;while (node.nodeType != 1) node = node.parentNode;return node;});Event.prototype.__defineGetter__("toElement", function () {
var node;if (this.type == "mouseout")
node = this.relatedTarget;else if (this.type == "mouseover")
node = this.target;if (!node) return;while (node.nodeType != 1) node = node.parentNode;return node;});Event.prototype.__defineGetter__("offsetX", function () {
return this.layerX;});Event.prototype.__defineGetter__("offsetY", function () {
return this.layerY;});}
function emulateAttachEvent() {
HTMLDocument.prototype.attachEvent =
HTMLElement.prototype.attachEvent = function (sType, fHandler) {
var shortTypeName = sType.replace(/on/, "");
fHandler._ieEmuEventHandler = function (e) {
window.event = e;return fHandler();};this.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, false);};HTMLDocument.prototype.detachEvent =
HTMLElement.prototype.detachEvent = function (sType, fHandler) {
var shortTypeName = sType.replace(/on/, "");
if (typeof fHandler._ieEmuEventHandler == "function")
this.removeEventListener(shortTypeName, fHandler._ieEmuEventHandler, false);else
this.removeEventListener(shortTypeName, fHandler, true);};}
function emulateEventHandlers(eventNames) {
for (var i = 0; i < eventNames.length; i++) {
document.addEventListener(eventNames[i], function (e) {
window.event = e;}, true);}
}
function emulateAllModel() {
var allGetter = function () {
var a = this.getElementsByTagName("*");var node = this;a.tags = function (sTagName) {
return node.getElementsByTagName(sTagName);};return a;};HTMLDocument.prototype.__defineGetter__("all", allGetter);HTMLElement.prototype.__defineGetter__("all", allGetter);}
function extendElementModel() {
HTMLElement.prototype.__defineGetter__("parentElement", function () {
if (this.parentNode == this.ownerDocument) return null;return this.parentNode;});HTMLElement.prototype.__defineGetter__("children", function () {
var tmp = [];var j = 0;var n;for (var i = 0; i < this.childNodes.length; i++) {
n = this.childNodes[i];if (n.nodeType == 1) {
tmp[j++] = n;if (n.name) {
if (!tmp[n.name])
tmp[n.name] = [];tmp[n.name][tmp[n.name].length] = n;}
if (n.id)
tmp[n.id] = n
}
}
return tmp;});HTMLElement.prototype.contains = function (oEl) {
if (oEl == this) return true;if (oEl == null) return false;return this.contains(oEl.parentNode);};}
function emulateCurrentStyle(properties) {
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
var cs = {};var el = this;for (var i = 0; i < properties.length; i++) {
cs.__defineGetter__(properties[i], encapsulateObjects(el, properties[i]));}
return cs;});}
function encapsulateObjects(el, sProperty) {
return function () {
return document.defaultView.getComputedStyle(el, null).getPropertyValue(sProperty);};}
function emulateHTMLModel() {
function convertTextToHTML(s) {
s = s.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g, "<BR>");
while (/\s\s/.test(s))
s = s.replace(/\s\s/, "&nbsp; ");
return s.replace(/\s/g, " ");
}
HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
var df;var r = this.ownerDocument.createRange();switch (String(sWhere).toLowerCase()) {
case "beforebegin":
r.setStartBefore(this);df = r.createContextualFragment(sHTML);this.parentNode.insertBefore(df, this);break;case "afterbegin":
r.selectNodeContents(this);r.collapse(true);df = r.createContextualFragment(sHTML);this.insertBefore(df, this.firstChild);break;case "beforeend":
r.selectNodeContents(this);r.collapse(false);df = r.createContextualFragment(sHTML);this.appendChild(df);break;case "afterend":
r.setStartAfter(this);df = r.createContextualFragment(sHTML);this.parentNode.insertBefore(df, this.nextSibling);break;}
};HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
var r = this.ownerDocument.createRange();r.setStartBefore(this);var df = r.createContextualFragment(sHTML);this.parentNode.replaceChild(df, this);return sHTML;});HTMLElement.prototype.__defineGetter__("canHaveChildren", function () {
switch (this.tagName) {
case "AREA":
case "BASE":
case "BASEFONT":
case "COL":
case "FRAME":
case "HR":
case "IMG":
case "BR":
case "INPUT":
case "ISINDEX":
case "LINK":
case "META":
case "PARAM":
return false;}
return true;});HTMLElement.prototype.__defineGetter__("outerHTML", function () {
var attr, attrs = this.attributes;var str = "<" + this.tagName;for (var i = 0; i < attrs.length; i++) {
attr = attrs[i];if (attr.specified)
str += " " + attr.name + '="' + attr.value + '"';}
if (!this.canHaveChildren)
return str + ">";return str + ">" + this.innerHTML + "</" + this.tagName + ">";});HTMLElement.prototype.__defineSetter__("innerText", function (sText) {
this.innerHTML = convertTextToHTML(sText);return sText;});var tmpGet;HTMLElement.prototype.__defineGetter__("innerText", tmpGet = function () {
var r = this.ownerDocument.createRange();r.selectNodeContents(this);return r.toString();});HTMLElement.prototype.__defineSetter__("outerText", function (sText) {
this.outerHTML = convertTextToHTML(sText);return sText;});HTMLElement.prototype.__defineGetter__("outerText", tmpGet);HTMLElement.prototype.insertAdjacentText = function (sWhere, sText) {
this.insertAdjacentHTML(sWhere, convertTextToHTML(sText));};}