// Extensions to base classes V1.74 (c) 2008 Oesterreichisches Verkehrsbuero AG
var __DateDelimiter=".";
var __TimeDelimiter=":";
var __Month3LC=new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
function _IsInteger() {
var reg=/^[\+\-]?[0-9]+$/i;
return reg.test(this)}
function _IsMoney() {
var reg=/^[\+\-]?[0-9]+(\.[0-9][0-9][0-9])*(,[0-9]+)?$/i;
return reg.test(this)}
function _IsPostCode() {
var reg=/^[A-Z0-9][A-Z0-9 \-]+[A-Z0-9]$/i;
return reg.test(this)}
function _IsTelephone() {
var reg=/^\+?\+? *[0-9]+ *[\-\/\(]?[0-9]+[\-\/\)]? *[0-9]+[0-9 ]*[\-\/]? *[0-9]+[0-9 ]*$/i;
return reg.test(this)}
function _IsRFC821() {
var reg=/^((([A-Z0-9\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~]+\.)*[A-Z0-9\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\{\|\}\~]+)|(\"\S+\"))@(([A-Z0-9]\-?)*[A-Z0-9]\.)+[A-Z]+$/i;
return reg.test(this)}
function _PadLeft(len, ch) {
if (len<=this.length) return this.substr(this.length-len);
if (ch==void 0) ch=" ";
ch=ch.toString();
if (ch.length==0) ch=" ";
var szString=this;
while (len>szString.length) szString=ch+szString;
return szString}
function _PadRight(len, ch) {
if (len<=this.length) return this.substr(0, len);
if (ch==void 0) ch=" ";
ch=ch.toString();
if (ch.length==0) ch=" ";
var szString=this;
while (len>szString.length) szString += ch;
return szString}
function _TrimAll() {
for (var i=0;i<this.length;i++) {
if (this.charCodeAt(i)>32) break}
var szString=this.substr(i);
for (i=szString.length-1;i>=0;i--) {
if (szString.charCodeAt(i)>32) break}
return szString.substr(0, i+1)}
function _strToHMString() {
return this.toHMSString().substr(0,5)}
function _strToHMSString() {
var szString=this.trimAll().replace(/\W+/g, __TimeDelimiter);
if (szString.indexOf(__TimeDelimiter)<0) {
if ((szString.length & 1)==1) szString="0"+szString;
szString=szString.slice(0,2)+__TimeDelimiter+szString.slice(2,4)+__TimeDelimiter+szString.slice(4)}
var szS=szString.split(__TimeDelimiter);
var hms='0:0:0'.split(':');
for (var i=0;(i<szS.length) && (i<3);i++) {
if (isNaN(hms[i]=parseInt(Math.abs(szS[i])))) return ""}
if ((hms[0]>24) || (hms[1]>59) || (hms[2]>59)) return "";
if (hms[0]==24) hms[1]=hms[2]=0;
for (i=0;i<3;i++) {
hms[i]=hms[i].toString().padLeft(2,"0")}
return hms.join(__TimeDelimiter)}
function _strToDateString(wrapYear) {
var szString=this.trimAll().replace(/\W+/g, __DateDelimiter);
var re=new RegExp("^[0-9\\"+__DateDelimiter+"]+$","g");
if (! re.test(szString)) return (new Date(Date.parse(szString))).toDateString();
var szS=szString.split(__DateDelimiter);
var d=new Date();
var dmy=new Array(d.getDate(), d.getMonth()+1, d.getFullYear());
for (var i=0;(i<szS.length) && (i<3);i++) {
if (szS[i]!="") dmy[i]=szS[i]}
var noYear=(szS.length<3);
switch (szS[0].length) {
case 0:
return "";
case 6:
case 8:
noYear=false;
dmy[2]=szS[0].substr(4);
case 4:
if (szS.length>1) {noYear=false;dmy[2]=szS[1]}
dmy[1]=szS[0].substr(2,2);
dmy[0]=szS[0].substr(0,2)}
if (dmy[2].length<=2) {
if (wrapYear==void 0) wrapYear=-(d.getFullYear()+29);
i=Math.abs(dmy[2])+Math.abs(wrapYear-wrapYear % 100);
if (wrapYear<0) {
if (Math.abs(wrapYear)<i) i -= 100}
else {
if (wrapYear>i) i += 100}
dmy[2]=i}
d.setFullYear(dmy[2]);
d.setMonth(0);
d.setDate(dmy[0]);
d.setMonth(dmy[1]-1);
if (noYear && (d<new Date())) d.setFullYear(dmy[2]=d.getFullYear()+1);
var dmy2=new Array(d.getDate(), d.getMonth()+1, d.getFullYear());
for (i=0;i<3;i++) {
if (Number(dmy[i])!=Number(dmy2[i])) return (new Date(Date.parse(szString))).toDateString()}
if (Number(dmy[2])<1583) return (new Date(Date.parse(szString))).toDateString();
for (i=0;i<2;i++) {
dmy[i]=dmy[i].toString().padLeft(2,"0")}
return dmy.join(__DateDelimiter)}
function _strToDate9String(wrapYear) {
var szString=this.toDateString(wrapYear);
if (szString=="") return "";
var szS=szString.split(__DateDelimiter);
return szS[0]+__Month3LC[szS[1]-1]+szS[2]}
function _CmpDateString(op, szDate, wrapyear) {
var iDate=this.toDateString(wrapyear).valueOfDate();
if (isNaN(iDate)) return true;
var cDate=szDate.toDateString(wrapyear).valueOfDate();
if (isNaN(cDate)) return true;
op=op.trimAll();
switch (op) {
case "<":
case "<=":
case "==":
case ">=":
case ">":
break;
default:
return false}
return eval(iDate.toString()+op+cDate.toString())}
function _strValueOfDate(wrapYear) {
var szString=this.toDateString(wrapYear);
if (szString.length==0) return NaN;
var szS=szString.split(__DateDelimiter);
return Date.UTC(szS[2], szS[1]-1, szS[0])}
function _strGetFullYear(wrapYear) {
var szString=this.toDateString(wrapYear);
if (szString.length==0) return NaN;
var szS=szString.split(__DateDelimiter);
return Math.abs(szS[2])}
function _dateToUTCString() {
var dmy=new Array('', this.getUTCMonth()+1, this.getUTCDate());
var hms=new Array(this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds());
for (var i=0;i<3;i++) {
dmy[i]=dmy[i].toString().padLeft(2,"0");
hms[i]=hms[i].toString().padLeft(2,"0")}
dmy[0]=this.getUTCFullYear().toString();
return dmy.join('-')+' '+hms.join(':')}
function _dateToDateString() {
if (isNaN(this)) return "";
var dmy=new Array(this.getDate(), this.getMonth()+1, this.getFullYear());
for (var i=0;i<2;i++) {
dmy[i]=dmy[i].toString().padLeft(2,"0")}
return dmy.join(__DateDelimiter)}
function _dateToDate9String() {
if (isNaN(this)) return "";
return this.getDate().toString().padLeft(2,"0")+__Month3LC[this.getMonth()]+this.getFullYear().toString()}
function _dateValueOfDate() {
return Math.floor(this.valueOf()/86400000)*86400000}
function _strValueOfMoney() {
if (! this.isMoney()) return NaN;
var szString=this.replace(/\./g, "");
return Number(szString.replace(/\,/g, "."))}
function _strToMoneyString() {
if (this=="") return "";
return (this.isMoney())?this.toString().valueOfMoney().toMoneyString():Number(this).toMoneyString()}
function _numberToMoneyString() {
if (isNaN(this)) return "";
var szString=this.toString();
var i=szString.indexOf(".");
if (i<0){i=szString.length;szString += ",00"}
else {
if (i==0){i=1;szString="0"+szString}
szString=szString.substr(0,i)+","+szString.substr(i+1);
while (i>=szString.length-2) {szString += '0'}}
var k=(szString.substr(0,1)=="-")?1:0;
for (i -= 3;i>k;i -= 3) {
szString=szString.substr(0,i)+"."+szString.substr(i)}
return szString}
// Init String prototype
String.prototype.dateDelimiter=__DateDelimiter;
String.prototype.trimAll=_TrimAll;
String.prototype.padLeft=_PadLeft;
String.prototype.padRight=_PadRight;
String.prototype.isInteger=_IsInteger;
String.prototype.isMoney=_IsMoney;
String.prototype.isPostCode=_IsPostCode;
String.prototype.isTelephone=_IsTelephone;
String.prototype.isRFC821=_IsRFC821;
String.prototype.toMoneyString=_strToMoneyString;
String.prototype.valueOfMoney=_strValueOfMoney;
String.prototype.toHMString=_strToHMString;
String.prototype.toHMSString=_strToHMSString;
String.prototype.toDateString=_strToDateString;
String.prototype.toDate9String=_strToDate9String;
String.prototype.cmpDateString=_CmpDateString;
String.prototype.valueOfDate=_strValueOfDate;
String.prototype.getFullYear=_strGetFullYear;
Date.prototype.toUTCDateString=_dateToUTCString;
Date.prototype.toDateString=_dateToDateString;
Date.prototype.toDate9String=_dateToDate9String;
Date.prototype.valueOfDate=_dateValueOfDate;
Number.prototype.toMoneyString=_numberToMoneyString;
