// Copyright 2004 and onwards  Zucchetti Spa.

function Replicate(str,n){
  if (str==null) return ""
  if (!IsA(str,'C')) return ""
  if (n==null) n=1
  if (!IsA(n,'N')) n=1
  var r=""
  for(var i=0;i<n;i++) {
    r=r+str
  }
  return r
}

function Space(n){
  return Replicate(" ",n)
}

function Trim(str,chr){
  if (str==null) return ""
  var i=1
  var l=str.length
  var chr=!IsA(chr,'U')?""+chr:' '
  while (i<=l && str.charAt(l-i)==chr)
    i=i+1
  return str.substring(0,l-i+1)
}

function RTrim(str,chr){
  return Trim(str,chr)
}

function LTrim(str,chr){
  var i=0
  var l=str.length
  var chr=!IsA(chr,'U')?""+chr:' '
  while (i<l && str.charAt(i)==chr)
    i=i+1
  return str.substring(i)
}

function LRTrim(str,chr){
  return LTrim(Trim(str,chr),chr)
}

function Left(str,len) {
  if (IsA(str,'C') && IsA(len,'N')) {
    return(str.substr(0,len))
  } else {
    return ''
  }
}

function Right(str,len) {
  if (IsA(str,'C')) {
    return(str.substr(str.length-len))
  } else {
    return ''
  }
}

function Strtran(src,find,repl){
  var i,l=find.length
  var res=""
  i=src.indexOf(find)
  while(i!=-1) {
    res=res+src.substring(0,i)+repl
    src=src.substring(i+l)
    i=src.indexOf(find)
  }
  return res+src
}

function Substr(str,pos,cnt) {
  if (!IsA(str,'C')) return ''
  if (IsA(pos,'N')) {
    pos-=1
    if (pos<0) return ""
    if (IsA(cnt,'N')){
      if (cnt<1) return ""
      return str.substr(pos,cnt)
    } else {
      return str.substr(pos)
    }
  } else if (pos==null) {
    return str.substr()
  } else {
    return ''
  }
}

function Upper(str) {
  if (IsA(str,'C')) return str.toUpperCase(); else return ''
}

function Lower(str) {
  if (IsA(str,'C')) return str.toLowerCase(); else return ''
}

function Val(str) {
  if (IsA(str,'C')) {
    var n=parseFloat(str);
    if (isNaN(n)) {
      return(0);
    }
    else {
      return(n);
    }
  } else {
    return(0)
  }
}

function Str(p_n,len,dec) {
  if (p_n==null) {p_n=0}
  if (!IsA(p_n,'N')) {p_n=0}
  if (len==null) {len=10}
  if (!IsA(len,'N')) {len=10}
  if (dec==null) {dec=0}
  if (!IsA(dec,'N')) {dec=0}
  var res=p_n.toString()
  var point=At(".",res)
  if (point==0) res=res+".0"
  res+=Replicate("0",dec-Len(res)+At(".",res));
  point=At(".",res)
  if (point<=len+1) {
    res=Substr(res,1,dec>0 ? point+dec: point-1);
    if (res.length> len) {
      res=Substr(res,1,len)
      if (res.charAt(len-1)=='.')
        res=Substr(res,1,len-1);
    }
    len=len-res.length
    for(;len>0;len--) {
      res=" "+res
    }
  } else {
    res="";
    for(;len>0;len--)
      res+="*"
  }
  return res
}

function At(p_cStrFind,p_cStr,cnt) {
  // Resituisce la posizione di una stringa in un'altra.
  // Il param opz. "cnt" indica quale occorrenza è richiesta
  if (cnt<=0 || !IsA(cnt,'N')) {cnt=1}
  if (p_cStrFind==null || p_cStrFind=="") {return 0}
  var l=0
  var pos=-1;
  while (l<cnt) {
    pos=p_cStr.indexOf(p_cStrFind, pos+1) ;
    l++;
  }
  return pos+1;
}

function RAt(strFind,str,cnt) {
  // Resituisce la posizione di una stringa in un'altra iniziando la ricerca da destra.
  // Il param opz. "cnt" indica quale occorrenza è richiesta
  var pattern,result,pos=new Array()
  var index=0, strTest
  if (!IsA(strFind,'C') || !IsA(str,'C')) return 0
  if (cnt<=0 || !IsA(cnt,'N')) cnt=1
  if (navigator.appName=='Netscape') {
    pattern = new RegExp(strFind,"g")
    while ((result=pattern.exec(str))!=null) {
      pos[pos.length]=result.index+1
    }
  } else {
    // In Internet Explorer si deve usare una tecnica diversa
    // in quanto l'oggetto RegExp ha un baco !!!
    pattern = new RegExp(strFind)
    strTest=str
    while ((result=strTest.search(pattern))>=0) {
      index=index+result+strFind.length
      strTest=str.substr(index)
      pos[pos.length]=index-strFind.length+1
    }
  }
  pos.reverse()
  if (cnt<=pos.length) {
    return(pos[cnt-1])
  } else {
    return 0
  }
}

function ZeroPad(str,size) {
  if (!IsA(str,'C')) return ''
  while (str.length<size) {
   str='0'+str
  }
  return str
}

function Len(obj) {
  //Resituisce la lunghezza di una stringa o array
  return obj.length
}

function Asc(str) {
  if (str==null || str.length==0) return -1
  return str.charCodeAt(0)
}

function Chr(num){
  return String.fromCharCode(num)
}

function Max(a,b) {
  return ((Gt(a,b))?a:b)
}

function Min(a,b) {
  return ((Gt(a,b))?b:a)
}

function Mod(a,b) {
  return a % b
}

function Floor(a,b) {
  return Math.floor(a,b)
}

function IsNumber(kCode) {
  //44-->Comma ascii code , 45-->Minus ascii code, 46-->Point ascii code
  if (!(IsDigit(kCode) || kCode==44 || kCode==45 || kCode==46)) {
  //if (!(kCode >47 && kCode <58)) {
    return(false);
  } else {
    return(true);
  }
}

function IsDigit(kCode) {
if (!(kCode >47 && kCode <58)) {
    return(false);
  } else {
    return(true);
  }
}

function IsAlpha(kCode) {
  return(((kCode>64 && kCode<91) || (kCode>96 && kCode<123))?true:false)
}

function BoolToChar(b) {
  if (IsA(b,'L')) {
    return b ? "t" : "f"
  }
  return "f"
}

function CharToBool(s) {
  s = Trim(Lower(s))
  if (s=='true')
    return true
  else
    return false
}

function NullDate() {
  return new Date(100,0,1,0,0,0,0)
}

function NullDateTime() {
  return NullDate()
}

function DateToChar(obj) {
  if (IsA(obj,'D')) {
    return zeroFill(''+obj.getFullYear(),4)+zeroFill(''+(obj.getMonth()+1),2)+zeroFill(''+obj.getDate(),2)
  }
  return ''
}

function DateTimeToChar(obj) {
  if (IsA(obj,'D')) {
    return zeroFill(''+obj.getFullYear(),4)+zeroFill(''+(obj.getMonth()+1),2)+zeroFill(''+obj.getDate(),2)+zeroFill(''+obj.getHours(),2)+zeroFill(''+obj.getMinutes(),2)+zeroFill(''+obj.getSeconds(),2)
  }
  return ''
}

function CharToDate(obj) {
  if (Empty(obj)) return ''
  if (IsA(obj,'C')) {
    var year,month,day
    var fstSlash = obj.indexOf("/")
    var lstSlash = obj.lastIndexOf("/")
    if ((obj.indexOf("/", fstSlash + 1) == lstSlash) && (lstSlash == Len(obj) - 5)) {
      day = Val(Left(obj, fstSlash))
      month = Val(Substr(obj, fstSlash + 2, lstSlash - fstSlash))
      year = Val(Right(obj, 4))
      return new Date(year,month-1,day,0,0,0,0)
    }
    else{
      return new Date(Val(Substr(obj,1,4)),Val(Substr(obj,5,2))-1,Val(Substr(obj,7,2)),0,0,0,0)
    }
  }
  return new Date(100,0,1,0,0,0,0)
}

function CharToDateTime(obj) {
  if (Empty(obj)) return ''
  if (IsA(obj,'C')) {
    return new Date(Val(Substr(obj,1,4)),Val(Substr(obj,5,2))-1,Val(Substr(obj,7,2)),
                    Val(Substr(obj,9,2)),Val(Substr(obj,11,2)),Val(Substr(obj,13,2)),0)
  }

  return new Date(100,0,1,0,0,0,0)
}

function DayOfWeek(obj) {
  if (Eq(obj,NullDate())) return 0
  if (IsA(obj,'D')) {
    return obj.getDay()+1
  }
  return 0
}

function Sec(obj) {
  if (Eq(obj,NullDateTime())) return 0
  if (IsA(obj,'D')) {
    return obj.getSeconds()
  }
  return 0
}

function Minute(obj) {
  if (Eq(obj,NullDateTime())) return 0
  if (IsA(obj,'D')) {
    return obj.getMinutes()
  }
  return 0
}

function Hour(obj) {
  if (Eq(obj,NullDateTime())) return 0
  if (IsA(obj,'D')) {
    return obj.getHours()
  }
  return 0
}

function Day(obj) {
  if (Eq(obj,NullDate())) return 0
  if (IsA(obj,'D')) {
    return obj.getDate()
  }
  return 0
}

function Month(obj) {
  if (Eq(obj,NullDate())) return 0
  if (IsA(obj,'D')) {
    return obj.getMonth()+1
  }
  return 0
}

function Year(obj) {
  if (Eq(obj,NullDate())) return 0
  if (IsA(obj,'D')) {
    return obj.getFullYear()
  }
  return 0
}

function Week(obj) {
  if (Eq(obj,NullDate())) return 0
  if (IsA(obj,'D')) {
    var dayOfWeek=DayOfWeek(obj)
    var MinimalDaysInFirstWeek=4
    var rem = [0]
    var EPOCH_JULIAN_DAY = 2440588
    var ONE_DAY=1000*60*60*24
    var JAN_1_1_JULIAN_DAY = 1721426
    var gregorianEpochDay=EPOCH_JULIAN_DAY + floorDivide(obj.getTime(), ONE_DAY)- JAN_1_1_JULIAN_DAY
    var n400 = floorDivide(gregorianEpochDay, 146097, rem); // 400-year cycle length
    var n100 = floorDivide(rem[0], 36524, rem); // 100-year cycle length
    var n4 = floorDivide(rem[0], 1461, rem); // 4-year cycle length
    var n1 = floorDivide(rem[0], 365, rem);
    //var rawYear = 400*n400 + 100*n100 + 4*n4 + n1;
    var dayOfYear = rem[0]; // zero-based day of year
    if (n100 == 4 || n1 == 4) {
      dayOfYear = 365; // Dec 31 at end of 4- or 400-yr cycle
    } else {
      //++rawYear;
    }
    var firstDayOfWeek=1
    var relDow = (dayOfWeek + 7 - firstDayOfWeek) % 7; // 0..6
    var relDowJan1 = (dayOfWeek - dayOfYear + 701 - firstDayOfWeek) % 7; // 0..6
    var woy = Math.floor((dayOfYear - 1 + relDowJan1) / 7); // 0..53
    if ((7 - relDowJan1) >= MinimalDaysInFirstWeek)
      ++woy;

    // XXX: The calculation of dayOfYear does not take into account
    // Gregorian cut over date. The next if statement depends on that
    // assumption.
    if (dayOfYear > 359) { // Fast check which eliminates most cases
      // Check to see if we are in the last week; if so, we need
      // to handle the case in which we are the first week of the
      // next year.
      var lastDoy = DaysOfYear(Year(obj));
      var lastRelDow = (relDow + lastDoy - dayOfYear) % 7;
      if (lastRelDow < 0)
        lastRelDow += 7;
      if (((6 - lastRelDow) >= MinimalDaysInFirstWeek) &&
          ((dayOfYear + 7 - relDow) > lastDoy))
        woy = 1;

    } else if (woy == 0) {
      // We are the last week of the previous year.
      var prevDoy = dayOfYear + DaysOfYear(rawYear - 1);
      woy = weekNumber(prevDoy, dayOfWeek);
    }
    return woy
  }
  return 0
}

function floorDivide( numerator, denominator,  remainder) {
  if (remainder==null) remainder=[0]
  if (numerator >= 0) {
    remainder[0] = numerator % denominator
    return Math.floor(numerator / denominator)
  }
  var quotient = Math.floor((numerator + 1) / denominator) - 1;
  remainder[0] = numerator - (quotient * denominator);
  return quotient
}

var day_of_year_offset= [0,31,59,90,120,151,181,212,243,273,304,334];

function IsLeapYear(year){
return (year%4==0 && year%100!=0) || (year%400==0);
}

function DaysOfMonth(month,year){
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
  return 31;
case 4:
case 6:
case 9:
case 11:
  return 30;
case 2:
  return IsLeapYear(year)? 29: 28;
default:
  return 0;
}
}

function DaysOfYear(year){
if(year>0)
return IsLeapYear(year)? 366: 365;
else
return -1;
}

function DayOfYear(day,month,year){
if((day>0)&&(month>0)&&(year>0))
return day + day_of_year_offset[month-1] + (month>2 && IsLeapYear(year)? 1: 0);
else
return -1;
}

function AddDays(a,days) {
  if (Empty(a)) return NullDate();
  if (days==0) return a;
  var day=Day(a);
  var month=Month(a);
  var year=Year(a);

  if (days>0) {
    var days_of_month=DaysOfMonth(month,year);
    for(;days>0;days--) {
      if (++day>days_of_month) {
        if (++month>12) {
          year++;
          month=1;
        }
        day=1;
        days_of_month=DaysOfMonth(month,year);
      }
    }
  }
  else {
    for (;days<0;days++) {
      if (--day<1) {
        if (--month<1) {
          year--;
          month=12;
        }
        day=DaysOfMonth(month,year);
      }
    }
  }
  return new Date(year,month-1,day,Hour(a),Minute(a),Sec(a),0);
}

function TernsCmp(xa,ya,za,xb,yb,zb){
if(za>zb)
return 1;
if(za<zb)
return -1;
if(ya>yb)
return 1;
if(ya<yb)
return -1;
if(xa>xb)
return 1;
if(xa<xb)
return -1;
return 0;
}

function DaysBetw(dayL,monthL,yearL,dayH,monthH,yearH){
var neg=false;
if(TernsCmp(dayL,monthL,yearL,dayH,monthH,yearH)==0)
return 0;
if(TernsCmp(dayL,monthL,yearL,dayH,monthH,yearH)>0){
var back;
back=yearL;
yearL=yearH;
yearH=back;
back=monthL;
monthL=monthH;
monthH=back;
back=dayL;
dayL=dayH;
dayH=back;
neg=true;
}
var days = -DayOfYear(dayL,monthL,yearL);
var y;
for (y=yearL; y<yearH; y++) days += DaysOfYear(y);
days += DayOfYear(dayH,monthH,yearH);
if(neg)
return -days;
return days;
}

function DaysBetween(low,high) {
if(Empty(low)&&Empty(high))
return 0;
else
if (Empty(low)||Empty(high))
return Number.NaN;
return DaysBetw(Day(low),Month(low),Year(low),Day(high),Month(high),Year(high));
}

function DateDiff(low,high) {
var days=DaysBetween(low,high);
var DayLow,DayHigh;
DayLow= (Sec(low) + Minute(low)*60 + Hour(low)*3600)/86400;
DayHigh= (Sec(high) + Minute(high)*60 + Hour(high)*3600)/86400;
return days = days+(DayHigh-DayLow);
}

function iif(expr,trueExpr,falseExpr) {
  return ((expr)?trueExpr:falseExpr)
}

function zeroFill(varValue,len) {
  if ("0123456789".indexOf(varValue.charAt(0)) > -1) {
    while (varValue.length < len)
      varValue = '0' + varValue;
  }
  return varValue
}

function Round(varValue,len) {
  var res
  var l=Math.pow(10,Math.abs(len))
  if (len>0) {
    res=Math.round(varValue*l)/l
  } else if (len<0) {
    res=Math.round(varValue/l)*l
  } else
    res=Math.round(varValue)
  return(res)
}

function Int(varValue) {
  return Math.floor(varValue,0)
}

function SystemDate(){
  var d=new Date()
  d.setHours(0)
  d.setMinutes(0)
  d.setSeconds(0)
  d.setMilliseconds(0)
  return d
}

SystemDate.parse=function(strdate) {
if (Eq("1-1-100",strdate)){
return NullDate()
}
return Date.parse(strdate)
}

function DateTime(){
  var d=new Date()
  d.setMilliseconds(0)
  return d
}

function EmptyString(str) {
  return str.match(/\S/) == null || str==null
}

function EmptyNumber(num) {
  return num==0
}

function EmptyDate(date) {
  if (date==null) {
    return true
  }
  if (date.getFullYear()==100) {
    if (date.getMonth()==0) {
      if (date.getDate() == 1) {
        return true
      }
    }
  }
  return false
}

function EmptyDateTime(date) {
  return EmptyDate(date)
}

function EmptyBoolean(yesno) {
  return yesno==false
}

function Empty(any) {
  switch(typeof any) {
    case 'number':
      return EmptyNumber(any)
    case 'boolean':
      return EmptyBoolean(any)
    case 'string':
      return EmptyString(any)
    case 'object':
      if (any==null) return true
      if(IsA(any,'D')) {
          return EmptyDate(any)
      }
      break;
    case 'undefined':
      return true
  }
  return false
}

function IsNull(any) {
  return Empty(any);
}
/*function finetypeof(any) {//Stefano:seems unused
  if (IsA(any,'D')) return 'Date';
  return typeof any
}*/

function Eq(a,b) {
  if (IsA(a,'D')){
    if (IsA(a,'C'))
      return (a==FormatDate(b))
    else
      return (a.getTime()==b.getTime())
  }
  if (IsA(a,'C') && IsA(b,'D')){
    return (a==FormatDate(b))
  }
  return (a==b)
}

function Eqr(a,b) {
if (IsA(a,'C') && IsA(b,'C'))
return RTrim(a)==RTrim(b)
else
return Eq(a,b)
}

function Ne(a,b) {
  return !Eq(a,b)
}

function Lt(a,b){
  if (IsA(a,'D')){
    return (a.getTime()<b.getTime())
  }
  return (a<b)
}

function Le(a,b){
  if (IsA(a,'D')){
    return (a.getTime()<=b.getTime())
  }
  return (a<=b)
}

function Ge(a,b){
  if (IsA(a,'D')){
    return (a.getTime()>=b.getTime())
  }
  return (a>=b)
}

function Gt(a,b){
  if (IsA(a,'D')){
    return (a.getTime()>b.getTime())
  }
  return (a>b)
}

function DateFromApplet(date) {
  return new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0,0)
}

function DateTimeFromApplet(date) {
  return new Date(date.getFullYear(),date.getMonth(),date.getDate(),date.getHours(),
                  date.getMinutes(),date.getSeconds(),0)
}

function Format(any, len, dec, picture) {
  if (picture==null && IsA(len,'C')) {
    picture=len
    len=0
  }
  switch (typeof(any)) {
    case 'string':
      return FormatChar(any, len, picture)
      break
    case 'number':
      return FormatNumber(any, len, dec, picture)
      break
    case 'boolean':
      return FormatBoolean(any, picture)
      break
    case 'object':
      if (IsA(any,'D')) {
        if (any.getHours() > 0 || any.getMinutes() > 0 || any.getSeconds() > 0)
          return FormatDateTime(any, picture)
        else
          return FormatDate(any, picture)
        //return ApplyPictureToDate(any, picture)
      }
      break
    default:
      return any
      break;
  }
}

function CountChar(chr, str) {
  num=0;
  for(i=0; i<str.length; i++ ) {
    if(str.charAt(i)==chr) num++;
  }
  return num;
}

function URLenc(s) {
  return Strtran(Strtran(escape(s),"+","%2B"),"%u20AC","%80")
}

function BuildPicture(type,len,dec){
  var i;
  var p;
  var result="";
  if (type=="N" && len>0){
    p="";
    if(dec==0){
      for(i=0;i<len;i++){
        p+="9";
      }
    }
    else{
      for(i=0;i<len-dec-1;i++){
        p+="9";
      }
      p+=".";
      for(i=0;i<dec;i++){
        p+="9";
      }
    }
    result=p;
  }
  if (type=="D"){
    return "DD-MM-YYYY"
  }
  if (type=="T"){
    return "DD-MM-YYYY hh:mm:ss"
  }
  return result;
}

p_ContextObject={
GetSql:function(){return null}
}
CPMessageSink={
ConsoleSink:{SendMessage:function(msg){alert(msg)}}
}
Forward={
Unforwarded:null
}
CPResultSet=function(){
this.resultset={metadata:{},data:[],errormessage:'no results'}
try{
if(typeof PlatformPathStart=='function')arguments[0]=PlatformPathStart(arguments[0]);
var u=['../servlet/'+arguments[0],'?m_cBrowseName='+arguments[1]]
// for(var i=2;i<arguments.length;i++) u[i]=arguments[i]+'='+URLenc(eval(arguments[i]));
eval('this.resultset='+new JSURL(u.join(''),true).__response())
}catch(e){
this.resultset.errormessage=''+e
}
this.currow=0
this.Close=function(){}
this.Next=function(){this.currow++}
this.Eof=function(){return this.currow>=this.resultset.data.length}
this.ErrorMessage=function(){return this.resultset.errormessage}
this.Datum=function(cname){
return this.resultset.data[this.currow][this.resultset.metadata[cname][0]]
}
this.GetDate=function(cname){
var d=this.Datum(cname)
return d==null?NullDate():this.coerce(d,'D')
}
this.GetDateTime=function(cname){
var d=this.Datum(cname)
return d==null?NullDateTime():this.coerce(d,'T')
}
this.GetString=function(cname){
var d=this.Datum(cname)
return d==null?'':this.coerce(d,'C')
}
this.GetDouble=function(cname){
var d=this.Datum(cname)
return d==null?0:this.coerce(d,'N')
}
this.GetBoolean=function(cname){
var d=this.Datum(cname)
return d==null?false:this.coerce(d,'L')
}
this.coerce=function(value,p_desired) {
var original
switch(typeof value) {
case 'string':
original='C';break
case 'number':
original='N';break
case 'boolean':
original='L';break
}
if (original==p_desired)
return value
else {
if(original=='C') {
switch(p_desired) {
case'N':return Val(value)
case'D':return CharToDate(value)
case'T':return CharToDateTime(value)
case'L':return !Empty(value)
}
} else if(original=='N') {
switch(p_desired){
case'C':return ''+value
case'L':return !Empty(value)
}
}
}
return value
}
}
function Caller(sgetter){
var sget=function(name,d){
try {
return sgetter(name)
}catch(e){
try{
if(Lower(Left(name,2))=='w_'){
return sgetter(Substr(name,2))
}else{
return sgetter('w_'+name)
}
}catch(e){
return d
}
}
}
this.GetNumber=function(name){return sget(name,0)}
this.GetString=function(name){return sget(name,'')}
this.GetDate=function(name){return sget(name,NullDate())}
this.GetDateTime=function(name){return sget(name,NullDateTime())}
this.GetLogic=function(name){return sget(name,false)}
this.SetNumber=function(name,value){sget(name+'='+value)}
this.SetString=function(name,value){sget(name+'="'+Strtran(value,'"','\\"')+'"')}
this.SetDate=function(name,value){sget(name+'=CharToDate("'+DateToChar(value)+'")')}
this.SetDateTime=function(name,value){sget(name+'=CharToDateTime("'+DateTimeToChar(value)+'")')}
this.SetLogic=function(name,value){sget(name+'='+value)}
this.CalledBatchEnd=function(){}
}
function ReadGlobals(srvlt,glbls,sttr,snk){
var r,v
if(typeof PlatformPathStart=='function')srvlt=PlatformPathStart(srvlt);
try{
eval("r="+new JSURL('../servlet/'+srvlt+'?m_cGlobalsToRead=1',true).__response())
}catch(e){
snk.SendMessage(''+e)
}
for(var g in glbls){
try{
if(r==null || IsA(r[glbls[g][1]],'U')){
switch(glbls[g][0]) {
case'D':v=NullDate();break;
case'T':v=NullDateTime();break;
case'N':v=0;break;
case'L':v=false;break;
default:v=''
}
}else{
v=r[glbls[g][1]]
switch(glbls[g][0]) {
case'D':
v=CharToDate(v)
break
case'T':
v=CharToDateTime(v)
}
}
sttr(glbls[g][1],v)
}catch(e){
snk.SendMessage(''+e)
}
}
}
function __tof(o){return typeof o};
function _tof(o,t){return t==typeof o};
function _oof(o,o2){return _iof(o,o2.constructor)};
function _iof(o,f){return (o) instanceof f};
_tpOfs={U:function(o){return _tof(o,'undefined');},C:function(o){return _tof(o,'string')},N:function(o){return _tof(o,'number')},L:function(o){return _tof(o,'boolean')},O:function(o){return _tof(o,'object')},F:function(o){return _tof(o,'function')},D:function(o){return _iof(o,Date);},A:function(o){return _iof(o,Array);},T:function(o){return this.D(o);}};
_cis={"object":_oof,"function":_iof,"string":_tpOfs.C,"number":_tpOfs.N,"boolean":_tpOfs.L};
function IsA(o,c){
if(_tpOfs[c]) return _tpOfs[c](o);
switch (c){
case String: return _tpOfs.C(o);
case Number: return _tpOfs.N(o);
case Boolean: return _tpOfs.L(o);
case Function: return _iof(o,c);
case Object: return _oof(o,c);
default: return _cis[__tof(c)](o,c);
}}

if(typeof LibJavascript=='undefined') var LibJavascript={};

LibJavascript.Array = {
	indexOf: function(m_aArr,m_oElem){
    if(IsA(m_aArr,'U'))return -1;
		if(!m_aArr.indexOf) {
			if(IsA(m_oElem,'U'))return -1;
			for(var i=0;i<m_aArr.length;i++)
			if(m_oElem==m_aArr[i]&&IsA(m_aArr[i],m_oElem))return i;
			return -1;
		};
		return m_aArr.indexOf(m_oElem);
	}
}

