﻿function odCal(d,m,t,s){

//properties
this.calCnt=1;
this.mainCal=m;	
this.showJoeCal=s;	
this.dObj=d;
this.weekDay=this.dObj.getDay();
this.day=this.dObj.getDate();
this.month=this.dObj.getMonth();
this.year=this.dObj.getFullYear();
this.targetContainer=t;

//methods
this.writeCal=writeCal;
this.getNavMonthIndex=getNavMonthIndex;
this.getMonthLength=getMonthLength;
this.outToTarget=outToTarget;
this.createNewSet=createNewSet;
this.getRangeData=getRangeData;
	
	//display calendar when object is loaded
	this.writeCal(this.month,this.year);

		function writeCal(m,y)
		{
		
			//we need to have the current date at any given moment
			todayDate=new Date();
			todayMonth=todayDate.getMonth();
			todayYear=todayDate.getFullYear();
			todayDay=todayDate.getDate();
			currMonth=this.month;
			currYear=this.year;
			currDay=this.day;
		
            //month names array
			labelsArr=new Array("January","February","March","April","May","June","July","August","September","October","November","December","January");

            //day letters array
			dayLabelsArr=new Array("S","M","T","W","T","F","S");

            //string builder
			strout=new String();
				

						this.dObj.setFullYear(currYear,(currMonth),01);
						tmpMonth=this.dObj.getMonth();
						tmpYear=this.dObj.getFullYear();
						tmpWeekDay=this.dObj.getDay();
						
						    //style for each item type
							cTClass="subCalTable";
							cRClass="subCalRow";
							cDCClass="subCalDataCell";
							cPADClass="subCalPadCell";
							cMLClass="subCalMonthLabel";
							cDLClass="subCalDayLabel";
							cBCClass="subCalBlankCell";
							cCCDClass="subCellDataCurrent";
							cEICClass="subCalEventCell";


                        //calendar nav and month label: start
                        navStrout=new String();
                        navStrout+='<table border="0" cellpadding="3" cellspacing="0" width="100%" align="center">';
                        navStrout+='<tr>';
                        navStrout+='<td align="left"><a class="link" id="prevLink" href="javascript:this.createNewSet(0,\'calSet\',\''+this.dObj+'\',\''+this.targetContainer+'\','+this.mainCal+','+this.showJoeCal+')" onMouseOver="statusContent(0);return true;" onMouseOut="statusContent(2);return true;"><img src="resources/images/prev.gif" border="0"></a></td>';
						navStrout+='<td align="center">'+labelsArr[tmpMonth]+' '+tmpYear+'</td>';
				        navStrout+='<td align="right"><a class="link" id="nextLink" href="javascript:this.createNewSet(1,\'calSet\',\''+this.dObj+'\',\''+this.targetContainer+'\','+this.mainCal+','+this.showJoeCal+')" onMouseOver="statusContent(1);return true;" onMouseOut="statusContent(2);return true;"><img src="resources/images/next.gif" border="0"></a></td>';
                        navStrout+='</tr>';
                        navStrout+='</table>';
                        
                        //calendar nav and month label: stop
                        document.getElementById("monthNav").innerHTML=navStrout;
                        document.getElementById("monthNav").style.top="127px";
                        
						strout+='<table border="0" cellpadding="0" cellspacing="0" width="100%" align="center" class="'+cTClass+'">';
						//write day letters:start
						strout+='<tr>';
							for(var dayLabelCnt=0;dayLabelCnt<7;dayLabelCnt++){
							strout+='<td class="'+cDLClass+'">'+dayLabelsArr[dayLabelCnt]+'</td>';
							}
						strout+='</tr>';
						//write day letters:stop
						
						strout+='<tr>';
					
						cnt=0
						dayOfWeekInt=0;
						
						currMonthLength=this.getMonthLength(tmpMonth,tmpYear);
						
							for(var d=0;d<(currMonthLength+tmpWeekDay);d++){

							var dout=(d-tmpWeekDay+1);
							
								if(d%7==0 && cnt>0){
									strout+='</tr><tr>';
									dayOfWeekInt=0;
								}else{
									dayOfWeekInt++;
								}
								
									
									if(d<tmpWeekDay || dout>currMonthLength){
										strout+='<td class="'+cPADClass+'">&nbsp;</td>';
									}else{
										cnt++;
										if(dout==todayDay && tmpYear==todayYear && tmpMonth==todayMonth){
											strout+='<td align="center" id="'+(tmpMonth+1)+'_'+dout+'_'+tmpYear+'" valign="top" class="'+cCCDClass+'">'+(cnt)+'</td>';
										}else{
											strout+='<td align="center" id="'+(tmpMonth+1)+'_'+dout+'_'+tmpYear+'" valign="top" class="'+cDCClass+'">'+(cnt)+'</td>';
										}
									}
							}
							
									if(dayOfWeekInt<7){
										for(var f=(dayOfWeekInt+1);f<7;f++){
											strout+='<td class="'+cPADClass+'">&nbsp;</td>';
										}
									}
	
						strout+='</tr>';

						strout+='</table>';

					currMonth++;	
							
		 }

		 this.outToTarget(this.targetContainer,strout);
}
		
		
function getNavMonthIndex(currMonthIndex)
{
	if(currMonthIndex==-1){return 11;}

	return currMonthIndex;
}

function getMonthLength(m,y)
{

	monthLengthArr=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if(m==1){
		if(y%4==0&&y%100!=0&&y%400==0){
			dayCount=29;
		}else{
			dayCount=monthLengthArr[m];
		}
	}else{
		dayCount=monthLengthArr[m];
	}
	return dayCount;
}

function outToTarget(targetName,output)
{

	strName=new String(targetName);
	
	document.getElementById(strName).innerHTML=output;
}

function isMainCal(currentIteration,mainCowTarget)
{

	if(currentIteration==mainCowTarget){
		return true;
	}else{
		return false;
	}
}

function createNewSet(direction,n,dobj,t,m,ssc,sw)
{
	calSet=eval(n);

	if(direction==0){
		calSet.dObj.setMonth(calSet.dObj.getMonth()-1);
	}else{
		calSet.dObj.setMonth(calSet.dObj.getMonth()+1);
	}

	calSet=new odCal(calSet.dObj,m,t,ssc);

	getRangeData(calSet.dObj.getMonth()+1,calSet.dObj.getFullYear());

}

function statusContent(flag)
{
    statusMessage = new String();
    switch(flag)
    {
        case 0:
            statusMessage="GO BACK 1 MONTH";
        break;
        case 1:
            statusMessage="GO FORWARD 1 MONTH";
        break;
        case 2:
            statusMessage="";
        break;
        case 3:
            statusMessage="VIEW EVENTS";
        break;
    }
    window.status=statusMessage;
}

function getRangeData(m,y,t)
{
	targetPanel=new String(t);
	getData(m+"_1_"+y,'month','eventPanel',0,0);
}
