var monthConversion = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var fullMonthTitles = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var daysOfTheWeek = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var events = new Array();
var calendarDate = new Date();
var GcurrentMonth = calendarDate.getMonth();
var GcurrentYear = calendarDate.getFullYear();

function StartUpCalendar() {
  var today = new Date();
	DrawCalendar(today.getMonth(),today.getFullYear());
}

function DrawCalendar(thisMonth,thisYear) {
  
  GcurrentMonth = thisMonth; GcurrentYear = thisYear;
	
	// Get events happening during this month
	FetchCalendarEvents(thisMonth,thisYear);

}

function FillCalendar(thisMonth,thisYear) {
	
	// Clear previous calendar
	document.getElementById("Calendar").innerHTML = "";
	
  // Draw name of the month
  document.getElementById("Calendar_Month").innerHTML = "<h2>"+fullMonthTitles[GcurrentMonth]+" "+GcurrentYear+"</h2>";
  
	var calendarTable = document.createElement("table");
        calendarTable.className = "bordered";
        calendarTable.style.width = "664px";
	calendarTable.cellPadding = "0";
	calendarTable.cellSpacing = "0";
	
	var calendarBody = document.createElement("tbody");
	
	// Draw day headers
	var thisRow = document.createElement("tr");
	thisRow.vAlign = "center";
  for(var i=0;i<daysOfTheWeek.length;i++) {
	  var thisDay = document.createElement("td");
		thisDay.className = "dayOfTheWeek";
  	var thisBox = document.createElement("div");
	  thisBox.className = "dayHeader";
	  thisBox.innerHTML = "<p>"+daysOfTheWeek[i]+"</p>";
		thisDay.appendChild(thisBox);
		thisRow.appendChild(thisDay);
  }
	calendarBody.appendChild(thisRow);
  
  var firstDayOfTheMonth = new Date();
  firstDayOfTheMonth.setFullYear(thisYear,thisMonth,1);
  
  var daysInMonth = new Date(thisYear, thisMonth-0+1, 0).getDate();
  
  var interval = (firstDayOfTheMonth.getDay());
	
	var thisRow = document.createElement("tr");
	thisRow.vAlign = "bottom";
	calendarBody.appendChild(thisRow);
	
  // If we need to draw days from last month:
  if (interval > 0) {
  	
  	// If this is January and the year will roll back:
  	if (firstDayOfTheMonth.getMonth() == 0) {
  	  var firstDayOnCalendar = new Date(((firstDayOfTheMonth.getFullYear() - 1) * 1), 11, (31 - interval + 1));
  	}
  	// If this is not January:
  	else {
  	  var firstDayOnCalendar = new Date(firstDayOfTheMonth.getFullYear(), firstDayOfTheMonth.getMonth(), (firstDayOfTheMonth.getDate() - interval) * 1);
  	}
  	
  	// Draw the last few days of last month
  	while (firstDayOnCalendar.getMonth() != firstDayOfTheMonth.getMonth()) {
  	  var thisDay = document.createElement("td");
  	  thisDay.className = "otherMonths";
			
	  var thisBox = document.createElement("div");
			
  	  if(firstDayOnCalendar.getDay() == 0) {
			  var thisRow = document.createElement("tr");
				thisRow.valign = "top";
				calendarBody.appendChild(thisRow);
	    }
  	  thisBox.innerHTML = "<h3>"+firstDayOnCalendar.getDate()+"</h3>";
			
			thisDay.appendChild(thisBox);
  	  thisRow.appendChild(thisDay);
  	  
  	  firstDayOnCalendar.setFullYear(firstDayOnCalendar.getFullYear(), firstDayOnCalendar.getMonth(), (firstDayOnCalendar.getDate() + 1) * 1);
  	}
	
  }
  
  // Draw the days of this month
  var currentDay = new Date(thisYear,thisMonth,1);
  while(currentDay.getMonth() == firstDayOfTheMonth.getMonth()) {
  	var thisDay = document.createElement("td");
	  if(currentDay.getDay() == 0) {
		  var thisRow = document.createElement("tr");
			thisRow.valign = "top";
			calendarBody.appendChild(thisRow);
	  }
		
		var thisBox = document.createElement("div");
		
		// Draw title
		var thisTitle = document.createElement("h3");
		thisTitle.innerHTML = currentDay.getDate();
	  thisBox.appendChild(thisTitle);
		
		// Draw titles of events that happen today
		for(var i=0,j=0;i<events.length;i++) {
			
		  if(events[i].startDate.getDate() == currentDay.getDate()) {
			  
				if(j==0) var thisList = document.createElement("ul");
			  
				var thisTitle = document.createElement("li");
				thisTitle.innerHTML = "<a onclick='EventAlert("+i+");'>"+Base64.decode(events[i].title)+"</a>";
	  		thisList.appendChild(thisTitle);
				
				j++;
				
			}
			
		}
		
		if(j > 0) thisBox.appendChild(thisList);
		
		thisDay.appendChild(thisBox);
	  thisRow.appendChild(thisDay);
	  
	  currentDay.setFullYear(currentDay.getFullYear(), currentDay.getMonth(), (currentDay.getDate()+1)*1);
  }
  
  // Draw the first few days of next month
  while(currentDay.getDay() != 0) {
  	var thisDay = document.createElement("td");
	  thisDay.className = "otherMonths";
		
	  var thisBox = document.createElement("div");
		
	  if(currentDay.getDay() == 0) {
		  var thisRow = document.createElement("tr");
			thisRow.valign = "top";
			calendarBody.appendChild(thisRow);
	  }
	  thisBox.innerHTML = "<h3>"+currentDay.getDate()+"</h3>";
		
		thisDay.appendChild(thisBox);
	  thisRow.appendChild(thisDay);
	  
	  currentDay.setFullYear(currentDay.getFullYear(), currentDay.getMonth(), (currentDay.getDate()+1)*1);
  }
	
	calendarTable.appendChild(calendarBody);
	document.getElementById("Calendar").appendChild(calendarTable);
	
}

function EventAlert(which) {
  //alert(Base64.decode(events[which].location));
  centerPopup();  
  loadPopup(which);  
}

function PreviousMonth() {
  var previousMonth = (GcurrentMonth == 0) ? 11 : (GcurrentMonth-1);
  var previousYear = (GcurrentMonth == 0) ? (GcurrentYear-1) : (GcurrentYear);
  DrawCalendar(previousMonth,previousYear);
}

function NextMonth() {
  var nextMonth = (GcurrentMonth == 11) ? 0 : (GcurrentMonth+1);
  var nextYear = (GcurrentMonth == 11) ? (GcurrentYear+1) : (GcurrentYear);
  DrawCalendar(nextMonth,nextYear);
}

function FetchCalendarEvents(thisMonth,thisYear) {
	
  var filename = "http://www.results.org/fetchCalendarMonth.php?month="+thisMonth+"&year="+thisYear;
  ajaxCallback = FetchCalendarEventsCallback;
  ajaxRequest(filename);
	
	events = new Array();
	
}

function FetchCalendarEventsCallback() {
  
  if(ajaxreq.responseText != "") eval(ajaxreq.responseText); else events = new Array();
	FillCalendar(GcurrentMonth,GcurrentYear);
	
}

function AddEvent(title,url_title,startDate,endDate,summary,location) {
	
	var thisEvent = events.length;
	events[thisEvent] = new Array();
	events[thisEvent].title = title;
	events[thisEvent].location = location;
	events[thisEvent].content = summary;
	
	// Build startDate
	var thisStartDate = new Date();
	thisStartDate.setFullYear(startDate.split("-")[2],startDate.split("-")[0],startDate.split("-")[1]);
	thisStartDate.setHours(startDate.split("-")[3]);
	thisStartDate.setMinutes(startDate.split("-")[4]);
	
	events[thisEvent].startDate = thisStartDate;
	
	// Build endDate
	var thisEndDate = new Date();
	thisEndDate.setFullYear(endDate.split("-")[2],endDate.split("-")[0],endDate.split("-")[1]);
	thisEndDate.setHours(endDate.split("-")[3]);
	thisEndDate.setMinutes(endDate.split("-")[4]);
	
	events[thisEvent].endDate = thisEndDate;
	
}

//SETTING UP OUR POPUP  
//0 means disabled; 1 means enabled;  
var popupStatus = 0; 

//loading popup with jQuery magic!  
function loadPopup(which){  
  //loads popup only if it is disabled  
  if(popupStatus==0){  
    
    var str = "";
    str += "<h1>"+Base64.decode(events[which].title)+"</h1>";
    str += "<h3 style='font-size:1.4em;'>";
      str += Base64.decode(events[which].location);
    str += "</h3>";
    str += "<p style='font-size:1.0em;'>";
      str += Base64.decode(events[which].content);
    str += "</p>";
    str += "<p style='font-size:0.7em;'>Click on X (right-top) or click out from the popup to close the popup.</p>";
    
    document.getElementById("popupContents").innerHTML = str;
    
    $("#backgroundPopup").css({  
      "opacity": "0.7"  
    });  
    $("#backgroundPopup").fadeIn("normal");  
    $("#popupContact").fadeIn("normal");  
    popupStatus = 1;  
  }  
}  

//disabling popup with jQuery magic!  
function disablePopup(){  
  //disables popup only if it is enabled  
  if(popupStatus==1){  
    $("#backgroundPopup").fadeOut("normal");  
    $("#popupContact").fadeOut("normal");  
    popupStatus = 0;  
  }  
}  

//centering popup  
function centerPopup(){  
  //request data for centering  
  var windowWidth = document.documentElement.clientWidth;  
  var windowHeight = document.documentElement.clientHeight;  
  var popupHeight = $("#popupContact").height();  
  var popupWidth = $("#popupContact").width();  

  //centering  
  $("#popupContact").css({  
    "position": "absolute",  
    "top": windowHeight/2-popupHeight/2,  
    "left": windowWidth/2-popupWidth/2  
  });  

  //only need force for IE6    
  $("#backgroundPopup").css({  
    "height": windowHeight  
  });  
  
}  

$(document).ready(function(){  

  //CLOSING POPUP  
  //Click the x event!  
  $("#popupContactClose").click(function(){disablePopup();});  

  //Click out event!  
  $("#backgroundPopup").click(function(){disablePopup();});

}); 
