//var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec");
//var weekdays = new Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
var months = new Array("Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis");
var weekdays = new Array("Pir", "Ant", "Tre", "Ket", "Pen", "Šes", "Sek");
var refpattern = "index.php?newsdate={year}-{month}-{day}";
//var refpattern = "/news/{year}/{month}/{day}/";
//var refpattern = "{year}-{month}-{day}";
var datefield = "pickdate";


function Calendar(index)
{
	this.index = index;
	this.getWeekday = function(year, month)
	{
		return new Date(year, month, 1).getDay();
	}
	
	this.getMonthLen = function(year, month)
	{
		var nextMonth = new Date(year, month+1, 1);
		nextMonth.setHours(nextMonth.getHours() - 3);
		return nextMonth.getDate();
	}
	
	
	this.year = new Date().getFullYear();
	this.month = new Date().getMonth();
	this.day = new Date().getDate();

	this.lastday = false;
	
	this.tableBody = document.getElementById("tableBody" + this.index);
	this.curDateField = document.getElementById("cur_date" + this.index);
	this.curDateField.innerHTML = months[this.month] + " " + this.year;
	
	this.weekdaysRow = document.getElementById("weekdays" + this.index);

	this.dCurDay = new Date();
	
	this.Days = null;
	
	
	this.clear = function()
	{
		while(this.tableBody.rows.length > 0)
			this.tableBody.deleteRow(0);
	}
	
	this.nextMonth = function()
	{
		this.clear();
		if(this.month < 11)
			this.month++;
		else
		{
			this.month = 0;
			this.year++;
		}
		this.setMonthData();
		this.curDateField.innerHTML = months[this.month] + " " + this.year;
	}
	
	this.prevMonth = function()
	{
		this.clear();
		if(this.month > 0)
			this.month--;
		else
		{
			this.month = 11;
			this.year--;
		}
		this.setMonthData();
		this.curDateField.innerHTML = months[this.month] + " " + this.year;
	}
	
	this.populate = function()
	{
	
		if(arguments.length != 0)
			this.setDate();
		var tbody = this.tableBody;
		var newR, newC;
		var dayCounter = 1;
		var done = false;
		var firstDay = this.getWeekday(this.year, this.month);
		if(firstDay == 0)
			firstDay = 7;
		var howMany = this.getMonthLen(this.year, this.month);
		if(howMany < this.day || this.lastday)
		{
			this.day = howMany;
			this.lastday = true;
		}
	//alert(howMany);	
		while(!done)
		{
			newR = tbody.insertRow(tbody.rows.length);
			for(var j=1; j<8; j++)
			{
				
			
				newC = newR.insertCell(newR.cells.length);
				
				if(j == 7 || j == 6)
					newC.className = "weekenddays";
				
				if(tbody.rows.length == 1 && j < firstDay)
				{
					newC.innerHTML = "&nbsp;";
					continue;
				}
				
				//if(dayCounter == this.day)
					//newC.id = "today";
				
				if(dayCounter == howMany)
					done = true;
					
				if(dayCounter <= howMany)
				{
					var title = "";
					var ref = "";
					//alert(DayList);
					//return;
					if(DayList[this.index][dayCounter].is_blogged)
					{
					//alert(DayList[this.index][dayCounter]);
						ref = refpattern.replace(/\{year\}/, this.year);
						ref = ref.replace(/\{month\}/, toTwoDigits(this.month + 1));
						ref = ref.replace(/\{day\}/, toTwoDigits(dayCounter));
						title = "title='" + DayList[this.index][dayCounter].title + "'";
						//ref = "main.php?content=mod_pages&page=edit&id=" ;//+ DayList[this.index][dayCounter].getOrderId();
					//}
					var style = "style='font-size:11px;font-weight:bold;cursor:pointer;' " ;//+ DayList[this.index][dayCounter].getColor() + "'";
					var a = "<a " + title + " "+ style + " href='" + ref + "'>";
					//var a = "<a href='javascript:onclick=insertDate(" + "\"" + ref + "\"" + ")'>";
					a += dayCounter;
					a += "</a>";
					}
					else var a = dayCounter;
					newC.innerHTML = a;
					/*$("a", newC).ToolTipDemo('#fff')
					.click(
						function(e)
						{
							var obj = getEventTarget(e);
							obj = traceUp(obj, "a");
							if($(obj).attr("href") == "")
							{
								preventDefault(e);
								stopPropagation(e);
							}
						}
					);*/
					dayCounter++;
				}
			}
		}
	}//populate
	
	this.populateWeekdays = function()
	{
		var cell;
		for(var i=0; i<7; i++)
		{
			cell = this.weekdaysRow.insertCell(this.weekdaysRow.cells.length);
			cell.innerHTML = weekdays[i];
		}
	}//populateWeekdays
	
	this.populateWeekdays();
	
	this.setDate = function(datestr)
	{
		if(!datestr)
		{
			try
			{
				var fDate = document.getElementById(datefield);
				var datestr = fDate.value ? fDate.value : fDate.innerHTML;
			}
			catch(e){var datestr = ""}
			
		}

		if(datestr == "")
			return;
		var datearr = datestr.match(/^(\d+)-(\d+)-(\d+)$/);

		if(datearr[1].length == 4)
		{
			this.year = datearr[1];
			this.month = parseInt(this.trim(datearr[2]))-1;
			this.day = parseInt(this.trim(datearr[3]));
		}
		else if(datearr[3].length == 4)
		{
			this.year = datearr[3];
			this.month = parseInt(this.trim(datearr[2]))-1;
			this.day = parseInt(this.trim(datearr[1]));
		}
	}

	this.trim = function(str)
	{
		return str.replace(/^[0]+(\d+)$/, "$1");
	}

	this.isBefore = function(dayCounter)
	{
		var dRenderedDay = new Date(this.year, this.month+1, dayCounter, 0, 0, 0, 0);
		var curYear = this.dCurDay.getFullYear();
		var curMonth = this.dCurDay.getMonth();
		var curDay = this.dCurDay.getDate();
		if(curYear >= this.year && curMonth >= this.month && curDay >= dayCounter)
			return true;
		return false;
	}
	
	this.setMonthData = function()
	{
		var thisdate = this.year + "-" + toTwoDigits(this.month+1) + "-" + "01";//toTwoDigits(this.day);
		//alert('thisdate');
		$.post(ajaxfile, {date:thisdate}, this.getAjax);
		//this.populate();
	}
	
	this.getAjax = function(xml)
	{
	
		Days = new Array();
		$("//day", xml).each(
			function(i)
			{
				var day = new Day(this);
				Days[day.index] = day;
			}
		);
		DayList[index] = Days;
		populate(index);
	}


}//class Calendar

function populate(i)
{
	calendars[i].populate();
}

function nextMonth(e)
{
	//index = getIndex(e);
	index= 0;
	calendars[index].nextMonth();
}

function prevMonth(e)
{
	//index = getIndex(e);
	index= 0;
	calendars[index].prevMonth();
}

function nextYear(e)
{
	//index = getIndex(e);
	index= 0;
	calendars[index].clear();
	calendars[index].year++;
	calendars[index].setMonthData();
	calendars[index].curDateField.innerHTML = months[calendars[index].month] + " " + calendars[index].year;
}

function prevYear(e)
{
	//index = getIndex(e);
	index= 0;
	calendars[index].clear();
	calendars[index].year--;
	calendars[index].setMonthData();
	calendars[index].curDateField.innerHTML = months[calendars[index].month] + " " + calendars[index].year;
}

function getIndex(e)
{
	var obj = getEventTarget(e);
	obj = traceUp(obj, "span");
	return $(obj).attr("index");
}

function toTwoDigits(num)
{
	num = num.toString();
	return (num.length==1) ? ("0"+num) : num;
}//toTwoDigits

function getElementPosition(elemID) {
    var offsetTrail = document.getElementById(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 && 
        typeof document.body.leftMargin != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
    }
    return {left:offsetLeft, top:offsetTop};
}//getElementPosition



function showCalendar(evt)
{
	evt = (evt) ? evt : event;
    if (evt) {
        if (document.getElementById("calendar").style.visibility != "visible") {
            var elem = (evt.target) ? evt.target : evt.srcElement;
            var position = getElementPosition(elem.id);
            shiftTo("calendar", position.left + elem.offsetWidth, position.top);
            cal.clear();
            cal.populate(true);
            show("calendar");
        } else {
            hide("calendar");
        }
    }
}//showCalendar

function insertDate(datestr)
{
	var dest = document.getElementById(datefield);
	dest.value = datestr;
	hide("calendar");
}//insertDate

var Days = null;
var DayList = new Array();
var calendars = new Array();
var index = 0;

function launchCalendar(sDate, destination)
{
	var cIndex = calendars.length;
	constructCalendarLayout(destination, cIndex);
	calendars[cIndex] = new Calendar(cIndex);
	calendars[cIndex].setDate(sDate);
	index = cIndex;
	calendars[cIndex].setMonthData();
	//cal.populate();
	calendars[cIndex].curDateField.innerHTML = months[calendars[cIndex].month] + " " + calendars[cIndex].year;
}



function Day(day)
{
	//this.appartments = day.getElementsByTagName("APPARTMENT");
	this.index = parseInt(day.getAttribute("count"));
	this.is_blogged = parseInt(day.getAttribute("blogged"));
	this.title= day.getAttribute("title");
	this.colors = new Array("black", "green", "red", "#1678BD");
	this.appartmentName = {909:"Žaliasis", 910:"Raudonasis"};
	
	
	/*this.setEngagement = function()
	{
		if(this.appartments.length >= 2)
			this.engaged = this.BOTH;
		else if (this.appartments.length == 0)
			this.engaged = this.FREE;
		else if(this.appartments.length == 1)
		{
			var number = this.appartments[0].getAttribute("apartment");
			if(parseInt(number) == 909)
				this.engaged = this.GREEN;
			else if(parseInt(number) == 910)
				this.engaged = this.RED;
		}
		else this.engaged = this.FREE;
	}
	
	this.getColor = function()
	{
		return this.colors[this.engaged];
	}
	
	this.appartmentsToString = function()
	{
		var str= '';
		for(i= 0; i < this.appartments.length; i++){
			str += this.appartmentToString(i)+'<br />';
		}
		return str.substr(0,str.length-6);
	}
	
	this.appartmentToString = function(index)
	{
		var nl = "<br>";
		var str = this.appartments[index].getAttribute("title").bold() + nl;
		str += "Butas: ".bold() + this.appartmentName[this.appartments[index].getAttribute("apartment")] + nl; 
		str += "Nuo: ".bold() + this.appartments[index].getAttribute("startdate")+ nl + "Iki: ".bold() + this.appartments[index].getAttribute("enddate") + nl;
		//return unescape(str);
		
		return str;
	}
	
	this.getOrderId = function()
	{
		return this.appartments[0].getAttribute("id");
	}
	
	
	this.setEngagement();*/

}

function createEl(el)
{
	return document.createElement(el);
}

function createSpan(row, spanArr, index)
{
	var span = spanArr["span"];
	if(spanArr["classname"])
	{
		//var img = new Image;
		//$(img).attr("src", spanArr["img"]);
		
		$(span).addClass(spanArr["classname"])
		.attr("title", spanArr["title"])
		.attr("index", index)
		.click(spanArr["onclick"])
		.append(spanArr["nav"]);
		$(row).append(span);
		//alert($(row).html());
		//span.className = spanArr["classname"];
		//span.onClick = spanArr["onclick"];
		//span.title = spanArr["title"];

		
		//img.src=spanArr["img"];
		//span.appendChild(img);
	}
	else if(spanArr["id"])
	{
		$(span).attr("id", spanArr["id"]);
		$(row).append(span);
		//span.id = spanArr["id"];
	}
	return span;	
}

function constructCalendarLayout(container, index)
{
	var table = createEl("table");
	table.className = "mainTable";
	table.border = 0;
	table.cellSpacing = 1;
	table.cellPadding = 3;
	var firstrow = table.insertRow(table.rows.length);
	secondrow = table.insertRow(table.rows.length);
	secondrow.id = "weekdays" + index;
	
	var tbody = createEl("tbody");
	tbody.id = "tableBody" + index;
	tbody.className = "tbody";
	table.appendChild(tbody);
	
	//var th = createEl("td");
	var th = firstrow.insertCell(firstrow.cells.length);
	th.colSpan = 7;
	th.vAlign = "middle";
	th.id = "tableHeader";
	
	var inTable = createEl("table");
	inTable.width = "100%";
	inTable.cellSpacing = 0;
	inTable.cellPadding = 0;
	var inRow = inTable.insertRow(inTable.rows.length);
	for(var i=0; i<5; i++)
		inRow.insertCell(inRow.cells.length);
	inRow.cells[2].id = "dateLabel";
	
	var spans = new Array();
	var imgpath = "files/data/ajax_calendar/img/";
	spans[0] = {span:createEl("span"),classname:"navbutton",onclick:prevYear,title:"Praėję metai",img:imgpath+"prev_year.gif"};
	spans[1] = {span:createEl("span"),classname:"navbutton",onclick:prevMonth,title:"Praėjęs mėnuo",nav:"&laquo;"};
	spans[2] = {span:createEl("span"),id:"cur_date"+index};
	spans[3] = {span:createEl("span"),classname:"navbutton",onclick:nextMonth,title:"Kitas mėnuo",nav:"&raquo"};
	spans[4] = {span:createEl("span"),classname:"navbutton",onclick:nextYear,title:"Kiti metai",img:imgpath+"next_year.gif"};
	
	for(var i=0; i<5; i++)
	{
		
		createSpan(inRow.cells[i], spans[i], index);
		//inRow.cells[i].appendChild(createSpan(spans[i]));
	}
	
	th.appendChild(inTable);
	
	container = document.getElementById(container);
	
	container.appendChild(table);

}



