// Cookie Functions 

function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

function checkCookie()
{
username=getCookie('username');
if (username!=null && username!="")
  {
  alert('Welcome again '+username+'!');
  }
else
  {
  username=prompt('Please enter your name:',"");
  if (username!=null && username!="")
    {
    setCookie('username',username,365);
    }
  }
}

//util for working with dates in JS
function daysInMonth(month,year) {
var m = [31,28,31,30,31,30,31,31,30,31,30,31];
if (month != 2) return m[month - 1];
if (year%4 != 0) return m[1];
if (year%100 == 0 && year%400 != 0) return m[1];
return m[1] + 1;
}

function setViewOption(option)
{
	if (option=="month")
	{
		setCookie("viewOption", "month",null);
		document.getElementById("monthSwitch").setAttribute("class", "action_button_clicked");
		document.getElementById("weekSwitch").setAttribute("class", "action_button");
	}
	else
	{
		setCookie("viewOption", "week",null);
		document.getElementById("monthSwitch").setAttribute("class", "action_button");
		document.getElementById("weekSwitch").setAttribute("class", "action_button_clicked");
	}
	
	
	
	
//	alert('Cookie set to ' + getCookie('viewOption'));

	setCookie("startDate", null,null);
	setCookie("endDate", null,null);
	
	RefreshGrid();
}

function setReferenceDate(refdate)
{

	var referenceDate;	
	referenceDate = new Date(refdate);
	setCookie("refDate", referenceDate,null);
	//kill cookies
	setCookie("startDate", null,null);
	setCookie("endDate", null,null);
	
	RefreshGrid();
	
}

function DateNavPrev()
{
	checkDateCookies();
	
	var initialDate;
	var finalDate;
	var viewOption;
	var refDate;
	
	
	initialDate= getCookie('startDate');
	finalDate= getCookie('endDate');
	viewOption = getCookie('viewOption');
	refDate = getCookie('refDate');
	
	refDate = new Date(refDate);
	

	if (viewOption == "month")
	{
		var month;
		var year;

		month = refDate.getMonth();
		year = refDate.getFullYear();
		
		if (month==0)
		{
			month=11;
			year -= 1;
		}
		else
		{
			month -= 1;
		}
		
		refDate = new Date(year, month, 1, 0,0,0,0);
		
		setReferenceDate(refDate);
		
		//setReferenceDate(daqui a um mes);
	}
	else //defaults to week
	{
		setReferenceDate(refDate.setDate(refDate.getDate() -7));
	}
}

function DateNavNext()
{
		checkDateCookies();

		var initialDate;
		var finalDate;
		var viewOption;
		var refDate;


		initialDate= getCookie('startDate');
		finalDate= getCookie('endDate');
		viewOption = getCookie('viewOption');
		refDate = getCookie('refDate');

		refDate = new Date(refDate);


		if (viewOption == "month")
		{
			var month;
			var year;

			month = refDate.getMonth();
			year = refDate.getFullYear();

			if (month==11)
			{
				month=0;
				year += 1;
			}
			else
			{
				month += 1;
			}

			refDate = new Date(year, month, 1, 0,0,0,0);

			setReferenceDate(refDate);

			//setReferenceDate(daqui a um mes);
		}
		else //defaults to week
		{
			setReferenceDate(refDate.setDate(refDate.getDate() +7));
		}

}


/*
function setDatePicker(DateObj)
{
	
	$('#datepicker').datepicker({
		dateFormat: 'mm/dd/yy', 
        closeText: 'Done',
		showButtonPanel: true,
		onSelect: function(dateText) { setReferenceDate(dateText); } 
	});
	
	
	$('#datepicker').datepicker('setDate', DateObj);
	document.getElementById('_newHabitButton').focus();
	
}
*/


function addDays(myDate,days) {
    return new Date(myDate.getTime() + days*24*60*60*1000);
}

function checkDateCookies()
{	
	var initialDate;
	var finalDate;
	var viewOption;
	var refDate;
	
	initialDate= getCookie('startDate');
	finalDate= getCookie('endDate');
	viewOption = getCookie('viewOption');
	refDate = getCookie('refDate');
	
//	alert("i" + initialDate);
//	alert("f" + finalDate);
//	alert("r" + refDate);
	

	if (viewOption == null || viewOption == "")
	{
		viewOption = "week";
		setCookie("viewOption", viewOption,null);
	}
		
	if (viewOption=="month")
	{
		setCookie("viewOption", "month",null);
		document.getElementById("monthSwitch").setAttribute("class", "action_button_clicked");
		document.getElementById("weekSwitch").setAttribute("class", "action_button");
	}
	else
	{
		setCookie("viewOption", "week",null);
		document.getElementById("monthSwitch").setAttribute("class", "action_button");
		document.getElementById("weekSwitch").setAttribute("class", "action_button_clicked");
	}
	

	
	if (refDate==null || refDate=="" || refDate=="null")
	{
	//	alert('ref date is not available');
		refDate = new Date();
	//	alert('new ref date is ' + refDate);
	}
	else
	{ 
	//	alert('ref date is there');
	}
	
	

	initialDate = new Date(refDate);
	//alert('vamo trocar o textbox');
	//alert(initialDate);
	//setDatePicker(initialDate);
	
	
	
	finalDate = new Date();
		
	if  (viewOption == "month")		
	{
		// find first of the month
		initialDate.setDate(1);		
		// finds last of the month
		year = initialDate.getFullYear();	
		month = initialDate.getMonth();
		day = daysInMonth(month+1, year);
		finalDate = new Date(year, month, day, 23,59,59);
		
		//alert(finalDate);
		
		
	}
	else //default to week
	{

		// find sunday	
		initialDate = addDays(initialDate, -1*initialDate.getDay());

		// last day is the saturday
		finalDate = addDays(initialDate, 6); 

		
	}

	// persist this date during the session
	setCookie("startDate", initialDate,null);
	setCookie("endDate", finalDate,null);
	setCookie("refDate", refDate, null);
		
		//alert(refDate);
	//	alert(finalDate);
//	alert('Dates stored ' + initialDate +  " and " + finalDate);	
	
}



// Functions for the Habit Planner



//todo: this needs refactoring!!!!

function trackhabit_old_bkp(clickedcell, positive, trackdate, habitid)
{
	
	// how to select an element by id?
	//$("#2010-05-15_20").css("backgroundColor","yellow");


	clickedcell.innerHTML = "<div align=center><img src='img/ajax-loader.gif'></div>";

	// if the habit has been previously tracked
	if (clickedcell.style.backgroundColor == "red" || clickedcell.style.backgroundColor == "green")
	{	
		clickedcell.style.backgroundColor = "white";	
		//clickedcell.style.backgroundImage = "url(img/ajax-loader.gif)";
		//alert('oi');
			
		$.get("json_habit_track.php?habitid=" + habitid + "&date=" + trackdate + "&activate=0", function(data){
			if (data=="1") 
			{

				 settrackoff(clickedcell);
			}
			else 			//TODO: Handle this exception (data=0)
			{
				settrackon_old(clickedcell);
			}
			
		//depois de trackear, vamos ver os stats	
		// aqui eh o que eu uso no habit list
		/*	
				 $.ajax({  
				   //url: 'http://localhost:8888/HabitWatcher/site/json_habit_list.php',  
				   url: 'json_habit_list.php',  		
				   dataType: 'json',  
				   async: false,  
				   success: function(data){  
				                $(data).each(function() {
									shtml += "<tr height=37><td class='habitname'>";
									shtml += "<a href='habitedit.php?habitid=" + this.id + "';>";
									shtml += this.name;
									shtml += "</a>";						
		*/							
			
		});
	}
	else
	{
	
		$.get("json_habit_track.php?habitid=" + habitid + "&date=" + trackdate + "&activate=1", function(data){
			if (data=="1") 
			{
				settrackon_old(clickedcell, positive);
			}
			else //TODO: Handle this exception (data=0)
			{
				settrackoff(clickedcell);
			}
			
		});
		
	}

//$(cellname).innerHTML = "oi";

}


function trackhabit(clickedcell, positive, trackdate, habitid)
{
	
	clickedcell.innerHTML = "<div align=center><img src='img/ajax-loader.gif'></div>";

	// if the habit has been previously tracked
	if (clickedcell.style.backgroundColor == "red" || clickedcell.style.backgroundColor == "green")
	{	
		clickedcell.style.backgroundColor = "white";
			
		 $.ajax({   
		   			url: "json_habit_track.php?habitid=" + habitid + "&date=" + trackdate + "&activate=0",  		
		   			dataType: 'json',  
		   			async: false,  

		   			success: function(data)
					{  
						
		                $(data).each(function(){
								refreshStats(habitid,this.streak);
								settrackoff(clickedcell);
					})
				}});
				

	}
	else
	{
	
	
		 $.ajax({   
		   			url: "json_habit_track.php?habitid=" + habitid + "&date=" + trackdate + "&activate=1",  		
		   			dataType: 'json',  
		   			async: false,  

		   			success: function(data)
					{  
						
		                $(data).each(function(){
								refreshStats(habitid,this.streak);
								settrackon_old(clickedcell, positive);
					})
				}});
				

		
	}
}

function settrackon_old(clickedcell, positive)
{
	clickedcell.innerHTML = "";
	
	if (positive)
		clickedcell.style.backgroundColor="green";
	else
		clickedcell.style.backgroundColor="red";
	
}

function settrackon(cellname, positive)
{	
	$(cellname).innerHTML = "";
	
	if (positive)
		$(cellname).css("backgroundColor","green");
	else
		$(cellname).css("backgroundColor","red");
	
}

function settrackoff(clickedcell)
{
	clickedcell.innerHTML = "";
	clickedcell.style.backgroundColor="";
}

function refreshStats(habitId, streak)
{	
	document.getElementById("hstats_" + habitId).innerHTML = "<div style='font-size:8pt; text-align:center;'>streak: <b>" + streak + "</b></div>";
}

function deleteHabit(theId)
{

if (confirm('Are you sure you want to delete this habit and all historical information?')) 
	window.location = "habitdelete.php?habitid=" + theId;

}

function GetYMDDate(dateObj)
{
	
	var mes;
	mes = (dateObj.getMonth()+1).toString();
	if (mes.length==1)
	{
		mes = "0" + mes;
	}
	
	var dia;
	dia = (dateObj.getDate()).toString();
	if (dia.length==1)
	{
		dia = "0" + dia;
	}
	
	return dateObj.getFullYear() + "-" + mes + "-" + dia;
}

function AddZero(somestr)
{

	if (somestr.length==1)
	{
		return "0" + somestr;
	}
	else
	{
		return somestr;
	}
}

function GetMonthName(month) //0 to 11
{
	var m_names = new Array("January", "February", "March", 
	"April", "May", "June", "July", "August", "September", 
	"October", "November", "December");
	
	return m_names[month];
	
}
function RefreshGrid(startdate, enddate)
{

	// ensures all data variables are set
	checkDateCookies();

	// extracts the data limits to a variable
	var initialDate = new Date(getCookie('startDate'));
	var finalDate = new Date(getCookie('endDate'));
	
	
	// used to count how many days between the 2 dates
	var daydiff = 0;

	// are we showing week mode or month mode?
	viewOption = getCookie('viewOption');
	
	// translate week days to their names
	var weekDays=	["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
	
	
	$.blockUI({ message: '<h1>Loading Data...</h1>' });

	//Builds the table	
	
	
	
	
	shtml = "<table id='habits-tbl'><tr><th rowspan=$rowspan$ style='text-align:left; padding-left:15px;'>Habits</th>";
	shtml += "<th rowspan=$rowspan$>Stats</th>";
	
	if (viewOption == "month")
	{
		shtml = shtml.replace(/\$rowspan\$/g, "2");
	}
	else //defaults to week
	{
		shtml = shtml.replace(/\$rowspan\$/g, "1");
	}
	
	if (viewOption == "month")
	{
		shtml += "<th colspan='$days$' class='monthName'>$basedate$</th></tr>";
		shtml += "<tr>";
	}
	
	var baseDate = new Date(initialDate);
	
	var monthName;
	monthName = GetMonthName(baseDate.getMonth()) + " - " + baseDate.getFullYear(); 
	
	
	var today = new Date();
	// prints the name of the days in the column header
	if (baseDate < finalDate)
	{
		while (baseDate <= finalDate)
		{
		
			if (baseDate.getDate()==today.getDate()&&baseDate.getMonth()==today.getMonth()&&baseDate.getYear()==today.getYear())
			{
				shtml += "<th class=today>";
			}
			else
			{
				shtml += "<th>";
			}
			
			if (viewOption=="month")
	    	{
	   			shtml += AddZero(baseDate.getDate().toString()) + "</th>";
	    	}
	    	else 
	    	{
	    			shtml += weekDays[baseDate.getDay()]  + "<br />" + (baseDate.getMonth()+1) + "/" + baseDate.getDate() + "</th>";
	    	}
			daydiff++;
			baseDate.setDate(baseDate.getDate()+1);
			
		
		}
	}
	else
	{
		alert('Error processing dates');
	}


	shtml = shtml.replace("$days$", daydiff);	
	shtml = shtml.replace("$basedate$", monthName);
	

	
	shtml += "</tr>";

	
//	shtml += "<tr><th colspan='32'>July 2009</th></tr>";
	
	
	
	//end of the header
	
	
	var ibaseDate;
	
		 $.ajax({  
		   //url: 'http://localhost:8888/HabitWatcher/site/json_habit_list.php',  
		   url: 'json_habit_list.php',  		
		   dataType: 'json',  
		   async: false,  
		   success: function(data){  
		                $(data).each(function() {

							

						
							shtml += "<tr height=37><td class='habitname' style='text-align:left; padding-left:15px;'>";
							shtml += "<a href='habitedit.php?habitid=" + this.id + "';>";
							shtml += this.name;
							shtml += "</a>";
							shtml += "</td>";
		/* streaks */ 		shtml += "<td id='hstats_" + this.id + "'><div style='font-size:8pt; text-align:center;'>streak: <b>" + this.streak + "</b></div></td>";
		
		
		
						//	alert("initial"+ initialDate);
							ibaseDate = new Date(initialDate);
						//	alert("ibase" + ibaseDate);
							var baseDateYMC;
			
							for (var i=0; i<daydiff; i++)
							{
								
								
							//	print("<td id='" . date("Y-m-d", $startdate+($i*86400)) . "_$habit->id' onclick=\"trackhabit(this, $habit->positive, '" . date("Y-m-d", $startdate+($i*86400)) . "', $habit->id);\">&nbsp;</p>");
						    
						
						baseDateYMC = GetYMDDate(ibaseDate);
						
						if (ibaseDate.getDate()==today.getDate()&&ibaseDate.getMonth()==today.getMonth()&&ibaseDate.getYear()==today.getYear())
						{
							shtml += "<td class=today ";
						}
						else
						{
							shtml += "<td class=track ";
						}
							
						shtml += "id='" + baseDateYMC + "_" + this.id + "' ";
						shtml += "onclick=\"trackhabit(this, " + this.positive + ", '" +  baseDateYMC + "', " + this.id + ");\">&nbsp;</p></td>";
						ibaseDate.setDate(ibaseDate.getDate()+1);
	
					}
					
					
							
							shtml += "</tr>";
						})
		             }  
		 });
	shtml += "</table>";
		
//
// 	alert(shtml);	
	document.getElementById('habits-div').innerHTML = shtml;
	
	

	// loads the current tracks
	$.getJSON('json_habit_track_list.php?startdate=' + GetYMDDate(initialDate) + '&enddate=' + GetYMDDate(finalDate), function(data) {		
		
		$(data).each(function() {
			settrackon("#" + this.trackdate + "_" + this.habitid, (this.positive==1));
		})
	});
	
	$.unblockUI();
	
}

	 
function toggle_div(divname, show)
{
	if(show)
		{
			document.getElementById(divname).style.display = 'block';
			document.getElementById(divname).style.visibility  = 'visible';
		} 		
		else 
		{
			document.getElementById(divname).style.display = 'none';
			document.getElementById(divname).style.visibility  = 'hidden';
		}
		
}	 
