/* MarcGrabanski.com */
/* Pop-Up Calendar Built from Scratch by Marc Grabanski */

/* ddakapoh */
/* Update for ajax-based planner */

var popUpCal =
    {
    selectedMonth: new Date().getMonth(), // 0-11
    selectedYear: new Date().getFullYear(), // 4-digit year
    selectedDay: new Date().getDate(),
    xml: 0,
    calendarId: 'calendarDiv',
    calMesgId: 'calMesgDiv',
    inputClass: 'plancal',

    init: function ()
	{
        var x = getElementsByClass(popUpCal.inputClass, document, "img");
        var y = document.getElementById(popUpCal.calendarId);
        // set the calendar position based on the input position
        for (var i=0; i<x.length; i++)
	    {
            x[i].onclick = function ()
		{
                popUpCal.selectedMonth = new Date().getMonth();
                setPos(this, y); // setPos(targetObj,moveObj)
                y.style.display = 'block';
                popUpCal.drawCalendar(this);
                popUpCal.setupLinks(this);
        	}
    	    }
	},

    drawCalendar: function (inputObj)
	{
	var corner_color=new Array('null','red_corner.png','blue_corner.png','green_corner.png');
	$.ajaxSetup({async: false});
	$.post('util/plancal.php','act=list&year='+popUpCal.selectedYear+'&month='+(popUpCal.selectedMonth+1),function(data,resp)
	    {
	    popUpCal.xml=data;
	    }); //end of post return function
        var html = '';
        html = '<a id="closeCalender">Close Calendar</a>';
        html += '<table cellpadding="0" cellspacing="0" id="linksTable"><tr>';
        html += '<th colspan="7" class="calendarHeader"><a id="prevMonth"><<</a>&nbsp;'+getMonthName(popUpCal.selectedMonth)+' '+popUpCal.selectedYear+'&nbsp;<a id="nextMonth">>></a></th>';
        html += '</tr></table>';
        html += '<table id="calendar" cellpadding="0" cellspacing="0"><tr>';
        html += '</tr><tr class="weekDaysTitleRow">';
        var weekDays = new Array('S','M','T','W','T','F','S');
        for (var j=0; j<weekDays.length; j++)
	    {
            html += '<td>'+weekDays[j]+'</td>';
    	    }

        var daysInMonth = getDaysInMonth(popUpCal.selectedYear, popUpCal.selectedMonth);
        var startDay = getFirstDayofMonth(popUpCal.selectedYear, popUpCal.selectedMonth);
        var numRows = 0;
        var printDate = 1;
        if (startDay != 7)
	    {
            numRows = Math.ceil(((startDay+1)+(daysInMonth))/7); // calculate the number of rows to generate
    	    }

        // calculate number of days before calendar starts
        if (startDay != 7)
	    {
            var noPrintDays = startDay + 1;
    	    }
	else
	    {
            var noPrintDays = 0; // if sunday print right away
    	    }
        var today = new Date().getDate();
        var thisMonth = new Date().getMonth();
        var thisYear = new Date().getFullYear();
        // create calendar rows
        for (var e=0; e<numRows; e++)
	    {
            html += '<tr class="weekDaysRow">';
            // create calendar days
            for (var f=0; f<7; f++)
		{
                if ( (printDate == today)
                     && (popUpCal.selectedYear == thisYear)
                     && (popUpCal.selectedMonth == thisMonth)
                     && (noPrintDays == 0))
			{
            	    	html += '<td id="today" class="weekDaysCell">';
                        }
		else
		    {
                    html += '<td class="weekDaysCell">';
                    }

                if (noPrintDays == 0)
		    {
                    if (printDate <= daysInMonth)
			{
			//-----------------------------------my work-------this section print number of day into td---------------
			var title='';
			var toppriority=4;
			var complete_count=0;
			var unreaded_count=0;
			var dayclass='undefined';
			var authorstyle='';
			var authortop=3; //as all sended item is readed and complete
			var authorcnt=0;
			var recipient_cnt=0;
			for( var pc=0;pc<$("plan",popUpCal.xml).length;pc++)
			    {
			    var plan=$("plan:eq("+pc+")",popUpCal.xml);
			    read=plan.attr('is_readed');
			    complete=plan.attr('is_complete');
			    if (printDate==plan.attr('dayofplan'))
				{
				if (plan.attr('is_author_only')==0)
				    {
				    recipient_cnt++;
				    title+=plan.text()+"<br>";
				    if(complete==0)
					{
					if(toppriority>plan.attr('priority')) toppriority=plan.attr('priority');
					}
				    else
					complete_count++;
				    if(plan.attr('is_readed')==0)
					unreaded_count++;
				    }
				else //check as author
				    {
				    authorcnt++;
				    if (complete==0 && authortop>2) authortop=2; //any item from sended is uncomplete
				    if (read==0 && authortop>1) authortop=1; //any item from sended is unreaded
				    }
				}
			    }

			if(authorcnt>0)
			    authorstyle='style="background: top right url(img/'+corner_color[authortop]+') transparent no-repeat;padding-right:1px;"';
			if(toppriority<4) dayclass='cal_prior_'+toppriority;
			else if(complete_count>0) dayclass='cal_prior_complete';
			if(unreaded_count>0) dayclass='cal_prior_unreaded';
			if ((authorcnt+recipient_cnt)>0)
                    	    html += '<a class='+dayclass+' title="'+title+'" '+authorstyle+'>'+printDate+'</a>';
			else
                    	    html += '<a>'+printDate+'</a>';
			//--------------------------------------------------------------------------------------------------------------
                        }
                    printDate++;
            	    }
                html += '</td>';
                if(noPrintDays > 0) noPrintDays--;
        	}
            html += '</tr>';
    	    }
        html += '</table>';
        html += '<table cellpadding="0" cellspacing="0" id="cal_actTable"><tr>';
	html += '<td colspan=3><a id=new_plan_item class=disabled_plan_link>New</a></td><td colspan=3>'+
	    '<a id=view_plan_for_day class=disabled_plan_link>View</a></td>';
        html += '</tr></table>';

        // add calendar to element to calendar Div
        var calendarDiv = document.getElementById(popUpCal.calendarId);
        var calMesgDiv = document.getElementById(popUpCal.calMesgId);
        calendarDiv.innerHTML = html;

        // close button link
        document.getElementById('closeCalender').onclick = function ()
	    {
            calMesgDiv.style.display = 'none';
            calendarDiv.style.display = 'none';
    	    }
        // setup next and previous links
        document.getElementById('prevMonth').onclick = function ()
	    {
            popUpCal.selectedMonth--;
            if (popUpCal.selectedMonth < 0)
		{
                popUpCal.selectedMonth = 11;
                popUpCal.selectedYear--;
        	}
            calMesgDiv.style.display = 'none';
            popUpCal.drawCalendar(inputObj);
            popUpCal.setupLinks(inputObj);
    	    }
        document.getElementById('nextMonth').onclick = function ()
	    {
            popUpCal.selectedMonth++;
            if (popUpCal.selectedMonth > 11)
		{
                popUpCal.selectedMonth = 0;
                popUpCal.selectedYear++;
        	}
            calMesgDiv.style.display = 'none';
            popUpCal.drawCalendar(inputObj);
            popUpCal.setupLinks(inputObj);
    	    }
	}, // end drawCalendar function

    setupLinks: function (inputObj)
	{
        // set up link events on calendar table
        var y = document.getElementById('calendar');
        var x = y.getElementsByTagName('a');
        for (var i=0; i<x.length; i++)
	    {
            x[i].onmouseover = function ()
		{
            	if(this.parentNode.className == 'weekDaysCell')
            	    this.parentNode.className = 'weekDaysCellOver';
        	}
            x[i].onmouseout = function ()
		{
                if(this.parentNode.className == 'weekDaysCellOver')
            	    this.parentNode.className = 'weekDaysCell';
        	}


	    x[i].onclick = function ()
		{
		$(".selectedDay").attr('class','weekDaysCell');
                this.parentNode.className = 'selectedDay';
                popUpCal.selectedDay = this.innerHTML;

		$("#new_plan_item").attr('class','enabled_plan_link');
    		document.getElementById('new_plan_item').onclick = function ()
		    {newItem(popUpCal.xml, popUpCal.selectedDay, popUpCal.selectedMonth, popUpCal.selectedYear);}

		if (this.className!='')
		    {
		    $("#view_plan_for_day").attr('class','enabled_plan_link');
    		    document.getElementById('view_plan_for_day').onclick = function()
			{viewDay(popUpCal.xml, popUpCal.selectedDay, popUpCal.selectedMonth, popUpCal.selectedYear);}
		    this.ondblclick = function ()
			{viewDay(popUpCal.xml, popUpCal.selectedDay, popUpCal.selectedMonth, popUpCal.selectedYear);}
		    }
		else
		    {
		    $("#view_plan_for_day").attr('class','disabled_plan_link');
    		    document.getElementById('view_plan_for_day').onclick = function ()
			{return false;}
		    }
        	}
	    }
	}
    }

// Add calendar event that has wide browser support
if ( typeof window.addEventListener != "undefined" )
    window.addEventListener( "load", popUpCal.init, false );
else if ( typeof window.attachEvent != "undefined" )
    window.attachEvent( "onload", popUpCal.init );
else {
    if ( window.onload != null ) {
        var oldOnload = window.onload;
        window.onload = function ( e ) {
            oldOnload( e );
            popUpCal.init();
        };
    }
    else
        window.onload = popUpCal.init;
}

/* My functions for display messages -------------------------------my functions-----------------------------------------------------------------------*/

function viewDay(xml,day,month,year)
    {
    html='<table id=mesghead><tr>'+
	'<td id=mesgheader>Show items for: '+day+'/'+month+'/'+year+'</td>'+
	'<td align=right><a id=closeCalMesg>Close Messages</a></td>'+
	'</tr></table>';
    html+='<table class=cal_list>';
    for( var pc=0;pc<$("plan",xml).length;pc++)
	{
	var plan=$("plan:eq("+pc+")",xml);
	if (day==plan.attr('dayofplan'))
	    {
	    pcid=plan.attr('id');
	    if (plan.attr('is_readed')==0 && plan.attr('is_author_only')==0)
		plan_read(pcid);
	    cltid=plan.attr('cltid');
	    reqid=plan.attr('reqid');
	    proposal_id=plan.attr('proposal_id');
	    summ=plan.attr('summ');
	    complete=plan.attr('is_complete');
	    read=plan.attr('is_readed');
	    fsymbol='-';
	    comment_class='cal_plan_comment';
	    complete_link='<a href=# onClick="plan_complete('+pcid+');return false;"><img src=/img/plan_ok.gif title="Click here for check this item as complete" alt="Complete" border=0></a>';
	    if(complete>0)
		{
		fsymbol='+';
		comment_class='cal_plan_comment_complete';
		complete_link=plan.attr('dateofcomplete');
		}
	    if(read==0)
		comment_class='cal_plan_comment_unreaded';

	    //format item sended to another user
	    var cch='';rdt='<td>&nbsp</td>';
	    var rch='';cdt='<td>&nbsp</td>';
	    if (plan.attr('is_author_only')>0)
		{
		fsymbol='>>';
		comment_class='cal_plan_comment_author_only';

		if (read>0)
		    {
		    var rch='checked';
		    var rdt='<td>Readed: '+plan.attr('dateofread')+'</td>';
		    }
		if (complete>0)
		    {
		    var cch='checked';
		    var cdt='<td>Complete: '+plan.attr('dateofcomplete')+'</td>';
		    }
		complete_link='READ<input type=checkbox disabled '+rch+'> COMPLETE<input type=checkbox disabled '+cch+'>';
		}
	    //-------------
	    html+='<tr class=common_plan_tr id=plan_'+pcid+'>'+
		'<td>'+fsymbol+'</td>'+
		'<td><a class='+comment_class+' href=# onClick="show_plan_detail('+pcid+');return false;">'+plan.text()+'</a></td>'+
		'<td align=right>'+complete_link+'</td></tr>';
	    html+='<tr><td colspan=3><div class=detail_plan_tr id=dplan_'+pcid+' style="display:none;">'+
		'<table class=cal_plan_detail>'+
		'<tr><td>Recipient: '+plan.attr('recipient')+'</td><td>Sender: '+plan.attr('author')+'</td>'+
		'<td>Date of send: '+plan.attr('dateofsave')+'</td></tr>'+
		'<tr><td>Priority: '+plan.attr('prioritytext')+'</td>'+rdt+cdt+'</tr>';
	    if(cltid>0 || proposal_id>0 || summ>0 || reqid>0)
		html+='<tr><td>clt: '+plan.attr('cltname')+'</td>'+
		    '<td>summ: '+plan.attr('summ')+'</td>'+
		    '<td>req: '+plan.attr('reqid')+'</td>'+
		    '<td>proposal: '+plan.attr('proposal_id')+'</td></tr>';
	    html+='</table></div></td></tr>';
	    }
	}
    html+='</table>';

    openmesg(html);
    }

function newItem(xml,day,month,year)
    {
    var html='';
	html='<table id=mesghead><tr>'+
	    '<td id=mesgheader>Create new items for: '+day+'/'+month+'/'+year+'</td>'+
	    '<td align=right><a id=closeCalMesg>Close Messages</a></td>'+
	    '</tr></table>';
    $.post('util/plancal.php','act=new_item_form',function (data,resp)
	{
	html+=data;
	openmesg(html);
	});
    }

function newItemSave()
    {
    mdt=$('#cal_new_item_form').serialize();
    $.post('util/plancal.php','act=new_item_save&year='+popUpCal.selectedYear+
	'&month='+(popUpCal.selectedMonth+1)+'&day='+popUpCal.selectedDay+'&'+mdt,function(data, resp)
	{
	if (resp!='success') {alert ('Send failed. Status: '+resp);return false;}
	if (data!=0) {alert ("Save failed. Server return: "+data);return false;}
	closemesg();
	var inputObj=$('.'+popUpCal.inputClass)[0];
        popUpCal.drawCalendar(inputObj);
        popUpCal.setupLinks(inputObj);
	});
    }

function closemesg ()
    {
    calMesgDiv.style.display = 'none';
    $(".disabled_plan_link").attr('class','enabled_plan_link');
    document.getElementById('view_plan_for_day').onclick = function()
	{viewDay(popUpCal.xml, popUpCal.selectedDay, popUpCal.selectedMonth, popUpCal.selectedYear);}
    document.getElementById('new_plan_item').onclick = function ()
	{newItem(popUpCal.xml, popUpCal.selectedDay, popUpCal.selectedMonth, popUpCal.selectedYear);}
    }

function openmesg (html)
    {
    var selDay = getElementsByClass("selectedDay")[0];
    var calMesgDiv = document.getElementById(popUpCal.calMesgId);
    calMesgDiv.innerHTML = html;
    $('.enabled_plan_link').attr('class','disabled_plan_link');
    document.getElementById('new_plan_item').onclick = function ()
	{return false;}
    document.getElementById('view_plan_for_day').onclick = function()
	{closemesg();}
    // close button link
    document.getElementById('closeCalMesg').onclick = function ()
	{closemesg();}
    setPos(selDay, calMesgDiv);
    calMesgDiv.style.display = 'block';
    }

function show_plan_detail(pcid)
    {
    if ($('#dplan_'+pcid).attr('class')=='detail_plan_tr')
	{
	$('.detail_plan_tr_open').hide("fast").attr('class','detail_plan_tr');
	$('#dplan_'+pcid).slideDown("slow").attr('class','detail_plan_tr_open');
	}
    else
	$('.detail_plan_tr_open').hide("fast").attr('class','detail_plan_tr');
    }

function plan_complete(pcid)
    {
    $.post('util/plancal.php','act=check_item_complete&pcid='+pcid,function(data, resp)
	{
	if (resp!='success') {alert ('Send failed. Status: '+resp);return false;}
	if (data!=0) {alert ("Save failed. Server return: "+data);return false;}
	$("#"+pcid,popUpCal.xml).attr('is_complete','1');
	$("#"+pcid,popUpCal.xml).attr('dateofcomplete','Now');
	closemesg();
	viewDay(popUpCal.xml, popUpCal.selectedDay, popUpCal.selectedMonth, popUpCal.selectedYear);
	});
    }

function plan_read(pcid)
    {
    $.post('util/plancal.php','act=check_item_read&pcid='+pcid,function(data, resp)
	{
	if (resp!='success') {alert ('Send failed. Status: '+resp);return false;}
	if (data!=0) {alert ("Save failed. Server return: "+data);return false;}
	$("#"+pcid,popUpCal.xml).attr('is_readed','1');
	$("#"+pcid,popUpCal.xml).attr('dateofread','Now');
	//closemesg();
	//viewDay(popUpCal.xml, popUpCal.selectedDay, popUpCal.selectedMonth, popUpCal.selectedYear);
	});
    }

function plan_stat()
    {
    $('#plan_stat').load('util/plancal.php?act=plan_stat');
    }

/* Functions Dealing with Dates --------------------------------------end of my functions-----------------------------------------------------------------*/

function formatDate(Day, Month, Year) {
    Month++; // adjust javascript month
    if (Month <10) Month = '0'+Month; // add a zero if less than 10
    if (Day < 10) Day = '0'+Day; // add a zero if less than 10
    var dateString = Day+'.'+Month+'.'+Year;
    return dateString;
}

function getMonthName(month) {
    var monthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
    return monthNames[month];
}

function getDayName(day) {
    var dayNames = new Array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday')
    return dayNames[day];
}

function getDaysInMonth(year, month) {
    return 32 - new Date(year, month, 32).getDate();
}

function getFirstDayofMonth(year, month) {
    var day;
    day = new Date(year, month, 0).getDay();
    return day;
}

/* Common Scripts */

function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null ) node = document;
    if ( tag == null ) tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

/* Position Functions */

function setPos(targetObj,moveObj) {
    var coors = findPos(targetObj);
    moveObj.style.position = 'absolute';
    moveObj.style.top = coors[1]+20 + 'px';
    moveObj.style.left = coors[0] + 'px';
}

function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
    return [curleft,curtop];
}
