
	function addEvent(obj, evType, fn, useCapture){
		if (obj.addEventListener){
			obj.addEventListener(evType, fn, useCapture);
			return true;
		} else if (obj.attachEvent){
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} else {
			alert("Handler could not be attached");
		}
	}

	if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){
		HTMLElement.prototype.insertAdjacentElement = function (where,parsedNode)
		{
			switch (where){
			case 'beforeBegin':
				this.parentNode.insertBefore(parsedNode,this)
				break;
			case 'afterBegin':
				this.insertBefore(parsedNode,this.firstChild);
				break;
			case 'beforeEnd':
				this.appendChild(parsedNode);
				break;
			case 'afterEnd':
				if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
				else this.parentNode.appendChild(parsedNode);
				break;
			}
		}

		HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr)
		{
			var r = this.ownerDocument.createRange();
			r.setStartBefore(this);
			var parsedHTML = r.createContextualFragment(htmlStr);
			this.insertAdjacentElement(where,parsedHTML)
		}


		HTMLElement.prototype.insertAdjacentText = function (where,txtStr)
		{
			var parsedText = document.createTextNode(txtStr)
			this.insertAdjacentElement(where,parsedText)
		}
	}


	var html = "";
	var dtDays = Array("S&oslash;","Ma","Ti","On","To","Fr","L&oslash;");
	var dtMonths = Array("Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember");
	var dtFirstDay = 1;
	var dtHeadingStyle = "background-color: #F7F7F7";
	var dtContainerStyle = "border: 1px solid black";
	var dtCalenderStyle = "background-color: white;";
	var dtCellStyle = "width: 20px; cursor: default";
	var dtSelectedBackgroundColor = "#F7F7F7";
	var dtDateFormat = "DD-MM-YYYY";
	var dtMinYear = 1930;
	var dtMaxYear = 2030;

	var objValue;
	var objMySqlValue;

	var dt = new Date();
	curMonth = dt.getMonth();
	curYear = dt.getFullYear();

	addEvent(window, "load", dtDocumentCompleted);
//	document.body.onload = dtDocumentCompleted;

	focusCmd = "onFocus=\"dtFocus()\" onBlur=\"dtBlur()\"";

	html += "<SELECT onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" onChange=\"javascript:dtSetMonth(this.value)\" id=\"dtMonth\">";
	for (m = 0; m < 12; m++) {
		html += "<OPTION value=" + m + ">" + dtMonths[m] + "</OPTION>";
	}
	html += "</SELECT>";


	html += "<SELECT onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" onChange=\"javascript:dtSetYear(this.value)\" id=\"dtYear\">";
	for (y = dtMinYear; y <= dtMaxYear; y++) {
		html += "<OPTION value=" + y + ">" + y + "</OPTION>";
	}
	html += "</SELECT>";


	html += "<DIV onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" id=\"dtContainer\" style=\"" + dtCalenderStyle + "\"></DIV>";
	document.write("<SPAN id=\"dtPicker\" onBlur=\"dtBlur()\" onFocus=\"dtFocus()\" style=\"background-color: white; visibility: hidden; display: none; position: absolute; z-index: 100; " + dtContainerStyle + "\">" + html + "</SPAN>");
//document.body.innerHTML = "<textarea>" + document.body.innerHTML + "</textarea>";
	dtDrawMonth();
	var showClock = false;

	var dtLastCell = "";

	focusCount = 0;
	focusString = "";

	lastValue = Array();


	var switchField = false;


	function dtMinuteKeyUp(objMinute, objHour) {
		if (switchField) {
			dtMinuteChange(objMinute);
			objHour.focus();
			objHour.select();
		}
		switchField = false;
	}

	function dtMinuteKeyPress(objMinute) {

		keyCode = window.event.keyCode;
		minute = objMinute.value;

		if (keyCode >= 48 && keyCode <= 57) {
			if (minute.length >= 1 && document.selection.createRange().text == "") {
				switchField = true;
			}
		} else {
			window.event.keyCode = 0;
		}

	}

	function dtHourKeyUp(objHour, objMinute) {
		if (switchField) {
			dtHourChange(objHour);
			objMinute.focus();
			objMinute.select();
		}
		switchField = false;
	}

	function dtHourKeyPress(objHour) {

		keyCode = window.event.keyCode;
		hour = objHour.value;

		if (keyCode >= 48 && keyCode <= 57) {
			if (hour.length >= 1 && document.selection.createRange().text == "") {
				switchField = true;
			}
		} else {
			window.event.keyCode = 0;
		}

	}

	function dtHourChange(objHour) {
		hour = objHour.value;
		hour1 = parseInt(hour.substring(0,1)) + "";
		hour2 = parseInt(hour.substring(1,2)) + "";
		if (hour1 != "NaN" && (hour2 != "NaN" || hour.length == 1)) {
			if (hour >= 24) objHour.value = "00";
			if (hour.length == 1) objHour.value = "0" + hour1;
		} else {
			if (hour != "") objHour.value = "00";
		}
	}


	function dtMinuteChange(objMinute) {
		minute = objMinute.value;
		minute1 = parseInt(minute.substring(0,1)) + "";
		minute2 = parseInt(minute.substring(1,2)) + "";
		if (minute1 != "NaN" && (minute2 != "NaN" || minute.length == 1)) {
			if (minute > 59) objMinute.value = "00";
			if (minute.length == 1) objMinute.value = "0" + minute1;
		} else {
			if (minute != "") objMinute.value = "00";
		}
	}

	function dtCreateDatePicker(objButton, objDate, objMySqlDate) {

		addEvent(objButton, "click", function () {dtShowDatePicker(objDate,objMySqlDate)});
		addEvent(objDate, "change", function () {dtValidate(objDate,objMySqlDate)});
//		objDate.onchange = function () {dtValidate(objDate,objMySqlDate)}

//		objButton.onclick = function () {dtShowDatePicker(objDate,objMySqlDate)}
//		objDate.onchange = function () {dtValidate(objDate,objMySqlDate)}
	}

	function dtDocumentCompleted() {
		elements = document.body.getElementsByTagName("INPUT");
		for (i = 0; i < elements.length; i++) {
			if (elements[i].getAttribute("datePicker") == "true") {
				curElement = elements[i];

				id1 = Math.floor(Math.random()*99999999);
				id2 = Math.floor(Math.random()*99999999);

				timeHTML = "";
				mysqlDate = elements[i].value;
				if (mysqlDate != "") {
					curDate = dtDateFormat;
					curDate = curDate.replace("YYYY", mysqlDate.substring(0,4));
					curDate = curDate.replace("MM", mysqlDate.substring(5,7));
					curDate = curDate.replace("DD", mysqlDate.substring(8,10));
					lastValue["dt"+id1] = curDate;
				} else {
					curDate = "";
				}

				elements[i].insertAdjacentHTML("afterEnd", "<INPUT value=\"" + curDate + "\" datePicker=" + (curElement.datePicker ? "true" : "false") + " timePicker=" + (curElement.timePicker ? "true" : "false") + " style=\"width: " + curElement.offsetWidth + "\" type=\"text\" id=\"dt" + id1 + "\"><INPUT type=\"button\" value=\"...\" id=\"dt" + id2 + "\">" + timeHTML);
				eval("dtCreateDatePicker(document.getElementById('dt" + id2 + "'), document.getElementById('dt" + id1 + "'), curElement);");
//				eval("dtCreateDatePicker(document.all.dt" + id2 + ", document.all.dt" + id1 + ", curElement);");

				curElement.style.visibility = "hidden";
				curElement.style.display = "none";
				i += 2;
			}
		}
		window.scrollTo(0,0);

	}

	function dtValidate(v,w) {

		dtValue = v.value;

		error = false;

		if (dtValue != "") {
			minute = "";
			hour = "";
			day = "";
			month = "";
			year = "";


			pos = dtDateFormat.indexOf("YYYY");
			if (pos != -1) {
				year = dtValue.substring(pos,pos+4);
			} else {
				pos = dtDateFormat.indexOf("YY");
				if (pos != -1) year = dtValue.substring(pos,pos+2) + 2000;
			}


			if (year < dtMinYear || year > dtMaxYear) {
				alert("Årstallet må være mellom " + dtMinYear + " og " + dtMaxYear + ".");
				error = true;
			} else {
				yearTmp = parseInt(year) + "";
				if (yearTmp.length != 4 || dtDateFormat.length != dtValue.length) {
					error = true;
				} else {
					pos = dtDateFormat.indexOf("MM");
					if (pos != -1) month = dtValue.substring(pos,pos+2);
		
					if (month == "") error = true;
					else {
						month--;
	
						pos = dtDateFormat.indexOf("DD");
						if (pos != -1) day = dtValue.substring(pos,pos+2);
						if (day == "") error = true;
					}

				}
				if (error) {
					alert("Feil datoformat (" + dtDateFormat + ")");
				} else {
					if (day.substring(0,1) == "0") day = day.substring(1,2);
					dt.setYear(year);
					dt.setMonth(month);
					dt.setDate(day);
					if (dt.getFullYear() != year || dt.getMonth() != month || dt.getDate() != day) {
						alert("Det er satt en ugyldig dato (" + dtValue + ")");
						error = true;
					} else if (w) {
						if (month < 9) month = "0" + (month + 1);
						else month++;
						if (day < 10) day = "0" + day;
						w.value = year + "-" + month + "-" + day;
					}
				}
			}

			if (error) {
				if (lastValue[v.id]) {
					v.value = lastValue[v.id];
				} else {
					v.value = "";
				}
			}

			lastValue[v.id] = v.value;

		} else {
			lastValue[v.id] = "";
			w.value = "";
		}


	}

	function dtBlur(comment) {
		focusCount--;		
		focusString += "blur(" + comment + "),";
		if (focusCount == 0) {
			setTimeout("dtFocusCount()",100);
//			alert(focusString);
		}
	}

	function dtFocus(comment) {
		focusCount++;
		focusString += "focus(" + comment + "),";
	}

	function dtFocusCount() {
		if (focusCount == 0) {
			document.all.dtPicker.style.visibility = "hidden";
			document.all.dtPicker.style.display = "none";
		}
	}


	function dtSelectDate(dateCell, closeWindow) {
		if (closeWindow === undefined) closeWindow = true;
		dateCell.style.backgroundColor = dtSelectedBackgroundColor;
		if (dtLastCell) dtLastCell.style.backgroundColor = "";
		dtLastCell = dateCell;

		if (closeWindow) {
			document.getElementById("dtPicker").style.visibility = "hidden";
			document.getElementById("dtPicker").style.display = "none";
//			document.all.dtPicker.style.visibility = "hidden";
//			document.all.dtPicker.style.display = "none";
		}

		dt.setDate(dateCell.innerHTML);

		selectedDate = dtDateFormat.replace("YYYY", dt.getFullYear());
		selectedDate = selectedDate.replace("YY", dt.getYear());
		selectedDate = selectedDate.replace("MM", (dt.getMonth() < 9 ? "0" : "") + (dt.getMonth() + 1));
		selectedDate = selectedDate.replace("DD", (dt.getDate() < 10 ? "0" : "") + dt.getDate());

		if (objMySqlValue && closeWindow) objMySqlValue.value = dt.getFullYear() + "-" + (dt.getMonth() < 9 ? "0" : "") + (dt.getMonth() + 1) + "-" + (dt.getDate() < 10 ? "0" : "") + dt.getDate();

		if (objValue) lastValue[objValue.id] = selectedDate;
		if (closeWindow) objValue.value = selectedDate;
	}


	function dtDrawMonth() {

		currentDate = new Date();
		dt2 = new Date(dt);
		selectedDate = dt2.getDate();
		dt2.setDate(1);

		r = "<TABLE onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" cellspacing=0 style=\"\">";
		r += "<TR>";

		for (day = 0; day <= 6; day++) {
			dayNo = ((day + dtFirstDay) > 6 ? (day + dtFirstDay - 7) : (day + dtFirstDay));
			r += "<TD onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" style=\"text-align: center; " + dtHeadingStyle + "\">" + dtDays[dayNo] + "</TD>";
		}


		curDay = dt2.getDay();
		colNo = 0;
	
		date = 0;
		beginDrawing = false;
		day = dtFirstDay;
		var r1;
		while (true) {
			if (colNo == 0) r += "</TR><TR>";

			if (day == curDay) beginDrawing = true;
			if (beginDrawing) {
				dt2.setDate(++date);
				if (dt2.getDate() != date) break;
				if (selectedDate == date) cellId = "id=\"selectedCell\"";
				else cellId = "";
				r += "<TD onFocus=\"dtFocus()\" onBlur=\"dtBlur()\"><SPAN onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" style=\"" + dtCellStyle + "; " + ((dt2.getFullYear() == currentDate.getFullYear() && dt2.getMonth() == currentDate.getMonth() && dt2.getDate() == currentDate.getDate()) ? "border: 1px solid black" : "") + "; text-align: center; padding: 0px; margin: 0px;\" onClick=\"javascript:dtSelectDate(this)\" " + cellId + " class=\"dtPickerDay\">" + date + "</SPAN></TD>";
//				r += "<TD onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" class=\"dtPickerDay2\"><SPAN onFocus=\"dtFocus()\" onBlur=\"dtBlur()\" sstyle=\"" + dtCellStyle + "; " + ((dt2.getFullYear() == currentDate.getFullYear() && dt2.getMonth() == currentDate.getMonth() && dt2.getDate() == currentDate.getDate()) ? "border: 1px solid black" : "") + "; text-align: center\" onClick=\"javascript:dtSelectDate(this)\" " + cellId + " class=\"dtPickerDay\">" + date + "</SPAN></TD>";
//				r += "<TD onFocus=\"dtFocus()\" onBlur=\"dtBlur()\"><SPAN " + cellId + " class=\"dtPickerDay\">" + date + "</SPAN></TD>";
//				r += "<TD onFocus=\"dtFocus()\" onBlur=\"dtBlur()\"><SPAN " + cellId + ">" + date + "</SPAN></TD>";
			} else {
				r += "<TD></TD>";
			}

			if (colNo++ == 6) colNo = 0;

			day = (day == 6 ? 0 : (day + 1));

		}

		r += "</TR></TABLE>";


		document.getElementById("dtContainer").innerHTML = r;
//		document.all.dtContainer.innerHTML = r;
//		return r;

	}


	function dtSetMonth(month) {
		dt.setDate(1);
		dt.setMonth(month);
		dtDrawMonth();
	}

	function dtSetYear(year) {
		dt.setDate(1);
		dt.setYear(year);
		dtDrawMonth();
	}


	function dtGetOffset(el) {

		o = el;		
		oTop = o.offsetTop;
		while(o.offsetParent!=null) {
			oParent = o.offsetParent;
			oTop += oParent.offsetTop;
			o = oParent;
		}

		o = el;

		oLeft = o.offsetLeft;
		while(o.offsetParent!=null) {
			oParent = o.offsetParent;
			oLeft += oParent.offsetLeft;
			o = oParent;
		}
		return {0:oLeft,1:oTop}

//                for (var lx=0,ly=el.offsetHeight;el!=null;
//                        lx+=el.offsetLeft,ly+=el.offsetTop,el=el.offsetParent);
//                return {0:lx,1:ly}
	}



	function dtShowDatePicker(obj,objMySql) {
		dt = new Date();

		objValue = obj;
		objMySqlValue = objMySql; 

		dtValue = obj.value;

		day = "";
		month = "";
		year = "";

		pos = dtDateFormat.indexOf("YYYY");
		if (pos != -1) {
			year = dtValue.substring(pos,pos+4);
		} else {
			pos = dtDateFormat.indexOf("YY");
			if (pos != -1) year = dtValue.substring(pos,pos+2) + 2000;
		}

		if (year < dtMinYear || year > dtMaxYear) {
			year = dt.getFullYear();
		}

		pos = dtDateFormat.indexOf("MM");
		if (pos != -1) month = dtValue.substring(pos,pos+2);
		if (month == "") month = dt.getMonth();
		else month--;

		pos = dtDateFormat.indexOf("DD");
		if (pos != -1) day = dtValue.substring(pos,pos+2);
		if (day == "") day = dt.getDate();

		if (day !== "" && month !== "" && year !== "") {
			dt.setYear(year);
			dt.setMonth(month);
			dt.setDate(day);
			document.getElementById("dtMonth").value = parseInt(month);
			document.getElementById("dtYear").value = parseInt(year);
//			document.all.dtMonth.value = parseInt(month);
//			document.all.dtYear.value = parseInt(year);
			dtDrawMonth();
			dtSelectDate(document.getElementById("selectedCell"),false);
//			dtSelectDate(document.all.selectedCell,false);
		}

		coord = dtGetOffset(obj);

		document.getElementById("dtPicker").style.left = coord[0] + "px";
		document.getElementById("dtPicker").style.top = coord[1] + "px";

		document.getElementById("dtPicker").style.visibility = "visible";
		document.getElementById("dtPicker").style.display = "inline";

		document.getElementById("dtMonth").style.width = 1 + "px";
		document.getElementById("dtYear").style.width = 1 + "px";

		document.getElementById("dtYear").style.width = 60 + "px";
		document.getElementById("dtMonth").style.width = (document.getElementById("dtPicker").offsetWidth - 60) + "px";
		document.getElementById("dtPicker").focus();

//		document.all.dtPicker.style.left = coord[0];
//		document.all.dtPicker.style.top = coord[1];

//		document.all.dtPicker.style.visibility = "visible";
//		document.all.dtPicker.style.display = "inline";

//		document.all.dtMonth.style.width = 1; 
//		document.all.dtYear.style.width = 1;

//		document.all.dtYear.style.width = 60;
//		document.all.dtMonth.style.width = document.all.dtPicker.offsetWidth - 60; 
//		document.all.dtPicker.focus();
	}











