function pickDate(field) { var element = event.srcElement; if(!element) element = event.target; var x = findPosX(element); var y = findPosY(element); var datePick = new HDDatePicker(); datePick.Show(x,y, function(date,weekSele) { field.value = date.getUTCFullYear() + "-" + (date.getMonth()<9?"0":"") + (date.getMonth()+1) + "-" + (date.getDate()<9?"0":"") + date.getDate(); datePick.Close(); }); } Date.prototype.getWeek = function (dowOffset) { /*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */ dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero var newYear = new Date(this.getFullYear(),0,1); var day = newYear.getDay() - dowOffset; //the day of week the year begins on day = (day >= 0 ? day : day + 7); var daynum = Math.floor((this.getTime() - newYear.getTime() - (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1; var weeknum; //if the year starts before the middle of a week if(day < 4) { weeknum = Math.floor((daynum+day-1)/7) + 1; if(weeknum > 52) { nYear = new Date(this.getFullYear() + 1,0,1); nday = nYear.getDay() - dowOffset; nday = nday >= 0 ? nday : nday + 7; /*if the next year starts before the middle of the week, it is week #1 of that year*/ weeknum = nday < 4 ? 1 : 53; } } else { weeknum = Math.floor((daynum+day-1)/7); } return weeknum; }; HDDatePicker = Class.create(); HDDatePicker.prototype = { months : new Array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"), div : null, startDate : null, callback : null, initialize : function() { this.div = document.createElement("DIV"); this.div.style.position = "absolute"; this.div.style.width = "193px"; this.div.style.zIndex = "10000"; this.div.style.background = "#ffffff"; this.startDate = new Date(); this.startDate.setDate(1); } , Show : function(x,y,clb) { this.callback = clb; this.div.style.left = x + "px"; this.div.style.top = y + "px"; this.Render(); document.body.appendChild(this.div); }, Render : function() { this.div.innerHTML = ""; var table = document.createElement("table"); table.cellSpacing = "0"; table.cellPadding = "0"; table.className = "datepopuptable"; table.width = "100%"; var tr = table.insertRow(-1); var td = tr.insertCell(-1); td.colSpan = 8; td.className = "datepickmenu"; td.align = "right"; var link = document.createElement("a"); link.href = "javascript:void(0)"; link.className = "datepickclose"; link.appendChild(document.createTextNode("X")); link.datePicker = this; link.onclick = function() { this.datePicker.Close(); } td.appendChild(link); tr = table.insertRow(-1); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("")); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("M")); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("T")); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("O")); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("T")); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("F")); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("L")); td = tr.insertCell(-1); td.className = "datepickheader"; td.appendChild(document.createTextNode("S")); this.div.appendChild(table); var tr = null; // render table var offset = new Array(-5, 1, 0, -1, -2, -3, -4); var daysInMonth = 32 - new Date(this.startDate.getFullYear(), this.startDate.getMonth(), 32).getDate(); var startDay = offset[this.startDate.getDay()]; var endDay = daysInMonth + (8 - new Date(this.startDate.getFullYear(), this.startDate.getMonth(), daysInMonth).getDay()); var tr = null; var date = new Date(this.startDate); var dc = 0; var today = new Date(); for(var i=startDay;idaysInMonth)?"datepickdayd":"datepickday"; if(link.date.getDate()==today.getDate() && link.date.getMonth()==today.getMonth() && link.date.getFullYear()==today.getFullYear()) link.className = link.className = " today"; td.appendChild(link); dc++; } tr = table.insertRow(-1); td = tr.insertCell(-1); td.className = "datepickfoot"; var link = document.createElement("a"); link.appendChild(document.createTextNode("<")); link.href = "javascript:void(0)"; link.datePicker = this; link.className = "datepickprev"; link.onclick = function() { this.datePicker.startDate.setMonth(this.datePicker.startDate.getMonth()-1); this.datePicker.Render(); } td.appendChild(link); td = tr.insertCell(-1); td.className = "datepickfoot"; td.colSpan = 6; td.appendChild(document.createTextNode(this.months[this.startDate.getMonth()] + " - " + this.startDate.getFullYear())); td = tr.insertCell(-1); td.className = "datepickfoot"; var link = document.createElement("a"); link.href = "javascript:void(0)"; link.datePicker = this; link.className = "datepicknext"; link.onclick = function() { this.datePicker.startDate.setMonth(this.datePicker.startDate.getMonth()+1); this.datePicker.Render(); } link.appendChild(document.createTextNode(">")); td.appendChild(link); } , handleCallback : function() { this.datePicker.callback(this.date,false); } , handleWeekCallback : function() { this.datePicker.callback(this.date,true); } , Close : function() { document.body.removeChild(this.div); } } /** * returns the absolute Y position of the object **/ function findPosY(obj) { var curtop = 0; if (obj.offsetParent) { while (obj.offsetParent) { var xy = 0; curtop += obj.offsetTop + xy; obj = obj.offsetParent; } } else if (obj.y) curtop += obj.y; return curtop; } /** * returns the absolute X position of the object **/ function findPosX(obj) { var curleft = 0; if (obj.offsetParent) { while (obj.offsetParent) { curleft += obj.offsetLeft; obj = obj.offsetParent; } } else if (obj.x) curleft += obj.x; return curleft; }