var perioddefinitions = new Array(
  new Array("y",60*60*24*365),
  new Array("m",60*60*24*365/12),
  new Array("w",60*60*24*7),
  new Array("d",60*60*24),
  new Array("h",60*60),
  new Array("i",60),
  new Array("s",1),
  new Array("",1));
var month_shortnames = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var maand_shortnames = new Array("Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec");
var month_names = new Array("January","February","March","April","May",
  "June","July","August","September","October","November","December");

var day_shortnames = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
var dag_shortnames = new Array("Zo","Ma","Di","Wo","Do","Vr","Za");

function _DateAdd(adate,aper,aval){
//  alert(aper+" "+aval);

  if(aper=="Y")adate.setYear(adate.getYear()+aval);
  if(aper=="M")adate.setMonth(adate.getMonth()+aval);
  if(aper=="W")adate.setDate(adate.getDate()+7*aval);
  if(aper=="D")adate.setDate(adate.getDate()+aval);  

  if(aper=="H")adate.setHours(adate.getHours()+aval);  
  if(aper=="I")adate.setMinutes(adate.getMinutes()+aval);  
  if((aper=="S")||(aper==""))adate.setSeconds(adate.getSeconds()+aval);  
  
}

function DateAdd(adate,aperiod){
  var validChars="YMWDHIS";
  var num="";
  var pe="";
  aperiod=aperiod.toUpperCase();
  
  for(var i=0;i<aperiod.length;i++){
    var ch=aperiod.charAt(i);
    if((ch>='0')&&(ch<='9')){
      if(pe!=""){
        _DateAdd(adate,pe,parseInt(num));
        pe="";
        num="";
      }
      num+=ch;
    }
    else if(validChars.indexOf(ch)>=0)pe+=ch;
  }
  _DateAdd(adate,pe,parseInt(num));
  return adate;
}

function Seconds2Period(seconds){
  var s="";

  for(var i=0;i<perioddefinitions.length;i++){
    var r=seconds/perioddefinitions[i][1];
    if(Math.floor(r)>0){
      var h=new String(eval(Math.floor(r)));
//      while(h.length<2)h="0"+h;
      s+=h+perioddefinitions[i][0]+" ";
      seconds-=(Math.floor(r)*perioddefinitions[i][1]);
    }  

  }
  return s;
}

function Seconds2DateTime(seconds){
  var val=new Date();
  val.setTime(1000*seconds);
  return val;
}

function DateTime2Str(val){
//  return PadLeft(val.getDate(),2,"0")+" "+month_names[val.getMonth()]+" "+val.getYear()+"  "+
  return PadLeft(val.getDate(),2,"0")+" "+month_names[val.getMonth()]+" "+PadLeft(PadLeft(FixYear(val.getYear()),3,"9"),4,"1")+"  "+  
    PadLeft(val.getHours(),2,"0")+":"+
    PadLeft(val.getMinutes(),2,"0");

}

function Date2Str(val){
  return PadLeft(val.getDate(),2,"0")+" "+month_names[val.getMonth()]+" "+PadLeft(PadLeft(FixYear(val.getYear()),3,"9"),4,"1");
}

function Seconds2String(seconds){
  return DateTime2Str(Seconds2DateTime(seconds));
}

function FixYear(val){
  if(val<200)val+=1900;
  return val;
}

// Timer in 1/10 Sec

var timeouttimer=null;
var timeoutcount=0;
var timeoutvalue=null;
var timeoutfunction=null;

function Timeout(){
  return timeoutcount>=timeoutvalue;
}

function StartTimer(atimeoutfunction,atimeoutvalue){
  if(timeouttimer)clearTimeout(timeouttimer);
  timeoutcount=0;
  timeoutvalue=atimeoutvalue;
  timeoutfunction=atimeoutfunction;
  timeouttimer=setTimeout("TimeoutTick()",1000);
}

function TimeoutTick(){
  if(timeouttimer)clearTimeout(timeouttimer);
  timeoutcount++;
  if(Timeout()){
    eval(timeoutfunction);
  }
  else timeouttimer=setTimeout("TimeoutTick()",1000);
}

function pause(millisecondi){
    var now = new Date();
    var exitTime = now.getTime() + millisecondi;

    while(true) {
        now = new Date();
        if(now.getTime() > exitTime) return;
    }
}

function Str2Date(s){
  var d=new Date(s);
  if(!isNaN(d)){ // Is dus numeriek
    var y=FixYear(d.getYear());
    if((y>=1900)&&(y<=2100)&&(d.getMonth()>=0)&&(d.getMonth()<12)&&(d.getDate()>0)&&(d.getDate()<32)){
      return d;
    }  
  } 
  return null;
}

function Str2DateTime(s){
  var d=new Date(s);
  if(!isNaN(d)){ // Is dus numeriek
    var y=FixYear(d.getYear());
    if((y>=1900)&&(y<=2100)&&(d.getMonth()>=0)&&(d.getMonth()<12)&&(d.getDate()>0)&&(d.getDate()<32)
    &&(d.getHour()>0)&&(d.getHour()<32)&&(d.getDate()>0)&&(d.getDate()<32)){
      return d;
    }  
  } 
  return null;
}


function EnforceDateTime(control){
  var d=Str2Date(control.value);
 
 
  if(d){
    var s=Date2Str(d);  
    if(control.value!=s)control.value=s;
  }
  else alert('Invalid DateTime: '+control.value);
}


function YearMonthCheck(s,magnull){
  var d=new Date();
  if((magnull)&&(s=="")){
    s=eval(FixYear(d.getYear()))+"-"+eval(d.getMonth());
  }  
  
  var b=s.split("-");  
  if(b.length!=2)b=s.split("/");  
  
  if(b.length!=2)return null;
  
  if(isNaN(b[0]))return null;    
  if(isNaN(b[1]))return null;      

  if((eval(b[0])<1900)||(eval(b[0])>2100))return null;    
  if((eval(b[1]<1))||eval(b[1]>12))return null;      
  
  while(b[1].length<2)b[1]="0"+b[1];
  
  return eval(b[0]+b[1]);
}

function Weekend(d){
  return((d.getDay()==0)||(d.getDay()==6));
}

function WeekNr(vandaag, terug) {
  var GecorrigeerdNieuwjaarsdagNr = new Array(6,7,8,9,10,4,5);
  var Jaartal = vandaag.getFullYear() - (terug ? 1 : 0);
  var Nieuwjaarsdag = new Date(Jaartal,0,1);
  var Dagen = Math.floor((vandaag.getTime() - Nieuwjaarsdag.getTime()) / (24 * 60 * 60 * 1000));
  var NieuwjaarsdagNr = GecorrigeerdNieuwjaarsdagNr[Nieuwjaarsdag.getDay()];
  var nummer = Math.floor((Dagen + NieuwjaarsdagNr) / 7);
  if (nummer == 0) nummer = WeekNr(vandaag,true);
  return nummer;
}


function getWeekNr(datum){
/*

 - bepaal in het voorbeeldjaar het aantal dagen vanaf 4 jan. tot aan de voorbeelddatum       [UK01=219]
 - deel UK01 door 7 en rond het resultaat naar beneden af                                    [UK02=31]
 - bepaal het weekdagnummer van de voorbeelddatum, ma=1 di=2 ... zo=7                        [UK03=3]
 - bepaal het weekdagnummer van 4 jan. van het jaar voor het voorbeeldjaar                   [UK04=7]
 - bepaal in het jaar voor het voorbeeldjaar het aantal dagen vanaf 4 jan. tot aan 31 dec.   [UK05=361]
 - deel UK05 door 7 en rond het resultaat naar beneden af                                    [UK06=51]
 - bepaal in het jaar voor het voorbeeldjaar het weekdagnummer van 31 dec.                   [UK07=4]
 - bepaal het weekdagnummer van 4 jan. van het voorbeeldjaar                                 [UK08=1]
 - bepaal het weekdagnummer van 4 jan. van het jaar na het voorbeeldjaar                     [UK09=2]
 - bepaal het weeknummer van 31 dec. van het jaar voor het voorbeeldjaar
   ALS UK07<UK08
   DAN    UK10=1
   ANDERS ALS UK07<UK04
          DAN    UK10=UK06+2
          ANDERS UK10=UK06+1                                                                 [UK10=53]
 - bepaal het weeknummer van de voorbeelddatum
   ALS voorbeelddatum is in reeks 1 jan. t/m 3 jan.
   DAN    ALS UK03<UK08
          DAN    UK11=1
          ANDERS UK11=UK10
   ANDERS ALS EN voorbeelddatum is in reeks 29 dec. t/m 31 dec. EN UK03<UK09
          DAN    UK11=1
          ANDERS ALS UK03<UK08
                 DAN    UK11=UK02+2
                 ANDERS UK11=UK02+1   

*/
//  var datum=new Date("11 aug 1999");
  
  var jan4=new Date("4 jan "+eval(datum.getYear()));
  var nextjan4=new Date("4 jan "+eval(datum.getYear()+1));
  var lastjan4=new Date("4 jan "+eval(datum.getYear()-1));
  var lastdec31=new Date("31 dec "+eval(datum.getYear()-1));

  
  
  var UK01=((datum-jan4)/86400000);
  var UK02=Math.floor(UK01/7);
  
  var UK03=datum.getDay();
  if(UK03==0)UK03=7;
  
  var UK04=lastjan4.getDay();
  if(UK04==0)UK04=7;

  var UK05=((lastdec31-lastjan4)/86400000);
  var UK06=Math.floor(UK05/7);
  var UK07=lastdec31.getDay();
  if(UK07==0)UK07=7;  
  
  var UK08=jan4.getDay();
  if(UK08==0)UK08=7;
  var UK09=nextjan4.getDay();
  if(UK09==0)UK09=7;
  
  
  if(UK07<UK08)var UK10=1;
  else if( UK07<UK04)var UK10=UK06+2;
  else var UK10=UK06+1;
  
  

  
  if((datum.getMonth()==0)&&(datum.getDate()>=1)&&(datum.getDate()<=3)){
    if(UK03<UK08)UK11=1;
    else UK11=UK10;
  }
  else if((datum.getMonth()==11)&&(datum.getDate()>=29)&&(datum.getDate()<=31)&&(UK03<UK09)) UK11=1;
  else if(UK03<UK08) UK11=UK02+2;
  else UK11=UK02+1;
   
  return UK11;


//	NumberOfWeek =  Math.round((((now-then)/86400000)+Compensation)/7);
}


function takeYear(theDate){
	x = theDate.getYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
}

