Date.prototype.getWeek = function() {
	var onejan = new Date(this.getFullYear(),0,1);
	return Math.ceil((((this - onejan) / 86400000) + onejan.getDay())/7);
}

Date.prototype.getThisWeek = function() {
	var t = this;
	var d = t.getDate();
	var m = t.getMonth() + 1;
	var y = t.getFullYear();
	var o = t.getDay();
	if(o != 0) {
		d = d - o;
		if(d < 1) {
			if (m == 1) d = 31 + d;
			if (m == 2) d = 31 + d;
			if (m == 3) {
				if (( y == 00) || ( y == 04)) d = 29 + d;
					else d = 28 + d;
			}
			if (m == 4) d = 31 + d;
			if (m == 5) d = 30 + d;
			if (m == 6) d = 31 + d;
			if (m == 7) d = 30 + d;
			if (m == 8) d = 31 + d;
			if (m == 9) d = 31 + d;
			if (m == 10) d = 30 + d;
			if (m == 11) d = 31 + d;
			if (m == 12) d = 30 + d;
			if (m == 1) {
				m = 12;
				y--;
			} else
				m--;
		}
	}
	return new Date(y,m-1,d);
}

Date.prototype.add = function( /**String*/unit, /**Number*/value ) {   
  
   unit = unit.replace( /s$/ ).toLowerCase();   
  
   switch ( unit ) {   
      case "year":   
         this.setYear( this.getYear() + value );   
         break;   
      case "month":   
         this.setMonth( this.getMonth() + value );   
         break;   
      case "week":   
         this.setTime( this.getTime() + value * 604800000 );   
         break;   
      case "day":   
         this.setTime( this.getTime() + value * 86400000 );   
         break;   
      case "hour":   
         this.setTime( this.getTime() + value * 3600000 );   
         break;   
      case "minute":   
         this.setTime( this.getTime() + value * 60000 );   
         break;   
      case "second":   
         this.setTime( this.getTime() + value * 1000 );   
         break;   
      case "nanosecond":   
         // Fall Through   
      default:   
         this.setTime( this.getTime() + value );   
         break;   
   }   
  
   return this;   
}
  
Date.prototype.subtract = function( /**String*/unit, /**Number*/value ) {
    
   unit = unit.replace( /s$/ ).toLowerCase();   
  
   switch ( unit ) {   
      case "year":   
         this.setYear( this.getYear() - value );   
         break;   
      case "month":   
         this.setMonth( this.getMonth() - value );   
         break;   
      case "week":   
         this.setTime( this.getTime() - value * 604800000 );   
         break;   
      case "day":   
         this.setTime( this.getTime() - value * 86400000 );   
         break;   
      case "hour":   
         this.setTime( this.getTime() - value * 3600000 );   
         break;   
      case "minute":   
         this.setTime( this.getTime() - value * 60000 );   
         break;   
      case "second":   
         this.setTime( this.getTime() - value * 1000 );   
         break;   
      case "nanosecond":   
         // Fall Through   
      default:   
         this.setTime( this.getTime() - value );   
         break;   
   } 
   
   return this;
}