/* --- Swazz Javascript Calendar ---
/* --- v 1.0 3rd November 2006
By Oliver Bryant
http://calendar.swazz.org */

/////////////////////////
// properties
/////////////////////////
var updobj;
var isStart		= false;
var now			= new Date;
var sccm		= now.getMonth();
var sccy		= now.getFullYear();
var ccm			= now.getMonth();
var ccy			= now.getFullYear();
var today		= now.getDay();
var mn			= new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
var mnn			= new Array('31','28','31','30','31','30','31','31','30','31','30','31');
var mnl			= new Array('31','29','31','30','31','30','31','31','30','31','30','31');
var calvalarr	= new Array(42);
var offset		= {
	top:		22,
	left:		175
}
var dates		= {
	start:		null
}


/////////////////////////
// logic
/////////////////////////

document.write(
	'<table id="fc">'
		+ '<tr>'
			+ '<th><img style="height:15px;width:15px;" src="/site/resource/img/invite/button/black/btn_previous.png" onclick="csubm()" alt="Previous" /></th>'
			+ '<th id="mns" colspan="5"></th>'
			+ '<th><img style="height:15px;width:15px;" src="/site/resource/img/invite/button/black/btn_next.png" onclick="caddm()" alt="Next" /></th>'
		+ '</tr>'
		+ '<tr class="days"><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td></tr>'
);
for(var kk=1;kk<=6;kk++) {
	document.write('<tr>');
	for(var tt=1;tt<=7;tt++) {
		num=7 * (kk-1) - (-tt);
		document.write('<td id="v' + num + '">&nbsp;</td>');
	}
	document.write('</tr>');
}
document.write('</table>');
document.all?document.attachEvent('onclick',checkClick):document.addEventListener('click',checkClick,false);


/////////////////////////
// functions
/////////////////////////

function f_cps(obj) {
	obj.className = '';
}

function f_start(obj) {
	obj.className = 'start';
}

function f_cpps(obj) {
	obj.className = 'disabled';
}

function f_hds(obj) {
	obj.className = obj.className == 'start' ? 'start' : 'selected';
}

function f_currdate(obj) {
	obj.className = 'current';
}

function cs_over(e) {
	obj				= evtTgt(EvtObj(e));
	obj.className	+= ' highlight';
}

function cs_out(e) {
	obj				= evtTgt(EvtObj(e));
	obj.className	= obj.className.replace('highlight', '');
}

function cs_click(e) {
	obj						= evtTgt(EvtObj(e));
	updobj.value			= calvalarr[obj.id.substring(1,obj.id.length)];
	objParent				= getObj('fc');
	obj.className			= isStart ? 'start' : obj.className;
	
	if (isStart) {
		if (objParent.className) {
			getObj(objParent.className).className = '';
		}
		dates.start								= formatDate(getObj(obj.id).innerHTML.replace('v','') + ' ' + getObj('mns').innerHTML); 
		objParent.className						= obj.id;
	}
	objParent.style.display	= 'none';
}

function formatDate(value) {
	value = new Date(value);
	return value.getFullYear() + '/' + (value.getMonth() + 1) + '/' + value.getDate();
}

function getObj(objID)
{
    if (document.getElementById)	{ return document.getElementById(objID); }
    else if (document.all)			{ return document.all[objID]; }
    else if (document.layers)		{ return document.layers[objID]; }
}

function checkClick(e) {
	e?evt=e:evt=event;
	CSE=evt.target?evt.target:evt.srcElement;
	if (getObj('fc'))
		if (!isChild(CSE,getObj('fc')))
			getObj('fc').style.display='none';
}

function isChild(s,d) {
	while(s) {
		if (s==d) 
			return true;
		s=s.parentNode;
	}
	return false;
}

function Left(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;
}

function Top(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;    
	return curtop;
}

function lcs(ielem,ielemID) {

	isStart						= ielem.id.indexOf('StartDate') != -1;
	updobj						= ielem;
	getObj('fc').style.left		= (Left(ielem) - offset.left) + "px";
	getObj('fc').style.top		= (Top(ielem) + ielem.offsetHeight - offset.top) + "px";
	getObj('fc').style.display	= 'block';
	
	// First check date is valid
	curdt		= ielem.value;
	curdtarr	= curdt.split('/');
	isdt		= true;
	for(var k=0;k<curdtarr.length;k++) {
		if (isNaN(curdtarr[k]))
			isdt=false;
	}
	if (isdt&(curdtarr.length==3)) {
		ccm			= curdtarr[1]-1;
		ccy			= curdtarr[2];
		prepcalendar(curdtarr[0], curdtarr[1]-1, curdtarr[2]);
	}
}

function evtTgt(e)
{
	var e
	if(e.target)el=e.target;
	else if(e.srcElement)el=e.srcElement;
	if(el.nodeType==3)el=el.parentNode; // defeat Safari bug
	return el;
}

function EvtObj(e){if(!e)e=window.event;return e;}

// day selected
function prepcalendar(hd,cm,cy) {

	now	= new Date();
	sd	= now.getDate();
	td	= new Date();
	td.setDate(1);
	td.setFullYear(cy);
	td.setMonth(cm);
	cd=td.getDay();
	getObj('mns').innerHTML=mn[cm]+ ' ' + cy;
	marr=((cy%4)==0)?mnl:mnn;

	for(var d=1;d<=42;d++) {
		
		f_cps(getObj('v' + parseInt(d)));
		if ((d >= (cd -(-1))) && (d<=cd-(-marr[cm]))) {
			dip		= ((d-cd < sd)&&(cm==sccm)&&(cy==sccy));
			htd		= ((hd!='') && (d-cd==hd));
			start	= dates.start == formatDate(''+cy+'/'+(cm-(-1))+'/'+(d-cd));
			
			if (dip) { //dates in the past
				f_cpps(getObj('v'+parseInt(d)));
			} else if (start) {
				f_start(getObj('v'+parseInt(d)));
			} else if (htd) { //date after it's been selected
				f_hds(getObj('v'+parseInt(d)));
			} else { //normal date
				f_cps(getObj('v'+parseInt(d)));
			}

			getObj('v'+parseInt(d)).onmouseover	= (dip) ? null : cs_over;
			getObj('v'+parseInt(d)).onmouseout	= (dip) ? null : cs_out;
			getObj('v'+parseInt(d)).onclick		= (dip) ? null : cs_click;
			getObj('v'+parseInt(d)).innerHTML	= d - cd;
			calvalarr[d]						= ''+(d-cd)+'/'+(cm-(-1))+'/'+cy;
		} else {
			getObj('v'+d).innerHTML					= '&nbsp;';
			getObj('v'+parseInt(d)).onmouseover		= null;
			getObj('v'+parseInt(d)).onmouseout		= null;
			getObj('v'+parseInt(d)).style.cursor	= 'default';
		}

		//sets the current date to be bold
		if (getObj('mns').innerHTML==mn[sccm] + ' ' + sccy && getObj('v'+parseInt(d)).innerHTML==sd) {
			f_currdate(getObj('v'+parseInt(d)));
		}
	}
}


//getObj('fc'+cc).style.visibility='hidden';

function caddm() {
	marr=((ccy%4)==0)?mnl:mnn;
	
	ccm+=1;
	if (ccm>=12) {
		ccm=0;
		ccy++;
	}
	cdayf();
	prepcalendar('',ccm,ccy);
}

function csubm() {
	marr=((ccy%4)==0)?mnl:mnn;
	
	ccm-=1;
	if (ccm<0) {
		ccm=11;
		ccy--;
	}
	cdayf();
	prepcalendar('',ccm,ccy);
}

function cdayf() {
if ((ccy>sccy)|((ccy==sccy)&&(ccm>=sccm)))
	return;
else {
	ccy=sccy;
	ccm=sccm;
	cfd=scfd;
	}
}

