// MS_Calendar.js , Created by MarvinSuo@Keymind, Inc. on 12/12/2001, 12/13/2001
// v 1.01.12.13.01

// Parameters....///////////////////////
var MS_CAL_BORDER = "thin groove gray";
var MS_CAL_BGCOLOR = "#ffffcc";
var MS_CAL_FONT = "Verdana, Arial";
var MS_CAL_FONTSIZE = "9px";
var MS_CAL_WIDTH = 200;
var MS_CAL_HEIGHT = 210;
////////////////////////////////////////



var isNS4 = (document.layers) ? true: false;
var g_formname, g_fieldname;
var g_curr_month, g_curr_year;
var g_dateformat = "M/D/Y";


var g_oCal;
var g_month_name = ["January", "Febrary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var g_weekday_name = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
var g_Top=0;

if(isNS4) {
	MS_CAL_OrigWidth  = window.innerWidth;
	MS_CAL_OrigHeight = window.innerHeight;
	window.onresize = function (){if (window.innerWidth == MS_CAL_OrigWidth  && window.innerHeight == MS_CAL_OrigHeight ) return;window.history.go(0);}
	document.write("<layer id=MS_CAL_LAYER width=200 visibility=hide></layer>");
}


function MS_ShowCalendar(olink, formname, fieldname, format, curr_year, curr_month  ){
	if (!g_oCal){
		if(isNS4) {
			g_oCal = document.layers["MS_CAL_LAYER"];
			g_oCal.bgColor = MS_CAL_BGCOLOR ;
			g_oCal.clip.width = MS_CAL_WIDTH  ;
//			g_oCal.clip.height = MS_CAL_HEIGHT ;
		}else{
			g_oCal = document.createElement("DIV");
			document.body.appendChild(g_oCal);
			g_oCal .style.position = "absolute";
			g_oCal .style.width = MS_CAL_WIDTH  + "px";
			g_oCal .style.height = MS_CAL_HEIGHT + "px";
			g_oCal .style.border = MS_CAL_BORDER ;
			g_oCal .style.backgroundColor = MS_CAL_BGCOLOR ;
			g_oCal .style.overflow = "visible";
		}
	}
	if(isNS4) {
		var objlink =  document.anchors[olink];
		g_oCal.pageX = objlink.x;
		g_oCal.pageY = objlink.y - MS_CAL_HEIGHT ;
		g_Top = objlink.y + 20;
		g_oCal.visibility = "show";
	}else{
		var objlink =  document.getElementById(olink);
		g_oCal .style.visibility = "visible";
		pos = MS_Cal_getPosition(objlink)
		g_oCal .style.left = pos[0];
		g_oCal .style.top = pos[1] - MS_CAL_HEIGHT ;
		g_Top= pos[1] + parseInt(objlink.offsetHeight,10);
	}

	if(curr_year)g_curr_year=curr_year;   
	if(curr_month)g_curr_month=curr_month;


	MS_RefreshCalendar();
	MS_MoveCalendar();
	g_formname = formname;
	g_fieldname = fieldname;
	if (format) g_dateformat = format;

}

function MS_Cal_getPosition(htmlObj)
{
	var Pos = new Array(2);

	Pos[0] =  parseInt(htmlObj.offsetLeft,10); 
	Pos[1] =  parseInt(htmlObj.offsetTop,10);
	obj = htmlObj.offsetParent;
	while(obj){
		Pos[0] +=  parseInt(obj.offsetLeft,10);
		Pos[1] +=  parseInt(obj.offsetTop,10)
		obj = obj.offsetParent;
	}
	return Pos;
}

function MS_MoveCalendar()
{
	var t = MS_getTop() +5;
	MS_setTop ( t  );
	 MS_setClip(g_Top - t);
	if(t < g_Top) setTimeout("MS_MoveCalendar()", 5);
}
function MS_getTop()
{	if(isNS4){	return g_oCal.y;	}
	else{return  parseInt(g_oCal .style.top, 10);	}	
}
function MS_setTop(iTop)
{	if(isNS4){	g_oCal.y = iTop;	}
	else{g_oCal.style.top = iTop + "px";}
}
function MS_setClip(iTop)
{	if(isNS4){	g_oCal.clip.top = iTop;}
	else{g_oCal.style.clip = "rect(" + iTop + "px auto auto auto)";}
}

function MS_RefreshCalendar()
{
	if(isNS4){	g_oCal.document.open();g_oCal.document.write(MS_GenerateCalendar());g_oCal.document.close();
	}else{ g_oCal .innerHTML  = MS_GenerateCalendar();}
}


function MS_MoveMonth(dM, dY)
{	if (!dY) dY = 0;
	newDate = new Date(g_curr_year + dY,  g_curr_month -1 + dM , 1 );
	g_curr_month = newDate.getMonth() + 1;
	g_curr_year = newDate.getFullYear();
	MS_RefreshCalendar()
}
function MS_goToday(){today = new Date(); g_curr_month = today.getMonth()+1; g_curr_year = today.getFullYear(); MS_pick(today.getDate());}
function MS_pick(day)
{
	document.forms[g_formname].elements[g_fieldname].value = MS_formatConvert(g_curr_year,g_curr_month,day, g_dateformat);
	if (document.forms[g_formname].elements[g_fieldname].onchange)
	{
	   elem = document.forms[g_formname].elements[g_fieldname];
	   
	   if ( elem.fireEvent ) // IE 5.5(WIN)
        {
            elem.fireEvent("onChange");
        }
        else // Mozilla, Safari...
        {
            var evt = opener.document.createEvent("HTMLEvents");
            evt.initEvent("change",true,true);
            elem.dispatchEvent( evt );
        }

	   }
	MS_HideCalendar();
}
function MS_HideCalendar(){if(isNS4) {g_oCal.visibility="hide";} else {g_oCal.style.visibility = "hidden";}}
function MS_formatConvert(y, m, d, p_format)
{
	var result = ""; 	fl = p_format.length;
	for(var i=0; i<fl; i++){
		switch(p_format.charAt(i)){
			case "m" : result += m.toString(); break;
			case "M" : result += (m<=9)? "0"+m.toString(): m.toString(); break;
			case "d" : result += d.toString(); break;
			case "D" : result += (d<=9)? "0"+d.toString(): d.toString(); break;
			case "y" : result += y.toString().substring(2,4); break;
			case "Y" : result += y.toString() ; break;
			case "n" : result += g_month_name[m-1].substring(0,3); break;
			case "N" : result += g_month_name[m-1];break;
			case "W" : result += g_weekday_name[new Date(y, m-1, d).getDay()]; break;
			case "w" : result += g_weekday_name[new Date(y, m-1, d).getDay()].substring(0,3); break;

			default : result += p_format.charAt(i);
		}
	}
	return result;
}

function MS_GenerateCalendar()
{
	var today = new Date();
	var curr_date = new Date (g_curr_year, g_curr_month-1,1);
	if(isNaN(curr_date)) curr_date = today;  

	var curr_month = curr_date.getMonth() + 1; g_curr_month = curr_month;
	var curr_year = curr_date.getFullYear(); g_curr_year = curr_year;
	var first_date = new Date(curr_year, curr_month-1, 1);
	var last_date = new Date( new Date( curr_year, curr_month,1).getTime() - 86400000);
	var wd_first = first_date.getDay(); 
	var satday = 7 - wd_first;
	var last_day = last_date.getDate();
	var str="";

	var dayofToday = ((today.getMonth()+1 == g_curr_month) && (today.getFullYear() == g_curr_year))? today.getDate(): 0;
	var prev_month = new Date(curr_year, curr_month-2, 1);
	var next_month = new Date(curr_year, curr_month, 1);
	var TR_attr = "align=right";
	str += ""
	str += "<br><center><table border=0 cellpadding=3 cellspacing=0 style='font-family:"+MS_CAL_FONT+";font-size:"+MS_CAL_FONTSIZE+"'><tr align=center><th><a href=javascript:MS_MoveMonth(-1)  style='text-decoration:none'>&lt;</a></th>";
	str += "<th colspan=7>"+g_month_name[curr_month-1] ;
	str += " <nobr><a href=javascript:MS_MoveMonth(0,-1)  style='text-decoration:none'>&laquo;</a>" + curr_year ;
	str += "<a href=javascript:MS_MoveMonth(0,1) style='text-decoration:none'>&raquo;</a></nobr>";
	str += "</th><th><a href=javascript:MS_MoveMonth(1)  style='text-decoration:none'>&gt;</a></th></tr>";
	str += "<tr><th></th><th>S</th><th>M</th><th>T</th><th>W</th><th>R</th><th>F</th><th>S</th></tr>";
	str += "<tr " + TR_attr + "><td></td>";
	for(i=0;i<wd_first;i++) str += "<td></td>";
	for(i=1;i<=last_day;i++){
		 str +=  "<td><a href=javascript:MS_pick("+i+")  style='text-decoration:none;color:#003366'>";
		 str += (i == dayofToday )? "<b>" + i + "</b>" : i ; 
		 str += "</a></td>";
		if ((i % 7) == (satday%7))  str += "<td></td></tr><tr " + TR_attr + "><td></td>";
	}
	str +=  "</tr>"; if (wd_first + last_day < 36) str += "<tr><td>&nbsp;</td></tr>";
	str += "<tr align=center><td colspan=9><a href=javascript:MS_goToday()  style='text-decoration:none'>(Today)</a>&nbsp; &nbsp; <a href=javascript:MS_HideCalendar()  style='text-decoration:none'>(Close)</a></td></tr>";
	str += "</table></center>";
	return str;
}

var mscal_currentX, mscal_currentY;
var mscal_oldObject , mscal_theObject;
var mscal_isDragging=false;

function MS_Cal_BeginDrag(e) {
	temp = g_oCal;
	if (temp){
	if(isNS4){
		mscal_currentX = e.pageX;	mscal_currentY = e.pageY;	
		if ((mscal_currentX > temp.left) && 	(mscal_currentX < temp.left +temp.clip.width) && (mscal_currentY > temp.top) && 	(mscal_currentY < temp.top + 20) ){
			window.captureEvents(Event.MOUSEMOVE);window.onmousemove = MS_Cal_MoveIt;
			temp.zIndex = 0;
			mscal_theObject = temp;
			mscal_isDragging = true;
			return false;
		}
	}else{
		my_e = (e)?e: window.event;
		mscal_currentX = my_e.screenX; mscal_currentY = my_e.screenY;
		ori = (e)? e.target: window.event.srcElement ;
		if(temp == ori ){
//		var ileft = parseInt(temp.style.left,10); var itop = parseInt(temp.style.top,10);
//		if ((mscal_currentX > ileft ) && 	(mscal_currentX < ileft +200) && (mscal_currentY > itop ) && 	(mscal_currentY < itop  + 20) ){
			document.onmousemove = MS_Cal_MoveIt;
			mscal_theObject = temp;
			mscal_isDragging = true;
			my_e.cancelBubble = true;
			return false;
		}
	}

	}
}
function MS_Cal_MoveIt(e)
{
	if (mscal_isDragging){
		if(isNS4){	dX = e.pageX  - mscal_currentX;dY = e.pageY - mscal_currentY;
			mscal_currentX = e.pageX;mscal_currentY = e.pageY;
			mscal_theObject.moveBy(dX, dY);
		}else{my_e = (e)?e: window.event;
			curX = my_e.screenX;
			curY = my_e.screenY;
			dX = curX   - mscal_currentX;dY = curY - mscal_currentY;
			mscal_currentX = curX; mscal_currentY = curY; 
			g_oCal.style.left = (parseInt(g_oCal.style.left, 10) +  dX) + "px"; 
			g_oCal.style.top =  (parseInt(g_oCal.style.top, 10) +  dY) +"px"; 
		}
		return false;
	}

}
function MS_Cal_EndDrag(e)
{
	if (mscal_isDragging){
		if(isNS4){	mscal_theObject = null;
			window.releaseEvents(Event.MOUSEMOVE);
		}else{	my_e = (e)?e: window.event;
			my_e.cancelBubble = true;
		}
		window.onmousemove = null;
		mscal_isDragging = false;	
		return false;		
	}

}
if(isNS4){
	document.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
}

document.onmousedown=MS_Cal_BeginDrag;
document.onmouseup=MS_Cal_EndDrag;
