]> err.no Git - scalable-opengroupware.org/blobdiff - UI/WebServerResources/JavascriptAPIExtensions.js
git-svn-id: http://svn.opengroupware.org/SOGo/inverse/trunk@1163 d1b88da0-ebda-0310...
[scalable-opengroupware.org] / UI / WebServerResources / JavascriptAPIExtensions.js
index 088a7f10af05981268be87f3fdc6991b7650dda4..2e39fe69a8b675b71f8e87ae37708204e6911bf0 100644 (file)
@@ -2,6 +2,15 @@ String.prototype.trim = function() {
   return this.replace(/(^\s+|\s+$)/g, '');
 }
 
+String.prototype.formatted = function() {
+  var newString = this;
+
+  for (var i = 0; i < arguments.length; i++)
+    newString = newString.replace("%{" + i + "}", arguments[i], "g");
+
+  return newString;
+}
+
 String.prototype.repeat = function(count) {
    var newString = "";
    for (var i = 0; i < count; i++) {
@@ -33,7 +42,15 @@ String.prototype.asDate = function () {
     newDate = new Date(date[2], date[1] - 1, date[0]);
   else {
     date = this.split("-");
-    newDate = new Date(date[0], date[1] - 1, date[2]);
+    if (date.length == 3)
+       newDate = new Date(date[0], date[1] - 1, date[2]);
+    else {
+       if (this.length == 8) {
+         newDate = new Date(this.substring(0, 4),
+                            this.substring(4, 6) - 1,
+                            this.substring(6, 8));
+       }
+    }
   }
 
   return newDate;  
@@ -64,8 +81,15 @@ Date.prototype.sogoDayName = function() {
 
 Date.prototype.daysUpTo = function(otherDate) {
   var days = new Array();
-  var day1 = this.getTime();
-  var day2 = otherDate.getTime();
+
+  var day1Date = new Date();
+  day1Date.setTime(this.getTime());
+  day1Date.setHours(0, 0, 0, 0);
+  var day2Date = new Date();
+  day2Date.setTime(otherDate.getTime());
+  day2Date.setHours(23, 59, 59, 999);
+  var day1 = day1Date.getTime();
+  var day2 = day2Date.getTime();
 
   var nbrDays = Math.floor((day2 - day1) / 86400000) + 1;
   for (var i = 0; i < nbrDays; i++) {
@@ -77,18 +101,56 @@ Date.prototype.daysUpTo = function(otherDate) {
   return days;
 }
 
+Date.prototype.getDayString = function() {
+   var newString = this.getYear();
+   if (newString < 1000) newString += 1900;
+   var month = '' + (this.getMonth() + 1);
+   if (month.length == 1)
+     month = '0' + month;
+   newString += month;
+   var day = '' + this.getDate();
+   if (day.length == 1)
+     day = '0' + day;
+   newString += day;
+
+   return newString;
+}
+
+Date.prototype.getHourString = function() {
+   var newString = this.getHours() + '00';
+   if (newString.length == 3)
+     newString = '0' + newString;
+
+   return newString;
+}
+
+Date.prototype.getDisplayHoursString = function() {
+   var hoursString = "" + this.getHours();
+   if (hoursString.length == 1)
+     hoursString = '0' + hoursString;
+
+   var minutesString = "" + this.getMinutes();
+   if (minutesString.length == 1)
+     minutesString = '0' + minutesString;
+
+   return hoursString + ":" + minutesString;
+}
+
 Date.prototype.stringWithSeparator = function(separator) {
   var month = '' + (this.getMonth() + 1);
   var day = '' + this.getDate();
+  var year = this.getYear();
+  if (year < 1000)
+    year = '' + (year + 1900);
   if (month.length == 1)
     month = '0' + month;
   if (day.length == 1)
     day = '0' + day;
 
   if (separator == '-')
-    str = (this.getYear() + 1900) + '-' + month + '-' + day;
+    str = year + '-' + month + '-' + day;
   else
-    str = day + '/' + month + '/' + (this.getYear() + 1900);
+    str = day + '/' + month + '/' + year;
 
   return str;
 }
@@ -96,3 +158,188 @@ Date.prototype.stringWithSeparator = function(separator) {
 Date.prototype.sogoFreeBusyStringWithSeparator = function(separator) {
   return this.sogoDayName() + ", " + this.stringWithSeparator(separator);
 }
+
+Date.prototype.addDays = function(nbrDays) {
+   var milliSeconds = this.getTime();
+   milliSeconds += 86400000 * nbrDays;
+   this.setTime(milliSeconds);
+}
+
+Date.prototype.earlierDate = function(otherDate) {
+   var workDate = new Date();
+   workDate.setTime(otherDate.getTime());
+   workDate.setHours(0);
+   return ((this.getTime() < workDate.getTime())
+          ? this : otherDate);
+}
+
+Date.prototype.laterDate = function(otherDate) {
+   var workDate = new Date();
+   workDate.setTime(otherDate.getTime());
+   workDate.setHours(23);
+   workDate.setMinutes(59);
+   workDate.setSeconds(59);
+   workDate.setMilliseconds(999);
+   return ((this.getTime() < workDate.getTime())
+          ? otherDate : this);
+}
+
+Date.prototype.beginOfWeek = function() {
+   var beginNumber;
+   var dayNumber = this.getDay();
+   if (weekStartIsMonday) {
+     beginNumber = 1;
+     if (dayNumber == 0)
+       dayNumber = 7;
+   }
+   else
+     beginNumber = 0;
+
+   var beginOfWeek = new Date();
+   beginOfWeek.setTime(this.getTime());
+   beginOfWeek.addDays(beginNumber - dayNumber);
+   beginOfWeek.setHours(0);
+   beginOfWeek.setMinutes(0);
+   beginOfWeek.setSeconds(0);
+   beginOfWeek.setMilliseconds(0);
+
+   return beginOfWeek;
+}
+
+Date.prototype.endOfWeek = function() {
+   var beginNumber;
+   var dayNumber = this.getDay();
+   if (weekStartIsMonday) {
+      beginNumber = 1;
+      if (dayNumber == 0)
+        dayNumber = 7;
+   }
+   else
+      beginNumber = 0;
+
+   var endOfWeek = new Date();
+   endOfWeek.setTime(this.getTime());
+   endOfWeek.addDays(6 + beginNumber - dayNumber);
+
+   endOfWeek.setHours(23);
+   endOfWeek.setMinutes(59);
+   endOfWeek.setSeconds(59);
+   endOfWeek.setMilliseconds(999);
+
+   return endOfWeek;
+}
+
+String.prototype._base64_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+String.prototype.base64encode = function () {
+  var output = "";
+  var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+  var i = 0;
+  var input = this._base64_utf8_encode();
+
+  while (i < input.length) {
+    chr1 = input.charCodeAt(i++);
+    chr2 = input.charCodeAt(i++);
+    chr3 = input.charCodeAt(i++);
+    enc1 = chr1 >> 2;
+    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+    enc4 = chr3 & 63;
+    if (isNaN(chr2)) {
+      enc3 = enc4 = 64;
+    } else if (isNaN(chr3)) {
+      enc4 = 64;
+    }
+    output = output +
+      this._base64_keyStr.charAt(enc1) + this._base64_keyStr.charAt(enc2) +
+      this._base64_keyStr.charAt(enc3) + this._base64_keyStr.charAt(enc4);
+  }
+  return output;
+};
+
+String.prototype.base64decode = function() { 
+  var output = "";
+  var chr1, chr2, chr3;
+  var enc1, enc2, enc3, enc4;
+  var i = 0;
+  var input = this.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+  while (i < input.length) {
+    enc1 = this._base64_keyStr.indexOf(input.charAt(i++));
+    enc2 = this._base64_keyStr.indexOf(input.charAt(i++));
+    enc3 = this._base64_keyStr.indexOf(input.charAt(i++));
+    enc4 = this._base64_keyStr.indexOf(input.charAt(i++));
+
+    chr1 = (enc1 << 2) | (enc2 >> 4);
+    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+    chr3 = ((enc3 & 3) << 6) | enc4;
+    output = output + String.fromCharCode(chr1);
+    if (enc3 != 64) {
+      output = output + String.fromCharCode(chr2);
+    }
+    if (enc4 != 64) {
+      output = output + String.fromCharCode(chr3);
+    }
+  }
+
+  return output._base64_utf8_decode();
+};
+
+String.prototype._base64_utf8_encode = function() {
+  var string = this.replace(/\r\n/g,"\n");
+  var utftext = "";
+  for (var n = 0; n < this.length; n++) {
+    var c = this.charCodeAt(n);
+
+    if (c < 128) {
+      utftext += String.fromCharCode(c);
+    }
+    else if((c > 127) && (c < 2048)) {
+      utftext += String.fromCharCode((c >> 6) | 192);
+      utftext += String.fromCharCode((c & 63) | 128);
+    }
+    else {
+      utftext += String.fromCharCode((c >> 12) | 224);
+      utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+      utftext += String.fromCharCode((c & 63) | 128);
+    }
+  }
+  return utftext;
+};
+
+String.prototype._base64_utf8_decode = function() {
+  var string = "";
+  var i = 0;
+  var c = c1 = c2 = 0;
+
+  while (i < string.length) {
+    c = utftext.charCodeAt(i);
+    if (c < 128) {
+      string += String.fromCharCode(c);
+      i++;
+    }
+    else if((c > 191) && (c < 224)) {
+      c2 = this.charCodeAt(i+1);
+      string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+      i += 2;
+    }
+    else {
+      c2 = this.charCodeAt(i+1);
+      c3 = this.charCodeAt(i+2);
+      string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+      i += 3;
+    }
+  }
+  return string;
+};