//Calender pop up function

function Calendar() {
    this.showWeekNumbers = false;
    this.showNone = false;
    this.showToday = true 
    this.headerClass = "m-cal-hdr";
    this.todayClass = "m-cal-tdy";
    this.dayClass = "m-cal-day";
    this.trailingDayClass = "m-cal-tgd";
    this.weekNumberClass = "m-cal-wkn";
    this.dayNameClass = "m-cal-dyn";
    this.buttonClass = "m-cal-btn";
    this.dayLinkClass = "m-cal-lnk";
    this.selectedDayClass = "m-cal-sel";
    this.height = 220;
    this.width = 200;
    this.homeURL = "/";
    this.days = new Array(7);
    this.days[0] = "Sunday";
    this.days[1] = "Monday";
    this.days[2] = "Tuesday";
    this.days[3] = "Wednesday";
    this.days[4] = "Thursday";
    this.days[5] = "Friday";
    this.days[6] = "Saturday";
    this.months = new Array(12);
    this.months[ 0] = "January";
    this.months[ 1] = "February";
    this.months[ 2] = "March";
    this.months[ 3] = "April";
    this.months[ 4] = "May";
    this.months[ 5] = "June";
    this.months[ 6] = "July";
    this.months[ 7] = "August";
    this.months[ 8] = "September";
    this.months[ 9] = "October";
    this.months[10] = "November";
    this.months[11] = "December";
}

Calendar.prototype.addMonths = function(dDate, nMonths) {
    // Adds (or subtracts) months to (or from) a date and returns a new date object.
    var m = dDate.getMonth() + nMonths;
    var y = dDate.getFullYear();
    while (m < 0) {
        m = m + 12;
        y--;
    }
    while (m > 11) {
        m = m - 12;
        y++;
    }
    var d = new Date(dDate);

    d.setMonth(m);
    d.setFullYear(y);
    return d;
}

Calendar.prototype.addYears = function(dDate, nYears) {
    // Adds (or subtracts) years to (or from) a date and returns a new date object.
    var y = dDate.getFullYear() + nYears;
    var d = new Date(dDate);
    d.setFullYear(y);
    return d;
}

Calendar.prototype.getWeek = function(dDate) {
    // returns the ISO week number of the specified date.
    var year = dDate.getFullYear();
    var month = dDate.getMonth();
    var day = dDate.getDate();

    // Create a date object for 1st January this year:
    var newYear = new Date(year,0,1);

    // Calculate the offset of the day of the week of the 1st from Monday:
    var offset = 7 + 1 - newYear.getDay();

    // If over one week then set to 1 day:
    if (offset == 8) offset = 1;

    // Calculate the day of the year (daynum) since the
    // 1st of January:
    var daynum = ((Date.UTC(year,month,day,0,0,0) -
                   Date.UTC(year,0,1,0,0,0)) /1000/60/60/24) + 1;

    // Use daynum and offset to work out the week number
    var weeknum = Math.floor((daynum-offset+7)/7);

    // If the weeknum is zero, then the date falls within the
    // last week of last year
    if (weeknum == 0) {

        // decrease year by 1
        year--;

        // Create a date object for 1st January last year:
        var prevNewYear = new Date(year,0,1);

        // Calculate the offset for last year:
        var prevOffset = 7 + 1 - prevNewYear.getDay();

        // Check for 53rd week
        if (prevOffset == 2 || prevOffset == 8) weeknum = 53; else weeknum = 52;
    }
    return weeknum;
}

Calendar.prototype.select = function(mo, dy, yr) {
    var fld = calendar.targetField;
    if (fld != null) {
        var flag = (mo == 0 || dy == 0 || yr == 0)
        fld.value = (flag ? '' : (mo + '/' + dy + '/' + yr));
	
/*		USed to reset Drop down boxes Not being used 
		eval("var fx = fld.form.elements[fld.name + 'y'];");
		var geo_f;
		f = 'fld.form.'+fld.name
		var fx = eval(f+'y');
        selectValue(fx, yr);
//        eval("fx = fld.form.elements[fld.name + 'm'];");
		var fx = eval(f+'m');
		selectValue(fx, mo);
//        eval("fx = fld.form.elements[fld.name + 'd'];");
		var fx = eval(f+'d');
        selectValue(fx, dy);*/
    }
}

Calendar.prototype.navigate = function(n) {
    this.monthOffset += n;
    if (IE) {
        this.show(this.window);
    } else {
        this.show(this.calendarWindow);
    }
}

Calendar.prototype.hide = function() {
    if (IE) {
        var cf = document.all.CalFrame;
        cf.style.display = "none";
    } else {
        this.calendarWindow.close();
    }
}

Calendar.prototype.show = function(win)
{
    var doc;
    var cal;
    if (win == null) {
        doc = window.document;
        cal = 'opener.calendar';
    } else {
        this.window = win;
        doc = win.document;
        if (IE) {
            cal = 'window.parent.document.all.CalFrame.calendar';
        } else {
            cal = 'opener.calendar';
            this.calendarWindow = win;
        }
    }
    var fld = this.targetField;
    var offset = this.monthOffset;
    var selDate = new Date(fld.value);
    if (isNaN(selDate)) {
        selDate = new Date();
    }

    var dispDate = this.addMonths(selDate, offset);
    var curDate = new Date();

    if (IE) {
        doc.open("text/html", "replace");
    }
    doc.writeln('<html><head><title>Date Selection<\/title>');
	doc.writeln('<!-- #include file ="calender.css" -->');
    doc.writeln('<link rel="stylesheet" type="text\/css" href="calender.css">');
    doc.writeln('<script language="javascript" type="text\/javascript">');
    doc.writeln('var calendar = ' + cal + ';');         // so we have a reference on this page

    doc.writeln('function select(mo, dy, yr) {');
    doc.writeln('    calendar.select(mo, dy, yr);');
    doc.writeln('    calendar.hide();');
    doc.writeln('}');

    doc.writeln('<\/script><\/head><body marginwidth="0" marginheight="0" topmargin=0" leftmargin="0" >');
    doc.write('<table cellspacing="0" cellpadding="2" border="0" width="100%">');
    doc.writeln('<tr  class="' + this.headerClass + '">');
    // "previous year" button
    //doc.writeln('<td align="left" valign="top" width="10%"><a class="' + this.headerClass + '" href="javascript:calendar.navigate(-12);" title="Previous Year"><!--&lt;&lt;--><\/a><\/td>');
   // doc.writeln('<td valign="top" width="60%" align="center">&nbsp;<\/td>');
    // "previous month" button
    doc.writeln('<td align="left" valign="top" width="10%"><a class="' + this.headerClass + '" href="javascript:calendar.navigate(-1);" title="Previous Month">&lt;<\/a><\/td>');
    // header
	doc.writeln('<td valign="top" width="20%" align="center">&nbsp;<\/td>');
    doc.writeln('<td valign="top" width="60%" align="center"><nobr>' + this.months[dispDate.getMonth()] + '<\/nobr><\/td>');
    // "next month" button
	doc.writeln('<td valign="top" width="10%" align="center">&nbsp;<\/td>');
    doc.writeln('<td align="right" valign="top" width="10%"><a class="' + this.headerClass + '" href="javascript:calendar.navigate(1);" title="Next Month">&gt;<\/a><\/td>');
    // "next year" button
    //doc.writeln('<td align="right" valign="top" width="10%"><a class="' + this.headerClass + '" href="javascript:calendar.navigate(12);" title="Next Year"><!--&gt;&gt;--><\/a><\/td>');
 
    doc.writeln('<\/tr><tr><td colspan="5"><table border="0" cellspacing="2" cellpadding="1" width="100%"><tr>');
    // day headers
    if (this.showWeekNumbers) {
        doc.writeln('<td class="' + this.dayNameClass + '">&nbsp;<\/td>');
    }
    for (i = 0; i < this.days.length; i++) {
    //       doc.writeln('<td class="' + this.dayNameClass + '" align="center">' + this.days[i].charAt(0) + this.days[i].charAt(1) + '<\/td>');
       if (this.days[i] == "Thursday")
          doc.writeln('<td class="' + this.dayNameClass + '" align="center">' + this.days[i].charAt(0) + this.days[i].charAt(1) + '<\/td>');
      else
       doc.writeln('<td class="' + this.dayNameClass + '" align="center">' + this.days[i].charAt(0)  + '<\/td>');
   
    }
    doc.writeln('<\/tr>\n');
    // days
    var d = new Date(dispDate);
    d.setDate(1);
    var weekday = d.getDay(); // 0=Sun,1=Mon,2=Tue,3=Wed,4=Thu,5=Fri,6=Sat
    d.setDate(1 - weekday);
    var title = "";
    var className = "";
    for (i = 1; i <= 6; i++) {
        doc.write('<tr>');
        if (this.showWeekNumbers) {
            doc.writeln('<td width="10" align="right"><span class="' + this.weekNumberClass + '">' + this.getWeek(d) + '<\/span><\/td>');
        }
        title = ""
        for (j = 1; j <= 7; j++) {
            if (curDate.getMonth() == d.getMonth() && curDate.getDate() == d.getDate() && d.getFullYear() == curDate.getFullYear()) {
                // current date
                className = this.todayClass;
            } else if (selDate.getMonth() == d.getMonth() && selDate.getDate() == d.getDate() && selDate.getFullYear() == d.getFullYear()) {
                className = this.selectedDayClass;
            } else if (d.getMonth() == dispDate.getMonth()) {
                // day of the current month
                className = this.dayClass;
            } else {
                // day of a trailing month
                className = this.trailingDayClass;
            }
            doc.write('<td class="' + className + '" align="center">');
            doc.write('<a class="' + this.dayLinkClass + '" href="javascript:select(' + (d.getMonth() + 1) + ',' + d.getDate() + ',' + d.getFullYear() + ');">');
            doc.writeln('' + d.getDate() + '<\/a><\/td>');
            d.setDate(d.getDate() + 1);
        }
        doc.write('<\/tr>');
        
    }

   doc.writeln('<\/table><\/td><\/tr>');
    // Bottom line for links
    doc.writeln('<tr class="' + this.headerClass + '">');
    // "previous year" button
    doc.writeln('<td align="left" valign="top" width="10%"><a class="' + this.headerClass + '" href="javascript:calendar.navigate(-12);" title="Previous Year">&lt;&lt;<\/a><\/td>');
    // "previous month" button
    doc.writeln('<td align="left" valign="top" width="10%"><a class="' + this.headerClass + '" href="javascript:calendar.navigate(-1);"  ><\/a><!--&lt;-->&nbsp;<\/td>');
    // header
    doc.writeln('<td valign="top" width="60%" align="center"><nobr>' + dispDate.getFullYear() + '<\/nobr><\/td>');//this.months[dispDate.getMonth()] + ' '
    // "next month" button
//    doc.writeln('<td align="right" valign="top" width="10%">&nbsp;<\/td>');
    // "next year" button
		 doc.writeln('<td valign="top" width="20%" align="center">&nbsp;<\/td>');
    doc.writeln('<td align="right" valign="top" width="10%"><a class="' + this.headerClass + '" href="javascript:calendar.navigate(12);" title="Next Year">&gt;&gt;<\/a><\/td>');
    doc.writeln('<\/tr><tr><td colspan="5"><table border="0" cellspacing="2" cellpadding="1" width="100%"><tr>'); 
     // for today's date and none 
        if (this.showNone || this.showToday) {
        doc.writeln('<tr><!--<td colspan="5"><table border="0" width="100%" cellspacing="4" cellpadding="2"><tr>-->');
        var n = ((this.showNone && this.showToday) ? 50 : 100);
        var align;
        if (this.showToday) {
            d = new Date();
            align = (this.showNone ? "right" : "center");
            doc.writeln('<td width="' + n + '%" align="' + align + '"><a class="' + this.buttonClass + '" href="javascript:select(' + (d.getMonth() + 1) + ',' + d.getDate() + ',' + d.getFullYear() + ');">Today</a></td>');
        }
        if (this.showNone) {
            align = (this.showToday ? "left" : "center");
            doc.writeln('<td width="' + n + '%" align="' + align + '"><a class="' + this.buttonClass + '" href="javascript:select(0,0,0);">None</a></td>');
        }
        doc.writeln('<!--<\/tr><\/table>--><\/td><\/tr>');
		}
    doc.writeln('<\/table><\/table><\/body><\/html>');
    doc.close();
}
var calendar = null;
var win = null;

function showCalendar(fld, btn, req) {
    if (calendar == null) {
        calendar = new Calendar();
    }
    var resync = (calendar.targetField != fld);
    calendar.targetField = fld;
    calendar.monthOffset = 0;
    calendar.showNone = !req;
    var ver = parseInt(window.navigator.appVersion);
    var win;
    if (ver <= 4) {
          win = window.open('','mtcal','width=' + calendar.width + ',height=' + calendar.height + 'titlebar=no,status=no,top=300,left=200');
         } else {
            var fldPos = fld.form.elements[fld.name];
            var iTop = fldPos.offsetTop + document.body.offsetHeight;
            var iLeft = fldPos.offsetLeft + document.body.offsetLeft //+ 200;
            alert (iLeft + " " + iTop);
            win = window.open('','mtcal','width=' + calendar.width + ',height=' + calendar.height + ',titlebar=no,status=no,top=' +  iTop  + ',left=' + iLeft);
        }
        win.focus();
	    calendar.show(win);
	return (false);
  
}


function checkDate(src, fld)
{
    eval("var fy = fld.form.elements[fld.name + 'y'];");
    eval("var fm = fld.form.elements[fld.name + 'm'];");
    eval("var fd = fld.form.elements[fld.name + 'd'];");

    if (src[src.selectedIndex].value == 0) {
        selectValue(fy, 0);
        selectValue(fm, 0);
        selectValue(fd, 0);
        fld.value = '';
    } else {
        var y  = parseInt(fy[fy.selectedIndex].value);
        var m  = parseInt(fm[fm.selectedIndex].value);
        var d  = parseInt(fd[fd.selectedIndex].value);

        if (y == 0 || m == 0 || d == 0) {
            fld.value = '';
        } else {
            var dt = new Date(m + '/' + d + '/' + y);

            y = (dt.getYear() > 1900 ? dt.getYear() : 1900 + dt.getYear());
            m = dt.getMonth() + 1;
            d = dt.getDate();

            fld.value = m + '/' + d + '/' + y;
       //     selectValue(fy ,y);
          //  selectValue(fm, m);
           // selectValue(fd, d);
        }
    }
}


var IE =false;// (document.all ? true : false);

function selectValue(fld, value)
{     
			var found = false;
			if (fld != null) {
				for (var i = 0; i < fld.options.length; i++) {
					if (fld[i].value == value) {
						alert ('located ' + fld.name+' with val ' +value);
						found = true
						fld.selectedIndex = i;
						break;
					}
				}
			if (!found){
				//Assuming the required year is not found 
				alert("Not Found " + fld.name +" with value " + value)		
				var newoption = new Option( value, value); 
				fld.options[fld.options.length] = newoption

				selectValue(fld,value);
				}
			}
}

function setDate(fld){
	alert ('setting date')
	var t = fld.value.split('/')
	alert (t.length);
 	var f = 'fld.form.'+fld.name
	var fx = eval(f+'y')
    selectValue(fx, t[2]);
	var fx = eval(f+'d')
    selectValue(fx, t[1]);
	var fx = eval(f+'m')
    selectValue(fx, t[0]);
}

