
//#############################################################################
//#############################################################################
//#############################################################################
// CALENDAR

var arCalendarObject = new Array()
function CalendarObject(NewFrame,NewDate,NewLang,InitDraw,InitChange) {
	var index = arCalendarObject.length
	arCalendarObject[index] = this
	this.ObjectIndex	= index
	this.Frame			= NewFrame
	this.Date			= new Date(); if ((NewDate != null) && (NewDate != "")) this.Date = new Date(NewDate)
	this.Active			= false; if ((NewDate != null) && (NewDate != "")) this.Active = true
	this.Data			= new Array(); for (var i=0;i<6;i++) this.Data[i] = new Array()
	this.Run			= null
	this.Reference		= window
	this.Events			= true
	this.Title			= "Calendar"
	this.Style			=	"html{border:0px}" +
							"body{margin:0px;padding:0px;overflow:hidden;cursor:default;border:1px solid gray}" +
							"td{font-family:verdana;font-size:8pt}" +
							".table{background-color:white;spacing:1px;border:1px solid white}" +
							".head{background-color:#ffffff;color:navy;text-align=center;border-bottom:1px solid gray;font-weight:bold}" +
							".col{background-color:#ffffff;color:black;text-align=center;font-weight:bold}" +
							".day{background-color:#ff8888;color:black;text-align=center;cursor:hand}" +
							".month{background-color:#ffffff;color:black;text-align=center;cursor:hand}" +
							".rest{background-color:#aaaaaa;color:black;text-align=center;cursor:hand}" +
							".weekend{background-color:#dddddd;color:black;text-align=center;cursor:hand}"
	this.Lang			= "NL"; if ((NewLang != null) && (NewLang != "")) this.Lang = NewLang	
	this.Langs			= new Array("NL","DE","GB","ES","FR","IT","US")
	this.Formats		= new Array("{w} {d} {m} {y}","{w}, {d}. {m} {y}","{w}, {d} {m} {y}","{w}, {d} de {m} de {y}","{w} {d} {m} {y}","{w} {d} {m} {y}","{w}, {m} {d}, {y}")
	this.SDays			= new Array(["zo","ma","di","wo","do","vr","za"],["so","mo","di","mi","do","fr","sa"],["su","mo","tu","we","th","fr","sa"],["do","lun","ma","mi","ju","vi","s"+Chr(225)],["di","lu","ma","me","je","ve","sa"],["do","lu","ma","me","gi","ve","sa"],["su","mo","tu","we","th","fr","sa"])
	this.FDays			= new Array(["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],["domingo","lunes","martes","mi"+Chr(233)+"rcoles","jueves","viernes","s"+Chr(225)+"bado"],["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],["domenica","luned"+Chr(236),"marted"+Chr(236),"mercoled"+Chr(236),"gioved"+Chr(236),"venerd"+Chr(236),"sabato"],["sunday","monday","tuesday","wednesday","thursday","friday","saturday"])
	this.FMonths		= new Array(["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],["january","february","march","april","may","june","july","august","september","october","november","december"],["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],["janvier","f"+Chr(233)+"vrier","mars","avril","mai","juin","juillet","ao"+Chr(251)+"t","septembre","octobre","novembre","d"+Chr(233)+"cembre"],["gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],["january","february","march","april","may","june","july","august","september","october","november","december"])	
	this.RunKeyDown		= CalendarObject_RunKeyDown
	this.RunClick		= CalendarObject_RunClick
	this.RunDblClick	= CalendarObject_RunDblClick
	this.RunDraw		= CalendarObject_RunDraw
	this.SetActive		= CalendarObject_SetActive
	this.RunChange		= CalendarObject_RunChange
	this.OnKeyDown		= CalendarObject_OnKeyDown
	this.OnChange		= CalendarObject_OnChange
	this.OnClick		= CalendarObject_OnClick
	this.OnDblClick		= CalendarObject_OnDblClick
	this.OnConfirm		= CalendarObject_OnConfirm
	this.OnDelete		= CalendarObject_OnDelete
	this.OnEnter		= CalendarObject_OnEnter
	this.OnEscape		= CalendarObject_OnEscape
	if (InitDraw != false) this.RunDraw()
	if (InitChange != false) this.RunChange(null,null,null,true) 
}
function CalendarObject_RunKeyDown(key) {
	if (this.Events == false) return false
	this.OnKeyDown(key)
	switch (key) {
		case 27: // escape
			this.OnEscape(this.Date.getDate(),this.Date.getMonth()+1,this.Date.getFullYear())
			break				
		case 13: // enter
			this.OnEnter(this.Date.getDate(),this.Date.getMonth()+1,this.Date.getFullYear())
			break				
		case 46: // delete
			this.OnDelete(this.Date.getDate(),this.Date.getMonth()+1,this.Date.getFullYear())
			break			
		case 36: // home
			var d = new Date()
			var force = (this.Active != true)
			this.Active = true
			this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear(),force)			
			break				
		case 33: // page up
			var d = new Date(this.Date); d.setMonth(d.getMonth()-1)
			this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear())			
			break
		case 34: // page down
			var d = new Date(this.Date); d.setMonth(d.getMonth()+1)
			this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear())			
			break
		case 37: // left
			if (this.Active == true) {
				var d = new Date(this.Date); d.setDate(d.getDate()-1)
				this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear())
			}
			break
		case 39: // right
			if (this.Active == true) {
				var d = new Date(this.Date); d.setDate(d.getDate()+1)
				this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear())
			}
			break
		case 38: // up
			if (this.Active == true) {
				var d = new Date(this.Date); d.setDate(d.getDate()-7)
				this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear())
			}
			break
		case 40: // down 
			if (this.Active == true) {
				var d = new Date(this.Date); d.setDate(d.getDate()+7)
				this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear())
			}
			break
	}	
}
function CalendarObject_RunClick(row,col) {
	if (this.Events == false) return false
	if (this.Data[row][col] != null) {
		var d = new Date(this.Data[row][col])
		var force = (this.Active != true)
		this.Active = true
		this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear(),force)
		this.OnClick(d.getDate(),d.getMonth()+1,d.getFullYear())
	}	
}
function CalendarObject_RunDblClick(row,col) {
	if (this.Events == false) return false
	if (this.Data[row][col] != null) {
		var d = new Date(this.Data[row][col])
		var force = (this.Active != true)
		this.Active = true
		this.RunChange(d.getDate(),d.getMonth()+1,d.getFullYear(),force)
		this.OnDblClick(d.getDate(),d.getMonth()+1,d.getFullYear())
	}	
}
function CalendarObject_SetActive(Active) {
	var force = (this.Active != Active)
	this.Active = Active
	this.RunChange(null,null,null,force)
}
function CalendarObject_RunDraw() {
	var tmp = ""
	tmp += "<html>\n"
	tmp += "<style type=\"text/css\">" + this.Style + "</style>\n"
	tmp += "<title>" + this.Title + "</title>\n"
	tmp += "<script language=\"javascript\" type=\"text/javascript\">var Reference;if(parent!=null){Reference=parent}else if(opener!=null){Reference=opener}<\/script>\n"
	tmp += "<body leftmargin=0 topmargin=0"
	tmp += "onkeydown=\"Reference.arCalendarObject[" + this.ObjectIndex + "].RunKeyDown(window.event.keyCode)\""
	tmp += "ondrag=\"return false\""
	tmp += "onselectstart=\"return false\">\n"
	tmp += "<table cellspacing=1 cellpadding=0 border=0 width=100% height=100% cols=7 class=table>\n"
	tmp += "<tr><td colspan=7 class=\"head\" id=\"Date\">&nbsp;</td></tr>\n"
	tmp += "<tr>\n"
	var iLang = 0; for (var i=0;i<this.Langs.length;i++) { if (this.Lang == this.Langs[i]) iLang = i }	
	for (var i=0;i<7;i++) {
		tmp += "<td class=\"col\">" + this.SDays[iLang][i] + "</td>\n"
	}
	tmp += "</tr>\n"
	for (var i=0;i<6;i++) {
		tmp += "<tr>\n"
 		for (j=0;j<7;j++) {
 			var clc = "Reference.arCalendarObject[" + this.ObjectIndex + "].RunClick(" + i + "," + j + ")"
 			var dbl = "Reference.arCalendarObject[" + this.ObjectIndex + "].RunDblClick(" + i + "," + j + ")"
			tmp += "<td width=50 id=\"Cell_" + i + "_" + j + "\" onclick=\"" + clc + "\" ondblclick=\"" + dbl + "\">&nbsp;</td>\n"		
		}			
		tmp += "</tr>\n"
  	}
	tmp += "<\/table>\n"
	tmp += "<\/body>\n"
	tmp += "<\/html>\n"		
	this.Frame.document.clear()
	this.Frame.document.write(tmp)
	this.Frame.document.close()
	if (this.Frame.Reference != null) this.Frame.Reference = this.Reference
}
function CalendarObject_RunChange(day,month,year,force) {
	if (day == null) { day = this.Date.getDate() }
	if (month == null) { month = this.Date.getMonth()+1 }
	if (year == null) { year = this.Date.getFullYear() }
	if ((this.Date.getDate() != day) || ((this.Date.getMonth()+1) != month) || (this.Date.getFullYear() != year) || (force == true)) { 
		var hold = new Date(this.Date)
		this.Date.setDate(day) 
		this.Date.setMonth(month-1) 
		this.Date.setYear(year) 
		var ctr = this.Frame.document.all("Date")
		var f = "&nbsp;"
		var iLang = 0; for (var i=0;i<this.Langs.length;i++) { if (this.Lang == this.Langs[i]) iLang = i }	
		if (this.Active == true) {
			var f = this.Formats[iLang]
			f = f.replace("{w}",this.FDays[iLang][this.Date.getDay()])	
			f = f.replace("{d}",this.Date.getDate())	
			f = f.replace("{m}",this.FMonths[iLang][this.Date.getMonth()])	
			f = f.replace("{y}",this.Date.getFullYear())	
		} else {
			f = "{m} {y}"	
			f = f.replace("{m}",this.FMonths[iLang][this.Date.getMonth()])	
			f = f.replace("{y}",this.Date.getFullYear())	
		}	
		ctr.innerHTML = f
		var run = new Date(this.Date); run.setDate(1)
		var x = -run.getDay()+1; if (x == 1) { x = -6 }; run.setDate(x)
		var update = (this.Run + "") != (run + "")
		this.Run = new Date(run)
		for (var i=0;i<6;i++) {
 			for (j=0;j<7;j++) {
 				var cls = ""
 				if ((this.Active == true) && (run.getMonth() == this.Date.getMonth()) && (run.getDate() == this.Date.getDate())) {
 					cls = "day"
 				} else if ((run.getMonth() == this.Date.getMonth()) && ((j == 0) || (j == 6))) {
 					cls = "weekend"
 				} else if (run.getMonth() == this.Date.getMonth()) {
 					cls = "month"
 				} else {
 					cls = "rest"
 				} 				
 				if ((update == true) || ((update == false) && (((run + "") == (this.Date + "")) || ((run + "") == (hold + ""))))) {
	 				var cnt = run.getDate()
 					var ctr = this.Frame.document.all("Cell_" + i + "_" + j)
 					ctr.className = cls
 					ctr.innerText = cnt
 					this.Data[i][j] = new Date(run)
 				}	
				run.setDate(run.getDate()+1)
			}			
  		}
		this.OnChange(this.Date.getDate(),this.Date.getMonth()+1,this.Date.getFullYear())
	} else if ((this.Date.getDate() == day) && ((this.Date.getMonth()+1) == month) && (this.Date.getFullYear() == year)) { 
		this.OnConfirm(this.Date.getDate(),this.Date.getMonth()+1,this.Date.getFullYear())
	}
}
function CalendarObject_OnKeyDown(key) { }
function CalendarObject_OnChange(day,month,year) { }
function CalendarObject_OnClick(day,month,year) { }
function CalendarObject_OnDblClick(day,month,year) { }
function CalendarObject_OnConfirm(day,month,year) { }
function CalendarObject_OnEscape(day,month,year) { }
function CalendarObject_OnEnter(day,month,year) { }
function CalendarObject_OnDelete(day,month,year) { }

//#############################################################################
//#############################################################################
//#############################################################################

