var calpop;

if(!fcp){
	var fcp = new Object();
} 
if(!fcp.msg){
	fcp.msg = new Object();
}

var dateset;

fcp.week_days = ["Po", "Wt", "śr", "Cz", "Pi", "So", "Ni"];
fcp.months = ["styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec",
	"lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"];
fcp.msg.prev_year = "Previous year";
fcp.msg.prev_month = "Previous month";
fcp.msg.next_month = "Next month";
fcp.msg.next_year = "Next year";

fcp.CalendarPop = function(element,rokS,miesiacS,dzienS,rokE,miesiacE,dzienE,rokN,miesiacN,dzienN,url_data) {

       this.now_day = dzienN;
       this.now_month = miesiacN;
       this.now_rok = rokN;
       
       this.start_day = dzienS;
       this.start_month = miesiacS;
       this.start_rok = rokS;
       
       this.end_day = dzienE;
       this.end_month = miesiacE;
       this.end_rok = rokE;
       
       this.url_data = url_data;

//alert(rokN+","+miesiacN+","+dzienN);
//alert(rok+","+miesiac+","+dzien);

	if (!element.childNodes)
		throw "HTML element expected";
	this.element = element;
	if(rokS)
	{
		this.selection = new Date(rokN,miesiacN-1,dzienN,10,0,0,0);
                //this.selection = new Date(rokN,miesiacN-1,dzienN,10,0,0,0);
		//dateset   = new Date(rok,miesiac-1,dzien,10,0,0,0);
       dateset   = new Date(rokN,miesiacN-1,dzienN,10,0,0,0);
       datesetStart   = new Date(rokS,miesiacS-1,dzienS,10,0,0,0);
       datesetEnd   = new Date(rokE,miesiacE-1,dzienE,23,59,59,0);
	}
	else
	{
		this.selection = new Date();
		dateset       = new Date();
	}
	
	this.selected_cell = undefined;
	this.generate_month();
	this.render_calendar();
}

fcp.CalendarPop.prototype.set_date_time = function (date_time) {
	if (date_time.constructor == Date) {
		this.selection = date_time;
		this.generate_month();
		this.render_calendar();
	} else {
		throw "Date object expected (in fcp.CalendarPop.set_date_time)";
	}
}

fcp.CalendarPop.prototype.next_month = function () {
	var month = this.selection.getMonth();

	if (month == 11) {
		this.selection.setMonth(0);
		this.selection.setYear(this.selection.getFullYear() + 1);
	} else {
		this.selection.setMonth(month + 1); 
	} 
	this.generate_month();
	this.render_calendar();
}

fcp.CalendarPop.prototype.prev_month = function () {
	var month = this.selection.getMonth();
	if (month == 0) {
		this.selection.setMonth(11);
		this.selection.setYear(this.selection.getFullYear() - 1);
	} else {
		this.selection.setMonth(month - 1);
	}
	this.generate_month();
	this.render_calendar();
}

fcp.CalendarPop.prototype.next_year = function () {
	var is_feb29 = (this.selection.getMonth() == 1)
		&& (this.selection.getDate() == 29);
	if (is_feb29) {
		this.selection.setDate(1);
		this.selection.setMonth(2); // March
	}
	this.selection.setFullYear(this.selection.getFullYear() + 1);
	this.generate_month();
	this.render_calendar();
}

fcp.CalendarPop.prototype.prev_year = function () {
	var is_feb29 = (this.selection.getMonth() == 1)
		&& (this.selection.getDate() == 29);
	if (is_feb29) {
		this.selection.setDate(1);
		this.selection.setMonth(2); // March
	}
	this.selection.setFullYear(this.selection.getFullYear() - 1);
	this.generate_month();
	this.render_calendar();
}

fcp.CalendarPop.prototype.generate_month = function () {
	this.raw_data = new Array();
	var week = 0;
	this.raw_data[week] = new Array(7);

	var first_of_month = fcp.CalendarPop.clone_date(this.selection);
	first_of_month.setDate(1);
	var first_weekday = first_of_month.getDay();
	// Move Sunday last
	first_weekday = (first_weekday == 0) ? 6 : first_weekday - 1;
	// Fill in the last days from the previous month.
	for (var i = 0; i < first_weekday; i++) {
		this.raw_data[week][i] = 0;
	}

	var last_of_month = fcp.CalendarPop.days_in_month(
		this.selection.getYear(),
		this.selection.getMonth());
	var weekday = first_weekday;
	for (var i = 1; i <= last_of_month; i++) {
		this.raw_data[week][weekday] = i;
		weekday++;
		if (weekday > 6) {
			weekday = 0;
			week++;
			if(i < last_of_month)
			{
				this.raw_data[week] = new Array(7);
			}
		}
	}
	
	
	if(weekday != 0)
	{
		// Fill in the first days from the next month.
		for (var i = weekday; i < 7; i++) {
			this.raw_data[week][i] = 0;
		}
	}
}

fcp.CalendarPop.prototype.render_calendar = function () {
	this.element.selected_cell = undefined;
	this.element.innerHTML = "";
	this.element.appendChild(this.render_heading());
	this.element.appendChild(this.render_month());

	var aktualnyMiesiac = this.selection.getMonth() + 1;

	var aktualnyRok = this.selection.getFullYear();
	if(aktualnyMiesiac < 10){
	  aktualnyMiesiac = '0' + aktualnyMiesiac;
	}
	rok_miesiac = aktualnyRok + '-' + aktualnyMiesiac;
	var start_data = rok_miesiac + '-01';
	
	var url_data = '';
	
	if (this.url_data!=undefined) url_data = this.url_data;

	advAJAX.get({
    url: "ajax_kalendarz.html",
    parameters : {
      "var1": start_data,
      "var2": url_data
    },
    
   onSuccess: function(obj) {
    
      var ret = ToArray.array2array(obj.responseText, '*');
      var danei = ToArray.str2array(ret[0], ',');
      var daneL = ToArray.str2array(ret[1], ',');
      var maxdni = fcp.CalendarPop.days_in_month(aktualnyRok, aktualnyMiesiac-1);
      //fcp.CalendarPop.prototype.imprezy(danei, daneL, rok_miesiac, maxdni, ret[2]); 
    },
    
    onError: function(obj) { alert("Error: " + obj.status); }
   });
	
}

fcp.CalendarPop.prototype.render_heading = function () {
	var heading = document.createElement("div");
   heading.className = "kal_naglowek";   
	var prev_year = document.createElement("a");
	prev_year.href = "#";

	var prev_month = document.createElement("a");
	prev_month.href = "#";
	prev_month.id = "prev_month";
	prev_month.calendar = this;
	prev_month.onclick = function() {
		this.calendar.prev_month();
		return false;
	};
	prev_month.innerHTML = "&nbsp;";
	prev_month.title = fcp.msg.prev_month;

   var month_span = document.createElement("span");
   month_span.innerHTML = "\u00a0\u00a0" + fcp.months[this.selection.getMonth()]
      + " " + this.selection.getFullYear() + "\u00a0\u00a0";

	var next_month = document.createElement("a");
	next_month.href = "#";
	next_month.id = "next_month";
	next_month.calendar = this;
	next_month.onclick = function() {
		this.calendar.next_month();
		return false;
	};
	next_month.innerHTML = "&nbsp;";
	next_month.title = fcp.msg.next_month;

	heading.appendChild(prev_month);
	heading.appendChild(month_span);
	heading.appendChild(next_month);
   
   if(this.selection.getMonth()==this.end_month-1)
   {
         next_month.style.visibility='hidden';
   }
   if(this.selection.getMonth()==this.now_month-1)
   {
         prev_month.style.visibility='hidden';
   }

	return heading;
}

fcp.CalendarPop.prototype.render_month = function() {
	var html_month = document.createElement("table");
	html_month.className = "calendar";

	var thead = document.createElement("thead");
	var tr = document.createElement("tr");
	for (var i = 0; i < fcp.week_days.length; i++) {
		var th = document.createElement("th");
		th.innerHTML =  fcp.week_days[i];
		tr.appendChild(th);
	}
	thead.appendChild(tr);
	html_month.appendChild(thead);
  
	var tbody = document.createElement("tbody");

	for (var i = 0; i < this.raw_data.length; i++) {
		tbody.appendChild(this.render_week(this.raw_data[i]));
	}
	html_month.appendChild(tbody);

	return html_month;
}

fcp.CalendarPop.prototype.render_week = function (day_numbers) {
	var html_week = document.createElement("tr");
	html_week.align = "right";
	for (var i = 0; i < 7; i++) {
		html_week.appendChild(this.render_day(day_numbers[i], i));
	}
	return html_week;
}

fcp.CalendarPop.prototype.render_day = function (day_number, sob_nie) {
	var td = document.createElement("td");
	if (day_number >= 1 && day_number <= 31) {
	   var tddiv = document.createElement("div");
	   tddiv.id = "d_" + day_number;
     
      tddiv.style.height = "100%";
      tddiv.style.margin="0px";
      tddiv.style.padding="0px";
      
      var tdchx = document.createElement("input");
      tdchx.type = "checkbox";
      tdchx.name = "chx_" ;
      tdchx.id = "chx_id_"+day_number;
      tdchx.defaultChecked = false;
      tdchx.value = day_number;
      tdchx.style.margin = "3px 0px 0px 0px";
      tdchx.style.border = "none";
      
      tdchx.onclick = function(event){clearCheckboxes("chx_id_"+day_number)};     
      


 
 
		var anchor = document.createElement("a");
		if(sob_nie >= 5){
         anchor.className = "sob_nie";
		}
      
      anchor.style.padding="0px";
		anchor.innerHTML = day_number;
		anchor.calendar = this;
		anchor.date = day_number;				
		anchor.onclick = function(){fcp.Calendar.handle_select};
      
      var nAgt = navigator.userAgent;
      if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
         anchor.style.margin="-2px 0px 0px 0px";
      }
      else
      {
         tddiv.style.height = "31px";
         tddiv.style.lineHeight = "4px";
         anchor.style.margin="4px 0px 0px 0px";
      }
      
		td.appendChild(tddiv);
      tddiv.appendChild(tdchx);
      tddiv.appendChild(anchor);
      
//alert(day_number+" == "+dateset.getDate()+"/ "+dateset.getMonth()+" == "+this.selection.getMonth()+"/"+dateset.getYear()+" == "+this.selection.getYear());
//alert(this.now_day);

		if ((day_number == this.now_day) && (dateset.getMonth() == this.selection.getMonth()) && (dateset.getYear() == this.selection.getYear())) {
                //if ((day_number == this.dzienN) && (dateset.getMonth() == this.selection.getMonth()) && (dateset.getYear() == this.selection.getYear())) {
			this.selected_cell = td;
			td.className = "in_month selected";
                        //alert(day_number+" == "+dateset.getDate()+"/ "+dateset.getMonth()+" == "+this.selection.getMonth()+"/"+dateset.getYear()+" == "+this.selection.getYear());
		} else {
			td.className = "in_month";
		}
      
      var datesetActual   = new Date();
      var datasetNow = new Date();
     // datesetActual   = this.selection;
      datesetActual.setDate(day_number);
      datesetActual.setMonth(this.selection.getMonth());
      datesetActual.setFullYear(this.selection.getFullYear());
      
     // alert(datesetActual.getDate()+'  '+datesetActual.getMonth()+'  '+datesetActual.getFullYear());
    //  alert(datesetEnd.getDate()+'  '+datesetEnd.getMonth()+'  '+datesetEnd.getFullYear());
      tdchx.value = datesetActual.getTime();
      
      if (datesetActual.getTime() >= datesetStart.getTime() && datesetActual.getTime() <= datesetEnd.getTime() && datesetActual.getTime()>=datasetNow.getTime()) {
         tdchx.style.visibility = "visible";
		} 
      else{
           tdchx.style.visibility = "hidden";
      }
      
		
	}
	return td;
}

// Do nothing by default.
fcp.CalendarPop.prototype.onselect = function () {

}

fcp.Calendar.handle_select = function () {
	/*if (this.calendar.selected_cell)
	{
		this.calendar.selected_cell.className = "in_month";
	}*/
}


fcp.CalendarPop.prototype.clearselected = function (a) {
   for(i = 1; i <= 31; i++)
   {
   	  if(document.getElementById("d_" + i))
   	  {
      	var id_day = document.getElementById("d_" + i);
      	var td = id_day.parentNode;
      	if(td.className == "in_month selected")
      	{
      		td.className = "in_month";
      	}
      }
   }
}



fcp.CalendarPop.clone_date = function (date_obj) {
	if (date_obj.constructor != Date)
		throw "Date object expected (in fcp.Calendar.clone_date)";
	else
		return new Date(
			date_obj.getFullYear(),
			date_obj.getMonth(),
			date_obj.getDate(),
			date_obj.getHours(),
			date_obj.getMinutes(),
			date_obj.getSeconds());
}

fcp.CalendarPop.days_in_month = function (year, month) {
	if (month < 0 || month > 11)
		throw "Month must be between 0 and 11";
	var day_count = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if (month != 1) {
		return day_count[month];
	} else if ((year % 4) != 0) {
		return 28;
	} else if ((year % 400) == 0) {
		return 29;
	} else if ((year % 100) == 0) {
		return 28;
	} else {
		return 29;
	}
}

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

/*addLoadEvent(function() {
   cal = new fcp.Calendar(document.getElementById("cal_placeholder"));
  })*/

fcp.CalendarPop.prototype.clear = function (ldni) {
   for(i = 1; i <= ldni; i++){
      var id_day = document.getElementById("d_" + i);
      var a_day = id_day.firstChild;
      id_day.className ="";
   }
}

fcp.CalendarPop.prototype.imprezy = function (dni, dniLogin, rok_miesiac, maxdni, url) {
   fcp.CalendarPop.prototype.clear(maxdni);

   if(dni.length > 0 && !isNaN(dni[0])){
	   for(i = 0; i < dni.length; i++){
	      var id_day = document.getElementById("d_" + dni[i]);
      
      
      
	      var a_day = id_day.firstChild;
	      id_day.className ="imprezy";
	      if(dni[i] < 10){
            dni[i] = '0' + dni[i];
         }
	      var url_data = rok_miesiac + '-' + dni[i];
	      url_data = url.replace('#', url_data);
	      a_day.href = url_data;
	   }
   }
   
   if(dniLogin.length > 0 && !isNaN(dniLogin[0])){
      for(i = 0; i < dniLogin.length; i++){
         var id_dayL = document.getElementById("d_" + dniLogin[i]);
         var a_dayL = id_dayL.firstChild;
         id_dayL.className ="imprezy_login";
         if(dniLogin[i] < 10){
            dniLogin[i] = '0' + dniLogin[i];
         }
         var url_dataL = rok_miesiac + '-' + dniLogin[i];
         url_dataL = url.replace('#', url_dataL);
         a_dayL.href = url_dataL;
      }
   }
}

var ToArray = {
   array2array: function (string, separator) {
	   var result = string.split(separator);
	   return result;
   },
  
   str2array: function (string, separator) {
	   var result = string.split(separator);
	   var ret = new Array();
	   for(i=0;i<=result.length-1;i++){
	      ret[i] = parseInt(result[i]);
	   }
   return ret;
  }
}

function clearCheckboxes(id)
{
   checkbox = document.getElementsByTagName('input');
   for(i=0;i<checkbox.length;i++)
   {
      if(checkbox[i].id != id){
            checkbox[i].checked=false;
        }
   }
}
