    var datePickerReturnField = null;
    var curr = new Date();
    var tmp = new Date();
	
	var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	
	var IE = document.all?true:false;
	if (!IE) document.captureEvents(Event.MOUSEMOVE)
		document.onmousemove = getMouseXY;
    
    var yearPrefix = 0;
    if (!IE) {
        yearPrefix = 1900;
    }

    
	var tempX = 0;
	var tempY = 0;
	function getMouseXY(e) {
		if (IE) { // grab the x-y pos.s if browser is IE
			tempX = event.clientX + document.body.scrollLeft;
			tempY = event.clientY + document.body.scrollTop;
		}
		else {  // grab the x-y pos.s if browser is NS
			tempX = e.pageX;
			tempY = e.pageY;
		}  
		if (tempX < 0){tempX = 0;}
		if (tempY < 0){tempY = 0;}

		return true;
	}
	
	function pickdate(field, doHide) {
        var picker = document.getElementById("calendarPlaceholder");
        picker.style.display = picker.style.display == "none" ? "block" : (doHide ? "none" : "block") ;
		datePickerReturnField = field;
		
		if (field.value != "" ) {
			var oldVals = field.value.split("/");
			curr.setDate(oldVals[0]);
			tmp.setDate(oldVals[0]);
			curr.setMonth(oldVals[1] - 1);
			tmp.setMonth(oldVals[1] - 1);
			curr.setYear(oldVals[2]);
			tmp.setYear(oldVals[2]);
			drawCalendar(curr);
		} else {
			curr = new Date();
			tmp = new Date();
			drawCalendar(curr);
		}
		
		getWindowSize();
		var putToX = tempX;
		var putToY = tempY;
		
		if (tempX + 200 > document.windowWidth) {
			putToX = document.windowWidth - 250;
		}
		
		if (tempY + 200 > document.windowHeight) {
			putToY = document.windowHeight - 250;
		}
		
		picker.style.left = putToX;
		picker.style.top = putToY;
	}

	document.windowWidth = 0;	
	document.windowHeight = 0;
	
	function getWindowSize() {
		var N = window.navigator.appName.substring(0,8);
		var dd = document;
		var ww = window;
		
		var w;
		var h;
		if(N=="Microsof") {
			w = dd.body.clientWidth;
			h = document.body.clientHeight;
		}
		if(N=="Netscape") {
			w = ww.innerWidth;
			h = window.innerHeight;
		}
		document.windowWidth = w;
		document.windowHeight = h;
	}
    
    function pickerReturnValue(day, month, year) {
        if (datePickerReturnField != null) {
            datePickerReturnField.value = (day < 10 ? "0" + day : day) + "/" + (month < 10 ? "0" + month : month) + "/" + (year < 100 ? year + 1900 : year);
			hideCalendar();
        } else {
            alert("Don't try to fool me!");
        }
    }
	
	function hideCalendar() {
		var picker = document.getElementById("calendarPlaceholder");
		picker.style.display = "none";
	}
	
	function cleanValue() {
        if (datePickerReturnField != null) {
            datePickerReturnField.value = "";
			hideCalendar();
        } else {
            alert("Don't try to fool me!");
        }
	}

    function drawCalendar(date) {
    
        var res = "";
        var tmpDate = new Date(date);
        tmpDate.setDate(1);
        var startFrom = tmpDate.getDay();

        res += "<div class='calendarHeader'>";
        res += "<div style='float:right;'><a class='whitelinks' href='javascript:hideCalendar()'>X</a></div>" + months[tmp.getMonth()] + " " + (yearPrefix + tmp.getYear()) + "";
        res += "</div>";
        res += "<div class='calendarHeader'>";
        res += "<table width='100%' cellspacing=0 cellpadding=0><tr>";
        res += "<td><a class='whitelinks' href='javascript:moveToPrevYear()'>&lt;&lt;</a>&nbsp;&nbsp;</td>";
        res += "<td><a class='whitelinks' href='javascript:moveToPrevMonth()'>&lt;</a></td>";
        res += "<td align='center'>&nbsp;&nbsp;<a class='whitelinks' href='javascript:cleanValue()'>reset</a>&nbsp;&nbsp;</td>";
        res += "<td align='right'><a class='whitelinks' href='javascript:moveToNextMonth()'>&gt;</a>&nbsp;&nbsp;</td>";
        res += "<td align='right'><a class='whitelinks' href='javascript:moveToNextYear()'>&gt;&gt;</a></td>";
        res += "</tr>";
        res += "</table>";
        res += "</div>";
        
        res += "<table class='calendarTable'>";
        res += "<tr class='calendarDaysRow'><td class='weekend'>Sun</td><td>Mon</td><td>Tue</td><td>Wed</td><td>Thr</td><td>Fri</td><td class='weekend'>Sat</td></tr>";
        if (startFrom > 0) {
            res += "<tr class='calendarRow'>";
            for (var i = 0; i < startFrom; i++ ) {
                res += "<td class='calendarEmptyDay'>&nbsp;</td>";
            }
        }
        var i;
		var isSelected = "";
        for (i = 0; i < countMonthDays(tmpDate); i++) {
            if ((i + startFrom) % 7 == 0) {
                res += "</tr><tr  class='calendarRow'>";
            }
			
			if (curr.getDate() == (i + 1) && curr.getMonth() == tmpDate.getMonth() && curr.getYear() == tmpDate.getYear()) {
				isSelected = "Selected"
			} else {
				isSelected = ""
			}
			res += "<td align='center' class='calendarDay" + isSelected + "'><a href=\"javascript:void(0)\" onclick=\"pickerReturnValue(" + (i + 1) + ", " + (tmpDate.getMonth() + 1) + ", " + (yearPrefix + tmpDate.getYear()) + ")\">" + (i + 1) + "</a></td>";
        }
        while ((i + startFrom) % 7 != 0) {
            res += "<td class='calendarEmptyDay'>&nbsp;</td>";
            i++;
        }
        res += "</tr></table>";
        res += "</td></tr>";
        res += "</table>";
        document.getElementById("calendarPlaceholder").innerHTML = res;
    }
    
    function countMonthDays (date) {
        var first = firstOfMonth(date);
        var last = lastOfMonth(date);
        var interval = last.getTime() - first.getTime();
        return Math.round(interval/(1000 * 60 * 60 * 24)) + 1;
    }
    
    function lastOfMonth(date){
        eomDate = new Date(date);
        eomDate.setMonth(eomDate.getMonth() + 1 );
        eomDate.setDate(1);
        eomDate.setDate( eomDate.getDate() - 1);
        return eomDate;
    }
    function firstOfMonth(date){
        dtNextMonth = new Date(date);
        dtNextMonth.setMonth(dtNextMonth.getMonth());
        dtNextMonth.setDate(1);
        return(dtNextMonth);
    }
    
    function moveToPrevYear() {
        var currYear = tmp.getYear();
        currYear--;
        tmp.setYear(yearPrefix + currYear);
        //curr.setMonth(11);
        drawCalendar(tmp);
    }
    
    function moveToNextYear() {
        var currYear = tmp.getYear();
        currYear++;
        tmp.setYear(yearPrefix + currYear);
        //curr.setMonth(0);
        drawCalendar(tmp);
    }

    function moveToMonth(month) {
        var currMonth = tmp.getMonth();
        var currYear = tmp.getYear();
        currMonth = month;
        tmp.setMonth(currMonth);
        tmp.setYear(yearPrefix + currYear);
        drawCalendar(tmp);
    }
	
	function moveToNextMonth() {
        var currYear = tmp.getYear();
		var currMonth = tmp.getMonth();
		
		currMonth++;
		if (currMonth >= 12) {
			currYear++;
			currMonth = 0;
		}
        tmp.setMonth(currMonth);
        tmp.setYear(yearPrefix + currYear);
        drawCalendar(tmp);
	}
	
	function moveToPrevMonth() {
        var currYear = tmp.getYear();
		var currMonth = tmp.getMonth();
		
		currMonth--;
		if (currMonth < 0) {
			currYear--;
			currMonth = 11;
		}
        tmp.setMonth(currMonth);
        tmp.setYear(yearPrefix + currYear);
        drawCalendar(tmp);
	}
    

